Add embedded SQL and provider-local Go migrations with slog logging and Postgres session locking, returning Goose's Provider directly. Cover timestamp and sequential versions, failure recovery, and concurrent startup with SQLite and Postgres tests. Reuse page's Postgres CI service. Document authoring conventions and the Go template compatibility gate. Closes #7 Refs #9
60 lines
2.5 KiB
YAML
60 lines
2.5 KiB
YAML
name: ci
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths-ignore:
|
|
# Keep embedded Markdown templates in CI; paths-ignore cannot undo a match.
|
|
- "*.md"
|
|
- "docs/**"
|
|
pull_request:
|
|
paths-ignore:
|
|
- "*.md"
|
|
- "docs/**"
|
|
|
|
jobs:
|
|
check:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
postgres:
|
|
image: postgres:17-alpine
|
|
env:
|
|
POSTGRES_PASSWORD: page-test
|
|
POSTGRES_DB: page_test
|
|
options: >-
|
|
--health-cmd "pg_isready -U postgres -d page_test"
|
|
--health-interval 5s
|
|
--health-timeout 5s
|
|
--health-retries 12
|
|
steps:
|
|
- uses: actions/checkout@v7.0.1
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-go@v7.0.0
|
|
with:
|
|
go-version-file: go.mod
|
|
- name: gofmt
|
|
run: test -z "$(gofmt -l .)"
|
|
- run: go vet ./...
|
|
- run: go test -race ./...
|
|
env:
|
|
CI: "true"
|
|
MIGRATE_POSTGRES_DSN: postgres://postgres:page-test@postgres:5432/page_test?sslmode=disable
|
|
PAGE_POSTGRES_DSN: postgres://postgres:page-test@postgres:5432/page_test?sslmode=disable
|
|
PAGE_REQUIRE_POSTGRES: "1"
|
|
- name: Require issue URLs in TODO comments
|
|
run: |
|
|
find . -type d \( -name .git -o -name node_modules -o -name vendor -o -name generated -o -name gen -o -name target -o -name dist -o -name build -o -name .svelte-kit -o -name .next \) -prune -o -type f \( -name '*.go' -o -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.svelte' -o -name '*.rs' -o -name '*.sql' -o -name '*.sh' -o -name '*.proto' -o -name '*.graphql' -o -name '*.yml' -o -name '*.yaml' -o -name '*.toml' \) -exec awk 'match($0, "((^|[^:])[/][/]|[/][*]|(^|[[:space:]])(#|--)|^[[:space:]]*([*]|<!--))") { comment=substr($0, RSTART + RLENGTH); todo=index(comment, "TO" "DO"); if (todo && substr(comment, todo + 4) !~ "https?:[/][/]") { print FILENAME ":" FNR ":" $0; bad=1 } } END { exit bad }' {} + # shortcut: line-based scan can flag comment-like strings and misses multiline issue links, use a parser when these need accurate coverage
|
|
- name: Go lint
|
|
run: go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.15.0 run ./...
|
|
- uses: goreleaser/goreleaser-action@v7.3.0
|
|
with:
|
|
distribution: goreleaser
|
|
version: v2.19.0
|
|
args: check
|
|
- uses: goreleaser/goreleaser-action@v7.3.0
|
|
with:
|
|
distribution: goreleaser
|
|
version: v2.19.0
|
|
args: release --snapshot --clean
|