name: Build and release binaries. on: workflow_dispatch: push: tags: - 'v*' - 'nightly' pull_request: branches: [ "main" ] paths: - '.github/workflows/release.yml' concurrency: group: ${{ github.workflow_ref }}-${{ github.head_ref || github.ref_name }} # If this is enabled it will cancel current running and start latest cancel-in-progress: true env: RUST_TOOLCHAIN: 1.73.0 jobs: release-binary: runs-on: ${{ matrix.os }} container: ${{ matrix.container }} strategy: matrix: binary: [aarch64-apple-darwin, x86_64-manylinux2014, x86_64-manylinux2014-cuda117, x86_64-pc-windows-msvc] include: - os: macos-latest target: aarch64-apple-darwin binary: aarch64-apple-darwin - os: ubuntu-latest target: x86_64-unknown-linux-gnu binary: x86_64-manylinux2014 container: quay.io/pypa/manylinux2014_x86_64 - os: ubuntu-latest target: x86_64-unknown-linux-gnu binary: x86_64-manylinux2014-cuda117 container: sameli/manylinux2014_x86_64_cuda_11.7 build_args: --features cuda - os: windows-latest target: x86_64-pc-windows-msvc binary: x86_64-pc-windows-msvc ext: .exe build_args: --features cuda 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: ${{ env.RUST_TOOLCHAIN }} target: ${{ matrix.target }} components: clippy - run: rustup default ${{ env.RUST_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 - name: Prepare build environment for macOS & Linux run: bash ./ci/prepare_build_environment.sh if: runner.os != 'Windows' - name: Prepare build environment for Windows run: ./ci/prepare_build_environment.ps1 if: runner.os == 'Windows' - name: Install CUDA toolkit for Windows uses: Jimver/cuda-toolkit@v0.2.11 with: cuda: '11.7.1' method: 'network' sub-packages: '["nvcc", "cudart", "cublas", "cublas_dev", "thrust", "visual_studio_integration"]' if: runner.os == 'Windows' - name: Bulid release binary run: cargo build ${{ matrix.build_args }} --release --target ${{ matrix.target }} --package tabby - name: Rename release binary run: mv target/${{ matrix.target }}/release/tabby${{ matrix.ext }} tabby_${{ matrix.binary }}${{ matrix.ext }} - name: Upload artifacts uses: actions/upload-artifact@v3 with: retention-days: 3 name: tabby_${{ matrix.binary }}${{ matrix.ext }} path: tabby_${{ matrix.binary }}${{ matrix.ext }} pre-release: if: github.event_name == 'push' 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