name: Build and release binaries. on: workflow_dispatch: push: tags: - 'v*' - 'nightly' pull_request: branches: ["main" ] paths: - 'Cargo.toml' - 'Cargo.lock' - 'crates/**' - 'ee/tabby-webserver/**' 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: tests: runs-on: ubuntu-latest env: SCCACHE_GHA_ENABLED: true RUSTC_WRAPPER: sccache CARGO_INCREMENTAL: 0 steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: 1.73.0 - 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 - run: bash ./ci/prepare_build_environment.sh - name: Run unit tests run: cargo test --bin tabby --lib release-binary: if: github.event_name != 'pull_request' needs: tests runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, ubuntu-latest] include: - os: macos-latest target: aarch64-apple-darwin toolchain: 1.73.0 - os: ubuntu-latest target: x86_64-unknown-linux-gnu toolchain: 1.73.0 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: ${{ matrix.toolchain }} target: ${{ matrix.target }} components: clippy - run: rustup default ${{ matrix.toolchain }} - 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 - run: bash ./ci/prepare_build_environment.sh - name: Bulid release binary run: cargo build --release --target ${{ matrix.target }} --package tabby - 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 all artifacts uses: actions/download-artifact@v3 - uses: ncipollo/release-action@v1 with: allowUpdates: true prerelease: true artifacts: "tabby_*/tabby_*" tag: ${{ github.ref_name }} removeArtifacts: true