@juangcarmona/lighthouse-sdlc 0.13.0 → 0.14.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/README.md +61 -12
- package/completion.md +6 -4
- package/execution-environments.md +43 -0
- package/package.json +2 -1
- package/schemas/execution-environment.schema.json +12 -0
- package/skills/implement/SKILL.md +9 -8
- package/src/actions-artifact.mjs +17 -0
- package/src/completion-actions.mjs +30 -10
- package/src/completion.mjs +19 -0
- package/src/delivery-events.mjs +42 -0
- package/src/execution-environment.mjs +78 -0
- package/src/implementation-runtime.mjs +56 -32
- package/src/implementation.mjs +31 -19
- package/src/install-workflows.mjs +10 -7
- package/src/integration-evidence.mjs +25 -1
- package/src/issue-actions.mjs +260 -38
- package/src/opencode-execute.mjs +20 -10
- package/src/process-publication.mjs +1 -1
- package/src/proposal-review.mjs +91 -0
- package/src/proposal.mjs +22 -8
- package/src/stage-dispatch.mjs +148 -0
- package/src/stage-transition.mjs +25 -0
- package/src/worker-maintenance.mjs +83 -0
- package/src/worker-recovery.mjs +106 -0
- package/src/worker-reports.mjs +150 -0
- package/workflows/lighthouse-sdlc-apply-review.lock.yml +1335 -0
- package/workflows/lighthouse-sdlc-apply-review.md +205 -0
- package/workflows/lighthouse-sdlc-implement.lock.yml +51 -90
- package/workflows/lighthouse-sdlc-implement.md +40 -11
- package/workflows/lighthouse-sdlc-integrate.lock.yml +36 -83
- package/workflows/lighthouse-sdlc-integrate.md +25 -2
- package/workflows/lighthouse-sdlc-propose.lock.yml +44 -83
- package/workflows/lighthouse-sdlc-propose.md +33 -4
- package/workflows/lighthouse-sdlc-refine.lock.yml +45 -83
- package/workflows/lighthouse-sdlc-refine.md +32 -2
- package/workflows/lighthouse-sdlc-review.lock.yml +36 -83
- package/workflows/lighthouse-sdlc-review.md +25 -2
- package/workflows/lighthouse-sdlc-router.yml +70 -62
- package/workflows/lighthouse-worker-maintenance.yml +126 -0
|
@@ -1,17 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
# Owned by lighthouse-sdlc. Regenerate the lock with gh aw v0.93.2.
|
|
3
3
|
name: Lighthouse SDLC implement
|
|
4
|
-
description:
|
|
4
|
+
description: Plan and implement an authorized issue in an isolated workspace and deliver a reviewable PR.
|
|
5
|
+
run-name: "implement #${{ inputs.issue }} · request ${{ inputs.dispatch-request }}"
|
|
6
|
+
concurrency:
|
|
7
|
+
group: lighthouse-issue-${{ inputs.issue }}
|
|
8
|
+
cancel-in-progress: false
|
|
9
|
+
queue: max
|
|
10
|
+
job-discriminator: ${{ github.run_id }}
|
|
5
11
|
on:
|
|
6
|
-
|
|
12
|
+
# The required preparation job authenticates the originating owner request.
|
|
13
|
+
roles: all
|
|
14
|
+
workflow_dispatch:
|
|
7
15
|
inputs:
|
|
8
16
|
issue:
|
|
17
|
+
description: Source issue
|
|
18
|
+
required: true
|
|
19
|
+
type: string
|
|
20
|
+
dispatch-request:
|
|
21
|
+
description: Authenticated router receipt comment ID
|
|
9
22
|
required: true
|
|
10
23
|
type: string
|
|
11
24
|
needs: [prepare]
|
|
25
|
+
if: needs.prepare.outputs.eligible == 'true'
|
|
12
26
|
runs-on: [self-hosted, linux, lighthouse-workflow]
|
|
13
27
|
runs-on-slim: ubuntu-24.04
|
|
14
28
|
timeout-minutes: 55
|
|
29
|
+
env:
|
|
30
|
+
LIGHTHOUSE_RECOVERY_ENABLED: ${{ vars.LIGHTHOUSE_RECOVERY_ENABLED }}
|
|
31
|
+
LIGHTHOUSE_STAGE: implement
|
|
32
|
+
LIGHTHOUSE_DISPATCH_REQUIRED: "true"
|
|
15
33
|
permissions:
|
|
16
34
|
contents: read
|
|
17
35
|
engine:
|
|
@@ -44,6 +62,7 @@ steps:
|
|
|
44
62
|
uses: actions/checkout@v5
|
|
45
63
|
with:
|
|
46
64
|
persist-credentials: false
|
|
65
|
+
ref: ${{ needs.prepare.outputs.source_revision }}
|
|
47
66
|
- name: Load the pinned harness package
|
|
48
67
|
uses: actions/checkout@v5
|
|
49
68
|
with:
|
|
@@ -54,7 +73,7 @@ steps:
|
|
|
54
73
|
- name: Load the authorized issue context
|
|
55
74
|
uses: actions/download-artifact@v8
|
|
56
75
|
with:
|
|
57
|
-
name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
76
|
+
name: lighthouse-implement-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
58
77
|
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
59
78
|
post-steps:
|
|
60
79
|
- name: Validate the Lighthouse result
|
|
@@ -63,7 +82,7 @@ post-steps:
|
|
|
63
82
|
if: always()
|
|
64
83
|
uses: actions/upload-artifact@v7
|
|
65
84
|
with:
|
|
66
|
-
name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
85
|
+
name: lighthouse-implement-result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
67
86
|
path: |
|
|
68
87
|
${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/envelope.json
|
|
69
88
|
${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/runtime.json
|
|
@@ -83,12 +102,15 @@ post-steps:
|
|
|
83
102
|
if: always()
|
|
84
103
|
uses: actions/upload-artifact@v7
|
|
85
104
|
with:
|
|
86
|
-
name: opencode-events-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
105
|
+
name: opencode-implement-events-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
87
106
|
path: ${{ runner.temp }}/gh-aw/opencode-events-${{ github.run_id }}-${{ github.run_attempt }}.jsonl
|
|
88
107
|
if-no-files-found: ignore
|
|
89
108
|
retention-days: 14
|
|
90
109
|
jobs:
|
|
91
110
|
prepare:
|
|
111
|
+
outputs:
|
|
112
|
+
eligible: ${{ steps.prepare.outputs.eligible }}
|
|
113
|
+
source_revision: ${{ steps.prepare.outputs.source_revision }}
|
|
92
114
|
name: Authorize and reserve issue
|
|
93
115
|
runs-on: ubuntu-24.04
|
|
94
116
|
permissions:
|
|
@@ -112,9 +134,10 @@ jobs:
|
|
|
112
134
|
GH_TOKEN: ${{ github.token }}
|
|
113
135
|
run: node src/packages/sdlc/src/issue-actions.mjs prepare
|
|
114
136
|
- name: Preserve the execution request
|
|
137
|
+
if: steps.prepare.outputs.eligible == 'true'
|
|
115
138
|
uses: actions/upload-artifact@v7
|
|
116
139
|
with:
|
|
117
|
-
name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
140
|
+
name: lighthouse-implement-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
118
141
|
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}/
|
|
119
142
|
if-no-files-found: error
|
|
120
143
|
retention-days: 14
|
|
@@ -126,9 +149,10 @@ jobs:
|
|
|
126
149
|
publish:
|
|
127
150
|
name: Validate, publish and release
|
|
128
151
|
needs: [prepare, agent]
|
|
129
|
-
if: always() && needs.prepare.result == 'success'
|
|
152
|
+
if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
|
|
130
153
|
runs-on: ubuntu-24.04
|
|
131
154
|
permissions:
|
|
155
|
+
actions: write
|
|
132
156
|
contents: write
|
|
133
157
|
issues: write
|
|
134
158
|
pull-requests: write
|
|
@@ -146,14 +170,19 @@ jobs:
|
|
|
146
170
|
- name: Load the execution request
|
|
147
171
|
uses: actions/download-artifact@v8
|
|
148
172
|
with:
|
|
149
|
-
name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
173
|
+
name: lighthouse-implement-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
150
174
|
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
151
175
|
- name: Load the candidate result
|
|
152
176
|
if: needs.agent.result == 'success'
|
|
153
177
|
uses: actions/download-artifact@v8
|
|
154
178
|
with:
|
|
155
|
-
name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
179
|
+
name: lighthouse-implement-result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
156
180
|
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
181
|
+
- name: Require an executed agent
|
|
182
|
+
if: needs.agent.result != 'success'
|
|
183
|
+
run: |
|
|
184
|
+
echo 'The authorized agent did not complete successfully; inspect its execution.' >&2
|
|
185
|
+
exit 1
|
|
157
186
|
- name: Recheck authority and publish the validated result
|
|
158
187
|
if: needs.agent.result == 'success'
|
|
159
188
|
env:
|
|
@@ -166,9 +195,9 @@ jobs:
|
|
|
166
195
|
run: node src/packages/sdlc/src/issue-actions.mjs cleanup
|
|
167
196
|
---
|
|
168
197
|
|
|
169
|
-
#
|
|
198
|
+
# Plan and implement the issue
|
|
170
199
|
|
|
171
|
-
Execute `implement` using `/input/context.json` and `/harness/skills/implement/SKILL.md`. Read the
|
|
200
|
+
Execute `implement` using `/input/context.json` and `/harness/skills/implement/SKILL.md`. Read the issue, owner answers and repository policy. Use `context.proposal.instructions` to create or update the OpenSpec proposal, design, specifications and tasks in `context.proposal.root` before implementing those tasks. Planning artifacts and code belong to the same implementation PR. Work inside `/workspace`, a disposable writable copy; only `implementation.policy.paths` may change. The packaged harness and context remain read-only.
|
|
172
201
|
|
|
173
202
|
Report public progress before inspection and whenever a decision, test result or blocker changes the plan. Explain the evidence briefly; avoid dumping tool payloads. Use the shell to install public dependencies, edit source and run checks. Preserve content and author-owned work. Record completed tasks accurately. Store screenshots, test reports and a concise retrospective in `/output/evidence/`; the host retains them as Actions artifacts.
|
|
174
203
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"
|
|
1
|
+
# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"1d79f54dd473b3b7b99489938a07aa275f5d05d36bf8b3654aa9d1d7b3b04f9f","body_hash":"71107231af6c0ea2e2f2880e7bfcf90d02e031b1db4c95a2d5b456e934f6f1ed","compiler_version":"v0.93.2","agent_id":"opencode","engine_versions":{"opencode":"2.1.0"},"agent_image_runner":"[\"self-hosted\",\"linux\",\"lighthouse-workflow\"]"}
|
|
2
2
|
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/checkout","sha":"fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09","version":"v5"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-node","sha":"a0853c24544627f65ddf259abe73b1d18a591444","version":"v5"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"},{"repo":"github/gh-aw-actions/setup","sha":"d9128eb3ea40c18b77c76184eda03c0ff2608d79","version":"v0.93.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382","pinned_image":"ghcr.io/github/gh-aw-node@sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382"}],"mcp_servers":[{"name":"safeoutputs","tools":["noop"]}],"threat_detection":{"mode":"disabled"},"admission":false}
|
|
3
3
|
# This file was automatically generated by gh-aw (v0.93.2). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md
|
|
4
4
|
#
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
# - shared/lighthouse-opencode.md
|
|
31
31
|
#
|
|
32
32
|
# Frontmatter env variables:
|
|
33
|
+
# - LIGHTHOUSE_DISPATCH_REQUIRED: (main workflow)
|
|
34
|
+
# - LIGHTHOUSE_RECOVERY_ENABLED: (main workflow)
|
|
33
35
|
# - LIGHTHOUSE_STAGE: (main workflow)
|
|
34
36
|
#
|
|
35
37
|
# Secrets used:
|
|
@@ -55,38 +57,36 @@
|
|
|
55
57
|
|
|
56
58
|
name: "Lighthouse SDLC integrate"
|
|
57
59
|
on:
|
|
58
|
-
|
|
60
|
+
# roles: all # Roles processed as role check in pre-activation job
|
|
61
|
+
workflow_dispatch:
|
|
59
62
|
inputs:
|
|
60
63
|
aw_context:
|
|
61
64
|
default: ""
|
|
62
65
|
description: "Agent caller context (Reserved for Agentic Workflows)."
|
|
63
66
|
required: false
|
|
64
67
|
type: string
|
|
68
|
+
dispatch-request:
|
|
69
|
+
description: Authenticated router receipt comment ID
|
|
70
|
+
required: true
|
|
71
|
+
type: string
|
|
65
72
|
issue:
|
|
73
|
+
description: Source issue
|
|
66
74
|
required: true
|
|
67
75
|
type: string
|
|
68
|
-
secrets:
|
|
69
|
-
COPILOT_GITHUB_TOKEN:
|
|
70
|
-
required: false
|
|
71
|
-
GH_AW_DEFAULT_OTLP_ENDPOINT:
|
|
72
|
-
required: false
|
|
73
|
-
GH_AW_DEFAULT_OTLP_HEADERS:
|
|
74
|
-
required: false
|
|
75
|
-
GH_AW_GITHUB_MCP_SERVER_TOKEN:
|
|
76
|
-
required: false
|
|
77
|
-
GH_AW_GITHUB_TOKEN:
|
|
78
|
-
required: false
|
|
79
76
|
|
|
80
77
|
# Jobs receive only their explicitly declared permissions.
|
|
81
78
|
permissions: {}
|
|
82
79
|
|
|
83
80
|
concurrency:
|
|
84
|
-
|
|
81
|
+
cancel-in-progress: false
|
|
82
|
+
group: lighthouse-issue-${{ inputs.issue }}
|
|
85
83
|
queue: max
|
|
86
84
|
|
|
87
|
-
run-name: "
|
|
85
|
+
run-name: "integrate #${{ inputs.issue }} · request ${{ inputs.dispatch-request }}"
|
|
88
86
|
|
|
89
87
|
env:
|
|
88
|
+
LIGHTHOUSE_DISPATCH_REQUIRED: "true"
|
|
89
|
+
LIGHTHOUSE_RECOVERY_ENABLED: ${{ vars.LIGHTHOUSE_RECOVERY_ENABLED }}
|
|
90
90
|
LIGHTHOUSE_STAGE: integrate
|
|
91
91
|
OTEL_EXPORTER_OTLP_ENDPOINT: ${{ secrets.GH_AW_DEFAULT_OTLP_ENDPOINT || vars.GH_AW_DEFAULT_OTLP_ENDPOINT }}
|
|
92
92
|
OTEL_SERVICE_NAME: gh-aw.lighthouse-sdlc-integrate
|
|
@@ -101,7 +101,7 @@ jobs:
|
|
|
101
101
|
needs:
|
|
102
102
|
- pre_activation
|
|
103
103
|
- prepare
|
|
104
|
-
if: needs.pre_activation.outputs.activated == 'true'
|
|
104
|
+
if: needs.pre_activation.outputs.activated == 'true' && (needs.prepare.outputs.eligible == 'true')
|
|
105
105
|
runs-on: ubuntu-24.04
|
|
106
106
|
# Permissions for the activation job (workflow permissions default to none).
|
|
107
107
|
permissions:
|
|
@@ -111,7 +111,6 @@ jobs:
|
|
|
111
111
|
GH_AW_MAX_DAILY_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_DAILY_AI_CREDITS || '5000' }}
|
|
112
112
|
GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }}
|
|
113
113
|
outputs:
|
|
114
|
-
artifact_prefix: ${{ steps.artifact-prefix.outputs.prefix }}
|
|
115
114
|
aw_context: ${{ steps.generate_aw_info.outputs.aw_context }}
|
|
116
115
|
comment_id: ""
|
|
117
116
|
comment_repo: ""
|
|
@@ -129,10 +128,6 @@ jobs:
|
|
|
129
128
|
setup-span-id: ${{ steps.setup.outputs.span-id }}
|
|
130
129
|
setup-trace-id: ${{ steps.setup.outputs.trace-id }}
|
|
131
130
|
stale_lock_file_failed: ${{ steps.check-lock-file.outputs.stale_lock_file_failed == 'true' }}
|
|
132
|
-
target_checkout_ref: ${{ steps.resolve-host-repo.outputs.target_checkout_ref }}
|
|
133
|
-
target_ref: ${{ steps.resolve-host-repo.outputs.target_ref }}
|
|
134
|
-
target_repo: ${{ steps.resolve-host-repo.outputs.target_repo }}
|
|
135
|
-
target_repo_name: ${{ steps.resolve-host-repo.outputs.target_repo_name }}
|
|
136
131
|
steps:
|
|
137
132
|
- name: Setup Scripts
|
|
138
133
|
id: setup
|
|
@@ -151,27 +146,6 @@ jobs:
|
|
|
151
146
|
GH_AW_SETUP_AW_CONTEXT: ${{ inputs.aw_context }}
|
|
152
147
|
- name: Mask OTLP telemetry headers
|
|
153
148
|
run: bash "${RUNNER_TEMP}/gh-aw/actions/mask_otlp_headers.sh"
|
|
154
|
-
- name: Resolve host repo for activation checkout
|
|
155
|
-
id: resolve-host-repo
|
|
156
|
-
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
157
|
-
env:
|
|
158
|
-
JOB_WORKFLOW_REPOSITORY: ${{ job.workflow_repository }}
|
|
159
|
-
JOB_WORKFLOW_SHA: ${{ job.workflow_sha }}
|
|
160
|
-
JOB_WORKFLOW_REF: ${{ job.workflow_ref }}
|
|
161
|
-
JOB_WORKFLOW_FILE_PATH: ${{ job.workflow_file_path }}
|
|
162
|
-
with:
|
|
163
|
-
script: |
|
|
164
|
-
const path = require('path');
|
|
165
|
-
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
|
166
|
-
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
|
167
|
-
setupGlobals(core, github, context, exec, io, getOctokit);
|
|
168
|
-
const { main } = require(path.join(actionsDir, 'resolve_host_repo.cjs'));
|
|
169
|
-
await main();
|
|
170
|
-
- name: Compute artifact prefix
|
|
171
|
-
id: artifact-prefix
|
|
172
|
-
env:
|
|
173
|
-
INPUTS_JSON: ${{ toJSON(inputs) }}
|
|
174
|
-
run: bash "${RUNNER_TEMP}/gh-aw/actions/compute_artifact_prefix.sh"
|
|
175
149
|
- name: Generate agentic run info
|
|
176
150
|
id: generate_aw_info
|
|
177
151
|
env:
|
|
@@ -194,7 +168,6 @@ jobs:
|
|
|
194
168
|
GH_AW_INFO_AGENT_RUNTIME: ""
|
|
195
169
|
GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false}}'
|
|
196
170
|
GH_AW_COMPILED_STRICT: "false"
|
|
197
|
-
GH_AW_INFO_TARGET_REPO: ${{ steps.resolve-host-repo.outputs.target_repo }}
|
|
198
171
|
GH_AW_INFO_FEATURES: '{"dangerously-disable-sandbox-agent":true}'
|
|
199
172
|
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
200
173
|
with:
|
|
@@ -266,19 +239,10 @@ jobs:
|
|
|
266
239
|
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
|
|
267
240
|
GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }}
|
|
268
241
|
GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}
|
|
269
|
-
- name: Print cross-repo setup guidance
|
|
270
|
-
if: failure() && steps.resolve-host-repo.outputs.target_repo != github.repository
|
|
271
|
-
run: |
|
|
272
|
-
echo "::error::COPILOT_GITHUB_TOKEN must be configured in the CALLER repository's secrets."
|
|
273
|
-
echo "::error::For cross-repo workflow_call, secrets must be set in the repository that triggers the workflow."
|
|
274
|
-
echo "::error::See: https://github.github.com/gh-aw/patterns/central-repo-ops/#cross-repo-setup"
|
|
275
242
|
- name: Checkout .github and .agents folders
|
|
276
|
-
if: steps.resolve-host-repo.outputs.target_repo == github.repository
|
|
277
243
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
278
244
|
with:
|
|
279
245
|
persist-credentials: false
|
|
280
|
-
repository: ${{ steps.resolve-host-repo.outputs.target_repo }}
|
|
281
|
-
ref: ${{ steps.resolve-host-repo.outputs.target_checkout_ref }}
|
|
282
246
|
sparse-checkout: |
|
|
283
247
|
.github
|
|
284
248
|
.agents
|
|
@@ -412,7 +376,7 @@ jobs:
|
|
|
412
376
|
if: success() || failure()
|
|
413
377
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
414
378
|
with:
|
|
415
|
-
name:
|
|
379
|
+
name: info
|
|
416
380
|
path: /tmp/gh-aw/aw_info.json
|
|
417
381
|
if-no-files-found: ignore
|
|
418
382
|
retention-days: ${{ vars.GH_AW_DEFAULT_ARTIFACT_RETENTION_DAYS || '0' }}
|
|
@@ -424,7 +388,7 @@ jobs:
|
|
|
424
388
|
if: success() || failure()
|
|
425
389
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
426
390
|
with:
|
|
427
|
-
name:
|
|
391
|
+
name: activation
|
|
428
392
|
include-hidden-files: true
|
|
429
393
|
path: |
|
|
430
394
|
/tmp/gh-aw/aw_info.json
|
|
@@ -447,7 +411,7 @@ jobs:
|
|
|
447
411
|
needs:
|
|
448
412
|
- activation
|
|
449
413
|
- prepare
|
|
450
|
-
if: needs.activation.outputs.daily_ai_credits_exceeded != 'true'
|
|
414
|
+
if: (needs.prepare.outputs.eligible == 'true') && (needs.activation.outputs.daily_ai_credits_exceeded != 'true')
|
|
451
415
|
runs-on:
|
|
452
416
|
- self-hosted
|
|
453
417
|
- linux
|
|
@@ -455,9 +419,6 @@ jobs:
|
|
|
455
419
|
# Permissions for the agent job (workflow permissions default to none).
|
|
456
420
|
permissions:
|
|
457
421
|
contents: read
|
|
458
|
-
concurrency:
|
|
459
|
-
group: "gh-aw-opencode-lighthouse-sdlc-integrate"
|
|
460
|
-
queue: max
|
|
461
422
|
timeout-minutes: 60
|
|
462
423
|
env:
|
|
463
424
|
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
@@ -479,7 +440,6 @@ jobs:
|
|
|
479
440
|
ai_credits_rate_limit_error: ${{ steps.parse-mcp-gateway.outputs.ai_credits_rate_limit_error || 'false' }}
|
|
480
441
|
aic: ${{ steps.parse-mcp-gateway.outputs.aic }}
|
|
481
442
|
ambient_context: ${{ steps.parse-mcp-gateway.outputs.ambient_context }}
|
|
482
|
-
artifact_prefix: ${{ needs.activation.outputs.artifact_prefix }}
|
|
483
443
|
has_patch: ${{ steps.collect_output.outputs.has_patch }}
|
|
484
444
|
model: ${{ needs.activation.outputs.model }}
|
|
485
445
|
output: ${{ steps.collect_output.outputs.output }}
|
|
@@ -535,7 +495,7 @@ jobs:
|
|
|
535
495
|
- name: Download activation artifact
|
|
536
496
|
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
537
497
|
with:
|
|
538
|
-
name:
|
|
498
|
+
name: activation
|
|
539
499
|
path: /tmp/gh-aw
|
|
540
500
|
- name: Check out the authorized product revision
|
|
541
501
|
uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5
|
|
@@ -929,7 +889,7 @@ jobs:
|
|
|
929
889
|
continue-on-error: true
|
|
930
890
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
931
891
|
with:
|
|
932
|
-
name:
|
|
892
|
+
name: agent-output-fallback
|
|
933
893
|
path: |
|
|
934
894
|
/tmp/gh-aw/agent_output.json
|
|
935
895
|
/tmp/gh-aw/safeoutputs.jsonl
|
|
@@ -951,7 +911,7 @@ jobs:
|
|
|
951
911
|
continue-on-error: true
|
|
952
912
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
953
913
|
with:
|
|
954
|
-
name:
|
|
914
|
+
name: agent
|
|
955
915
|
path: |
|
|
956
916
|
/tmp/gh-aw/aw-prompts/prompt.txt
|
|
957
917
|
/tmp/gh-aw/agent_execution.json
|
|
@@ -990,7 +950,7 @@ jobs:
|
|
|
990
950
|
actions: read
|
|
991
951
|
issues: write
|
|
992
952
|
concurrency:
|
|
993
|
-
group: "gh-aw-conclusion-lighthouse-sdlc-integrate"
|
|
953
|
+
group: "gh-aw-conclusion-lighthouse-sdlc-integrate-${{ github.run_id }}"
|
|
994
954
|
cancel-in-progress: false
|
|
995
955
|
queue: max
|
|
996
956
|
env:
|
|
@@ -1021,7 +981,7 @@ jobs:
|
|
|
1021
981
|
continue-on-error: true
|
|
1022
982
|
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
1023
983
|
with:
|
|
1024
|
-
pattern: "{
|
|
984
|
+
pattern: "{agent,agent-output-fallback}"
|
|
1025
985
|
merge-multiple: true
|
|
1026
986
|
path: /tmp/gh-aw/
|
|
1027
987
|
- name: Setup agent output environment variable
|
|
@@ -1039,7 +999,7 @@ jobs:
|
|
|
1039
999
|
continue-on-error: true
|
|
1040
1000
|
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
1041
1001
|
with:
|
|
1042
|
-
pattern:
|
|
1002
|
+
pattern: safe-outputs-items
|
|
1043
1003
|
merge-multiple: true
|
|
1044
1004
|
path: /tmp/gh-aw/
|
|
1045
1005
|
- name: Process no-op messages
|
|
@@ -1164,7 +1124,7 @@ jobs:
|
|
|
1164
1124
|
continue-on-error: true
|
|
1165
1125
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
1166
1126
|
with:
|
|
1167
|
-
name:
|
|
1127
|
+
name: usage
|
|
1168
1128
|
path: |
|
|
1169
1129
|
/tmp/gh-aw/usage/aw_session.jsonl
|
|
1170
1130
|
/tmp/gh-aw/usage/aw_info.json
|
|
@@ -1199,7 +1159,7 @@ jobs:
|
|
|
1199
1159
|
continue-on-error: true
|
|
1200
1160
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
1201
1161
|
with:
|
|
1202
|
-
name:
|
|
1162
|
+
name: usage
|
|
1203
1163
|
path: |
|
|
1204
1164
|
/tmp/gh-aw/usage/aw_session.jsonl
|
|
1205
1165
|
/tmp/gh-aw/usage/aw_info.json
|
|
@@ -1234,7 +1194,7 @@ jobs:
|
|
|
1234
1194
|
env:
|
|
1235
1195
|
GH_AW_RUNTIME_FEATURES: ${{ vars.GH_AW_RUNTIME_FEATURES }}
|
|
1236
1196
|
outputs:
|
|
1237
|
-
activated: ${{
|
|
1197
|
+
activated: ${{ 'true' }}
|
|
1238
1198
|
matched_command: ''
|
|
1239
1199
|
setup-parent-span-id: ${{ steps.setup.outputs.parent-span-id || steps.setup.outputs.span-id }}
|
|
1240
1200
|
setup-span-id: ${{ steps.setup.outputs.span-id }}
|
|
@@ -1252,20 +1212,6 @@ jobs:
|
|
|
1252
1212
|
GH_AW_INFO_VERSION: "2.1.0"
|
|
1253
1213
|
GH_AW_INFO_ENGINE_ID: "opencode"
|
|
1254
1214
|
GH_AW_SETUP_AW_CONTEXT: ${{ inputs.aw_context }}
|
|
1255
|
-
- name: Check team membership for workflow
|
|
1256
|
-
id: check_membership
|
|
1257
|
-
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
1258
|
-
env:
|
|
1259
|
-
GH_AW_REQUIRED_ROLES: "admin,maintainer,write"
|
|
1260
|
-
with:
|
|
1261
|
-
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
1262
|
-
script: |
|
|
1263
|
-
const path = require('path');
|
|
1264
|
-
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
|
1265
|
-
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
|
1266
|
-
setupGlobals(core, github, context, exec, io, getOctokit);
|
|
1267
|
-
const { main } = require(path.join(actionsDir, 'check_membership.cjs'));
|
|
1268
|
-
await main();
|
|
1269
1215
|
|
|
1270
1216
|
prepare:
|
|
1271
1217
|
name: Verify accepted commit, checks and evidence protection
|
|
@@ -1280,6 +1226,7 @@ jobs:
|
|
|
1280
1226
|
env:
|
|
1281
1227
|
LIGHTHOUSE_ISSUE: ${{ inputs.issue }}
|
|
1282
1228
|
outputs:
|
|
1229
|
+
eligible: ${{ steps.prepare.outputs.eligible }}
|
|
1283
1230
|
revision: ${{ steps.prepare.outputs.revision }}
|
|
1284
1231
|
steps:
|
|
1285
1232
|
- name: Configure GH_HOST for enterprise compatibility
|
|
@@ -1305,6 +1252,7 @@ jobs:
|
|
|
1305
1252
|
env:
|
|
1306
1253
|
GH_TOKEN: ${{ github.token }}
|
|
1307
1254
|
- name: Preserve the execution request
|
|
1255
|
+
if: steps.prepare.outputs.eligible == 'true'
|
|
1308
1256
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
1309
1257
|
with:
|
|
1310
1258
|
if-no-files-found: error
|
|
@@ -1322,7 +1270,7 @@ jobs:
|
|
|
1322
1270
|
needs:
|
|
1323
1271
|
- agent
|
|
1324
1272
|
- prepare
|
|
1325
|
-
if: always() && needs.prepare.result == 'success'
|
|
1273
|
+
if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
|
|
1326
1274
|
runs-on: ubuntu-24.04
|
|
1327
1275
|
# Permissions for the publish job (workflow permissions default to none).
|
|
1328
1276
|
permissions:
|
|
@@ -1366,6 +1314,11 @@ jobs:
|
|
|
1366
1314
|
with:
|
|
1367
1315
|
name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
1368
1316
|
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
1317
|
+
- name: Require an executed agent
|
|
1318
|
+
if: needs.agent.result != 'success'
|
|
1319
|
+
run: |
|
|
1320
|
+
echo 'The authorized agent did not complete successfully; inspect its execution.' >&2
|
|
1321
|
+
exit 1
|
|
1369
1322
|
- name: Recheck authority and publish the validated result
|
|
1370
1323
|
if: needs.agent.result == 'success'
|
|
1371
1324
|
run: node src/packages/sdlc/src/completion-actions.mjs publish
|
|
@@ -2,18 +2,34 @@
|
|
|
2
2
|
# Owned by lighthouse-sdlc. Regenerate the lock with gh aw v0.93.2.
|
|
3
3
|
name: Lighthouse SDLC integrate
|
|
4
4
|
description: Assess integrate with OpenCode and retain a verified delivery record.
|
|
5
|
+
run-name: "integrate #${{ inputs.issue }} · request ${{ inputs.dispatch-request }}"
|
|
6
|
+
concurrency:
|
|
7
|
+
group: lighthouse-issue-${{ inputs.issue }}
|
|
8
|
+
cancel-in-progress: false
|
|
9
|
+
queue: max
|
|
10
|
+
job-discriminator: ${{ github.run_id }}
|
|
5
11
|
on:
|
|
6
|
-
|
|
12
|
+
# The required preparation job authenticates the originating owner request.
|
|
13
|
+
roles: all
|
|
14
|
+
workflow_dispatch:
|
|
7
15
|
inputs:
|
|
8
16
|
issue:
|
|
17
|
+
description: Source issue
|
|
18
|
+
required: true
|
|
19
|
+
type: string
|
|
20
|
+
dispatch-request:
|
|
21
|
+
description: Authenticated router receipt comment ID
|
|
9
22
|
required: true
|
|
10
23
|
type: string
|
|
11
24
|
needs: [prepare]
|
|
25
|
+
if: needs.prepare.outputs.eligible == 'true'
|
|
12
26
|
runs-on: [self-hosted, linux, lighthouse-workflow]
|
|
13
27
|
runs-on-slim: ubuntu-24.04
|
|
14
28
|
timeout-minutes: 15
|
|
15
29
|
env:
|
|
30
|
+
LIGHTHOUSE_RECOVERY_ENABLED: ${{ vars.LIGHTHOUSE_RECOVERY_ENABLED }}
|
|
16
31
|
LIGHTHOUSE_STAGE: integrate
|
|
32
|
+
LIGHTHOUSE_DISPATCH_REQUIRED: "true"
|
|
17
33
|
permissions:
|
|
18
34
|
contents: read
|
|
19
35
|
engine:
|
|
@@ -83,6 +99,7 @@ post-steps:
|
|
|
83
99
|
jobs:
|
|
84
100
|
prepare:
|
|
85
101
|
outputs:
|
|
102
|
+
eligible: ${{ steps.prepare.outputs.eligible }}
|
|
86
103
|
revision: ${{ steps.prepare.outputs.revision }}
|
|
87
104
|
name: Verify accepted commit, checks and evidence protection
|
|
88
105
|
runs-on: ubuntu-24.04
|
|
@@ -109,6 +126,7 @@ jobs:
|
|
|
109
126
|
GH_TOKEN: ${{ github.token }}
|
|
110
127
|
run: node src/packages/sdlc/src/completion-actions.mjs prepare
|
|
111
128
|
- name: Preserve the execution request
|
|
129
|
+
if: steps.prepare.outputs.eligible == 'true'
|
|
112
130
|
uses: actions/upload-artifact@v7
|
|
113
131
|
with:
|
|
114
132
|
name: lighthouse-input-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
@@ -126,7 +144,7 @@ jobs:
|
|
|
126
144
|
cancel-in-progress: false
|
|
127
145
|
name: Validate, publish and release
|
|
128
146
|
needs: [prepare, agent]
|
|
129
|
-
if: always() && needs.prepare.result == 'success'
|
|
147
|
+
if: always() && needs.prepare.result == 'success' && needs.prepare.outputs.eligible == 'true'
|
|
130
148
|
runs-on: ubuntu-24.04
|
|
131
149
|
permissions:
|
|
132
150
|
actions: write
|
|
@@ -156,6 +174,11 @@ jobs:
|
|
|
156
174
|
with:
|
|
157
175
|
name: lighthouse-result-${{ inputs.issue }}-${{ github.run_attempt }}
|
|
158
176
|
path: ${{ runner.temp }}/lighthouse-${{ github.run_id }}-${{ github.run_attempt }}
|
|
177
|
+
- name: Require an executed agent
|
|
178
|
+
if: needs.agent.result != 'success'
|
|
179
|
+
run: |
|
|
180
|
+
echo 'The authorized agent did not complete successfully; inspect its execution.' >&2
|
|
181
|
+
exit 1
|
|
159
182
|
- name: Recheck authority and publish the validated result
|
|
160
183
|
if: needs.agent.result == 'success'
|
|
161
184
|
env:
|