Skip to content

chore: bump MSRV to 1.82 + cargo-deny security gate (PR-1 of 7) - #26

Merged
pofallon merged 1 commit into
mainfrom
pr1-msrv-ci-security
May 25, 2026
Merged

chore: bump MSRV to 1.82 + cargo-deny security gate (PR-1 of 7)#26
pofallon merged 1 commit into
mainfrom
pr1-msrv-ci-security

Conversation

@pofallon

Copy link
Copy Markdown
Contributor

First of the Tier 1 PRs from docs/ROADMAP_TO_1.0.md. Pure infra/CI; no behavior changes.

Summary

  • MSRV 1.70 → 1.82 in workspace Cargo.toml. Unblocks modern deps under the MSRV-aware resolver (default since cargo 1.84). Toolchain stays on stable; no version-gated cfg in tree, so no code changes follow.
  • deny.toml at repo root — cargo-deny policy covering advisories, licenses, bans, and sources. cargo deny check passes cleanly locally (advisories ok, bans ok, licenses ok, sources ok).
  • .github/workflows/ci.yml — new security job runs cargo deny check on PR/push and daily at 07:00 UTC. Existing jobs (lint, test-fast, test-integration) are gated with if: github.event_name != 'schedule' so the cron only fires the security gate.
  • deacon-core workspace dep now pins version = "0.2.0" alongside path so cargo-deny does not flag it as a wildcard.

Discoveries during execution

  • RUSTSEC-2025-0120 (json5 unmaintained) does not apply to json5 1.x — the advisory targets the 0.4 line. No ignore needed. Roadmap can be updated to drop "migrate off json5" as a 1.0 item.
  • webpki-roots 1.0.7 ships under CDLA-Permissive-2.0 (Mozilla-classified permissive license bundle). Added to the license allowlist with a comment.

Test plan

  • cargo fmt --all -- --check
  • cargo check --workspace --all-targets
  • cargo clippy --all-targets -- -D warnings
  • cargo deny check → all four checks ok
  • CI green on this PR (security + lint + test-fast + test-integration)
  • Verify scheduled run: confirm only the security job fires after the daily cron (next 07:00 UTC tick)

Refs

docs/ROADMAP_TO_1.0.md Tier 1 items: MSRV bump, cargo-audit + cargo-deny in CI.

🤖 Generated with Claude Code

@github-actions github-actions Bot added ci CI/CD changes build Build system changes labels May 25, 2026
pofallon added a commit that referenced this pull request May 25, 2026
Three retry-loop tests pass /bin/true as the runtime path to invoke a
real subprocess that succeeds without a Docker daemon. /bin/true is
absent on the macOS GitHub Actions runner images, so these tests have
been failing on the Test (MVP fast) (macos) job for some time.

/usr/bin/true exists on both Linux (Ubuntu) and macOS. Switching to it
fixes the failure with no semantic change to what the tests assert.

Tests:
- run_build_succeeds_on_first_attempt_without_hook
- run_build_recovers_after_transient_failures
- run_build_gives_up_after_exhausting_retries

Surfaced while reviewing CI on the MSRV/cargo-deny PR (#26).

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
First of the Tier 1 PRs landing the 1.0 readiness roadmap.

- Cargo.toml: rust-version 1.70 -> 1.82 (unblocks modern deps under
  the MSRV-aware resolver). Toolchain remains stable; no version-gated
  cfg in tree, so no code changes follow.
- deny.toml: new advisory + license + source policy.
  - advisories: deny + yanked deny; no explicit ignores in effect.
    The expected RUSTSEC-2025-0120 (json5 unmaintained) does not apply
    to json5 1.x; the 0.4 line is the unmaintained one.
  - licenses: narrow allowlist incl. CDLA-Permissive-2.0 (webpki-roots).
  - bans: wildcards deny, multiple-versions warn (tightening deferred).
  - Workspace deacon-core dep pinned to version "0.2.0" alongside the
    path so it is not flagged as a wildcard.
- .github/workflows/ci.yml: new `security` job running `cargo deny check`
  on PR + push + daily 07:00 UTC schedule. Existing jobs gated with
  `if: github.event_name != 'schedule'` so the cron only fires the
  security gate.

Verified locally: cargo fmt --check, cargo check --workspace --all-targets,
cargo clippy --all-targets -- -D warnings, cargo deny check (advisories ok,
bans ok, licenses ok, sources ok).

Refs: docs/ROADMAP_TO_1.0.md Tier 1 items "MSRV bump" and
"cargo-audit + cargo-deny in CI".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@pofallon
pofallon force-pushed the pr1-msrv-ci-security branch from 144b703 to 68d99b7 Compare May 25, 2026 18:45
@pofallon
pofallon merged commit 068cab1 into main May 25, 2026
8 checks passed
@pofallon
pofallon deleted the pr1-msrv-ci-security branch May 25, 2026 18:57
pofallon added a commit that referenced this pull request May 26, 2026
)

The README's `Shipped Commands` table was missing four commands that
landed in 2026-05, and the `In Progress` table claimed five features
were "Planned" / "Experimental" when they had actually shipped.

## Shipped Commands — added 4

- `set-up` (PR-6a/6b/6c — lifecycle hooks against an existing container
  + dotfiles + `/etc` patches)
- `upgrade` (PR-5a/5b — regenerate-lockfile + Dependabot pinning)
- `outdated` (current/wanted/latest feature versions)
- `config` (config management subcommands)

Also rewrote one-liners for the existing commands to be more accurate
(e.g. `up` notes features-at-build-time, `build` notes the
Dockerfile-only feature scope, `read-configuration` mentions extends +
variable substitution).

## In Progress → Known limitations

The old table claimed these five were not ready, all wrong now:

- Docker Compose profiles → shipped (`populate_profiles` in `compose.rs`)
- Features during `up` → shipped (PR-4a/4b/4c)
- Container-side dotfiles → shipped (PR-6b)
- `--expect-existing-container` → shipped (`container.rs:435` +
  `compose.rs:146`)
- Port forwarding → shipped (`forward_ports` flows through both paths)

Replaced the whole table with two honest entries:
- **Podman runtime** — still experimental in 1.0; #30 tracks 1.1
- **`build` features** — Dockerfile-only; compose-build + image-ref still
  error with features

Footer now points at #52 (post-1.0 hardening tracker) too.

## Badges — added 4

Existing: Latest Release, CI status, License.

Added:
- CodeQL workflow status (new in PR #47)
- Coveralls coverage badge (matches the "Coverage is published to
  Coveralls" line later in the README)
- MSRV 1.82 (bumped in PR #26)
- Security Policy badge linking to GH security policy (SECURITY.md
  landed in PR #47)

Also pinned the CI badge to `?branch=main` so a feature-branch failure
doesn't flap the README.

## Code Signing section

Removed the false "tracked in issue: Code Signing" claim — no such
issue exists. Replaced with a "file one if you need this prioritized"
note so readers know it's not actively scheduled.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build Build system changes ci CI/CD changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant