Skip to content

ci: drop step-security/harden-runner steps (egress-policy was breaking builds)#26

Merged
igorpecovnik merged 1 commit into
mainfrom
drop-harden-runner-steps
May 14, 2026
Merged

ci: drop step-security/harden-runner steps (egress-policy was breaking builds)#26
igorpecovnik merged 1 commit into
mainfrom
drop-harden-runner-steps

Conversation

@igorpecovnik
Copy link
Copy Markdown
Member

@igorpecovnik igorpecovnik commented May 14, 2026

What this PR does

Removes the 8 step-security/harden-runner step instances added by a31cbc47 across 6 workflows. -40 lines net.

Why

Run 25845037398 — all 6 x86 cells failed identically with DNS resolution errors inside the build container:

Temporary failure resolving 'github.armbian.com'
Temporary failure resolving 'archive.ubuntu.com'
...
Error 1 occurred in main shell at /armbian/lib/functions/logging/runners.sh:29
Docker run failed after 275s

All 6 arm64 cells (same workflow, same code, same revision) succeeded earlier the same day.

The harden-runner step is documented as observe-only under egress-policy: audit, but the agent's armour eBPF module engages kernel hooks and "protection maps" over /etc/docker/daemon.json, /proc/<pid>/mem etc. regardless of policy mode — see the agent log captured in the failed run:

[armour-cdr] Event Policy: package hardenrunner.event
[LOCKDOWN] Runner.Worker PID set module=armour pid=2153
Armour engaged module=armour
File Info module=armour path=/etc/docker/daemon.json
Protection maps populated module=armour
Protection maps are freezed module=armour

That interacts badly with Armbian build's chroot + qemu-user-static flow on x86 specifically (the runner_worker_mem_read policy is explicitly watching for /proc/<pid>/mem reads against Runner.Worker — exactly what qemu-user-static does during binfmt emulation).

Why not just drop with: egress-policy: audit?

egress-policy: audit is harden-runner's default. Removing the with: block wouldn't change behaviour. The only effective fix is to remove the step entirely.

What's kept from a31cbc47

Independently useful, no runtime side effect on the build matrix:

  • ✅ SHA-pinned actions (closes the tag-mutability supply-chain hole)
  • scorecards.yml — runs on its own schedule, doesn't touch builds
  • dependency-review.yml — runs on PR only, doesn't touch builds
  • .pre-commit-config.yaml — local-only

Test plan

  • Trigger a manual workflow_dispatch of Build Armbian SDK after merge.
  • Confirm all 12 matrix cells now reach the build phase and produce artefacts.
  • Check armbian-images.json in the resulting release contains entries for all 12 (board × os × ext) combinations.

…g builds)

The StepSecurity bot PR (a31cbc4) layered step-security/harden-runner
on every job with `egress-policy: audit`. The documented behaviour
under `audit` is observe-only, but the agent's `armour` eBPF module
runs regardless of policy mode — it engages kernel hooks and
"protection maps" over /etc/docker/daemon.json, /proc/<pid>/mem etc.
and watches for Runner.Worker behaviour patterns.

That interacted badly with Armbian build's chroot + qemu-user-static
flow on x86 specifically: jobs failed with DNS resolution errors
inside the build container ('Temporary failure resolving
github.armbian.com' / 'archive.ubuntu.com'). All 6 x86 cells in run
25845037398 failed the same way; all 6 arm64 cells succeeded.

`egress-policy: audit` is also harden-runner's default — so dropping
just the `with:` block wouldn't have changed behaviour. The only
effective fix is to remove the step entirely.

Removes 8 step instances across 6 workflows:
  - build-armbian-sdk.yml: 3 (one per top-level job)
  - infrastructure-dispatch-download-index.yml: 1
  - maintenance-watchdog.yml: 1
  - delete-old-releases.yml: 1
  - dependency-review.yml: 1
  - scorecards.yml: 1

What's kept from a31cbc4:
  - SHA-pinned actions (supply-chain hygiene, zero runtime side effect)
  - scorecards.yml + dependency-review.yml workflows (separate from
    the build matrix; they run on PRs / schedule and don't touch
    builds)
  - .pre-commit-config.yaml (local-only)
@igorpecovnik igorpecovnik merged commit 7033201 into main May 14, 2026
17 of 43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant