From 6aa03cca637d35cb179b4b6234997a1168ad1841 Mon Sep 17 00:00:00 2001 From: DuProcess <273172371+DuProcess@users.noreply.github.com> Date: Fri, 10 Jul 2026 23:07:50 -0400 Subject: [PATCH] Make package artifact checks deterministic --- Makefile | 4 +++- scripts/verify-release-artifacts.sh | 11 +++++++---- tests/release_scripts.rs | 23 +++++++++++++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 6f1cdaa..8011973 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,9 @@ persistence-check: package-check: $(MAKE) package-release-linux $(MAKE) package-release-windows - sh scripts/verify-release-artifacts.sh + sh scripts/verify-release-artifacts.sh \ + target/dosh-release/dosh-linux-x86_64.tar.gz \ + target/dosh-release/dosh-windows-x86_64.zip install: sh install.sh --from-current diff --git a/scripts/verify-release-artifacts.sh b/scripts/verify-release-artifacts.sh index 1e7201d..7d53fa3 100644 --- a/scripts/verify-release-artifacts.sh +++ b/scripts/verify-release-artifacts.sh @@ -22,11 +22,14 @@ artifact_version() { esac } +if [ "$#" -gt 0 ]; then + artifacts="$*" +else + artifacts="$out_dir/dosh-linux-x86_64.tar.gz $out_dir/dosh-macos-aarch64.tar.gz $out_dir/dosh-windows-x86_64.zip" +fi + failed=0 -for artifact in \ - "$out_dir/dosh-linux-x86_64.tar.gz" \ - "$out_dir/dosh-macos-aarch64.tar.gz" \ - "$out_dir/dosh-windows-x86_64.zip"; do +for artifact in $artifacts; do if [ ! -f "$artifact" ]; then echo "missing release artifact: $artifact" >&2 failed=1 diff --git a/tests/release_scripts.rs b/tests/release_scripts.rs index 7239807..9a312a2 100644 --- a/tests/release_scripts.rs +++ b/tests/release_scripts.rs @@ -19,6 +19,29 @@ fn release_scripts_skip_stale_artifacts_when_auto_discovering() { assert!(publish.contains("actual=\"$(artifact_version \"$artifact\" || true)\"")); } +#[test] +fn package_check_verifies_only_artifacts_it_builds() { + let makefile = include_str!("../Makefile"); + let verify = include_str!("../scripts/verify-release-artifacts.sh"); + assert!( + verify.contains("if [ \"$#\" -gt 0 ]; then"), + "release verifier must accept an explicit artifact list" + ); + let package_check = makefile + .split("package-check:") + .nth(1) + .and_then(|tail| tail.split("\ninstall:").next()) + .expect("package-check target"); + assert!(package_check.contains("package-release-linux")); + assert!(package_check.contains("package-release-windows")); + assert!(package_check.contains("dosh-linux-x86_64.tar.gz")); + assert!(package_check.contains("dosh-windows-x86_64.zip")); + assert!( + !package_check.contains("dosh-macos-aarch64.tar.gz"), + "Linux package-check does not build macOS artifacts, so it must not depend on one" + ); +} + #[test] fn systemd_service_does_not_sandbox_remote_shells() { let service = include_str!("../packaging/systemd/dosh-server.service");