Merge pull request #437 from gramlang/rust-v1.80.0 #1148
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 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/gram-x86_64-unknown-linux-gnu artifacts/gram | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: x86_64-unknown-linux-gnu | |
path: artifacts/gram | |
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/gram-x86_64-unknown-linux-musl artifacts/gram | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: x86_64-unknown-linux-musl | |
path: artifacts/gram | |
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/gram-aarch64-unknown-linux-gnu artifacts/gram | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-unknown-linux-gnu | |
path: artifacts/gram | |
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/gram-aarch64-unknown-linux-musl artifacts/gram | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-unknown-linux-musl | |
path: artifacts/gram | |
if-no-files-found: error | |
ci-windows: | |
name: Build for Windows | |
runs-on: windows-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. 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.80.0 --no-self-update # [ref:rust_1.80.0] | |
rustup default 1.80.0 # [ref:rust_1.80.0] | |
# Add the targets. | |
rustup target add x86_64-pc-windows-msvc | |
rustup target add aarch64-pc-windows-msvc | |
# Build for x86_64-pc-windows-msvc. | |
RUSTFLAGS='--codegen target-feature=+crt-static' cargo build \ | |
--locked \ | |
--release \ | |
--target x86_64-pc-windows-msvc | |
# Build for aarch64-pc-windows-msvc. | |
RUSTFLAGS='--codegen target-feature=+crt-static' cargo build \ | |
--locked \ | |
--release \ | |
--target aarch64-pc-windows-msvc | |
# Run the tests. | |
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/gram.exe | |
if-no-files-found: error | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-pc-windows-msvc | |
path: target/aarch64-pc-windows-msvc/release/gram.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.80.0 # [ref:rust_1.80.0] | |
rustup default 1.80.0 # [ref:rust_1.80.0] | |
# Add the targets. | |
rustup target add x86_64-apple-darwin | |
rustup target add aarch64-apple-darwin | |
# Build 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 | |
# Build for aarch64-apple-darwin. | |
SDKROOT=$(xcrun --show-sdk-path) \ | |
MACOSX_DEPLOYMENT_TARGET=$(xcrun --show-sdk-version) \ | |
cargo build --locked --release --target aarch64-apple-darwin | |
# Run the tests. | |
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/gram | |
if-no-files-found: error | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: aarch64-apple-darwin | |
path: target/aarch64-apple-darwin/release/gram | |
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/gram --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/gram --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.80.0 # [ref:rust_1.80.0] | |
rustup default 1.80.0 # [ref:rust_1.80.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/gram \ | |
artifacts/gram-x86_64-unknown-linux-gnu | |
mv \ | |
artifacts/x86_64-unknown-linux-musl/gram \ | |
artifacts/gram-x86_64-unknown-linux-musl | |
mv \ | |
artifacts/aarch64-unknown-linux-gnu/gram \ | |
artifacts/gram-aarch64-unknown-linux-gnu | |
mv \ | |
artifacts/aarch64-unknown-linux-musl/gram \ | |
artifacts/gram-aarch64-unknown-linux-musl | |
mv \ | |
artifacts/x86_64-apple-darwin/gram \ | |
artifacts/gram-x86_64-apple-darwin | |
mv \ | |
artifacts/aarch64-apple-darwin/gram \ | |
artifacts/gram-aarch64-apple-darwin | |
mv \ | |
artifacts/x86_64-pc-windows-msvc/gram.exe \ | |
artifacts/gram-x86_64-pc-windows-msvc.exe | |
mv \ | |
artifacts/aarch64-pc-windows-msvc/gram.exe \ | |
artifacts/gram-aarch64-pc-windows-msvc.exe | |
# Create the release. | |
gh release create "v$VERSION" --title "v$VERSION" --notes '' \ | |
'artifacts/gram-x86_64-unknown-linux-gnu' \ | |
'artifacts/gram-x86_64-unknown-linux-musl' \ | |
'artifacts/gram-aarch64-unknown-linux-gnu' \ | |
'artifacts/gram-aarch64-unknown-linux-musl' \ | |
'artifacts/gram-x86_64-apple-darwin' \ | |
'artifacts/gram-aarch64-apple-darwin' \ | |
'artifacts/gram-x86_64-pc-windows-msvc.exe' \ | |
'artifacts/gram-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 }} |