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" steps: - name: Checkout uses: actions/checkout@v4 - name: Fetch scrabble-solver (sibling) # The backend now imports the engine package, which consumes # scrabble-solver in-process; go.work points its bare module path at this # sibling checkout. The repository is public, so the clone needs no # credentials. It tracks master HEAD (see PLAN.md TODO-1). run: git clone --depth 1 https://gitea.iliadenisov.ru/developer/scrabble-solver.git "${GITHUB_WORKSPACE}/../scrabble-solver" - 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 committed DAWGs. env: BACKEND_DICT_DIR: ${{ github.workspace }}/../scrabble-solver/dawg run: go test -tags=integration -count=1 -p=1 -parallel=1 -timeout=15m ./backend/...