From 88cb43a760e1320557bc4ff7a2625c817b3e453f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Forment?= Date: Sun, 1 Mar 2026 23:18:08 +0100 Subject: [PATCH] Fix: modularize CI workflows --- .github/workflows/assemble-macos.yml | 129 ++++++++++ .github/workflows/build-cross.yml | 49 ++++ .github/workflows/build-linux.yml | 124 ++++++++++ .github/workflows/build-macos.yml | 120 +++++++++ .github/workflows/build-windows.yml | 115 +++++++++ .github/workflows/ci.yml | 76 ++---- .github/workflows/msi.yml | 32 --- .github/workflows/release.yml | 351 ++------------------------- 8 files changed, 576 insertions(+), 420 deletions(-) create mode 100644 .github/workflows/assemble-macos.yml create mode 100644 .github/workflows/build-cross.yml create mode 100644 .github/workflows/build-linux.yml create mode 100644 .github/workflows/build-macos.yml create mode 100644 .github/workflows/build-windows.yml delete mode 100644 .github/workflows/msi.yml diff --git a/.github/workflows/assemble-macos.yml b/.github/workflows/assemble-macos.yml new file mode 100644 index 0000000..a729637 --- /dev/null +++ b/.github/workflows/assemble-macos.yml @@ -0,0 +1,129 @@ +name: Assemble macOS Universal + +on: + workflow_call: + +jobs: + assemble: + runs-on: macos-14 + timeout-minutes: 10 + + steps: + - name: Download macOS artifacts + uses: actions/download-artifact@v4 + with: + pattern: cagire-macos-* + path: artifacts + + - name: Create universal CLI binary + run: | + lipo -create \ + artifacts/cagire-macos-x86_64/cagire \ + artifacts/cagire-macos-aarch64/cagire \ + -output cagire + chmod +x cagire + lipo -info cagire + + - name: Create universal app bundle + run: | + cd artifacts/cagire-macos-aarch64-desktop + unzip Cagire.app.zip + cd ../cagire-macos-x86_64-desktop + unzip Cagire.app.zip + cd ../.. + cp -R artifacts/cagire-macos-aarch64-desktop/Cagire.app Cagire.app + lipo -create \ + artifacts/cagire-macos-x86_64-desktop/Cagire.app/Contents/MacOS/cagire-desktop \ + artifacts/cagire-macos-aarch64-desktop/Cagire.app/Contents/MacOS/cagire-desktop \ + -output Cagire.app/Contents/MacOS/cagire-desktop + lipo -info Cagire.app/Contents/MacOS/cagire-desktop + zip -r Cagire.app.zip Cagire.app + + - name: Create universal CLAP plugin + run: | + mkdir -p cagire-plugins.clap/Contents/MacOS + cp artifacts/cagire-macos-aarch64-clap/cagire-plugins.clap/Contents/Info.plist \ + cagire-plugins.clap/Contents/ 2>/dev/null || true + cp artifacts/cagire-macos-aarch64-clap/cagire-plugins.clap/Contents/PkgInfo \ + cagire-plugins.clap/Contents/ 2>/dev/null || true + lipo -create \ + artifacts/cagire-macos-x86_64-clap/cagire-plugins.clap/Contents/MacOS/cagire-plugins \ + artifacts/cagire-macos-aarch64-clap/cagire-plugins.clap/Contents/MacOS/cagire-plugins \ + -output cagire-plugins.clap/Contents/MacOS/cagire-plugins + lipo -info cagire-plugins.clap/Contents/MacOS/cagire-plugins + + - name: Create universal VST3 plugin + run: | + mkdir -p cagire-plugins.vst3/Contents/MacOS + cp -R artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/Info.plist \ + cagire-plugins.vst3/Contents/ 2>/dev/null || true + cp artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/PkgInfo \ + cagire-plugins.vst3/Contents/ 2>/dev/null || true + cp -R artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/Resources \ + cagire-plugins.vst3/Contents/ 2>/dev/null || true + lipo -create \ + artifacts/cagire-macos-x86_64-vst3/cagire-plugins.vst3/Contents/MacOS/cagire-plugins \ + artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/MacOS/cagire-plugins \ + -output cagire-plugins.vst3/Contents/MacOS/cagire-plugins + lipo -info cagire-plugins.vst3/Contents/MacOS/cagire-plugins + + - uses: actions/checkout@v4 + with: + sparse-checkout: | + assets/DMG-README.txt + scripts/make-dmg.sh + clean: false + + - name: Create DMG + run: | + chmod +x scripts/make-dmg.sh + scripts/make-dmg.sh Cagire.app . + + - name: Build .pkg installer + run: | + VERSION="${GITHUB_REF_NAME#v}" + mkdir -p pkg-root/Applications pkg-root/usr/local/bin + cp -R Cagire.app pkg-root/Applications/ + cp cagire pkg-root/usr/local/bin/ + pkgbuild --analyze --root pkg-root component.plist + plutil -replace BundleIsRelocatable -bool NO component.plist + pkgbuild --root pkg-root --identifier com.sova.cagire \ + --version "$VERSION" --install-location / \ + --component-plist component.plist \ + "Cagire-${VERSION}-universal.pkg" + + - name: Upload universal CLI + uses: actions/upload-artifact@v4 + with: + name: cagire-macos-universal + path: cagire + + - name: Upload universal app bundle + uses: actions/upload-artifact@v4 + with: + name: cagire-macos-universal-desktop + path: Cagire.app.zip + + - name: Upload universal CLAP plugin + uses: actions/upload-artifact@v4 + with: + name: cagire-macos-universal-clap + path: cagire-plugins.clap + + - name: Upload universal VST3 plugin + uses: actions/upload-artifact@v4 + with: + name: cagire-macos-universal-vst3 + path: cagire-plugins.vst3 + + - name: Upload DMG + uses: actions/upload-artifact@v4 + with: + name: cagire-macos-universal-dmg + path: Cagire-*.dmg + + - name: Upload .pkg installer + uses: actions/upload-artifact@v4 + with: + name: cagire-macos-universal-pkg + path: Cagire-*-universal.pkg diff --git a/.github/workflows/build-cross.yml b/.github/workflows/build-cross.yml new file mode 100644 index 0000000..436ab96 --- /dev/null +++ b/.github/workflows/build-cross.yml @@ -0,0 +1,49 @@ +name: Build Cross (Linux ARM64) + +on: + workflow_call: + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 45 + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: aarch64-unknown-linux-gnu + + - name: Cache Rust dependencies + uses: Swatinem/rust-cache@v2 + with: + key: aarch64-unknown-linux-gnu + + - name: Install cross + run: cargo install cross --git https://github.com/cross-rs/cross + + - name: Build + run: cross build --release --target aarch64-unknown-linux-gnu + + - name: Build desktop + run: cross build --release --features desktop --bin cagire-desktop --target aarch64-unknown-linux-gnu + + - name: Upload CLI artifact + uses: actions/upload-artifact@v4 + with: + name: cagire-linux-aarch64 + path: target/aarch64-unknown-linux-gnu/release/cagire + + - name: Upload desktop artifact + uses: actions/upload-artifact@v4 + with: + name: cagire-linux-aarch64-desktop + path: target/aarch64-unknown-linux-gnu/release/cagire-desktop diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml new file mode 100644 index 0000000..b91cb7e --- /dev/null +++ b/.github/workflows/build-linux.yml @@ -0,0 +1,124 @@ +name: Build Linux + +on: + workflow_call: + inputs: + run-tests: + type: boolean + default: false + run-clippy: + type: boolean + default: false + build-packages: + type: boolean + default: false + workflow_dispatch: + inputs: + run-tests: + type: boolean + default: true + run-clippy: + type: boolean + default: true + build-packages: + type: boolean + default: false + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: x86_64-unknown-linux-gnu + components: clippy + + - name: Cache Rust dependencies + uses: Swatinem/rust-cache@v2 + with: + key: x86_64-unknown-linux-gnu + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential cmake pkg-config libasound2-dev libclang-dev libjack-dev \ + libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libgl1-mesa-dev \ + libx11-dev libx11-xcb-dev libxcursor-dev libxrandr-dev libxi-dev libwayland-dev + + - name: Build + run: cargo build --release --target x86_64-unknown-linux-gnu + + - name: Build desktop + run: cargo build --release --features desktop --bin cagire-desktop --target x86_64-unknown-linux-gnu + + - name: Test + if: inputs.run-tests + run: cargo test --target x86_64-unknown-linux-gnu + + - name: Clippy + if: inputs.run-clippy + run: cargo clippy --target x86_64-unknown-linux-gnu -- -D warnings + + - name: Install cargo-bundle + if: inputs.build-packages + run: cargo install cargo-bundle + + - name: Bundle desktop app + if: inputs.build-packages + run: cargo bundle --release --features desktop --bin cagire-desktop --target x86_64-unknown-linux-gnu + + - name: Build AppImages + if: inputs.build-packages + run: | + mkdir -p target/releases + scripts/make-appimage.sh target/x86_64-unknown-linux-gnu/release/cagire x86_64 target/releases + scripts/make-appimage.sh target/x86_64-unknown-linux-gnu/release/cagire-desktop x86_64 target/releases + + - name: Bundle CLAP plugin + if: inputs.build-packages + run: cargo xtask bundle cagire-plugins --release --target x86_64-unknown-linux-gnu + + - name: Upload CLI artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-linux-x86_64 + path: target/x86_64-unknown-linux-gnu/release/cagire + + - name: Upload desktop artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-linux-x86_64-desktop + path: target/x86_64-unknown-linux-gnu/release/bundle/deb/*.deb + + - name: Upload AppImage artifacts + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-linux-x86_64-appimage + path: target/releases/*.AppImage + + - name: Upload CLAP artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-linux-x86_64-clap + path: target/bundled/cagire-plugins.clap + + - name: Upload VST3 artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-linux-x86_64-vst3 + path: target/bundled/cagire-plugins.vst3 diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml new file mode 100644 index 0000000..2a68dcc --- /dev/null +++ b/.github/workflows/build-macos.yml @@ -0,0 +1,120 @@ +name: Build macOS + +on: + workflow_call: + inputs: + run-tests: + type: boolean + default: false + run-clippy: + type: boolean + default: false + build-packages: + type: boolean + default: false + matrix: + type: string + default: '[{"os":"macos-14","target":"aarch64-apple-darwin","artifact":"cagire-macos-aarch64"}]' + workflow_dispatch: + inputs: + run-tests: + type: boolean + default: true + run-clippy: + type: boolean + default: true + build-packages: + type: boolean + default: false + matrix: + type: string + default: '[{"os":"macos-14","target":"aarch64-apple-darwin","artifact":"cagire-macos-aarch64"}]' + +env: + CARGO_TERM_COLOR: always + MACOSX_DEPLOYMENT_TARGET: "12.0" + +jobs: + build: + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix) }} + + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + components: clippy + + - name: Cache Rust dependencies + uses: Swatinem/rust-cache@v2 + with: + key: ${{ matrix.target }} + + - name: Install dependencies + run: brew list cmake &>/dev/null || brew install cmake + + - name: Build + run: cargo build --release --target ${{ matrix.target }} + + - name: Build desktop + run: cargo build --release --features desktop --bin cagire-desktop --target ${{ matrix.target }} + + - name: Test + if: inputs.run-tests + run: cargo test --target ${{ matrix.target }} + + - name: Clippy + if: inputs.run-clippy + run: cargo clippy --target ${{ matrix.target }} -- -D warnings + + - name: Bundle desktop app + if: inputs.build-packages + run: scripts/make-app-bundle.sh ${{ matrix.target }} + + - name: Bundle CLAP plugin + if: inputs.build-packages + run: cargo xtask bundle cagire-plugins --release --target ${{ matrix.target }} + + - name: Zip macOS app bundle + if: inputs.build-packages + run: | + cd target/${{ matrix.target }}/release/bundle/osx + zip -r Cagire.app.zip Cagire.app + + - name: Upload CLI artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.artifact }} + path: target/${{ matrix.target }}/release/cagire + + - name: Upload desktop artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.artifact }}-desktop + path: target/${{ matrix.target }}/release/bundle/osx/Cagire.app.zip + + - name: Upload CLAP artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.artifact }}-clap + path: target/bundled/cagire-plugins.clap + + - name: Upload VST3 artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.artifact }}-vst3 + path: target/bundled/cagire-plugins.vst3 diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml new file mode 100644 index 0000000..20c1ef7 --- /dev/null +++ b/.github/workflows/build-windows.yml @@ -0,0 +1,115 @@ +name: Build Windows + +on: + workflow_call: + inputs: + run-tests: + type: boolean + default: false + run-clippy: + type: boolean + default: false + build-packages: + type: boolean + default: false + workflow_dispatch: + inputs: + run-tests: + type: boolean + default: true + run-clippy: + type: boolean + default: true + build-packages: + type: boolean + default: true + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + runs-on: windows-latest + timeout-minutes: 30 + + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: x86_64-pc-windows-msvc + components: clippy + + - name: Cache Rust dependencies + uses: Swatinem/rust-cache@v2 + with: + key: x86_64-pc-windows-msvc + + - name: Install dependencies + run: | + choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' + echo "C:\Program Files\CMake\bin" >> $env:GITHUB_PATH + + - name: Build + run: cargo build --release --target x86_64-pc-windows-msvc + + - name: Build desktop + run: cargo build --release --features desktop --bin cagire-desktop --target x86_64-pc-windows-msvc + + - name: Test + if: inputs.run-tests + run: cargo test --target x86_64-pc-windows-msvc + + - name: Clippy + if: inputs.run-clippy + run: cargo clippy --target x86_64-pc-windows-msvc -- -D warnings + + - name: Bundle CLAP plugin + if: inputs.build-packages + run: cargo xtask bundle cagire-plugins --release --target x86_64-pc-windows-msvc + + - name: Install cargo-wix + if: inputs.build-packages + run: cargo install cargo-wix + + - name: Build MSI installer + if: inputs.build-packages + run: cargo wix --no-build --nocapture --package cagire -C -arch -C x64 + + - name: Upload CLI artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-windows-x86_64 + path: target/x86_64-pc-windows-msvc/release/cagire.exe + + - name: Upload desktop artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-windows-x86_64-desktop + path: target/x86_64-pc-windows-msvc/release/cagire-desktop.exe + + - name: Upload MSI artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-windows-x86_64-msi + path: target/wix/*.msi + + - name: Upload CLAP artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-windows-x86_64-clap + path: target/bundled/cagire-plugins.clap + + - name: Upload VST3 artifact + if: inputs.build-packages + uses: actions/upload-artifact@v4 + with: + name: cagire-windows-x86_64-vst3 + path: target/bundled/cagire-plugins.vst3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ccdddf..0201cc0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,71 +4,25 @@ on: push: tags: ['v*'] -env: - CARGO_TERM_COLOR: always - concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: - check: - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - target: x86_64-unknown-linux-gnu - - os: macos-14 - target: aarch64-apple-darwin - - os: windows-latest - target: x86_64-pc-windows-msvc + linux: + uses: ./.github/workflows/build-linux.yml + with: + run-tests: true + run-clippy: true - runs-on: ${{ matrix.os }} - timeout-minutes: 20 + macos: + uses: ./.github/workflows/build-macos.yml + with: + run-tests: true + run-clippy: true - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: ${{ matrix.target }} - components: clippy - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - with: - key: ${{ matrix.target }} - - - name: Install dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo apt-get update - sudo apt-get install -y build-essential cmake pkg-config libasound2-dev libclang-dev libjack-dev \ - libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libgl1-mesa-dev \ - libx11-dev libx11-xcb-dev libxcursor-dev libxrandr-dev libxi-dev libwayland-dev - - - name: Install dependencies (macOS) - if: runner.os == 'macOS' - run: brew list cmake &>/dev/null || brew install cmake - - - name: Install dependencies (Windows) - if: runner.os == 'Windows' - run: | - choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' - echo "C:\Program Files\CMake\bin" >> $env:GITHUB_PATH - - - name: Build - run: cargo build --release --target ${{ matrix.target }} - - - name: Build desktop - run: cargo build --release --features desktop --bin cagire-desktop --target ${{ matrix.target }} - - - name: Test - run: cargo test --target ${{ matrix.target }} - - - name: Clippy - run: cargo clippy --target ${{ matrix.target }} -- -D warnings + windows: + uses: ./.github/workflows/build-windows.yml + with: + run-tests: true + run-clippy: true diff --git a/.github/workflows/msi.yml b/.github/workflows/msi.yml deleted file mode 100644 index 2508db8..0000000 --- a/.github/workflows/msi.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: MSI - -on: - workflow_dispatch: - -jobs: - build: - runs-on: windows-latest - steps: - - uses: actions/checkout@v4 - - - uses: dtolnay/rust-toolchain@stable - - - uses: Swatinem/rust-cache@v2 - - - name: Build CLI - run: cargo build --release - - - name: Build Desktop - run: cargo build --release --features desktop --bin cagire-desktop - - - name: Install cargo-wix - run: cargo install cargo-wix - - - name: Build MSI - run: cargo wix --no-build --nocapture --package cagire -C -arch -C x64 - - - name: Upload MSI - uses: actions/upload-artifact@v4 - with: - name: cagire-msi - path: target/wix/*.msi diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b3acacd..d9bbd9b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,347 +5,44 @@ on: push: tags: ['v*'] -env: - CARGO_TERM_COLOR: always - MACOSX_DEPLOYMENT_TARGET: "12.0" - concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: - build: + linux: if: github.server_url == 'https://github.com' - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - target: x86_64-unknown-linux-gnu - artifact: cagire-linux-x86_64 - - os: macos-15-intel - target: x86_64-apple-darwin - artifact: cagire-macos-x86_64 - - os: macos-14 - target: aarch64-apple-darwin - artifact: cagire-macos-aarch64 - - os: windows-latest - target: x86_64-pc-windows-msvc - artifact: cagire-windows-x86_64 + uses: ./.github/workflows/build-linux.yml + with: + build-packages: true - runs-on: ${{ matrix.os }} - timeout-minutes: 60 - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: ${{ matrix.target }} - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - with: - key: ${{ matrix.target }} - - - name: Install dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo apt-get update - sudo apt-get install -y build-essential cmake pkg-config libasound2-dev libclang-dev libjack-dev \ - libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libgl1-mesa-dev \ - libx11-dev libx11-xcb-dev libxcursor-dev libxrandr-dev libxi-dev libwayland-dev - cargo install cargo-bundle - - - name: Install dependencies (macOS) - if: runner.os == 'macOS' - run: | - brew list cmake &>/dev/null || brew install cmake - - - name: Install dependencies (Windows) - if: runner.os == 'Windows' - run: | - choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' - echo "C:\Program Files\CMake\bin" >> $env:GITHUB_PATH - - - name: Build - run: cargo build --release --target ${{ matrix.target }} - - - name: Build desktop - run: cargo build --release --features desktop --bin cagire-desktop --target ${{ matrix.target }} - - - name: Bundle desktop app (macOS) - if: runner.os == 'macOS' - run: scripts/make-app-bundle.sh ${{ matrix.target }} - - - name: Bundle desktop app (Linux) - if: runner.os == 'Linux' - run: cargo bundle --release --features desktop --bin cagire-desktop --target ${{ matrix.target }} - - - name: Build AppImages (Linux) - if: runner.os == 'Linux' - run: | - mkdir -p target/releases - scripts/make-appimage.sh target/${{ matrix.target }}/release/cagire x86_64 target/releases - scripts/make-appimage.sh target/${{ matrix.target }}/release/cagire-desktop x86_64 target/releases - - - name: Upload AppImage artifacts (Linux) - if: runner.os == 'Linux' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-appimage - path: target/releases/*.AppImage - - - name: Bundle CLAP plugin - run: cargo xtask bundle cagire-plugins --release --target ${{ matrix.target }} - - - name: Zip macOS app bundle - if: runner.os == 'macOS' - run: | - cd target/${{ matrix.target }}/release/bundle/osx - zip -r Cagire.app.zip Cagire.app - - - name: Upload artifact (Unix) - if: runner.os != 'Windows' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }} - path: target/${{ matrix.target }}/release/cagire - - - name: Upload artifact (Windows) - if: runner.os == 'Windows' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }} - path: target/${{ matrix.target }}/release/cagire.exe - - - name: Upload desktop artifact (Linux deb) - if: runner.os == 'Linux' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-desktop - path: target/${{ matrix.target }}/release/bundle/deb/*.deb - - - name: Upload desktop artifact (macOS app bundle) - if: runner.os == 'macOS' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-desktop - path: target/${{ matrix.target }}/release/bundle/osx/Cagire.app.zip - - - name: Upload desktop artifact (Windows exe) - if: runner.os == 'Windows' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-desktop - path: target/${{ matrix.target }}/release/cagire-desktop.exe - - - name: Install cargo-wix (Windows) - if: runner.os == 'Windows' - run: cargo install cargo-wix - - - name: Build MSI installer (Windows) - if: runner.os == 'Windows' - run: cargo wix --no-build --nocapture --package cagire -C -arch -C x64 - - - name: Upload MSI installer (Windows) - if: runner.os == 'Windows' - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-msi - path: target/wix/*.msi - - - name: Upload CLAP artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-clap - path: target/bundled/cagire-plugins.clap - - - name: Upload VST3 artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-vst3 - path: target/bundled/cagire-plugins.vst3 - - build-cross: + macos: if: github.server_url == 'https://github.com' - runs-on: ubuntu-latest - timeout-minutes: 45 + uses: ./.github/workflows/build-macos.yml + with: + build-packages: true + matrix: >- + [ + {"os":"macos-14","target":"aarch64-apple-darwin","artifact":"cagire-macos-aarch64"}, + {"os":"macos-15-intel","target":"x86_64-apple-darwin","artifact":"cagire-macos-x86_64"} + ] - strategy: - fail-fast: false - matrix: - include: - - target: aarch64-unknown-linux-gnu - artifact: cagire-linux-aarch64 - - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@stable - with: - targets: ${{ matrix.target }} - - - name: Cache Rust dependencies - uses: Swatinem/rust-cache@v2 - with: - key: ${{ matrix.target }} - - - name: Install cross - run: cargo install cross --git https://github.com/cross-rs/cross - - - name: Build - run: cross build --release --target ${{ matrix.target }} - - - name: Build desktop - run: cross build --release --features desktop --bin cagire-desktop --target ${{ matrix.target }} - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }} - path: target/${{ matrix.target }}/release/cagire - - - name: Upload desktop artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.artifact }}-desktop - path: target/${{ matrix.target }}/release/cagire-desktop - - universal-macos: + windows: if: github.server_url == 'https://github.com' - needs: build - runs-on: macos-14 - timeout-minutes: 10 + uses: ./.github/workflows/build-windows.yml + with: + build-packages: true - steps: - - name: Download macOS artifacts - uses: actions/download-artifact@v4 - with: - pattern: cagire-macos-* - path: artifacts + cross: + if: github.server_url == 'https://github.com' + uses: ./.github/workflows/build-cross.yml - - name: Create universal CLI binary - run: | - lipo -create \ - artifacts/cagire-macos-x86_64/cagire \ - artifacts/cagire-macos-aarch64/cagire \ - -output cagire - chmod +x cagire - lipo -info cagire - - - name: Create universal app bundle - run: | - cd artifacts/cagire-macos-aarch64-desktop - unzip Cagire.app.zip - cd ../cagire-macos-x86_64-desktop - unzip Cagire.app.zip - cd ../.. - cp -R artifacts/cagire-macos-aarch64-desktop/Cagire.app Cagire.app - lipo -create \ - artifacts/cagire-macos-x86_64-desktop/Cagire.app/Contents/MacOS/cagire-desktop \ - artifacts/cagire-macos-aarch64-desktop/Cagire.app/Contents/MacOS/cagire-desktop \ - -output Cagire.app/Contents/MacOS/cagire-desktop - lipo -info Cagire.app/Contents/MacOS/cagire-desktop - zip -r Cagire.app.zip Cagire.app - - - name: Create universal CLAP plugin - run: | - mkdir -p cagire-plugins.clap/Contents/MacOS - cp artifacts/cagire-macos-aarch64-clap/cagire-plugins.clap/Contents/Info.plist \ - cagire-plugins.clap/Contents/ 2>/dev/null || true - cp artifacts/cagire-macos-aarch64-clap/cagire-plugins.clap/Contents/PkgInfo \ - cagire-plugins.clap/Contents/ 2>/dev/null || true - lipo -create \ - artifacts/cagire-macos-x86_64-clap/cagire-plugins.clap/Contents/MacOS/cagire-plugins \ - artifacts/cagire-macos-aarch64-clap/cagire-plugins.clap/Contents/MacOS/cagire-plugins \ - -output cagire-plugins.clap/Contents/MacOS/cagire-plugins - lipo -info cagire-plugins.clap/Contents/MacOS/cagire-plugins - - - name: Create universal VST3 plugin - run: | - mkdir -p cagire-plugins.vst3/Contents/MacOS - cp -R artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/Info.plist \ - cagire-plugins.vst3/Contents/ 2>/dev/null || true - cp artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/PkgInfo \ - cagire-plugins.vst3/Contents/ 2>/dev/null || true - cp -R artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/Resources \ - cagire-plugins.vst3/Contents/ 2>/dev/null || true - lipo -create \ - artifacts/cagire-macos-x86_64-vst3/cagire-plugins.vst3/Contents/MacOS/cagire-plugins \ - artifacts/cagire-macos-aarch64-vst3/cagire-plugins.vst3/Contents/MacOS/cagire-plugins \ - -output cagire-plugins.vst3/Contents/MacOS/cagire-plugins - lipo -info cagire-plugins.vst3/Contents/MacOS/cagire-plugins - - - uses: actions/checkout@v4 - with: - sparse-checkout: | - assets/DMG-README.txt - scripts/make-dmg.sh - clean: false - - - name: Create DMG - run: | - chmod +x scripts/make-dmg.sh - scripts/make-dmg.sh Cagire.app . - - - name: Build .pkg installer - run: | - VERSION="${GITHUB_REF_NAME#v}" - mkdir -p pkg-root/Applications pkg-root/usr/local/bin - cp -R Cagire.app pkg-root/Applications/ - cp cagire pkg-root/usr/local/bin/ - pkgbuild --analyze --root pkg-root component.plist - plutil -replace BundleIsRelocatable -bool NO component.plist - pkgbuild --root pkg-root --identifier com.sova.cagire \ - --version "$VERSION" --install-location / \ - --component-plist component.plist \ - "Cagire-${VERSION}-universal.pkg" - - - name: Upload universal CLI - uses: actions/upload-artifact@v4 - with: - name: cagire-macos-universal - path: cagire - - - name: Upload universal app bundle - uses: actions/upload-artifact@v4 - with: - name: cagire-macos-universal-desktop - path: Cagire.app.zip - - - name: Upload universal CLAP plugin - uses: actions/upload-artifact@v4 - with: - name: cagire-macos-universal-clap - path: cagire-plugins.clap - - - name: Upload universal VST3 plugin - uses: actions/upload-artifact@v4 - with: - name: cagire-macos-universal-vst3 - path: cagire-plugins.vst3 - - - name: Upload DMG - uses: actions/upload-artifact@v4 - with: - name: cagire-macos-universal-dmg - path: Cagire-*.dmg - - - name: Upload .pkg installer - uses: actions/upload-artifact@v4 - with: - name: cagire-macos-universal-pkg - path: Cagire-*-universal.pkg + assemble-macos: + needs: macos + uses: ./.github/workflows/assemble-macos.yml release: - needs: [build, build-cross, universal-macos] + needs: [linux, macos, windows, cross, assemble-macos] if: startsWith(github.ref, 'refs/tags/v') && github.server_url == 'https://github.com' runs-on: ubuntu-latest timeout-minutes: 10