6d0dd4fb14
backend/internal/engine wraps the sibling scrabble-solver library in-process: - Registry: versioned DAWG load via dafsa.Load, keyed by (variant, dict_version), latest-per-variant; English / Russian / Эрудит handled uniformly. - Bag: own deterministic, seeded tile bag with Draw + Return (for exchanges), since the solver's self-play bag cannot return tiles. - Game: pure rules engine — deal, play/pass/exchange/resign, refill, per-move scoring, turn order, and end-condition detection (empty bag + empty rack, six scoreless turns, resignation) with end-game rack adjustment. - decode/ReplayBoard: dictionary-independent MoveRecords and board replay via scrabble.Apply (no internal/encoding), realising ARCHITECTURE §9.1. Wiring: go.work gains "replace scrabble-solver => ../scrabble-solver"; backend requires scrabble-solver (placeholder) and github.com/iliadenisov/dafsa directly. Both Go CI workflows clone the public solver sibling (master HEAD, no token) and set BACKEND_DICT_DIR. Docs: ARCHITECTURE §5/§14, TESTING engine layer, backend README, and PLAN refinements + deferred TODOs (publish/version solver; split engine vs dictionary generator).
67 lines
2.0 KiB
YAML
67 lines
2.0 KiB
YAML
name: Tests · Go
|
|
|
|
# Fast unit tests for the Go side of the monorepo. Runs on every push and pull
|
|
# request whose path filter matches a Go source directory. The module list
|
|
# grows as new go.work modules (gateway, pkg/*, platform/*) are added by later
|
|
# stages.
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'backend/**'
|
|
- 'go.work'
|
|
- 'go.work.sum'
|
|
- '.gitea/workflows/go-unit.yaml'
|
|
- '!**/*.md'
|
|
pull_request:
|
|
paths:
|
|
- 'backend/**'
|
|
- 'go.work'
|
|
- 'go.work.sum'
|
|
- '.gitea/workflows/go-unit.yaml'
|
|
- '!**/*.md'
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Fetch scrabble-solver (sibling)
|
|
# The engine package 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 for the move to a published, versioned module).
|
|
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: gofmt
|
|
run: |
|
|
unformatted="$(gofmt -l .)"
|
|
if [ -n "$unformatted" ]; then
|
|
echo "gofmt needed on:"; echo "$unformatted"; exit 1
|
|
fi
|
|
|
|
- name: vet
|
|
run: go vet ./backend/...
|
|
|
|
- name: build
|
|
run: go build ./backend/...
|
|
|
|
- name: test
|
|
# -count=1 disables the test cache so a green run never depends on a
|
|
# previous runner's cached state. BACKEND_DICT_DIR points the engine
|
|
# tests at the committed DAWGs in the sibling checkout.
|
|
env:
|
|
BACKEND_DICT_DIR: ${{ github.workspace }}/../scrabble-solver/dawg
|
|
run: go test -count=1 ./backend/...
|