From 5d0410e6083d14bc28200e6e73804c3c2ed436a7 Mon Sep 17 00:00:00 2001 From: Jolyon Suthers <201621+fenrick@users.noreply.github.com> Date: Wed, 9 Sep 2026 23:54:58 +1000 Subject: [PATCH] fix: drop Linux ARM64, which was never a requested target The requested targets are Windows x64, Windows ARM64, macOS ARM64 and Linux x64. Linux ARM64 was added on top of those, and it is what caused v1.1.0 to publish an incomplete set of assets: the cross compiler was installed without a target C library, so both ARM64 jobs failed to link. Removes the target from the release matrix, returns Debian and RPM packaging to a single x86-64 job, and takes the row back out of the README install table. No asset for it was ever published, so nothing that anyone could have installed goes away. Keeps the one useful thing that came out of the failure: the CI targets job now runs `cargo build --release` rather than `cargo check`. `check` does not link, so a link error could not surface until a release ran. Building the four real targets on every pull request closes that gap whatever the target list is. Also records the pull-request title convention that produced a duplicated 1.1.0 changelog entry: with a merge commit, prefix the title or the commits, not both. --- .github/workflows/ci.yml | 12 +++++------- .github/workflows/release.yml | 36 ++++------------------------------- CONTRIBUTING.md | 5 +++++ README.md | 3 --- 4 files changed, 14 insertions(+), 42 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d921982..2657bce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,17 +37,17 @@ jobs: - name: Tests run: cargo test --all-features - # The release workflow cross-compiles four targets. Proving they still - # compile here means a release never fails on a platform nobody built. + # The release workflow builds these four targets. Building — not merely + # checking — is the point: `cargo check` does not link, so a link error stays + # invisible until a release runs, which is how v1.1.0 shipped incomplete. targets: - name: Compiles for ${{ matrix.target }} + name: Builds for ${{ matrix.target }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - { target: x86_64-unknown-linux-gnu, os: ubuntu-latest } - - { target: aarch64-unknown-linux-gnu, os: ubuntu-latest } - { target: aarch64-apple-darwin, os: macos-latest } - { target: x86_64-pc-windows-msvc, os: windows-latest } - { target: aarch64-pc-windows-msvc, os: windows-latest } @@ -62,9 +62,7 @@ jobs: with: key: ${{ matrix.target }} - # `check` does not link, so no cross-linker is needed here. Linking is - # exercised by the release workflow. - - run: cargo check --all-targets --target ${{ matrix.target }} + - run: cargo build --release --target ${{ matrix.target }} # Guard the promise the README makes: an ordinary export carries no personal # data, and no real document is ever committed. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 942fd82..421ef99 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,16 +42,11 @@ jobs: runs-on: ${{ matrix.os }} permissions: contents: write - # Only consulted when building the matching target, so it is harmless on - # the other legs. - env: - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc strategy: fail-fast: false matrix: include: - { target: x86_64-unknown-linux-gnu, os: ubuntu-latest } - - { target: aarch64-unknown-linux-gnu, os: ubuntu-latest, apt: gcc-aarch64-linux-gnu } - { target: aarch64-apple-darwin, os: macos-latest } - { target: x86_64-pc-windows-msvc, os: windows-latest } - { target: aarch64-pc-windows-msvc, os: windows-latest } @@ -64,12 +59,6 @@ jobs: with: targets: ${{ matrix.target }} - - name: Install cross-linker - if: matrix.apt != '' - run: | - sudo apt-get update - sudo apt-get install --yes --no-install-recommends ${{ matrix.apt }} - - name: Keep runner paths out of the binary shell: bash run: | @@ -99,35 +88,18 @@ jobs: # Debian and RPM packages, for the distributions that want one. linux-packages: - name: Linux packages (${{ matrix.arch }}) + name: Linux packages needs: release-please if: needs.release-please.outputs.released == 'true' runs-on: ubuntu-latest permissions: contents: write - env: - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - strategy: - # One architecture failing must not cost the release the other's packages. - fail-fast: false - matrix: - include: - - { target: x86_64-unknown-linux-gnu, arch: amd64 } - - { target: aarch64-unknown-linux-gnu, arch: arm64, apt: gcc-aarch64-linux-gnu } steps: - uses: actions/checkout@v7 with: ref: ${{ needs.release-please.outputs.tag }} - uses: dtolnay/rust-toolchain@stable - with: - targets: ${{ matrix.target }} - - - name: Install cross-linker - if: matrix.apt != '' - run: | - sudo apt-get update - sudo apt-get install --yes --no-install-recommends ${{ matrix.apt }} - name: Keep runner paths out of the binary shell: bash @@ -147,12 +119,12 @@ jobs: run: cargo install --locked cargo-deb cargo-generate-rpm - name: Build - run: cargo build --release --target ${{ matrix.target }} + run: cargo build --release - name: Build .deb and .rpm run: | - cargo deb --no-build --target ${{ matrix.target }} --output dist/ - cargo generate-rpm --target ${{ matrix.target }} --output dist/ + cargo deb --no-build --output dist/ + cargo generate-rpm --output dist/ - name: Checksums working-directory: dist diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 61af1f8..53eab61 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -141,6 +141,11 @@ hand. 5. The release workflow then builds four targets, and attaches an archive plus a SHA-256 checksum for each, along with `.deb` and `.rpm` packages. +When a pull request is merged with a merge commit, the merge commit carries the +pull request *title*. Prefix **either** the title **or** the commits inside it, +never both, or the change is counted twice and appears twice in the changelog. +Splitting work into typed commits means giving the pull request a plain title. + To release a specific version regardless of what the commits imply, put a footer on a commit: diff --git a/README.md b/README.md index 20d6eaf..6a60078 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,6 @@ plus Debian and RPM packages. See | Platform | Asset | | --- | --- | | Linux x86-64 | `loop-extract-vX.Y.Z-x86_64-unknown-linux-gnu.tar.gz`, `.deb`, `.rpm` | -| Linux ARM64 | `loop-extract-vX.Y.Z-aarch64-unknown-linux-gnu.tar.gz`, `.deb`, `.rpm` | | macOS Apple Silicon | `loop-extract-vX.Y.Z-aarch64-apple-darwin.tar.gz` | | Windows x86-64 | `loop-extract-vX.Y.Z-x86_64-pc-windows-msvc.zip` | | Windows ARM64 | `loop-extract-vX.Y.Z-aarch64-pc-windows-msvc.zip` | @@ -50,8 +49,6 @@ sudo dpkg -i loop-extract_X.Y.Z-1_amd64.deb # Debian, Ubuntu sudo rpm -i loop-extract-X.Y.Z-1.x86_64.rpm # Fedora, RHEL, openSUSE ``` -Replace `amd64` with `arm64`, or `x86_64` with `aarch64`, on ARM hardware. - Or extract the tarball and put the binary on your `PATH`. ### macOS