Merge pull request #483 from stepchowfun/install-v0.11.0 #5155
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Continuous integration | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
ci-linux: | |
name: Build for Linux | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- if: ${{ github.event_name == 'push' }} | |
uses: docker/login-action@v3 | |
with: | |
username: stephanmisc | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- uses: stepchowfun/toast/.github/actions/toast@main | |
with: | |
tasks: build test_units test_rust_integration test_typescript_integration lint release run | |
docker_repo: stephanmisc/toast | |
read_remote_cache: true | |
write_remote_cache: ${{ github.event_name == 'push' }} | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# The artifact name will contain the target triple, so the file name doesn't need to. | |
mv artifacts/typical-x86_64-unknown-linux-gnu artifacts/typical | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: x86_64-unknown-linux-gnu | |
path: artifacts/typical | |
if-no-files-found: error | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# The artifact name will contain the target triple, so the file name doesn't need to. | |
mv artifacts/typical-x86_64-unknown-linux-musl artifacts/typical | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: x86_64-unknown-linux-musl | |
path: artifacts/typical | |
if-no-files-found: error | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# The artifact name will contain the target triple, so the file name doesn't need to. | |
mv artifacts/typical-aarch64-unknown-linux-gnu artifacts/typical | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-unknown-linux-gnu | |
path: artifacts/typical | |
if-no-files-found: error | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# The artifact name will contain the target triple, so the file name doesn't need to. | |
mv artifacts/typical-aarch64-unknown-linux-musl artifacts/typical | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-unknown-linux-musl | |
path: artifacts/typical | |
if-no-files-found: error | |
ci-windows: | |
name: Build for Windows | |
runs-on: windows-latest | |
steps: | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# The unit tests do not expect the files in `test_data` to have carriage returns added. | |
git config --global core.autocrlf false | |
git config --global core.eol lf | |
- uses: actions/checkout@v4 | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# Install the appropriate version of Rust. The `--no-self-update` is necessary to make this | |
# command work reliably on Windows. Without that flag, the command fails occasionally. See | |
# | |
# https://github.com/rust-lang/rustup/issues/2441 | |
# | |
# for more information. | |
rustup toolchain install 1.79.0 --no-self-update # [ref:rust_1.79.0] | |
rustup default 1.79.0 # [ref:rust_1.79.0] | |
# Add the targets. | |
rustup target add x86_64-pc-windows-msvc | |
rustup target add aarch64-pc-windows-msvc | |
# Build and test for x86_64-pc-windows-msvc. | |
RUSTFLAGS='--codegen target-feature=+crt-static' cargo build \ | |
--locked \ | |
--release \ | |
--target x86_64-pc-windows-msvc | |
NO_COLOR=true cargo test --locked # [ref:colorless_tests] | |
# Build and test for aarch64-pc-windows-msvc. | |
RUSTFLAGS='--codegen target-feature=+crt-static' cargo build \ | |
--locked \ | |
--release \ | |
--target aarch64-pc-windows-msvc | |
NO_COLOR=true cargo test --locked # [ref:colorless_tests] | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: x86_64-pc-windows-msvc | |
path: target/x86_64-pc-windows-msvc/release/typical.exe | |
if-no-files-found: error | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-pc-windows-msvc | |
path: target/aarch64-pc-windows-msvc/release/typical.exe | |
if-no-files-found: error | |
ci-macos: | |
name: Build for macOS | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# Install the appropriate version of Rust. | |
rustup toolchain install 1.79.0 # [ref:rust_1.79.0] | |
rustup default 1.79.0 # [ref:rust_1.79.0] | |
# Add the targets. | |
rustup target add x86_64-apple-darwin | |
rustup target add aarch64-apple-darwin | |
# Build and test for x86_64-apple-darwin. | |
SDKROOT=$(xcrun --show-sdk-path) \ | |
MACOSX_DEPLOYMENT_TARGET=$(xcrun --show-sdk-version) \ | |
cargo build --locked --release --target x86_64-apple-darwin | |
NO_COLOR=true cargo test --locked # [ref:colorless_tests] | |
# Build and test for aarch64-apple-darwin. | |
SDKROOT=$(xcrun --show-sdk-path) \ | |
MACOSX_DEPLOYMENT_TARGET=$(xcrun --show-sdk-version) \ | |
cargo build --locked --release --target aarch64-apple-darwin | |
NO_COLOR=true cargo test --locked # [ref:colorless_tests] | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: x86_64-apple-darwin | |
path: target/x86_64-apple-darwin/release/typical | |
if-no-files-found: error | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-apple-darwin | |
path: target/aarch64-apple-darwin/release/typical | |
if-no-files-found: error | |
install-macos: | |
name: Install on macOS | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# Run the installer script. | |
PREFIX=/tmp ./install.sh | |
# Run the installed binary. | |
/tmp/typical --help | |
install-ubuntu: | |
name: Install on Ubuntu | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# Run the installer script. | |
PREFIX=/tmp ./install.sh | |
# Run the installed binary. | |
/tmp/typical --help | |
publish-release: | |
name: Publish a release if applicable | |
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} | |
runs-on: ubuntu-latest | |
needs: [ci-linux, ci-macos, ci-windows, install-macos, install-ubuntu] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
path: artifacts/ | |
- env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
# Make Bash log commands and not silently ignore errors. | |
set -euxo pipefail | |
# Install the appropriate version of Rust. | |
rustup toolchain install 1.79.0 # [ref:rust_1.79.0] | |
rustup default 1.79.0 # [ref:rust_1.79.0] | |
# Fetch the program version. | |
VERSION="$(cargo pkgid | cut -d# -f2 | cut -d: -f2)" | |
# If the release already exists, exit early. | |
if gh release view "v$VERSION" &> /dev/null; then | |
echo "Release v$VERSION already exists." | |
exit | |
fi | |
# Give the artifacts unique names. | |
mv \ | |
artifacts/x86_64-unknown-linux-gnu/typical \ | |
artifacts/typical-x86_64-unknown-linux-gnu | |
mv \ | |
artifacts/x86_64-unknown-linux-musl/typical \ | |
artifacts/typical-x86_64-unknown-linux-musl | |
mv \ | |
artifacts/aarch64-unknown-linux-gnu/typical \ | |
artifacts/typical-aarch64-unknown-linux-gnu | |
mv \ | |
artifacts/aarch64-unknown-linux-musl/typical \ | |
artifacts/typical-aarch64-unknown-linux-musl | |
mv \ | |
artifacts/x86_64-apple-darwin/typical \ | |
artifacts/typical-x86_64-apple-darwin | |
mv \ | |
artifacts/aarch64-apple-darwin/typical \ | |
artifacts/typical-aarch64-apple-darwin | |
mv \ | |
artifacts/x86_64-pc-windows-msvc/typical.exe \ | |
artifacts/typical-x86_64-pc-windows-msvc.exe | |
mv \ | |
artifacts/aarch64-pc-windows-msvc/typical.exe \ | |
artifacts/typical-aarch64-pc-windows-msvc.exe | |
# Create the release. | |
gh release create "v$VERSION" --title "v$VERSION" --notes '' \ | |
'artifacts/typical-x86_64-unknown-linux-gnu' \ | |
'artifacts/typical-x86_64-unknown-linux-musl' \ | |
'artifacts/typical-aarch64-unknown-linux-gnu' \ | |
'artifacts/typical-aarch64-unknown-linux-musl' \ | |
'artifacts/typical-x86_64-apple-darwin' \ | |
'artifacts/typical-aarch64-apple-darwin' \ | |
'artifacts/typical-x86_64-pc-windows-msvc.exe' \ | |
'artifacts/typical-aarch64-pc-windows-msvc.exe' | |
echo "Created release v$VERSION." | |
- uses: stepchowfun/toast/.github/actions/toast@main | |
with: | |
tasks: publish | |
docker_repo: stephanmisc/toast | |
env: | |
CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} |