Skip to content

Merge pull request #477 from stepchowfun/gap-indices #5134

Merge pull request #477 from stepchowfun/gap-indices

Merge pull request #477 from stepchowfun/gap-indices #5134

Workflow file for this run

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.78.0 --no-self-update # [ref:rust_1.78.0]
rustup default 1.78.0 # [ref:rust_1.78.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.78.0 # [ref:rust_1.78.0]
rustup default 1.78.0 # [ref:rust_1.78.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.78.0 # [ref:rust_1.78.0]
rustup default 1.78.0 # [ref:rust_1.78.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_TO_PUBLISH" --title "v$VERSION_TO_PUBLISH" --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 }}