name: CI on: push: branches: - master - ci pull_request: branches: - "*" jobs: fmt: name: Rustfmt runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt - run: cargo fmt --all -- --check clippy: name: Clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy - run: cargo clippy -- -D warnings linux-build-test: name: Build and Test (Linux) uses: ./.github/workflows/build-and-test.yml with: os: ubuntu-latest upload-artifact-name: notedeck-linux-bin upload-artifact-path: target/release/notedeck additional-setup: | sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev macos-build-test: name: Build and Test (macOS) uses: ./.github/workflows/build-and-test.yml with: os: macos-latest upload-artifact-name: notedeck-macos-bin upload-artifact-path: target/release/notedeck windows-build-test: name: Build and Test (Windows) uses: ./.github/workflows/build-and-test.yml with: os: windows-latest upload-artifact-name: notedeck.exe upload-artifact-path: target/release/notedeck.exe packaging: name: Build Linux Packages runs-on: ubuntu-latest needs: linux-build-test if: github.ref_name == 'master' steps: # Checkout the repository - name: Checkout Code uses: actions/checkout@v4 # Install Packaging Tools - name: Install Packaging Tools run: | sudo apt-get update sudo apt-get install -y rpm binutils cargo install cargo-generate-rpm cargo-deb # download! - name: Download Build Artifacts uses: actions/download-artifact@v4 with: name: notedeck-linux-bin path: target/release # Build Packages - name: Build Packages run: | cargo generate-rpm cargo deb # Upload RPM Package - name: Upload RPM Package uses: actions/upload-artifact@v4 with: name: notedeck.rpm path: target/generate-rpm/*.rpm # Upload Debian Package - name: Upload Debian Package uses: actions/upload-artifact@v4 with: name: notedeck.deb path: target/debian/*.deb macos-dmg: name: Build macOS DMG runs-on: macos-latest needs: macos-build-test if: github.ref_name == 'master' 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 }} steps: # Checkout the repository - name: Checkout Code uses: actions/checkout@v4 # Set up Rust - name: Setup Rust uses: dtolnay/rust-toolchain@stable # create-dmg and cargo-bundle caching - name: Rust cache uses: Swatinem/rust-cache@v2 - name: Download Build Artifacts (MacOS) uses: actions/download-artifact@v4 with: name: notedeck-macos-bin # Assuming you need the Release build path: target/release - name: Install Required Tools run: | brew install create-dmg cargo install cargo-bundle - 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: Run macOS DMG Build Script run: ./scripts/macos_build.sh - name: Upload DMG Artifact uses: actions/upload-artifact@v4 with: name: notedeck.dmg path: packages/notedeck.dmg windows-installer: name: Build Windows Installer runs-on: windows-latest needs: windows-build-test if: github.ref_name == 'master' steps: # Checkout the repository - name: Checkout Code uses: actions/checkout@v4 - name: Download Build Artifacts uses: actions/download-artifact@v4 with: name: notedeck.exe # Assuming you need the Release build path: target/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 # Validate executable exists - name: Validate required files run: | if (!(Test-Path -Path target\release\notedeck.exe)) { throw "Executable 'notedeck.exe' not found in 'target/release'." } # 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