Skip to content

ci(secruity): hardening + lock files + dependabot cooldown - #48

Merged
Frando merged 9 commits into
mainfrom
arqu/lock_deps
Sep 13, 2026
Merged

ci(secruity): hardening + lock files + dependabot cooldown#48
Frando merged 9 commits into
mainfrom
arqu/lock_deps

Conversation

@Arqu

@Arqu Arqu commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Same pricinple as n0-computer/noq#788

Uses --locked to ensure we only use deps from the lock file
Adds cooldown period to dependabot
pins actions versions
introduces zizimor and pinact

The repo had none, so nothing was ever proposed for update. Actions
need this in place before pinning, or the pins freeze permanently.
Cooldown lets a compromised publish be noticed before we take it.
Turns a warning to spot in the log into a hard failure in the deny job.
chacha20 0.10.1 was yanked; h2 0.4.15 carries RUSTSEC-2026-0258
(unbounded empty DATA frames), which the deny job was already failing
on. Both bumped.
Floating tags (@v5, @stable, @nextest) resolve at run time, so a tag
move is a silent code change. Pin every action to a SHA with a version
comment; refs that carry no semver tag get an inline toolchain/tool
input instead. .pinact.yaml keeps the SHAs and comments in sync.
ci.yml had no permissions block at all. release-rolling.yml granted
contents: write to the whole workflow, including the two build jobs;
only publish-rolling needs it.
actions/checkout leaves the job token in .git/config by default, where
any build script can read it. Only publish-rolling needs it: it moves
the rolling tag with a bare git push.
…action

publish-rolling is the only job holding contents: write. gh ships on
the runner, so the release can be cut without trusting an extra action
in that job. Behaviour is unchanged: same tag, title, prerelease flag,
non-latest, notes and asset set.
--locked everywhere so a job can never silently resolve a dependency
the lockfile does not name. cargo make rejects the flag, so that step
asserts the lockfile did not move instead. The UI side was already on
npm ci against a committed package-lock.json.
Expressions interpolated straight into a run block are substituted
before the shell sees them, so anything attacker-influenced becomes
code. Bind them to env and quote the reads instead.
zizmor audits the workflows themselves; pinact fails if a pinned SHA
drifts from its version comment or is younger than the cooldown. No
zizmor config: the tree is clean with no accepted exceptions.
@Arqu
Arqu requested a review from Frando September 11, 2026 18:38
@Frando
Frando merged commit 4ccaa15 into main Sep 13, 2026
6 checks passed
@Arqu
Arqu deleted the arqu/lock_deps branch September 13, 2026 23:46
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.

2 participants