name: "test-on-push" on: push: pull_request: schedule: - cron: "0 0 * * 0" # Run weekly to cover rust toolchain updates jobs: # Ensure version numbers in various places match up ensure-same-version: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: install dependencies run: | pip install toml - name: Run check run: | python3 scripts/check_version_numbers.py # Ensure correct Rust code formatting formatting: name: format-check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: toolchain: stable components: rustfmt - name: Format check run: cargo fmt --manifest-path src-tauri/Cargo.toml --all -- --check clippy: strategy: fail-fast: false matrix: platform: [ubuntu-22.04, windows-latest] name: clippy-check runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: toolchain: stable components: clippy - name: install dependencies (ubuntu only) if: matrix.platform == 'ubuntu-22.04' run: | sudo apt-get update sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf - name: Create dist folder (Ubuntu only) if: matrix.platform == 'ubuntu-22.04' run: mkdir --parent src-vue/dist - name: Create dist folder (Windows only) if: matrix.platform == 'windows-latest' run: New-Item -ItemType Directory -Force -Path "src-vue\dist" - name: Run clippy run: cargo clippy --manifest-path src-tauri/Cargo.toml -- --no-deps --deny warnings # Ensure committed bindings correct autogen-ts-bindings-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: install dependencies (ubuntu only) run: | sudo apt-get update sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf - name: Move original TypeScript bindings run: | cp -r src-tauri/bindings original-bindings rm -r src-tauri/bindings - name: Create empty dist folder # Otherwise tests fail run: mkdir src-vue/dist - name: Run Tests run: cargo test --manifest-path src-tauri/Cargo.toml - name: Compare TypeScript Bindings run: | diff -r src-tauri/bindings original-bindings if [[ $? -ne 0 ]]; then echo "Generated bindings are different from committed bindings" exit 1 fi test-tauri: needs: ensure-same-version strategy: fail-fast: false matrix: platform: [ubuntu-22.04, windows-latest] runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 - name: setup node uses: actions/setup-node@v4 with: node-version: 16 - uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: install dependencies (ubuntu only) if: matrix.platform == 'ubuntu-22.04' run: | sudo apt-get update sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf - name: Disable self-updater shell: bash run: | jq '.tauri.updater.active = false' src-tauri/tauri.conf.json > src-tauri/tauri.conf.json.new rm src-tauri/tauri.conf.json mv src-tauri/tauri.conf.json.new src-tauri/tauri.conf.json - uses: Swatinem/rust-cache@v2 # Cache Rust build artifacts with: workspaces: | src-tauri - name: install app dependencies and build it env: TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} run: | npm clean-install cd src-vue && npm clean-install && cd .. npm run tauri build - uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} - name: Upload Linux artifact if: matrix.platform == 'ubuntu-22.04' uses: actions/upload-artifact@v3 with: name: linux-artifacts path: | src-tauri/target/release/bundle/appimage/* - name: Upload Linux AppImage if: matrix.platform == 'ubuntu-22.04' uses: actions/upload-artifact@v3 with: name: linux-appimage path: | src-tauri/target/release/bundle/appimage/*.AppImage - name: Upload Windows artifact if: matrix.platform == 'windows-latest' uses: actions/upload-artifact@v3 with: name: windows-artifacts path: | src-tauri/target/release/bundle/msi/* src-tauri/target/release/app.pdb - name: Additionally upload Windows installer separately if: matrix.platform == 'windows-latest' uses: actions/upload-artifact@v3 with: name: windows-msi path: | src-tauri/target/release/bundle/msi/*.msi