Nightly #20
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 | |
| on: | |
| schedule: | |
| # Run daily at 2 AM UTC (same as security scans) | |
| - cron: '0 2 * * *' | |
| workflow_dispatch: # Allow manual triggering | |
| permissions: | |
| contents: read | |
| jobs: | |
| # ============================================================================= | |
| # Benchmark Comparison (detailed analysis against develop branch) | |
| # ============================================================================= | |
| # This runs full benchmarks with statistical comparison against develop. | |
| # PRs run basic benchmarks; nightly runs the full comparison. | |
| benchmark-comparison: | |
| name: Benchmark Comparison | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Need full history for branch comparison | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: '1.25.5' | |
| cache: true | |
| - name: Set up buf | |
| uses: bufbuild/buf-setup-action@v1 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Generate protobuf files | |
| run: buf generate | |
| - name: Download dependencies | |
| run: go mod download | |
| - name: Install benchstat | |
| run: go install golang.org/x/perf/cmd/benchstat@latest | |
| - name: Run current benchmarks | |
| run: | | |
| echo "Running benchmarks on current HEAD..." | |
| go test -bench=. -benchmem -count=5 ./shared/domain/models/ ./shared/platform/audit/ > new.txt 2>&1 || true | |
| - name: Run develop branch benchmarks | |
| run: | | |
| echo "Checking out develop branch for comparison..." | |
| git stash --include-untracked || true | |
| git checkout origin/develop -- shared/domain/models/ shared/platform/audit/ 2>/dev/null || true | |
| echo "Running benchmarks on develop..." | |
| go test -bench=. -benchmem -count=5 ./shared/domain/models/ ./shared/platform/audit/ > old.txt 2>&1 || true | |
| # Restore current branch | |
| git checkout - -- . 2>/dev/null || true | |
| git stash pop || true | |
| - name: Generate comparison report | |
| run: | | |
| echo "## Nightly Benchmark Comparison" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "Comparing HEAD against develop branch" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ -f old.txt ] && [ -f new.txt ]; then | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| benchstat old.txt new.txt >> $GITHUB_STEP_SUMMARY 2>&1 || echo "Comparison failed" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "Benchmark files not available for comparison" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| # ============================================================================= | |
| # Full Integration Tests (including slow/timing-sensitive tests) | |
| # ============================================================================= | |
| # These tests are timing-sensitive (network timeouts, exponential backoff) | |
| # and are skipped in regular CI (via -short flag) to avoid flakiness from | |
| # CPU scheduler variance. Running them nightly ensures they're validated. | |
| slow-integration-tests: | |
| name: Slow Integration Tests | |
| runs-on: ubuntu-latest | |
| # Note: No postgres service container needed - tests use testcontainers | |
| # which manage their own ephemeral containers with proper isolation. | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version: '1.25.5' | |
| cache: true | |
| - name: Set up buf | |
| uses: bufbuild/buf-setup-action@v1 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Generate protobuf files | |
| run: buf generate | |
| - name: Download dependencies | |
| run: go mod download | |
| - name: Run full test suite (including slow tests) | |
| env: | |
| SKIP_KAFKA_TESTS: "1" | |
| # Note: No DATABASE_URL needed - tests that require a database | |
| # use testcontainers or mock their own configuration | |
| run: | | |
| # Run WITHOUT -short flag to include all timing-sensitive tests | |
| # Regular CI runs with -short, but nightly runs the full suite | |
| echo "Running full test suite including timing-sensitive tests..." | |
| go test -v -race -timeout 15m ./... 2>&1 | tee test-output.txt | |
| # Report summary | |
| echo "" | |
| echo "=== Test Summary ===" | |
| PASS_COUNT=$(grep -c "^--- PASS" test-output.txt || echo "0") | |
| FAIL_COUNT=$(grep -c "^--- FAIL" test-output.txt || echo "0") | |
| SKIP_COUNT=$(grep -c "^--- SKIP" test-output.txt || echo "0") | |
| echo "Passed: $PASS_COUNT" | |
| echo "Failed: $FAIL_COUNT" | |
| echo "Skipped: $SKIP_COUNT" | |
| # Exit with failure if any tests failed | |
| if [ "$FAIL_COUNT" -gt 0 ]; then | |
| echo "" | |
| echo "=== Failed Tests ===" | |
| grep -B5 "^--- FAIL" test-output.txt | |
| exit 1 | |
| fi |