name: Release on: pull_request: paths: - '.github/workflows/release.yml' - '.github/actions/publish-artifacts/**' workflow_dispatch: # From: https://github.com/rust-lang/rust-analyzer/blob/master/.github/workflows/release.yaml#L13-L21 env: CARGO_INCREMENTAL: 0 CARGO_NET_RETRY: 10 RUSTUP_MAX_RETRIES: 10 jobs: # CLI builds for v2 cli-build: strategy: matrix: include: - host: macos-14 target: aarch64-apple-darwin platform: macos-aarch64 - host: macos-13 target: x86_64-apple-darwin platform: macos-x86_64 # Linux builds - host: ubuntu-22.04 target: x86_64-unknown-linux-gnu platform: linux-x86_64 - host: ubuntu-22.04 target: aarch64-unknown-linux-gnu platform: linux-aarch64 # Windows builds (uncomment when needed) # - host: windows-latest # target: x86_64-pc-windows-msvc # platform: windows-x86_64 name: CLI - ${{ matrix.platform }} runs-on: ${{ matrix.host }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Rust uses: dtolnay/rust-toolchain@stable 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: Build CLI binaries run: | cargo build --release --bin sd-cli --bin sd-daemon --target ${{ matrix.target }} env: # Set linker for cross-compilation CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc - name: Prepare binaries (Unix) if: runner.os != 'Windows' run: | mkdir -p dist cp target/${{ matrix.target }}/release/sd-cli dist/sd-${{ matrix.platform }} cp target/${{ matrix.target }}/release/sd-daemon dist/sd-daemon-${{ matrix.platform }} chmod +x dist/* - name: Prepare binaries (Windows) if: runner.os == 'Windows' shell: pwsh run: | New-Item -ItemType Directory -Force -Path dist Copy-Item target/${{ matrix.target }}/release/sd-cli.exe dist/sd-${{ matrix.platform }}.exe Copy-Item target/${{ matrix.target }}/release/sd-daemon.exe dist/sd-daemon-${{ matrix.platform }}.exe - name: Generate checksums shell: bash run: | cd dist if [ "$RUNNER_OS" == "Windows" ]; then sha256sum *.exe > checksums-${{ matrix.platform }}.txt else sha256sum * > checksums-${{ matrix.platform }}.txt fi - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: cli-${{ matrix.platform }} path: dist/* # V2 Desktop builds desktop-main: strategy: matrix: settings: - host: macos-13 target: x86_64-apple-darwin bundles: dmg,app os: darwin arch: x86_64 - host: macos-14 target: aarch64-apple-darwin bundles: dmg,app os: darwin arch: aarch64 - host: windows-latest target: x86_64-pc-windows-msvc bundles: msi os: windows arch: x86_64 # - host: windows-latest # target: aarch64-pc-windows-msvc - host: ubuntu-22.04 target: x86_64-unknown-linux-gnu bundles: deb os: linux arch: x86_64 # - host: ubuntu-22.04 # target: x86_64-unknown-linux-musl # - host: ubuntu-22.04 # target: aarch64-unknown-linux-gnu # bundles: deb # - host: ubuntu-22.04 # target: aarch64-unknown-linux-musl name: Desktop - Main ${{ matrix.settings.target }} runs-on: ${{ matrix.settings.host }} steps: - name: Maximize build space if: ${{ runner.os == 'Linux' }} uses: easimon/maximize-build-space@master with: swap-size-mb: 3072 root-reserve-mb: 6144 remove-dotnet: 'true' remove-codeql: 'true' remove-haskell: 'true' remove-docker-images: 'true' - name: Symlink target to C:\ if: ${{ runner.os == 'Windows' }} shell: powershell run: | New-Item -ItemType Directory -Force -Path C:\spacedrive_target New-Item -Path target -ItemType Junction -Value C:\spacedrive_target - name: Checkout repository uses: actions/checkout@v4 - name: Install Apple API key if: ${{ runner.os == 'macOS' }} run: | mkdir -p ~/.appstoreconnect/private_keys/ cd ~/.appstoreconnect/private_keys/ echo ${{ secrets.APPLE_API_KEY_BASE64 }} >> AuthKey_${{ secrets.APPLE_API_KEY }}.p8.base64 base64 --decode -i AuthKey_${{ secrets.APPLE_API_KEY }}.p8.base64 -o AuthKey_${{ secrets.APPLE_API_KEY }}.p8 rm AuthKey_${{ secrets.APPLE_API_KEY }}.p8.base64 - name: Install Codesigning Certificate if: ${{ runner.os == 'macOS' }} uses: apple-actions/import-codesign-certs@v2 with: p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }} p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} - name: Setup System and Rust uses: ./.github/actions/setup-system env: APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} with: token: ${{ secrets.GITHUB_TOKEN }} target: ${{ matrix.settings.target }} - name: Setup Bun and dependencies uses: ./.github/actions/setup-bun with: token: ${{ secrets.GITHUB_TOKEN }} - name: Build run: | bun tauri build --ci -v --target ${{ matrix.settings.target }} --bundles ${{ matrix.settings.bundles }} env: TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }} APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} APPLE_PROVIDER_SHORT_NAME: ${{ secrets.APPLE_PROVIDER_SHORT_NAME }} APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }} SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - name: Package frontend if: ${{ runner.os == 'Linux' }} run: | set -eux XZ_OPT='-T0 -7' tar -cJf apps/desktop/dist.tar.xz -C apps/desktop/dist . - name: Publish Artifacts uses: ./.github/actions/publish-artifacts with: os: ${{ matrix.settings.os }} arch: ${{ matrix.settings.arch }} target: ${{ matrix.settings.target }} profile: release # V2 CLI Release release: if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest name: Create Release needs: cli-build permissions: contents: write steps: - name: Download artifacts uses: actions/download-artifact@v4 - name: Create Release uses: softprops/action-gh-release@v2 with: draft: true files: '*/**' # V2 Desktop release release-desktop: if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest name: Create Desktop Release needs: desktop-main permissions: contents: write steps: - name: Download artifacts uses: actions/download-artifact@v4 - name: Create Release uses: softprops/action-gh-release@v2 with: draft: true files: '*/**'