Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/aw/actions-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@
"repo": "github/gh-aw-actions/setup",
"version": "v0.92.0",
"sha": "458b269006dcf88e3b5496b6fbecabe4b9a0f954"
},
"github/gh-aw/actions/setup@0abe2d9b233658150bc05ea968f1736b94093cf7": {
"repo": "github/gh-aw/actions/setup",
"version": "0abe2d9b233658150bc05ea968f1736b94093cf7",
"sha": "0abe2d9b233658150bc05ea968f1736b94093cf7"
}
},
"containers": {
Expand Down
33 changes: 9 additions & 24 deletions .github/workflows/smoke-enclave-cloud-hypervisor.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 24 additions & 6 deletions .github/workflows/smoke-enclave-cloud-hypervisor.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,21 @@ diagnostics (#9955), bounded enclave MCP startup diagnostics (#9898),
and the narrowly scoped official-main and tagged-workflow
acceptance paths. The binary, Docker images, and release-attested primary and
script enclave artifacts all select that release. This workflow is compiled
with gh-aw v0.92.0 and does not publish a release or authorize a live run.
with the user-selected local `/Users/lpcox/projects/gh-aw/gh-aw` binary, reporting
`gh-aw/work-queue/5eb4c298ecba515924d30bd7989113dd79d7d421-14-g7dc6abab7a-dirty`,
and pins `github/gh-aw/actions/setup` to
`0abe2d9b233658150bc05ea968f1736b94093cf7`. The action ref selects runtime
scripts, not the local compiler build. That premerge commit contains the
scanner-generation fixes from github/gh-aw#69079; its two implementation blobs
match the squash merge, although it is not a descendant of that merge.
The binary reports build revision `7dc6abab7ad723cd98f18b5c521d896ed7ffcdc7`
and modified source; this metadata does not establish its exact build source.
This update does not publish a release or authorize a live run.
This is diagnostic enablement, not a verified fix for the original host-executor
launch failure; that failure remains untested with this release.
Copilot CLI is independently pinned to 1.0.96, the pinned gh-aw v0.92.0
installer's default. Its help advertises every generated CLI option and the
harness-added `--session-id` used for model verification; 1.0.34 rejects that
Copilot CLI remains independently pinned to 1.0.96. Its help advertises every
generated CLI option and the harness-added `--session-id` used for model
verification; 1.0.34 rejects that
option before the agent can invoke an enclave. Credential-free offline argument
checks do not verify a live smoke run or the original enclave launch failure.
The pinned model-verification harness updates `/tmp/gh-aw/aw_info.json` in
Expand Down Expand Up @@ -193,8 +202,8 @@ collected. A failure before debug capture starts produces only a status record.
AWF v0.28.59 safely publishes early resolved configuration under
`/run/awf-config-audit` and exports its path as `AWF_RESOLVED_CONFIG` through
`GITHUB_ENV`. The normal audit compatibility JSON is published only after
successful privileged cleanup. The pinned gh-aw v0.92.0 setup action
(`github/gh-aw-actions` at `458b269006dcf88e3b5496b6fbecabe4b9a0f954`)
successful privileged cleanup. The selected setup action
(`github/gh-aw/actions/setup` at `0abe2d9b233658150bc05ea968f1736b94093cf7`)
redacts only the framework-managed AWF temp root and `${RUNNER_TEMP}/gh-aw`; the
compiled artifact upload includes the old audit tree, not the new early path.
Neither consumer uses `AWF_RESOLVED_CONFIG`, so evidence after failed cleanup
Expand All @@ -206,6 +215,15 @@ resolved JSON into normal artifact paths, disable redaction, or relax ownership
or guest-mount protections. The separate bounded raw public-fixture artifact
above is unchanged and does not close this collection gap.

Compile-only dry-run validation now passes actionlint and shellcheck, including
the formerly invalid empty environment and removed daily-credit output
references. Its scanner gate still fails: zizmor flags the premerge setup ref
as `impostor-commit`, its SHA-only version comments, and activation secret
references without a dedicated environment. The ref is the head of merged
github/gh-aw#69079, but is not on a current branch or tag; commit existence and
matching fix blobs do not make the scanner gate pass. These findings are not
suppressed, and this update does not change environment or approval policy.

## Enclave invocation

The enclave server is mounted as the `awf-enclave` CLI command on `PATH`,
Expand Down
2 changes: 1 addition & 1 deletion docs/cloud-hypervisor-foundation.md
Original file line number Diff line number Diff line change
Expand Up @@ -1635,7 +1635,7 @@ destination mount. The kernel
tests the destination and calls `set_mnt_shared()` on the attached tree.
This kernel reference establishes the mechanism, not the probe's unrecorded
exact kernel version. A
[`remount,bind`](https://man7.org/linux/man-pages/man8/mount.8.html)
[`remount,bind`](https://github.com/util-linux/util-linux/blob/master/sys-utils/mount.8.adoc)
changes per-mount flags, not automatically its propagation class.

These are five hypotheses, ordered by code/semantic support, not five findings:
Expand Down
29 changes: 21 additions & 8 deletions scripts/ci/smoke-enclave-workflow.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ function countOccurrences(content: string, value: string): number {
}

describe('experimental Cloud Hypervisor enclave smoke workflow', () => {
const compilerVersion =
'gh-aw/work-queue/5eb4c298ecba515924d30bd7989113dd79d7d421-14-g7dc6abab7a-dirty';
const setupAction =
'github/gh-aw/actions/setup@0abe2d9b233658150bc05ea968f1736b94093cf7';
const source = fs.readFileSync(
path.join(workflowsDir, 'smoke-enclave-cloud-hypervisor.md'), 'utf8'
);
Expand Down Expand Up @@ -202,8 +206,16 @@ describe('experimental Cloud Hypervisor enclave smoke workflow', () => {
'bash "${RUNNER_TEMP}/gh-aw/actions/install_copilot_cli.sh" 1.0.96'
);
expect(lock).toContain('"engine_versions":{"copilot":"1.0.96"}');
expect(lock).toContain('"compiler_version":"v0.92.0"');
expect(lock).toContain('github/gh-aw-actions/setup@458b269006dcf88e3b5496b6fbecabe4b9a0f954');
expect(lock).toContain(`"compiler_version":"${compilerVersion}"`);
expect(lock).toContain(setupAction);
const setupSteps = Object.values(compiled.jobs).flatMap(job => job.steps)
.filter(step => 'uses' in step && String(step.uses).includes('/setup@'));
expect(setupSteps).toHaveLength(4);
for (const step of setupSteps) {
expect('uses' in step && step.uses).toBe(setupAction);
}
expect(lock).not.toContain('"dry_run":true');
expect(source).toContain('The action ref selects runtime\nscripts, not the local compiler build.');
expect(execute?.run).toContain('GH_AW_COPILOT_SRC="$(command -v copilot 2>/dev/null || true)"');
expect(execute?.run).toContain('GH_AW_COPILOT_BIN="${RUNNER_TEMP}/gh-aw/bin/copilot"');
expect(execute?.run).toContain('cp "$GH_AW_COPILOT_SRC" "$GH_AW_COPILOT_BIN"');
Expand Down Expand Up @@ -308,9 +320,9 @@ describe('experimental Cloud Hypervisor enclave smoke workflow', () => {
.map(([name]) => name)).toEqual([]);
expect(compiled.jobs.safe_outputs.permissions?.issues).toBeUndefined();
expect(compiled.jobs.report_smoke_result.permissions?.issues).toBeUndefined();
const blockedVersionStep = compiled.jobs.activation.steps.find(step =>
step.env?.GH_AW_BLOCKED_VERSION_REPORT_AS_ISSUE !== undefined);
expect(blockedVersionStep?.env?.GH_AW_BLOCKED_VERSION_REPORT_AS_ISSUE).toBe('false');
expect(compiled.jobs.activation.steps.some(step =>
step.name === 'Check compile-agentic version')).toBe(false);
expect(lock).not.toContain("require(path.join(actionsDir, 'check_version_updates.cjs'))");
for (const configKey of [
'GH_AW_SAFE_OUTPUTS_CONFIG', 'GH_AW_SAFE_OUTPUTS_HANDLER_CONFIG',
]) {
Expand Down Expand Up @@ -481,7 +493,7 @@ describe('experimental Cloud Hypervisor enclave smoke workflow', () => {
expect(lock).not.toContain('--container-runtime docker');
expect(lock).toContain('\\"cloudHypervisor\\":{\\"previewEnabled\\":true');
expect(lock).toContain('--exclude-env AWF_CLOUD_HYPERVISOR_ENCLAVE_SCRIPT_ROOTFS');
expect(lock).toContain('"compiler_version":"v0.92.0"');
expect(lock).toContain(`"compiler_version":"${compilerVersion}"`);
});

it('pins the published AWF and its attested artifacts to the same release', () => {
Expand Down Expand Up @@ -540,9 +552,10 @@ describe('experimental Cloud Hypervisor enclave smoke workflow', () => {
);
expect(source).toContain('successful privileged cleanup');
expect(source).toContain('Do not copy raw\nresolved JSON into normal artifact paths');
expect(source).toContain('compiled\nwith gh-aw v0.92.0');
expect(source).toContain('with the user-selected local');
expect(source).toContain(compilerVersion);
expect(steps.some(step =>
step.uses === 'github/gh-aw-actions/setup@458b269006dcf88e3b5496b6fbecabe4b9a0f954'
step.uses === setupAction
)).toBe(true);
expect(redact?.with?.script).toContain("require(path.join(actionsDir, 'redact_secrets.cjs'))");
expect(upload?.with?.path).toContain('/tmp/gh-aw/sandbox/firewall/audit/');
Expand Down
Loading