-
Notifications
You must be signed in to change notification settings - Fork 2
fix(executor): merge orphaned runtime tests and remove drift #945
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
0f98bcc
3d28883
f44d1fd
fa9c9d5
07c09bc
faafc4f
52b6035
b460bab
576b830
eac2d7f
d530d80
82b4a6d
0397335
27551c9
05b1684
74f69a1
a026f0d
d61c9d8
6a1abca
b251c74
a53c3d1
c0aa5b9
577a97e
bc1b381
886d08b
5f48b29
1ff2028
11d4f4b
1da7bf1
c90b93f
0981deb
ebfc992
a7a953d
5f0f32a
c981f27
0c7e224
6c88d84
89f4547
3030454
cfbe3a2
c3a5501
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| # cliproxyapi-plusplus Ruleset Baseline | ||
|
|
||
| Version: 2026-04-02 | ||
| Ruleset JSON: `.github/rulesets/main.json` | ||
|
|
||
| ## Changelog | ||
|
|
||
| - 2026-04-02: aligned the checked-in baseline with the repo-local governance wave, safer workflow pins, and the next required-check manifest pass. | ||
|
|
||
| This repository now has a checked-in baseline that matches the repaired remote `Main` ruleset. | ||
|
|
||
| ## Enforced Branch Protection Baseline | ||
|
|
||
| - require pull requests before merge on the default branch | ||
| - no branch deletion | ||
| - no force push / non-fast-forward updates | ||
| - require at least 1 approval | ||
| - dismiss stale approvals on new push | ||
| - require code owner review | ||
| - require last push approval before merge | ||
| - require resolved review threads before merge | ||
| - allow merge methods: `merge`, `squash` | ||
| - enable GitHub `copilot_code_review` | ||
|
|
||
| ## Repo-Local Governance Gates | ||
|
|
||
| The repo-local workflow set remains the main CI and policy contract: | ||
|
|
||
| - `policy-gate` | ||
| - `pr-path-guard` | ||
| - `pr-test-build` | ||
| - `required-check-names-guard` | ||
| - `quality-gate` | ||
| - `security-guard` | ||
| - `codeql` | ||
| - `sast-quick` | ||
| - `sast-full` | ||
|
|
||
| Current required check manifests: | ||
|
|
||
| - `.github/required-checks.txt` | ||
| - `.github/release-required-checks.txt` | ||
| - `.github/rulesets/main.json` | ||
|
|
||
| Those manifests should drive the next remote ruleset wave once the stable job names are re-verified | ||
| against live workflow output. | ||
|
|
||
| ## Exception Policy | ||
|
|
||
| - only documented billing or quota failures may be excluded from blocking CI evaluation | ||
| - review threads and blocking comments must be resolved before merge | ||
| - PRs must not rely on local `--no-verify` bypasses instead of server-side checks |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -1,4 +1,13 @@ | ||||||||||||||||||
| # workflow_file|job_name | ||||||||||||||||||
| policy-gate.yml|enforce | ||||||||||||||||||
| pr-path-guard.yml|ensure-no-translator-changes | ||||||||||||||||||
| quality-gate.yml|verify | ||||||||||||||||||
| required-check-names-guard.yml|verify-required-check-names | ||||||||||||||||||
| security-guard.yml|ggshield-scan | ||||||||||||||||||
| sast-quick.yml|semgrep | ||||||||||||||||||
| sast-quick.yml|secrets | ||||||||||||||||||
| sast-quick.yml|go-quality | ||||||||||||||||||
| sast-quick.yml|license-check | ||||||||||||||||||
|
Comment on lines
+7
to
+10
|
||||||||||||||||||
| sast-quick.yml|semgrep | |
| sast-quick.yml|secrets | |
| sast-quick.yml|go-quality | |
| sast-quick.yml|license-check | |
| sast-quick.yml|Semgrep Scan | |
| sast-quick.yml|Secret Scanning | |
| sast-quick.yml|Go Quality | |
| sast-quick.yml|License Compliance |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -1,3 +1,11 @@ | ||||||||||||||||||
| # workflow_file|job_name | ||||||||||||||||||
| pr-test-build.yml|build | ||||||||||||||||||
| policy-gate.yml|enforce | ||||||||||||||||||
| pr-path-guard.yml|ensure-no-translator-changes | ||||||||||||||||||
| pr-test-build.yml|build | ||||||||||||||||||
|
||||||||||||||||||
| pr-test-build.yml|build |
Copilot
AI
Apr 2, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The entries in .github/required-checks.txt appear to use job IDs (e.g., semgrep, secrets, enforce), but required-check-names-guard.yml validates against workflow job name: fields. As written, several workflows either have different job names (e.g., Semgrep Scan) or no job name: at all, so the guard will fail. Either update the manifest to match the exact job name: strings, or add/update each job's name: to match the manifest values consistently.
| sast-quick.yml|semgrep | |
| sast-quick.yml|secrets | |
| sast-quick.yml|go-quality | |
| sast-quick.yml|license-check | |
| sast-quick.yml|Semgrep Scan | |
| sast-quick.yml|Secrets Scan | |
| sast-quick.yml|Go Quality | |
| sast-quick.yml|License Check |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| { | ||
| "name": "Main", | ||
| "target": "branch", | ||
| "enforcement": "active", | ||
| "conditions": { | ||
| "ref_name": { | ||
| "include": ["~DEFAULT_BRANCH"], | ||
| "exclude": [] | ||
| } | ||
| }, | ||
| "bypass_actors": [], | ||
| "rules": [ | ||
| { "type": "deletion" }, | ||
| { "type": "non_fast_forward" }, | ||
| { | ||
| "type": "pull_request", | ||
| "parameters": { | ||
| "required_approving_review_count": 1, | ||
| "dismiss_stale_reviews_on_push": true, | ||
| "required_reviewers": [], | ||
| "require_code_owner_review": true, | ||
| "require_last_push_approval": true, | ||
| "required_review_thread_resolution": true, | ||
| "allowed_merge_methods": ["merge", "squash"] | ||
| } | ||
| }, | ||
| { | ||
| "type": "copilot_code_review", | ||
| "parameters": { | ||
| "review_on_push": true, | ||
| "review_draft_pull_requests": true | ||
| } | ||
| } | ||
| ] | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,25 +1,56 @@ | ||
| name: CI | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
| branches: [main, feature/*, bugfix/*, docs/*, release/*, hotfix/*] | ||
| pull_request: | ||
| branches: [main] | ||
|
|
||
| jobs: | ||
| ci: | ||
| test: | ||
| runs-on: ubuntu-latest | ||
|
|
||
| strategy: | ||
| matrix: | ||
| go-version: ['1.21', '1.22'] | ||
|
|
||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Refresh models catalog | ||
| run: | | ||
| git fetch --depth 1 https://github.com/router-for-me/models.git main | ||
| git show FETCH_HEAD:models.json > internal/registry/models/models.json | ||
| - uses: actions/setup-go@v5 | ||
| mkdir -p pkg/llmproxy/registry/models | ||
| git show FETCH_HEAD:models.json > pkg/llmproxy/registry/models/models.json | ||
|
|
||
| - name: Setup Go | ||
| uses: actions/setup-go@v5 | ||
| with: | ||
| go-version: ${{ matrix.go-version }} | ||
|
|
||
| - name: Cache Go modules | ||
| uses: actions/cache@v4 | ||
| with: | ||
| go-version-file: go.mod | ||
| cache: true | ||
| - name: Vet | ||
| run: go vet ./... | ||
| path: ~/go/pkg/mod | ||
| key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | ||
| restore-keys: | | ||
| ${{ runner.os }}-go- | ||
|
|
||
| - name: Download dependencies | ||
| run: go mod download | ||
|
|
||
| - name: Build | ||
| run: go build ./... | ||
| - name: Test | ||
| run: go test ./... | ||
|
|
||
| - name: Run tests | ||
| run: go test ./... -v -race -coverprofile=coverage.out | ||
|
|
||
| - name: Upload coverage | ||
| uses: codecov/codecov-action@v3 | ||
| with: | ||
| files: ./coverage.out | ||
|
|
||
|
|
||
| phenotype-validate: | ||
| runs-on: ubuntu-latest | ||
| uses: KooshaPari/phenotypeActions/.github/workflows/validate-governance.yml@main |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,92 @@ | ||
| name: SAST Full Analysis | ||
|
|
||
| on: | ||
| schedule: | ||
| - cron: "0 2 * * *" | ||
| workflow_dispatch: | ||
|
|
||
| permissions: | ||
| contents: read | ||
| security-events: write | ||
|
|
||
| jobs: | ||
| codeql: | ||
| name: CodeQL Analysis | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 30 | ||
| strategy: | ||
| matrix: | ||
| language: [go, javascript] | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Initialize CodeQL | ||
| uses: github/codeql-action/init@v4 | ||
| with: | ||
| languages: ${{ matrix.language }} | ||
|
|
||
| - name: Perform CodeQL Analysis | ||
| uses: github/codeql-action/analyze@v4 | ||
|
|
||
| trivy-repo: | ||
| name: Trivy Repository Scan | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 15 | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: aquasecurity/trivy-action@v0.35.0 | ||
| with: | ||
| scan-type: fs | ||
| scan-ref: . | ||
| format: sarif | ||
| output: trivy-results.sarif | ||
| - name: Upload Trivy SARIF | ||
| uses: github/codeql-action/upload-sarif@v4 | ||
| if: always() | ||
| with: | ||
| sarif_file: trivy-results.sarif | ||
| category: trivy | ||
|
|
||
| full-semgrep: | ||
| name: Full Semgrep Analysis | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 20 | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: "3.12" | ||
| - name: Install Semgrep | ||
| run: python -m pip install --disable-pip-version-check semgrep==1.157.0 | ||
| - name: Run Semgrep | ||
| run: | | ||
| semgrep scan \ | ||
| --config .semgrep-rules/ \ | ||
| --config p/security-audit \ | ||
| --config p/owasp-top-ten \ | ||
| --config p/cwe-top-25 \ | ||
| --error \ | ||
| --sarif \ | ||
| --output semgrep.sarif \ | ||
| . | ||
|
|
||
| - name: Upload SARIF | ||
| uses: github/codeql-action/upload-sarif@v4 | ||
| if: always() | ||
| with: | ||
| sarif_file: semgrep.sarif | ||
| category: semgrep-full | ||
|
|
||
| full-secrets: | ||
| name: Full Secret Scan | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 15 | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - uses: trufflesecurity/trufflehog@v3.94.2 | ||
| with: | ||
| path: ./ | ||
| extra_args: --only-verified |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,86 @@ | ||
| name: SAST Quick Check | ||
|
|
||
| on: | ||
| pull_request: | ||
| push: | ||
| branches: [main] | ||
|
|
||
| permissions: | ||
| contents: read | ||
| security-events: write | ||
|
|
||
| jobs: | ||
| semgrep: | ||
| name: Semgrep Scan | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 15 | ||
| # Tier 3: Advisory - security enrichment only | ||
| continue-on-error: true | ||
| steps: | ||
|
Comment on lines
+12
to
+19
|
||
| - uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
| - uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: "3.12" | ||
| - name: Install Semgrep | ||
| run: python -m pip install --disable-pip-version-check semgrep==1.157.0 | ||
| - name: Run Semgrep | ||
| env: | ||
| EVENT_NAME: ${{ github.event_name }} | ||
| run: | | ||
| semgrep scan --sarif --sarif-output=semgrep.sarif --max-target-bytes 1000000 --quiet --config=auto || true | ||
| - name: Upload SARIF | ||
| uses: github/codeql-action/upload-sarif@v4 | ||
| if: always() | ||
| with: | ||
| sarif_file: semgrep.sarif | ||
|
|
||
| # License Compliance - Tier 3: Advisory | ||
| license-compliance: | ||
| name: License Compliance | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 10 | ||
| # Tier 3: Advisory - security enrichment only | ||
| continue-on-error: true | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - name: Analyze licenses | ||
| uses: fsfe/reuse-action@v4 | ||
| continue-on-error: true # Allow findings but don't fail | ||
| - name: Check for non-reusable licenses | ||
| run: | | ||
| # Check for problematic licenses | ||
| grep -r "GPL\|AGPL" --include="*.toml" --include="*.json" . || true | ||
| - name: Check license compliance | ||
| uses: fsfe/reuse-action@v4 | ||
| continue-on-error: true | ||
|
|
||
| # Secret Scanning - Tier 2: Important (runs in parallel) | ||
| secrets: | ||
| name: Secret Scanning | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 5 | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
| - name: Run Gitleaks | ||
| uses: gitleaks/gitleaks-action@v2 | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| with: | ||
| args: --verbose --redact | ||
| - name: Run Trivy Secret Scanner | ||
| uses: aquasecurity/trivy-action@master | ||
| with: | ||
| scan-type: repo | ||
| exit-code: 0 | ||
| format: sarif | ||
| output: trivy-results.sarif | ||
| continue-on-error: true | ||
| - name: Upload Trivy results | ||
| uses: github/codeql-action/upload-sarif@v4 | ||
| if: always() | ||
| with: | ||
| sarif_file: 'trivy-results.sarif' | ||
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -1,9 +1,23 @@ | ||||||||
| name: security-guard | ||||||||
| on: [workflow_dispatch] | ||||||||
| name: Security Guard | ||||||||
|
|
||||||||
| on: | ||||||||
| workflow_call: | ||||||||
| secrets: | ||||||||
| GITGUARDIAN_API_KEY: | ||||||||
| required: true | ||||||||
| workflow_dispatch: | ||||||||
|
|
||||||||
|
Comment on lines
+1
to
+9
|
||||||||
| jobs: | ||||||||
| audit: | ||||||||
| ggshield-scan: | ||||||||
|
||||||||
| ggshield-scan: | |
| ggshield-scan: | |
| name: GGShield Scan |
Copilot
AI
Apr 3, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The required-check name guard only recognizes checks that appear as explicit name: lines in the workflow YAML. This job doesn’t define a name:, so an entry like security-guard.yml|ggshield-scan won’t match anything and will fail the guard. Add a job-level name: (e.g., name: ggshield-scan or a human-friendly name) and ensure the required-check manifests use that exact value.
Copilot
AI
Apr 3, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This workflow’s only job does not set a job-level name:. Because required-check-names-guard validates required checks by grepping for a matching name: line, .github/required-checks.txt entries like security-guard.yml|ggshield-scan will fail unless this job adds name: ggshield-scan (or the manifest is updated to match whatever job name you choose).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same issue as
.github/required-checks.txt: this manifest is validated against workflow jobname:fields, but several referenced jobs use differentname:values or omitname:entirely. Align the manifest values with the actual jobname:strings, or set the jobname:fields to match these manifest entries.