name: Tests · Integration # Postgres-backed integration tests for the Go backend, gated behind the # `integration` build tag. They spin a throwaway postgres:17-alpine container via # testcontainers-go, which reaches the host Docker daemon through the socket the # Gitea runner exposes. Slower than the unit job (go-unit.yaml); run serially # (-p=1) with Ryuk disabled — TestMain terminates its own container. The module # list grows as new go.work modules are added by later stages. on: push: paths: - 'backend/**' - 'pkg/**' - 'go.work' - 'go.work.sum' - '.gitea/workflows/integration.yaml' - '!**/*.md' pull_request: paths: - 'backend/**' - 'pkg/**' - 'go.work' - 'go.work.sum' - '.gitea/workflows/integration.yaml' - '!**/*.md' jobs: integration: runs-on: ubuntu-latest defaults: run: shell: bash env: # Ryuk (testcontainers' reaper) does not start cleanly on every runner; # the suite's TestMain terminates its own container, so disable it. TESTCONTAINERS_RYUK_DISABLED: "true" # The engine consumes the published scrabble-solver module from this Gitea # (GOPRIVATE -> direct fetch, skipping the public proxy/checksum DB); # DICT_VERSION selects the dictionary DAWG release the engine tests load. GOPRIVATE: gitea.iliadenisov.ru/* DICT_VERSION: v1.0.0 steps: - name: Checkout uses: actions/checkout@v4 - name: Fetch dictionary DAWGs # The DAWGs moved to the scrabble-dictionary repo (the solver is now a # versioned module pinned in backend/go.mod, fetched via GOPRIVATE — no # sibling clone). They ship as a release artifact; the engine's untagged # tests (compiled here too) load them. run: | mkdir -p "${GITHUB_WORKSPACE}/dawg" curl -fsSL -o /tmp/dawg.tar.gz "https://gitea.iliadenisov.ru/developer/scrabble-dictionary/releases/download/${DICT_VERSION}/scrabble-dawg-${DICT_VERSION}.tar.gz" tar xzf /tmp/dawg.tar.gz -C "${GITHUB_WORKSPACE}/dawg" ls -la "${GITHUB_WORKSPACE}/dawg" - name: Set up Go uses: actions/setup-go@v5 with: go-version-file: go.work cache: true - name: Integration tests # -count=1 disables the test cache; -p=1 -parallel=1 keeps the # container-backed tests serial; the 15-minute timeout bounds a stuck # container pull. The engine package's (untagged) tests also compile and # run here, so BACKEND_DICT_DIR points them at the DAWGs from the release. env: BACKEND_DICT_DIR: ${{ github.workspace }}/dawg run: go test -tags=integration -count=1 -p=1 -parallel=1 -timeout=15m ./backend/...