Merge pull request #419 from gramlang/default-numeric-fallback #1097
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@v3 | |
- 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: ${{ github.event_name == 'push' }} | |
write_remote_cache: ${{ github.event_name == 'push' }} | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo 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@v3 | |
with: | |
name: x86_64-unknown-linux-gnu | |
path: artifacts/gram | |
if-no-files-found: error | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo 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@v3 | |
with: | |
name: x86_64-unknown-linux-musl | |
path: artifacts/gram | |
if-no-files-found: error | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo 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@v3 | |
with: | |
name: aarch64-unknown-linux-gnu | |
path: artifacts/gram | |
if-no-files-found: error | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo 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@v3 | |
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@v3 | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo pipefail | |
# Install the appropriate version of Rust. | |
rustup toolchain install 1.74.0 # [ref:rust_1.74.0] | |
rustup default 1.74.0 # [ref:rust_1.74.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@v3 | |
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@v3 | |
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@v3 | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo pipefail | |
# Install the appropriate version of Rust. | |
rustup toolchain install 1.74.0 # [ref:rust_1.74.0] | |
rustup default 1.74.0 # [ref:rust_1.74.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@v3 | |
with: | |
name: x86_64-apple-darwin | |
path: target/x86_64-apple-darwin/release/gram | |
if-no-files-found: error | |
- uses: actions/upload-artifact@v3 | |
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@v3 | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo 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@v3 | |
- run: | | |
# Make Bash not silently ignore errors. | |
set -euo 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@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
path: artifacts/ | |
- env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
# Make Bash not silently ignore errors. | |
set -euo pipefail | |
# Install the appropriate version of Rust. | |
rustup toolchain install 1.74.0 # [ref:rust_1.74.0] | |
rustup default 1.74.0 # [ref:rust_1.74.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 }} |