From 852022e334ad9f4da8894c5f5087b968892b0124 Mon Sep 17 00:00:00 2001 From: Ryan Daigle Date: Thu, 22 Jan 2026 09:18:35 -0500 Subject: [PATCH 1/2] Switch Linux builds to musl for better portability Use musl instead of glibc for Linux binaries, which provides statically-linked binaries that work across all Linux distributions regardless of glibc version. Also adds cross for ARM builds. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/ci.yml | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f581fc0..c61b406 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -108,9 +108,9 @@ jobs: strategy: matrix: include: - - target: x86_64-unknown-linux-gnu + - target: x86_64-unknown-linux-musl os: ubuntu-latest - - target: aarch64-unknown-linux-gnu + - target: aarch64-unknown-linux-musl os: ubuntu-latest - target: x86_64-apple-darwin os: macos-latest @@ -130,24 +130,26 @@ jobs: with: targets: ${{ matrix.target }} - - name: Install cross-compilation tools (Linux ARM) - if: matrix.target == 'aarch64-unknown-linux-gnu' - run: | - sudo apt-get update - sudo apt-get install -y gcc-aarch64-linux-gnu + - name: Install cross (Linux) + if: runner.os == 'Linux' + uses: taiki-e/install-action@cross - name: Cache cargo uses: Swatinem/rust-cache@v2 with: key: ${{ matrix.target }} - - name: Build - shell: bash - run: | - if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ]; then - export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc - fi - cargo build --release --target ${{ matrix.target }} + - name: Build (Linux) + if: runner.os == 'Linux' + run: cross build --release --target ${{ matrix.target }} + + - name: Build (macOS) + if: runner.os == 'macOS' + run: cargo build --release --target ${{ matrix.target }} + + - name: Build (Windows) + if: runner.os == 'Windows' + run: cargo build --release --target ${{ matrix.target }} - name: Prepare binary (Unix) if: runner.os != 'Windows' @@ -159,6 +161,12 @@ jobs: run: | cp target/${{ matrix.target }}/release/migrate.exe migrate-${{ matrix.target }}.exe + - name: Test binary compatibility (Linux) + if: runner.os == 'Linux' && matrix.target == 'x86_64-unknown-linux-musl' + run: | + # Verify the binary runs on an older system (Debian Bullseye has GLIBC 2.31) + docker run --rm -v $PWD:/app debian:bullseye /app/migrate-${{ matrix.target }} --version + - name: Upload to release uses: softprops/action-gh-release@v2 with: From efefac565f9c2e513b042366bd531e48895887f9 Mon Sep 17 00:00:00 2001 From: Ryan Daigle Date: Thu, 22 Jan 2026 09:59:32 -0500 Subject: [PATCH 2/2] Bump version to 0.3.1 Co-Authored-By: Claude Opus 4.5 --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e9d1d31..78c4478 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -285,7 +285,7 @@ checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "migrate" -version = "0.3.0" +version = "0.3.1" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index cdf92fa..f200cfd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "migrate" -version = "0.3.0" +version = "0.3.1" edition = "2021" description = "Generic file migration tool for applying ordered transformations to a project directory" license = "MIT"