name: Build and release binaries. on: workflow_dispatch: push: branches: [ "main" ] pull_request: branches: ["main" ] concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} # If this is enabled it will cancel current running and start latest cancel-in-progress: true jobs: changes: runs-on: ubuntu-latest outputs: changes: ${{ steps.changes.outputs.src }} steps: - uses: dorny/paths-filter@v2 id: changes with: filters: | src: - 'crates/**' - 'Cargo.toml' - 'Cargo.lock' tests: runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.changes == 'true' steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: nightly components: rustfmt - name: Cargo fmt run: cargo +nightly fmt --check release-binary: needs: tests runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-11] include: - os: macos-11 target: aarch64-apple-darwin env: SCCACHE_GHA_ENABLED: true RUSTC_WRAPPER: sccache CARGO_INCREMENTAL: 0 steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable target: ${{ matrix.target }} components: clippy - name: Sccache cache uses: mozilla-actions/sccache-action@v0.0.3 with: version: "v0.4.0" - name: Cargo registry cache uses: actions/cache@v3 with: key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.toml') }}-${{ github.sha }} restore-keys: | cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.toml') }}- cargo-${{ runner.os }}- path: | ~/.cargo/registry ~/.cargo/git - name: Bulid release binary run: cargo build --release --target ${{ matrix.target }} - name: Rename release binary run: mv target/${{ matrix.target }}/release/tabby tabby_${{ matrix.target }} - name: Upload artifacts uses: actions/upload-artifact@v3 with: retention-days: 3 name: tabby_${{ matrix.target }} path: tabby_${{ matrix.target }} pre-release: if: github.event_name != 'pull_request' needs: release-binary runs-on: ubuntu-latest permissions: contents: write steps: - name: Download a single artifact uses: actions/download-artifact@v3 with: name: tabby_aarch64-apple-darwin - uses: ncipollo/release-action@v1 with: allowUpdates: true prerelease: true name: "Development Build" artifacts: tabby_aarch64-apple-darwin tag: latest removeArtifacts: true