name: CI on: push: branches: - master - ci pull_request: branches: - "*" jobs: lint: name: Rustfmt + Clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt,clippy - run: | cargo fmt --all -- --check cargo clippy linux-test: name: Test (Linux) uses: ./.github/workflows/build-and-test.yml with: os: ubuntu-latest additional-setup: | sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev macos-test: name: Test (macOS) uses: ./.github/workflows/build-and-test.yml with: os: macos-latest windows-test: name: Test (Windows) uses: ./.github/workflows/build-and-test.yml with: os: windows-latest packaging: name: rpm/deb runs-on: ubuntu-latest needs: linux-test if: github.ref_name == 'master' || github.ref_name == 'ci' strategy: fail-fast: false matrix: arch: [x86_64, aarch64] steps: # Checkout the repository - name: Checkout Code uses: actions/checkout@v4 # Install Packaging Tools - name: Install Packaging Tools run: | sudo apt-get update if [ "${{ matrix.arch }}" != "$(uname -m)" ]; then sudo apt-get install -y gcc-${{ matrix.arch }}-linux-gnu g++-aarch64-linux-gnu rustup target add ${{ matrix.arch }}-unknown-linux-gnu fi cargo install cargo-generate-rpm cargo-deb - name: Rust cache uses: Swatinem/rust-cache@v2 - name: Build Cross (${{ matrix.arch }}) if: matrix.arch != runner.arch run: cargo build --release --target=${{ matrix.arch }}-unknown-linux-gnu - name: Build Native (${{ matrix.arch }}) if: matrix.arch == runner.arch run: cargo build --release - name: Build RPM (Cross) if: matrix.arch != runner.arch run: cargo generate-rpm --target=${{ matrix.arch }}-unknown-linux-gnu - name: Build RPM if: matrix.arch == runner.arch run: cargo generate-rpm - name: Build deb (Cross) if: matrix.arch != runner.arch run: cargo deb --target=${{ matrix.arch }}-unknown-linux-gnu - name: Build deb if: matrix.arch == runner.arch run: cargo deb - name: Upload RPM uses: actions/upload-artifact@v4 if: runner.arch == matrix.arch with: name: notedeck-${{ matrix.arch }}.rpm path: target/release/generate-rpm/notedeck.rpm - name: Upload RPM (Cross) uses: actions/upload-artifact@v4 if: runner.arch != matrix.arch with: name: notedeck-${{ matrix.arch }}.rpm path: target/${{ matrix.arch }}-unknown-linux-gnu/generate-rpm/*.rpm - name: Upload deb (Native) uses: actions/upload-artifact@v4 if: runner.arch == matrix.arch with: name: notedeck-${{ matrix.arch }}.deb path: target/release/debian/notedeck.deb # Upload Debian Package (Cross) - name: Upload deb (Cross) uses: actions/upload-artifact@v4 if: runner.arch != matrix.arch with: name: notedeck-${{ matrix.arch }}.deb path: target/${{ matrix.arch }}-unknown-linux-gnu/debian/*.deb macos-dmg: name: macOS dmg runs-on: macos-latest needs: macos-test if: github.ref_name == 'master' || github.ref_name == 'ci' env: NOTEDECK_APPLE_RELEASE_CERT_ID: ${{ secrets.NOTEDECK_APPLE_RELEASE_CERT_ID }} NOTEDECK_RELEASE_APPLE_ID: ${{ secrets.NOTEDECK_RELEASE_APPLE_ID }} NOTEDECK_APPLE_APP_SPECIFIC_PW: ${{ secrets.NOTEDECK_APPLE_APP_SPECIFIC_PW }} NOTEDECK_APPLE_TEAM_ID: ${{ secrets.NOTEDECK_APPLE_TEAM_ID }} strategy: fail-fast: false matrix: arch: [x86_64, aarch64] steps: # Checkout the repository - name: Checkout Code uses: actions/checkout@v4 - name: Install Required Tools run: | brew install create-dmg cargo install cargo-bundle rustup target add ${{ matrix.arch }}-apple-darwin - name: Import apple codesign cert uses: apple-actions/import-codesign-certs@v3 with: p12-file-base64: ${{ secrets.CERTIFICATES_P12 }} p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} - name: Rust cache uses: Swatinem/rust-cache@v2 - name: Run macOS DMG Build Script run: ARCH=${{ matrix.arch }} ./scripts/macos_build.sh - name: Upload DMG Artifact uses: actions/upload-artifact@v4 with: name: notedeck-${{ matrix.arch }}.dmg path: packages/notedeck-${{ matrix.arch }}.dmg windows-installer: name: Build Windows Installer (x86_64) runs-on: windows-latest needs: windows-test if: github.ref_name == 'master' || github.ref_name == 'ci' steps: # Checkout the repository - name: Checkout Code uses: actions/checkout@v4 # Build cache - name: Rust cache uses: Swatinem/rust-cache@v2 # Build - name: Build (Native Only) run: cargo build --release # Create packages directory - name: Create packages directory run: mkdir packages # Install Inno Setup - name: Install Inno Setup run: choco install innosetup --no-progress --yes # Build Installer - name: Run Inno Setup Script run: | & "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "scripts\windows-installer.iss" # List outputs - name: List Inno Script outputs run: dir packages # Upload the installer as an artifact - name: Upload Installer uses: actions/upload-artifact@v4 with: name: DamusNotedeckInstaller.exe path: packages\DamusNotedeckInstaller.exe