From d66a01e7dabb776f71f2c25f14120af9359a1031 Mon Sep 17 00:00:00 2001 From: Silas Brack Date: Sun, 8 Mar 2026 13:54:42 +0100 Subject: [PATCH] Add support for more architectures --- .github/workflows/ci.yml | 75 ++++++++++++++++++++++++++++++++++------ flake.nix | 11 ++++-- 2 files changed, 73 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06f7766..83169c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,29 +8,82 @@ permissions: contents: write jobs: - build: - name: Build packages - runs-on: ubuntu-latest + build-nix: + name: Build ${{ matrix.target }} + runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - - system: x86_64-linux + - target: x86_64-unknown-linux-gnu + runner: ubuntu-latest + system: x86_64-linux + package: default + - target: x86_64-unknown-linux-musl + runner: ubuntu-latest + system: x86_64-linux + package: x86_64-linux-musl + - target: aarch64-unknown-linux-gnu + runner: ubuntu-latest + system: x86_64-linux + package: aarch64-linux + - target: x86_64-apple-darwin + runner: macos-13 + system: x86_64-darwin + package: default + - target: aarch64-apple-darwin + runner: macos-latest + system: aarch64-darwin + package: default steps: - uses: actions/checkout@v4 - uses: DeterminateSystems/nix-installer-action@main - # - uses: DeterminateSystems/magic-nix-cache-action@main - - run: nix --print-build-logs build .#packages.$SYSTEM.default - env: - SYSTEM: ${{ matrix.system }} + - run: nix --print-build-logs build .#packages.${{ matrix.system }}.${{ matrix.package }} - name: Prepare release artifact if: startsWith(github.ref, 'refs/tags/') - run: cp result/bin/mkv mkv-${{ matrix.system }} + run: cp result/bin/mkv mkv-${{ matrix.target }} + + - name: Upload artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v4 + with: + name: mkv-${{ matrix.target }} + path: mkv-${{ matrix.target }} + + build-windows: + name: Build x86_64-pc-windows-msvc + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + + - run: cargo build --release + + - name: Prepare release artifact + if: startsWith(github.ref, 'refs/tags/') + run: cp target/release/mkv.exe mkv-x86_64-pc-windows-msvc.exe + + - name: Upload artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v4 + with: + name: mkv-x86_64-pc-windows-msvc + path: mkv-x86_64-pc-windows-msvc.exe + + release: + name: Create release + needs: [build-nix, build-windows] + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') + steps: + - uses: actions/download-artifact@v4 + with: + path: artifacts + merge-multiple: true - name: Create release - if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: - files: mkv-${{ matrix.system }} + files: artifacts/* diff --git a/flake.nix b/flake.nix index 3195bf6..25667d5 100644 --- a/flake.nix +++ b/flake.nix @@ -12,14 +12,17 @@ darwinBuildInputs = pkgs.lib.optionals pkgs.stdenv.hostPlatform.isDarwin [ pkgs.libiconv ]; - mkv = pkgs.rustPlatform.buildRustPackage { + mkMkv = pkgs': pkgs'.rustPlatform.buildRustPackage { pname = "mkv"; version = "0.1.0"; cargoLock.lockFile = ./Cargo.lock; src = pkgs.lib.cleanSource ./.; - buildInputs = darwinBuildInputs; + buildInputs = pkgs'.lib.optionals pkgs'.stdenv.hostPlatform.isDarwin [ + pkgs'.libiconv + ]; doCheck = false; }; + mkv = mkMkv pkgs; in { devShells.default = pkgs.mkShell { @@ -33,5 +36,9 @@ packages.default = mkv; checks.default = mkv.overrideAttrs { doCheck = true; }; } + // pkgs.lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { + packages.x86_64-linux-musl = mkMkv pkgs.pkgsCross.musl64; + packages.aarch64-linux = mkMkv pkgs.pkgsCross.aarch64-multiplatform; + } ); }