From 02a70872414d13577fda38968e7a2d3f9054459c Mon Sep 17 00:00:00 2001 From: DuProcess <273172371+DuProcess@users.noreply.github.com> Date: Thu, 16 Jul 2026 19:54:43 -0400 Subject: [PATCH] Require Windows ARM64 release artifacts --- .github/workflows/ci.yml | 25 +++++++++++++++++++++++++ scripts/package-release.sh | 21 +++++++++++++++------ scripts/upload-gitea-release.sh | 3 ++- scripts/verify-release-artifacts.sh | 2 +- tests/release_scripts.rs | 22 +++++++++++++++++++++- 5 files changed, 64 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 02da1f9..9287b8f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,18 +72,43 @@ jobs: include: - os: ubuntu-latest name: linux-x86_64 + package_os: "" + package_arch: "" + rust_target: "" - os: macos-14 name: macos-aarch64 + package_os: "" + package_arch: "" + rust_target: "" - os: macos-13 name: macos-x86_64 + package_os: "" + package_arch: "" + rust_target: "" - os: windows-latest name: windows-x86_64 + package_os: "" + package_arch: "" + rust_target: "" + - os: windows-latest + name: windows-aarch64 + package_os: windows + package_arch: aarch64 + rust_target: aarch64-pc-windows-msvc runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable + - name: Install Rust target + if: matrix.rust_target != '' + shell: bash + run: rustup target add '${{ matrix.rust_target }}' - name: Package release shell: bash + env: + DOSH_PACKAGE_OS: ${{ matrix.package_os }} + DOSH_PACKAGE_ARCH: ${{ matrix.package_arch }} + DOSH_PACKAGE_TARGET: ${{ matrix.rust_target }} run: sh scripts/package-release.sh - uses: actions/upload-artifact@v4 with: diff --git a/scripts/package-release.sh b/scripts/package-release.sh index 1f77e3b..443c9dd 100755 --- a/scripts/package-release.sh +++ b/scripts/package-release.sh @@ -27,14 +27,23 @@ normalize_arch() { } host_os="$(normalize_os)" +host_arch="$(normalize_arch)" os="${DOSH_PACKAGE_OS:-$host_os}" -arch="${DOSH_PACKAGE_ARCH:-$(normalize_arch)}" +arch="${DOSH_PACKAGE_ARCH:-$host_arch}" target="${DOSH_PACKAGE_TARGET:-}" -if [ -z "$target" ] && [ "$os" = "windows" ] && [ "$host_os" != "windows" ]; then - case "$arch" in - x86_64) target="x86_64-pc-windows-gnu" ;; - *) echo "set DOSH_PACKAGE_TARGET for windows/$arch" >&2; exit 1 ;; - esac +if [ -z "$target" ] && [ "$os" = "windows" ]; then + if [ "$host_os" != "windows" ]; then + case "$arch" in + x86_64) target="x86_64-pc-windows-gnu" ;; + *) echo "set DOSH_PACKAGE_TARGET for windows/$arch" >&2; exit 1 ;; + esac + elif [ "$arch" != "$host_arch" ]; then + case "$arch" in + x86_64) target="x86_64-pc-windows-msvc" ;; + aarch64) target="aarch64-pc-windows-msvc" ;; + *) echo "set DOSH_PACKAGE_TARGET for windows/$arch" >&2; exit 1 ;; + esac + fi fi if [ "$os" = "windows" ]; then artifact="dosh-$os-$arch.zip" diff --git a/scripts/upload-gitea-release.sh b/scripts/upload-gitea-release.sh index 8a10c67..6435280 100755 --- a/scripts/upload-gitea-release.sh +++ b/scripts/upload-gitea-release.sh @@ -94,7 +94,8 @@ require_complete_release_artifacts() { dosh-linux-x86_64.tar.gz \ dosh-macos-aarch64.tar.gz \ dosh-macos-x86_64.tar.gz \ - dosh-windows-x86_64.zip; do + dosh-windows-x86_64.zip \ + dosh-windows-aarch64.zip; do found=0 checksum_found=0 for artifact in "$@"; do diff --git a/scripts/verify-release-artifacts.sh b/scripts/verify-release-artifacts.sh index 3e7c845..ac2b3fa 100644 --- a/scripts/verify-release-artifacts.sh +++ b/scripts/verify-release-artifacts.sh @@ -89,7 +89,7 @@ verify_checksum() { 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-macos-x86_64.tar.gz $out_dir/dosh-windows-x86_64.zip" + artifacts="$out_dir/dosh-linux-x86_64.tar.gz $out_dir/dosh-macos-aarch64.tar.gz $out_dir/dosh-macos-x86_64.tar.gz $out_dir/dosh-windows-x86_64.zip $out_dir/dosh-windows-aarch64.zip" fi failed=0 diff --git a/tests/release_scripts.rs b/tests/release_scripts.rs index 9a69c94..8ae15e3 100644 --- a/tests/release_scripts.rs +++ b/tests/release_scripts.rs @@ -30,6 +30,7 @@ fn release_upload_refuses_partial_platform_sets_by_default() { "dosh-macos-aarch64.tar.gz", "dosh-macos-x86_64.tar.gz", "dosh-windows-x86_64.zip", + "dosh-windows-aarch64.zip", ] { assert!( upload.contains(name), @@ -236,12 +237,22 @@ fn package_check_verifies_only_artifacts_it_builds() { } #[test] -fn complete_release_verifier_requires_both_macos_architectures() { +fn complete_release_verifier_requires_all_desktop_architectures() { let verify = include_str!("../scripts/verify-release-artifacts.sh"); assert!(verify.contains("dosh-linux-x86_64.tar.gz")); assert!(verify.contains("dosh-macos-aarch64.tar.gz")); assert!(verify.contains("dosh-macos-x86_64.tar.gz")); assert!(verify.contains("dosh-windows-x86_64.zip")); + assert!(verify.contains("dosh-windows-aarch64.zip")); +} + +#[test] +fn package_release_workflow_builds_both_windows_architectures() { + let ci = include_str!("../.github/workflows/ci.yml"); + assert!(ci.contains("name: windows-x86_64")); + assert!(ci.contains("name: windows-aarch64")); + assert!(ci.contains("DOSH_PACKAGE_ARCH: ${{ matrix.package_arch }}")); + assert!(ci.contains("aarch64-pc-windows-msvc")); } #[test] @@ -284,6 +295,15 @@ fn package_release_stamps_git_build_info() { assert!(build.contains("cargo:rerun-if-env-changed=DOSH_BUILD_GIT_HASH")); } +#[test] +fn package_release_maps_windows_cross_arch_targets() { + let package = include_str!("../scripts/package-release.sh"); + assert!(package.contains("host_arch=\"$(normalize_arch)\"")); + assert!(package.contains("elif [ \"$arch\" != \"$host_arch\" ]; then")); + assert!(package.contains("x86_64-pc-windows-msvc")); + assert!(package.contains("aarch64-pc-windows-msvc")); +} + #[test] fn systemd_service_does_not_sandbox_remote_shells() { let service = include_str!("../packaging/systemd/dosh-server.service");