Skip to content

ci: restructure workflows to match org ruleset contract#36

Merged
Nelson Spence (Fieldnote-Echo) merged 4 commits intomainfrom
ci/unified-org-settings
Mar 11, 2026
Merged

ci: restructure workflows to match org ruleset contract#36
Nelson Spence (Fieldnote-Echo) merged 4 commits intomainfrom
ci/unified-org-settings

Conversation

@Fieldnote-Echo
Copy link
Member

Summary

  • Split test matrix into test-run + test aggregator
  • Split lint into lint (ruff), typecheck (mypy), security (bandit + pip-audit)
  • Added quality-gate aggregator
  • CodeQL: analyzecodeql, dropped matrix
  • Scorecard → thin caller to centralized Project-Navi/.github
  • Release → centralized _build-reusable.yml@6c4c2d8f
  • Deleted local _build-reusable.yml

Check name contract (Python tier)

test, lint, typecheck, security, codeql, semgrep, quality-gate

Test plan

  • Verify all 7 required checks appear with correct names
  • Verify test aggregator passes when matrix passes
  • Verify quality-gate passes when all required jobs pass

🤖 Generated with Claude Code

Split test matrix into test-run + test aggregator. Split lint into
lint/typecheck/security. Add quality-gate aggregator. CodeQL job key
analyze → codeql, drop matrix. Scorecard → thin caller. Release →
centralized build. Delete local _build-reusable.yml.

Required checks: test, lint, typecheck, security, codeql, semgrep, quality-gate

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings March 11, 2026 19:51
@github-actions
Copy link
Contributor

github-actions bot commented Mar 11, 2026

✅ Grippy Review — PASS

Score: 88/100 | Findings: 5

Delta: 5 new

Off-diff findings (3)

🟡 MEDIUM: Aggregator jobs rely on matrix result propagation logic

📁 .github/workflows/tests.yml:87

The new 'test' and 'quality-gate' aggregator jobs check that upstream matrix jobs have passed by reading their result using ${{ needs..result }} and failing if any are not 'success'. This assumes that all outputs are properly surfaced and that no required job can skip or be bypassed due to a workflow misconfiguration or race condition (such as an upstream job being skipped or failing to set a status).

Suggestion: Ensure all upstream jobs (test-run, lint, typecheck, security) configured as dependencies are marked as required in branch protection settings, and double-check that no potential early-exit path (e.g., always() allowing a job to run even if dependencies are skipped entirely) can bypass real test failures.

🔵 LOW: No explicit error messages for which required job failed in quality-gate aggregator

📁 .github/workflows/tests.yml:87

The 'quality-gate' job loops over results of required jobs and fails if any job did not succeed, but the error message only reports which result failed as a variable, not which specific job (by name) was at fault. This could make troubleshooting more difficult, especially as the number of required jobs grows.

Suggestion: Enhance the loop logic in 'quality-gate' to print both the job name and its result-either via a bash associative array or individual checks-to provide more informative error output.

🔵 LOW: Test aggregator job does not produce or propagate artifacts

📁 .github/workflows/tests.yml:12

The 'test' aggregator job only checks the matrix result but does not aggregate test reports, code coverage, or other artifacts. If downstream jobs or branch protections depend on these artifacts, this pattern could create gaps.

Suggestion: If other systems or team processes expect test artifacts (logs, coverage, etc.) to be published at the aggregator job level, update the job to collect and upload them from dependencies.


Commit: 3f52372

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR restructures the repository’s GitHub Actions workflows to comply with an org ruleset “required check name” contract, while centralizing some workflows into Project-Navi/.github.

Changes:

  • Split the test matrix into a non-required test-run job plus a required test aggregator job, and added a quality-gate aggregator.
  • Split quality checks into separate required jobs: lint (ruff), typecheck (mypy), and security (bandit + pip-audit).
  • Simplified CodeQL to a single required codeql job and migrated Scorecard/Release to centralized reusable workflows.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
.github/workflows/tests.yml Adds required-check aggregators (test, quality-gate) and splits lint/typecheck/security into distinct jobs.
.github/workflows/codeql.yml Renames job to codeql and removes the language matrix to stabilize the required check name.
.github/workflows/scorecard.yml Replaces the local Scorecard implementation with a pinned reusable workflow call.
.github/workflows/release.yml Switches release build to a pinned reusable workflow call and passes package metadata.
.github/workflows/_build-reusable.yml Deletes the local reusable build workflow in favor of the centralized version.

Copy link
Collaborator

@project-navi-bot project-navi-bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All required CI checks passed. Auto-approved by project-navi-bot.

@Fieldnote-Echo Nelson Spence (Fieldnote-Echo) merged commit b5b9e00 into main Mar 11, 2026
12 checks passed
@Fieldnote-Echo Nelson Spence (Fieldnote-Echo) deleted the ci/unified-org-settings branch March 11, 2026 22:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants