@guilz-dev/sdlc-gh 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/CODEOWNERS +5 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +68 -0
- package/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +39 -0
- package/.github/ISSUE_TEMPLATE/support.yml +56 -0
- package/.github/ISSUE_TEMPLATE/task.yml +89 -0
- package/.github/agents/implementer.agent.md +17 -0
- package/.github/agents/reviewer.agent.md +18 -0
- package/.github/agents/triager.agent.md +13 -0
- package/.github/aw/actions-lock.json +9 -0
- package/.github/copilot-instructions.md +35 -0
- package/.github/hooks/hooks.json +12 -0
- package/.github/instructions/core.instructions.md +11 -0
- package/.github/instructions/profiles/go.instructions.md +10 -0
- package/.github/instructions/profiles/php.instructions.md +11 -0
- package/.github/instructions/profiles/python.instructions.md +11 -0
- package/.github/instructions/profiles/ruby.instructions.md +11 -0
- package/.github/instructions/profiles/typescript.instructions.md +11 -0
- package/.github/labels.yml +55 -0
- package/.github/pull_request_template.md +33 -0
- package/.github/ruleset.example.json +33 -0
- package/.github/ruleset.harness-eval.example.json +29 -0
- package/.github/skills/quality-loop/SKILL.md +23 -0
- package/.github/workflows/agent-retry-orchestrator.yml +161 -0
- package/.github/workflows/copilot-setup-steps.yml +64 -0
- package/.github/workflows/eval-ci.yml +169 -0
- package/.github/workflows/eval-drift.yml +75 -0
- package/.github/workflows/gh-aw-dogfood-ci.yml +73 -0
- package/.github/workflows/harness-ci.yml +244 -0
- package/.github/workflows/harness-sync.yml +28 -0
- package/.github/workflows/l1-readiness-check.yml +45 -0
- package/.github/workflows/labels-sync.yml +24 -0
- package/.github/workflows/nightly-harness-review.lock.yml +1643 -0
- package/.github/workflows/nightly-harness-review.md +87 -0
- package/.github/workflows/nightly-harness-review.yml +63 -0
- package/.github/workflows/npm-publish.yml +49 -0
- package/.github/workflows/pr-context-comment.yml +138 -0
- package/.github/workflows/product-ci-go.yml +33 -0
- package/.github/workflows/product-ci-php.yml +39 -0
- package/.github/workflows/product-ci-python.yml +34 -0
- package/.github/workflows/product-ci-ruby.yml +35 -0
- package/.github/workflows/product-ci-ts.yml +37 -0
- package/.github/workflows/task-issue-label-sync.yml +50 -0
- package/.github/workflows/weekly-redteam.lock.yml +1571 -0
- package/.github/workflows/weekly-redteam.md +76 -0
- package/.github/zizmor.yml +11 -0
- package/AGENTS.md +54 -0
- package/LICENSE +21 -0
- package/README.md +366 -0
- package/config/stacks.json +55 -0
- package/docs/adoption.md +126 -0
- package/docs/arch.md +535 -0
- package/docs/auth-boundaries.md +16 -0
- package/docs/coding-agent-l1.md +152 -0
- package/docs/exceptions/README.md +25 -0
- package/docs/exceptions/TEMPLATE.md +8 -0
- package/docs/failure-taxonomy.md +23 -0
- package/docs/gh-aw-dogfood.md +109 -0
- package/docs/kpi-baseline.md +9 -0
- package/docs/nightly-harness-review.md +94 -0
- package/docs/operations.md +108 -0
- package/docs/publishing.md +79 -0
- package/docs/revert-playbook.md +44 -0
- package/docs/shared-config.md +30 -0
- package/docs/telemetry-artifacts.md +78 -0
- package/docs/telemetry-schema.md +60 -0
- package/evals/.score-baseline.json +6 -0
- package/evals/e2e-bench/README.md +28 -0
- package/evals/e2e-bench/manifest.json +16 -0
- package/evals/e2e-bench/tasks/e2e-001.yml +10 -0
- package/evals/e2e-bench/tasks/e2e-002.yml +11 -0
- package/evals/e2e-bench/tasks/e2e-003.yml +10 -0
- package/evals/e2e-bench/tasks/e2e-004.yml +14 -0
- package/evals/e2e-bench/tasks/e2e-005.yml +11 -0
- package/evals/e2e-bench/tasks/e2e-006.yml +10 -0
- package/evals/e2e-bench/tasks/e2e-007.yml +10 -0
- package/evals/e2e-bench/tasks/e2e-008.yml +10 -0
- package/evals/e2e-bench/tasks/e2e-009.yml +10 -0
- package/evals/trajectories/rubric.md +12 -0
- package/evals/trajectories/test_harness_conventions.py +271 -0
- package/infra/README.md +49 -0
- package/infra/langfuse/docker-compose.yml +25 -0
- package/infra/otel/collector-config.yml +24 -0
- package/infra/samples/gh-aw-dogfood-report.json +44 -0
- package/infra/samples/harness-review-routing-plan.json +19 -0
- package/infra/samples/harness-review-summary.json +61 -0
- package/infra/samples/telemetry-artifact.json +29 -0
- package/infra/samples/telemetry-payload.json +19 -0
- package/package.json +85 -0
- package/prompts/triager-classify.prompt.yml +10 -0
- package/sample/go/add.go +5 -0
- package/sample/go/add_test.go +9 -0
- package/sample/go/go.mod +3 -0
- package/sample/php/composer.json +26 -0
- package/sample/php/composer.lock +1881 -0
- package/sample/php/phpunit.xml +8 -0
- package/sample/php/src/Add.php +13 -0
- package/sample/php/tests/AddTest.php +16 -0
- package/sample/python/requirements-dev.txt +2 -0
- package/sample/python/src/__init__.py +0 -0
- package/sample/python/src/greet.py +3 -0
- package/sample/python/tests/conftest.py +4 -0
- package/sample/python/tests/test_greet.py +5 -0
- package/sample/ruby/.rubocop.yml +10 -0
- package/sample/ruby/Gemfile +6 -0
- package/sample/ruby/Gemfile.lock +58 -0
- package/sample/ruby/lib/add.rb +9 -0
- package/sample/ruby/spec/add_spec.rb +11 -0
- package/sample/ts/biome.json +6 -0
- package/sample/ts/package-lock.json +1763 -0
- package/sample/ts/package.json +15 -0
- package/sample/ts/src/add.ts +3 -0
- package/sample/ts/tests/add.test.ts +8 -0
- package/sample/ts/tsconfig.json +12 -0
- package/scripts/aggregate-harness-review.mjs +48 -0
- package/scripts/bootstrap-harness.sh +411 -0
- package/scripts/check-diff-size.mjs +46 -0
- package/scripts/check-e2e-manifest.mjs +35 -0
- package/scripts/check-eval-score-drift.mjs +31 -0
- package/scripts/check-gh-aw-dogfood-scope.mjs +51 -0
- package/scripts/check-issue-spec.mjs +215 -0
- package/scripts/check-l1-readiness.mjs +82 -0
- package/scripts/check-open-pr-limit.mjs +34 -0
- package/scripts/doctor.mjs +177 -0
- package/scripts/emit-gh-aw-dogfood-report.mjs +112 -0
- package/scripts/emit-telemetry-artifact.mjs +99 -0
- package/scripts/fetch-telemetry-artifacts.mjs +176 -0
- package/scripts/harness-drift-report.mjs +99 -0
- package/scripts/lib/bootstrap-copy.mjs +123 -0
- package/scripts/lib/ccsd-contract.mjs +212 -0
- package/scripts/lib/diff-size.mjs +103 -0
- package/scripts/lib/doctor-local.mjs +179 -0
- package/scripts/lib/e2e-manifest.mjs +76 -0
- package/scripts/lib/gh-aw-dogfood.mjs +293 -0
- package/scripts/lib/github-config.mjs +94 -0
- package/scripts/lib/harness-ci-fragments.mjs +98 -0
- package/scripts/lib/harness-review-routing.mjs +244 -0
- package/scripts/lib/harness-review.mjs +388 -0
- package/scripts/lib/issue-form-label-sync.mjs +56 -0
- package/scripts/lib/l1-readiness.mjs +258 -0
- package/scripts/lib/merge-harness-package.mjs +36 -0
- package/scripts/lib/npm-package.mjs +129 -0
- package/scripts/lib/setup-wizard.mjs +224 -0
- package/scripts/lib/stacks.mjs +138 -0
- package/scripts/lib/telemetry-artifact.mjs +253 -0
- package/scripts/lib/template-root.mjs +39 -0
- package/scripts/merge-harness-package.mjs +14 -0
- package/scripts/route-harness-review.mjs +168 -0
- package/scripts/run-e2e-bench.mjs +216 -0
- package/scripts/sdlc-gh-cli.mjs +91 -0
- package/scripts/select-eval-jobs.mjs +41 -0
- package/scripts/setup-github.mjs +242 -0
- package/scripts/setup-github.sh +4 -0
- package/scripts/setup-wizard.mjs +426 -0
- package/scripts/test-bootstrap-guidance-scenarios.mjs +94 -0
- package/scripts/test-diff-size-scenarios.mjs +88 -0
- package/scripts/test-doctor-scenarios.mjs +70 -0
- package/scripts/test-e2e-manifest-scenarios.mjs +65 -0
- package/scripts/test-gh-aw-dogfood-scenarios.mjs +74 -0
- package/scripts/test-harness-review-routing-scenarios.mjs +130 -0
- package/scripts/test-harness-review-scenarios.mjs +92 -0
- package/scripts/test-hooks-scenarios.mjs +44 -0
- package/scripts/test-issue-form-label-sync-scenarios.mjs +48 -0
- package/scripts/test-issue-spec-scenarios.mjs +258 -0
- package/scripts/test-l1-readiness-scenarios.mjs +204 -0
- package/scripts/test-merge-harness-package-scenarios.mjs +53 -0
- package/scripts/test-npm-package-scenarios.mjs +31 -0
- package/scripts/test-sdlc-gh-cli-scenarios.mjs +54 -0
- package/scripts/test-setup-github-scenarios.mjs +103 -0
- package/scripts/test-setup-wizard-scenarios.mjs +114 -0
- package/scripts/test-telemetry-artifact-scenarios.mjs +69 -0
- package/scripts/trim-harness-ci.mjs +18 -0
- package/scripts/validate-gh-aw-compile.mjs +64 -0
- package/scripts/validate-harness.mjs +199 -0
- package/scripts/validate-telemetry.mjs +21 -0
- package/scripts/verify-bootstrap-stacks.sh +192 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
name: Harness CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
harness-static:
|
|
10
|
+
name: harness-static
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- uses: actions/setup-node@v4
|
|
16
|
+
with:
|
|
17
|
+
node-version: "22"
|
|
18
|
+
|
|
19
|
+
- name: Validate harness assets
|
|
20
|
+
run: node scripts/validate-harness.mjs
|
|
21
|
+
|
|
22
|
+
- name: Install actionlint
|
|
23
|
+
run: |
|
|
24
|
+
bash <(curl -s https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
|
|
25
|
+
# gh-aw compiled *.lock.yml stubs are Phase 3 placeholders; lint active workflows only.
|
|
26
|
+
find .github/workflows -maxdepth 1 -name '*.yml' ! -name '*.lock.yml' -print0 \
|
|
27
|
+
| xargs -0 -r ./actionlint -color
|
|
28
|
+
|
|
29
|
+
- uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.12"
|
|
32
|
+
|
|
33
|
+
- name: Install zizmor
|
|
34
|
+
run: pip install zizmor
|
|
35
|
+
|
|
36
|
+
- name: Run zizmor
|
|
37
|
+
run: |
|
|
38
|
+
find .github/workflows -maxdepth 1 -name '*.yml' ! -name '*.lock.yml' -print0 \
|
|
39
|
+
| xargs -0 -r zizmor --offline --min-severity high
|
|
40
|
+
|
|
41
|
+
- name: Hooks scenario tests
|
|
42
|
+
run: node scripts/test-hooks-scenarios.mjs
|
|
43
|
+
|
|
44
|
+
- name: Issue-spec scenario tests
|
|
45
|
+
run: node scripts/test-issue-spec-scenarios.mjs
|
|
46
|
+
|
|
47
|
+
- name: Issue form label sync scenario tests
|
|
48
|
+
run: node scripts/test-issue-form-label-sync-scenarios.mjs
|
|
49
|
+
|
|
50
|
+
- name: Diff-size scenario tests
|
|
51
|
+
run: node scripts/test-diff-size-scenarios.mjs
|
|
52
|
+
|
|
53
|
+
- name: E2E manifest scenario tests
|
|
54
|
+
run: node scripts/test-e2e-manifest-scenarios.mjs
|
|
55
|
+
|
|
56
|
+
- name: GitHub setup scenario tests
|
|
57
|
+
run: node scripts/test-setup-github-scenarios.mjs
|
|
58
|
+
|
|
59
|
+
- name: Doctor scenario tests
|
|
60
|
+
run: node scripts/test-doctor-scenarios.mjs
|
|
61
|
+
|
|
62
|
+
- name: Telemetry artifact scenario tests
|
|
63
|
+
run: node scripts/test-telemetry-artifact-scenarios.mjs
|
|
64
|
+
|
|
65
|
+
- name: Harness review scenario tests
|
|
66
|
+
run: node scripts/test-harness-review-scenarios.mjs
|
|
67
|
+
|
|
68
|
+
- name: Harness review routing scenario tests
|
|
69
|
+
run: node scripts/test-harness-review-routing-scenarios.mjs
|
|
70
|
+
|
|
71
|
+
- name: gh-aw dogfood scenario tests
|
|
72
|
+
run: node scripts/test-gh-aw-dogfood-scenarios.mjs
|
|
73
|
+
|
|
74
|
+
issue-spec-check:
|
|
75
|
+
name: issue-spec-check
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
if: github.event_name == 'pull_request'
|
|
78
|
+
steps:
|
|
79
|
+
- uses: actions/checkout@v4
|
|
80
|
+
|
|
81
|
+
- uses: actions/setup-node@v4
|
|
82
|
+
with:
|
|
83
|
+
node-version: "22"
|
|
84
|
+
|
|
85
|
+
- name: Validate linked Issue CC-SD contract
|
|
86
|
+
env:
|
|
87
|
+
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
88
|
+
PR_BODY: ${{ github.event.pull_request.body }}
|
|
89
|
+
PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ',') }}
|
|
90
|
+
GH_TOKEN: ${{ github.token }}
|
|
91
|
+
run: node scripts/check-issue-spec.mjs
|
|
92
|
+
|
|
93
|
+
open-pr-limit:
|
|
94
|
+
name: open-pr-limit
|
|
95
|
+
runs-on: ubuntu-latest
|
|
96
|
+
if: github.event_name == 'pull_request'
|
|
97
|
+
steps:
|
|
98
|
+
- uses: actions/checkout@v4
|
|
99
|
+
- name: Check open PR limit
|
|
100
|
+
env:
|
|
101
|
+
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
|
|
102
|
+
GH_TOKEN: ${{ github.token }}
|
|
103
|
+
run: node scripts/check-open-pr-limit.mjs
|
|
104
|
+
|
|
105
|
+
diff-size:
|
|
106
|
+
name: diff-size
|
|
107
|
+
runs-on: ubuntu-latest
|
|
108
|
+
if: github.event_name == 'pull_request'
|
|
109
|
+
steps:
|
|
110
|
+
- uses: actions/checkout@v4
|
|
111
|
+
with:
|
|
112
|
+
fetch-depth: 0
|
|
113
|
+
|
|
114
|
+
- uses: actions/setup-node@v4
|
|
115
|
+
with:
|
|
116
|
+
node-version: "22"
|
|
117
|
+
|
|
118
|
+
- name: Diff size and autonomy gate
|
|
119
|
+
env:
|
|
120
|
+
PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ',') }}
|
|
121
|
+
BASE_SHA: origin/${{ github.base_ref }}
|
|
122
|
+
# Template default: warn-only for L1. Opt in to hard-fail when ready (Phase 4):
|
|
123
|
+
# DIFF_SIZE_L1_HARD_FAIL: "1"
|
|
124
|
+
run: node scripts/check-diff-size.mjs
|
|
125
|
+
|
|
126
|
+
detect-projects:
|
|
127
|
+
name: detect-projects
|
|
128
|
+
needs: harness-static
|
|
129
|
+
runs-on: ubuntu-latest
|
|
130
|
+
outputs:
|
|
131
|
+
ts: ${{ steps.detect.outputs.ts }}
|
|
132
|
+
python: ${{ steps.detect.outputs.python }}
|
|
133
|
+
go: ${{ steps.detect.outputs.go }}
|
|
134
|
+
ruby: ${{ steps.detect.outputs.ruby }}
|
|
135
|
+
php: ${{ steps.detect.outputs.php }}
|
|
136
|
+
steps:
|
|
137
|
+
- uses: actions/checkout@v4
|
|
138
|
+
|
|
139
|
+
- id: detect
|
|
140
|
+
shell: bash
|
|
141
|
+
run: |
|
|
142
|
+
if [[ -f sample/ts/package.json || -f package.json ]]; then
|
|
143
|
+
echo "ts=true" >> "$GITHUB_OUTPUT"
|
|
144
|
+
else
|
|
145
|
+
echo "ts=false" >> "$GITHUB_OUTPUT"
|
|
146
|
+
fi
|
|
147
|
+
if [[ -f sample/python/requirements-dev.txt || -f requirements-dev.txt ]]; then
|
|
148
|
+
echo "python=true" >> "$GITHUB_OUTPUT"
|
|
149
|
+
else
|
|
150
|
+
echo "python=false" >> "$GITHUB_OUTPUT"
|
|
151
|
+
fi
|
|
152
|
+
if [[ -f sample/go/go.mod || -f go.mod ]]; then
|
|
153
|
+
echo "go=true" >> "$GITHUB_OUTPUT"
|
|
154
|
+
else
|
|
155
|
+
echo "go=false" >> "$GITHUB_OUTPUT"
|
|
156
|
+
fi
|
|
157
|
+
if [[ -f sample/ruby/Gemfile || -f Gemfile ]]; then
|
|
158
|
+
echo "ruby=true" >> "$GITHUB_OUTPUT"
|
|
159
|
+
else
|
|
160
|
+
echo "ruby=false" >> "$GITHUB_OUTPUT"
|
|
161
|
+
fi
|
|
162
|
+
if [[ -f sample/php/composer.json || -f composer.json ]]; then
|
|
163
|
+
echo "php=true" >> "$GITHUB_OUTPUT"
|
|
164
|
+
else
|
|
165
|
+
echo "php=false" >> "$GITHUB_OUTPUT"
|
|
166
|
+
fi
|
|
167
|
+
|
|
168
|
+
product-ts:
|
|
169
|
+
name: product-ci-ts
|
|
170
|
+
needs: detect-projects
|
|
171
|
+
if: needs.detect-projects.outputs.ts == 'true'
|
|
172
|
+
uses: ./.github/workflows/product-ci-ts.yml
|
|
173
|
+
|
|
174
|
+
product-python:
|
|
175
|
+
name: product-ci-python
|
|
176
|
+
needs: detect-projects
|
|
177
|
+
if: needs.detect-projects.outputs.python == 'true'
|
|
178
|
+
uses: ./.github/workflows/product-ci-python.yml
|
|
179
|
+
|
|
180
|
+
product-go:
|
|
181
|
+
name: product-ci-go
|
|
182
|
+
needs: detect-projects
|
|
183
|
+
if: needs.detect-projects.outputs.go == 'true'
|
|
184
|
+
uses: ./.github/workflows/product-ci-go.yml
|
|
185
|
+
|
|
186
|
+
product-ruby:
|
|
187
|
+
name: product-ci-ruby
|
|
188
|
+
needs: detect-projects
|
|
189
|
+
if: needs.detect-projects.outputs.ruby == 'true'
|
|
190
|
+
uses: ./.github/workflows/product-ci-ruby.yml
|
|
191
|
+
|
|
192
|
+
product-php:
|
|
193
|
+
name: product-ci-php
|
|
194
|
+
needs: detect-projects
|
|
195
|
+
if: needs.detect-projects.outputs.php == 'true'
|
|
196
|
+
uses: ./.github/workflows/product-ci-php.yml
|
|
197
|
+
|
|
198
|
+
telemetry:
|
|
199
|
+
name: telemetry-artifact
|
|
200
|
+
runs-on: ubuntu-latest
|
|
201
|
+
if: always() && github.event_name == 'pull_request'
|
|
202
|
+
needs:
|
|
203
|
+
- harness-static
|
|
204
|
+
- issue-spec-check
|
|
205
|
+
- open-pr-limit
|
|
206
|
+
- diff-size
|
|
207
|
+
- detect-projects
|
|
208
|
+
- product-ts
|
|
209
|
+
- product-python
|
|
210
|
+
- product-go
|
|
211
|
+
- product-ruby
|
|
212
|
+
- product-php
|
|
213
|
+
steps:
|
|
214
|
+
- uses: actions/checkout@v4
|
|
215
|
+
with:
|
|
216
|
+
fetch-depth: 0
|
|
217
|
+
|
|
218
|
+
- uses: actions/setup-node@v4
|
|
219
|
+
with:
|
|
220
|
+
node-version: "22"
|
|
221
|
+
|
|
222
|
+
- name: Emit harness CI telemetry artifact
|
|
223
|
+
env:
|
|
224
|
+
TELEMETRY_SOURCE: harness-ci
|
|
225
|
+
GITHUB_REPOSITORY: ${{ github.repository }}
|
|
226
|
+
GITHUB_RUN_ID: ${{ github.run_id }}
|
|
227
|
+
GITHUB_RUN_ATTEMPT: ${{ github.run_attempt }}
|
|
228
|
+
GITHUB_WORKFLOW: ${{ github.workflow }}
|
|
229
|
+
GITHUB_EVENT_NAME: ${{ github.event_name }}
|
|
230
|
+
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
231
|
+
PR_BODY: ${{ github.event.pull_request.body }}
|
|
232
|
+
PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ',') }}
|
|
233
|
+
BASE_SHA: origin/${{ github.base_ref }}
|
|
234
|
+
JOB_RESULTS: ${{ toJSON(needs) }}
|
|
235
|
+
EXECUTION_MODE: ci
|
|
236
|
+
FINAL_OUTCOME: in_progress
|
|
237
|
+
run: node scripts/emit-telemetry-artifact.mjs
|
|
238
|
+
|
|
239
|
+
- name: Upload harness telemetry artifact
|
|
240
|
+
uses: actions/upload-artifact@v4
|
|
241
|
+
with:
|
|
242
|
+
name: harness-telemetry-${{ github.run_id }}
|
|
243
|
+
path: telemetry-artifacts/
|
|
244
|
+
if-no-files-found: error
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Harness sync
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
target_repo:
|
|
7
|
+
description: "owner/name of product repository (for future matrix sync)"
|
|
8
|
+
required: false
|
|
9
|
+
schedule:
|
|
10
|
+
- cron: "0 8 * * 1"
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
drift-report:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- uses: actions/setup-node@v4
|
|
19
|
+
with:
|
|
20
|
+
node-version: "22"
|
|
21
|
+
|
|
22
|
+
- name: Generate harness drift manifest
|
|
23
|
+
run: node scripts/harness-drift-report.mjs
|
|
24
|
+
|
|
25
|
+
- name: Sync instructions
|
|
26
|
+
run: |
|
|
27
|
+
echo "Copy manifest SHAs to product repos via bootstrap or manual sync." >> "$GITHUB_STEP_SUMMARY"
|
|
28
|
+
echo "See docs/shared-config.md and docs/adoption.md." >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: L1 readiness check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
strict:
|
|
7
|
+
description: Enable strict readiness gating (same semantics as check-l1-readiness --strict)
|
|
8
|
+
type: boolean
|
|
9
|
+
default: false
|
|
10
|
+
template:
|
|
11
|
+
description: Template repository mode (multiple product-ci workflows)
|
|
12
|
+
type: boolean
|
|
13
|
+
default: false
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
actions: read
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
l1-readiness:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- uses: actions/setup-node@v4
|
|
26
|
+
with:
|
|
27
|
+
node-version: "22"
|
|
28
|
+
|
|
29
|
+
- name: Run L1 readiness check
|
|
30
|
+
env:
|
|
31
|
+
GH_TOKEN: ${{ github.token }}
|
|
32
|
+
run: |
|
|
33
|
+
args=(--github-repo "${{ github.repository }}" --json --summary)
|
|
34
|
+
if [[ "${{ inputs.strict }}" == "true" ]]; then
|
|
35
|
+
args+=(--strict)
|
|
36
|
+
fi
|
|
37
|
+
if [[ "${{ inputs.template }}" == "true" ]]; then
|
|
38
|
+
args+=(--template)
|
|
39
|
+
fi
|
|
40
|
+
node scripts/check-l1-readiness.mjs "${args[@]}" | tee l1-readiness.json
|
|
41
|
+
node --input-type=module -e "
|
|
42
|
+
import { readFileSync } from 'node:fs';
|
|
43
|
+
const report = JSON.parse(readFileSync('l1-readiness.json', 'utf8'));
|
|
44
|
+
process.exit(report.exitCode ?? (report.hasFail ? 1 : 0));
|
|
45
|
+
"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Sync labels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
paths:
|
|
8
|
+
- ".github/labels.yml"
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
issues: write
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
sync:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Apply labels from labels.yml
|
|
21
|
+
uses: EndBug/label-sync@v2
|
|
22
|
+
with:
|
|
23
|
+
config-file: .github/labels.yml
|
|
24
|
+
delete-other-labels: false
|