Re-enables BDD_SCHEMA_ISOLATION=true with the foundation from PR #34
(NewPostgresRepositoryFromDSN). Achieves ~2.85x speedup on the BDD
test suite by running feature packages in parallel.
ARCHITECTURE
When BDD_SCHEMA_ISOLATION=true, each test package (process) gets its
own isolated PostgreSQL schema:
1. testserver.Start() generates a deterministic schema name per FEATURE
2. CREATE SCHEMA <name>
3. Open a per-package gorm.DB with DSN search_path=<name>
4. AutoMigrate runs in the isolated schema (creates users table)
5. Build a per-package server.Server with this isolated repo via
server.NewServerWithUserRepo
6. Stop() drops the schema + closes the per-package pool
Packages then run in parallel (default Go test parallelism) without
contention because each has its own schema + connection pool.
CHANGES
- pkg/server/server.go : NEW factory NewServerWithUserRepo(cfg, ctx,
userRepo, userService) that injects a per-test repo. Existing NewServer
becomes a thin wrapper.
- pkg/bdd/testserver/server.go : Start() chooses isolated mode based on
BDD_SCHEMA_ISOLATION env var. Stop() drops schema + closes pool.
- pkg/user/postgres_repository.go : Exec(sql) helper for the schema
lifecycle (CREATE/DROP) used by testserver.
- scripts/run-bdd-tests.sh : -p 1 only when BDD_SCHEMA_ISOLATION!=true.
When true, default Go parallelism (~ NumCPU packages concurrent).
- .gitea/workflows/ci-cd.yaml : exports BDD_SCHEMA_ISOLATION=true.
- adr/0025-bdd-scenario-isolation-strategies.md : Status to "Implemented".
VALIDATION
5x AuthBDD with isolation: 5/5 PASS, public.users count=0 after runs.
Local benchmark on the full features/... suite:
- Sequential -p 1 (no isolation): 12.87s
- Parallel + isolation (this PR): 4.51s
- Speedup: 2.85x
🤖 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
workflow_dispatch event has no head_commit, so version-bump script was getting empty input and failing the whole workflow. Fall back to git log -1 when event context is empty.
Co-authored-by: Gabriel Radureau <arcodange@gmail.com>
Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
Single line: export BDD_SCHEMA_ISOLATION=true before run-bdd-tests.sh. Activates the per-scenario schema isolation already implemented per ADR-0025. Should resolve the AuthBDD flakiness observed across multiple CI runs today.
Co-authored-by: Gabriel Radureau <arcodange@gmail.com>
Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
- Changed GITEA_REPO from 'DanceLessonsCoach' to 'dance-lessons-coach'
- Updated workflow comment to use kebab-case
- Aligns with module name changes from previous commits
This ensures the CI/CD workflow correctly references the repository
using the new kebab-case naming convention.
Refs: #ci-cd, #kebab-case, #repository-naming
- Add swag fmt to git pre-commit hook and CI/CD pipeline
- Create comprehensive CONTRIBUTING.md guide with AI section
- Update ADR-0013 with swag fmt documentation
- Fix swagger generation to include all endpoints
- Improve local testing scripts and workflows
- Update Dockerfile for better swagger handling
- Fix CI/CD workflow file references
Remove redundant workflow-validation job:
- Local validation script is sufficient
- Simplifies CI workflow
- Reduces CI execution time
- Removes potential failure point
Workflow validation now handled locally
before pushing to repository.
Fix three critical CI issues:
1. SWAG TOOL: Install swag before go generate
- Adds 'Install swag' step to build-test job
- Prevents 'command not found' errors
- Ensures swagger docs can be generated
2. GO VET REDUNDANCY: Remove duplicate go vet
- Removes go vet from lint-format job
- Keeps go vet only in build-test job
- Reduces CI execution time
3. WORKFLOW VALIDATION: Fix yamllint path
- Updates validate-workflow.sh to use absolute paths
- Fixes .yamllint.yaml file not found error
- Makes path resolution more robust
These fixes address the root causes of:
- Job 350 failure (missing swag)
- Redundant validation (duplicate go vet)
- Workflow validation failures (wrong paths)
Tested locally and ready for CI.
Fix CI/CD workflow failure by adding swagger documentation generation
step before building packages.
The workflow was failing with:
pkg/server/server.go:30:12: pattern docs/swagger.json: no matching files found
Root cause: The //go:embed directive requires generated swagger docs
but the workflow didn't generate them before building.
Solution: Added 'Generate Swagger Docs' step:
- name: Generate Swagger Docs
run: cd pkg/server && go generate
Also generated the missing docs locally to fix immediate issue:
cd pkg/server && go generate
This ensures swagger.json, swagger.yaml, and docs.go are created
before the build step, preventing the embed directive from failing.
- Rename ci-cd.yaml to go-ci-cd.yaml for clarity
- Add dockerimage.yaml workflow for Docker builds
- Create Dockerfile for production deployment
- Add comprehensive CI/CD documentation
- Create contributor-quickstart.sh for easy validation
- Update all scripts to handle both workflow files
- Fix event triggers to run on all relevant pushes
- Remove redundant YAML syntax validation
- Improve workflow validation for Arcodange conventions
BREAKING CHANGE: ci-cd.yaml renamed to go-ci-cd.yaml
See scripts/cicd/README.md for complete documentation.
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
- Designed trunk-based development workflow with branch protection
- Added workflow validation job to prevent main branch breaks
- Integrated act (GitHub Actions runner) for local Gitea workflow testing
- Created unified CI/CD script interface (scripts/cicd.sh)
- Added YAML lint configuration with practical limits (400 chars)
- Organized all CI/CD scripts under scripts/cicd/ directory
- Confirmed Gitea/GitHub Actions compatibility via local testing
- Updated ADR 0017 with implementation details and test results
- Enhanced documentation with local development workflow
See ADR-0017 for complete trunk-based development workflow documentation.
See ADR-0016 for CI/CD pipeline design.