mirror of
https://github.com/headroomlabs-ai/headroom.git
synced 2026-08-27 14:17:10 -04:00
ci: add init-native-e2e workflow across linux / macos / windows
Existing Docker init-e2e runs on ubuntu only. Platform-specific bugs
(Windows path separators in written hook commands, PowerShell-vs-bash
matcher strings, macOS keychain prompts, shutil.which PATHEXT quirks)
slip past it. Add a matrix workflow that drops a noop shim for each
target agent and runs ``headroom init -g <target>`` on each of the
three supported OSes, then asserts the settings file was written to
the platform-correct location.
Matrix: [ubuntu-latest, macos-latest, windows-latest] x [claude,
codex, copilot]. ``openclaw`` is excluded because it delegates to
``headroom wrap openclaw`` which needs a real OpenClaw CLI and can't
be stubbed with a noop shim; the Docker suite already covers its
negative path.
Common setup (Python install, editable headroom install, shim drop,
PATH wiring) is factored into a composite action at
.github/actions/headroom-e2e-setup so follow-up per-command workflows
(install-native-e2e, wrap-native-e2e) can be near-copies that only
supply their matrix and assertion blocks. The composite action uses
the cross-platform shim scripts from e2e/_lib/make_shim.{sh,ps1} that
landed with the harness refactor.
Scoped trigger: pull_request touching init code OR the harness, plus
pushes to main and manual dispatch. This avoids burning CI minutes on
every push to unrelated feature branches while still gating every PR
that could regress init behavior.
Not verified locally: Windows runner behavior. Reviewer should watch
the first matrix run on PR.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
48e2431510
commit
0cfbc3f436
2 changed files with 187 additions and 0 deletions
66
.github/actions/headroom-e2e-setup/action.yml
vendored
Normal file
66
.github/actions/headroom-e2e-setup/action.yml
vendored
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
name: Headroom e2e setup
|
||||
description: >-
|
||||
Checkout-agnostic setup shared by native e2e workflows (init, install, wrap).
|
||||
Installs Python, installs headroom in editable mode, and (optionally) drops
|
||||
a noop shim onto PATH so ``headroom init -g <target>`` can detect a tool
|
||||
that isn't actually installed on the runner.
|
||||
inputs:
|
||||
python-version:
|
||||
description: Python version to install
|
||||
required: false
|
||||
default: "3.11"
|
||||
shim-target:
|
||||
description: >-
|
||||
Name of the shim to drop on PATH (e.g. ``claude``, ``codex``). Leave
|
||||
empty to skip shim creation.
|
||||
required: false
|
||||
default: ""
|
||||
outputs:
|
||||
shim-dir:
|
||||
description: Absolute path to the directory containing the dropped shim
|
||||
value: ${{ steps.shim.outputs.shim-dir }}
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Set up Python ${{ inputs.python-version }}
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ inputs.python-version }}
|
||||
|
||||
- name: Install headroom (editable, core deps only)
|
||||
shell: bash
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
# ``init`` doesn't need the proxy extras; install the base package.
|
||||
pip install -e .
|
||||
|
||||
- name: Drop shim (POSIX)
|
||||
if: ${{ inputs.shim-target != '' && runner.os != 'Windows' }}
|
||||
id: shim-posix
|
||||
shell: bash
|
||||
run: |
|
||||
shim_dir="${RUNNER_TEMP}/headroom-e2e-shims"
|
||||
bash e2e/_lib/make_shim.sh "${{ inputs.shim-target }}" "$shim_dir"
|
||||
echo "$shim_dir" >> "$GITHUB_PATH"
|
||||
echo "shim-dir=$shim_dir" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Drop shim (Windows)
|
||||
if: ${{ inputs.shim-target != '' && runner.os == 'Windows' }}
|
||||
id: shim-windows
|
||||
shell: pwsh
|
||||
run: |
|
||||
$shimDir = Join-Path $env:RUNNER_TEMP "headroom-e2e-shims"
|
||||
& pwsh -File e2e/_lib/make_shim.ps1 -Name "${{ inputs.shim-target }}" -Dir $shimDir
|
||||
Add-Content -Path $env:GITHUB_PATH -Value $shimDir
|
||||
"shim-dir=$shimDir" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
|
||||
|
||||
- name: Export shim dir to job output
|
||||
if: ${{ inputs.shim-target != '' }}
|
||||
id: shim
|
||||
shell: bash
|
||||
run: |
|
||||
if [ "${{ runner.os }}" = "Windows" ]; then
|
||||
echo "shim-dir=${{ steps.shim-windows.outputs.shim-dir }}" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "shim-dir=${{ steps.shim-posix.outputs.shim-dir }}" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue