Nightly Full Tests #153
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Nightly Full Tests | |
| on: | |
| schedule: | |
| # Run at 2am UTC daily | |
| - cron: '0 2 * * *' | |
| workflow_dispatch: | |
| inputs: | |
| suite: | |
| description: "Nightly suite or measurement suite" | |
| required: true | |
| type: choice | |
| default: full-test | |
| options: | |
| - full-test | |
| - pr-linux | |
| - macos-short | |
| - macos-candidates | |
| - linux-integration | |
| - linux-integration-sharded | |
| - linux-integration-hybrid-sharded | |
| - linux-integration-hybrid-16-sharded | |
| - linux-integration-hybrid-prebuilt-sharded | |
| - linux-integration-coverage | |
| - cross-version-smoke | |
| - nix | |
| - mcp-package | |
| - npm-package | |
| smoke_version: | |
| description: "Optional previous release for cross-version-smoke" | |
| required: false | |
| default: "" | |
| env: | |
| BD_DISABLE_METRICS: "1" | |
| BD_DISABLE_EVENT_FLUSH: "1" | |
| jobs: | |
| measure: | |
| name: Measure selected CI suite | |
| if: ${{ github.event_name == 'workflow_dispatch' && inputs.suite != 'full-test' }} | |
| uses: ./.github/workflows/ci-measurements.yml | |
| with: | |
| suite: ${{ inputs.suite }} | |
| smoke_version: ${{ inputs.smoke_version }} | |
| full-test: | |
| name: Full Test Suite | |
| if: ${{ github.event_name == 'schedule' || inputs.suite == 'full-test' }} | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 45 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6 | |
| - name: Set up Go | |
| uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 | |
| with: | |
| go-version-file: 'go.mod' | |
| - name: Install Dolt | |
| run: | | |
| curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | sudo bash | |
| - name: Configure Git and Dolt identity | |
| run: | | |
| git config --global user.name "CI Bot" | |
| git config --global user.email "ci@beads.test" | |
| dolt config --global --add user.name "CI Bot" | |
| dolt config --global --add user.email "ci@beads.test" | |
| - name: Build | |
| run: go build -v -tags gms_pure_go ./cmd/bd | |
| - name: Full Test Suite (including integration tests) | |
| env: | |
| # Skip Docker-based Dolt testcontainer tests — they hang in | |
| # GitHub Actions (known issue, see scripts/repro-dolt-hang/). | |
| # Non-Docker integration tests still run via the installed dolt binary. | |
| BEADS_TEST_SKIP: dolt | |
| run: go test -v -race -tags=integration,gms_pure_go -coverprofile=coverage.out -timeout=30m ./... | |
| - name: Check coverage threshold | |
| run: | | |
| COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//') | |
| echo "Coverage: $COVERAGE%" | |
| # Threshold is lower (30%) because Docker-based Dolt integration | |
| # tests are skipped in CI (BEADS_TEST_SKIP=dolt). With Docker | |
| # tests included, coverage would be ~50%+. | |
| if (( $(echo "$COVERAGE < 30" | bc -l) )); then | |
| echo "❌ Coverage is below 30% threshold" | |
| exit 1 | |
| elif (( $(echo "$COVERAGE < 40" | bc -l) )); then | |
| echo "⚠️ Coverage is below 40% (warning threshold)" | |
| else | |
| echo "✅ Coverage meets threshold" | |
| fi | |
| - name: Upload coverage | |
| uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v6 | |
| if: success() | |
| continue-on-error: true | |
| with: | |
| file: ./coverage.out | |
| fail_ci_if_error: false |