Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 80 additions & 93 deletions .github/workflows/main.yml → .github/workflows/main.yaml
Original file line number Diff line number Diff line change
@@ -1,122 +1,107 @@
name: CI
on: [push, pull_request]
on:
push: { branches: [master] }
pull_request:

concurrency:
# Make sure that new pushes cancel running jobs
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always
RUSTDOCFLAGS: -Dwarnings
RUSTFLAGS: -Dwarnings
RUST_BACKTRACE: full

jobs:
test:
name: Test
runs-on: ${{ matrix.os }}
name: Build and test
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include:
- target: aarch64-apple-darwin
os: macos-latest
rust: nightly
os: macos-15
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04-arm
- target: aarch64-pc-windows-msvc
os: windows-latest
rust: nightly
os: windows-2025
test_verbatim: 1
no_std: 1
build_only: 1
- target: arm-unknown-linux-gnueabi
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: arm-unknown-linux-gnueabihf
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: armv7-unknown-linux-gnueabihf
os: ubuntu-24.04
- target: i586-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: i686-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: loongarch64-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
# MIPS targets disabled since they are dropped to tier 3.
# See https://github.com/rust-lang/compiler-team/issues/648
#- target: mips-unknown-linux-gnu
# os: ubuntu-latest
# rust: nightly
#- target: mips64-unknown-linux-gnuabi64
# os: ubuntu-latest
# rust: nightly
#- target: mips64el-unknown-linux-gnuabi64
# os: ubuntu-latest
# rust: nightly
#- target: mipsel-unknown-linux-gnu
# os: ubuntu-latest
# rust: nightly
os: ubuntu-24.04
- target: powerpc-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: powerpc64-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: powerpc64le-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: riscv64gc-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: thumbv6m-none-eabi
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: thumbv7em-none-eabi
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: thumbv7em-none-eabihf
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: thumbv7m-none-eabi
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: wasm32-unknown-unknown
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
rust: nightly
os: ubuntu-24.04
- target: x86_64-apple-darwin
os: macos-13
rust: nightly
- target: i686-pc-windows-msvc
os: windows-latest
rust: nightly
os: windows-2025
test_verbatim: 1
- target: x86_64-pc-windows-msvc
os: windows-latest
rust: nightly
os: windows-2025
test_verbatim: 1
- target: i686-pc-windows-gnu
os: windows-latest
rust: nightly-i686-gnu
os: windows-2025
channel: nightly-i686-gnu
- target: x86_64-pc-windows-gnu
os: windows-latest
rust: nightly-x86_64-gnu
os: windows-2025
channel: nightly-x86_64-gnu
runs-on: ${{ matrix.os }}
env:
BUILD_ONLY: ${{ matrix.build_only }}
TEST_VERBATIM: ${{ matrix.test_verbatim }}
steps:
- name: Print runner information
run: uname -a
- uses: actions/checkout@v4
with:
submodules: true
- name: Install Rust (rustup)
run: rustup update ${{ matrix.rust }} --no-self-update && rustup default ${{ matrix.rust }}
shell: bash
- run: rustup target add ${{ matrix.target }}
- run: rustup component add llvm-tools-preview
run: |
channel="nightly"
# Account for channels that have required components (MinGW)
[ -n "${{ matrix.channel }}" ] && channel="${{ matrix.channel }}"
rustup update "$channel" --no-self-update
rustup default "$channel"
rustup target add "${{ matrix.target }}"
rustup component add llvm-tools-preview
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
- name: Cache Docker layers
uses: actions/cache@v4
if: matrix.os == 'ubuntu-latest'
if: matrix.os == 'ubuntu-24.04'
with:
path: /tmp/.buildx-cache
key: ${{ matrix.target }}-buildx-${{ github.sha }}
Expand All @@ -136,33 +121,49 @@ jobs:
shell: bash

# Non-linux tests just use our raw script
- run: ./ci/run.sh ${{ matrix.target }}
if: matrix.os != 'ubuntu-latest'
- name: Run locally
if: matrix.os != 'ubuntu-24.04'
shell: bash
env:
NO_STD: ${{ matrix.no_std }}
TEST_VERBATIM: ${{ matrix.test_verbatim }}
run: ./ci/run.sh ${{ matrix.target }}

# Configure buildx to use Docker layer caching
- uses: docker/setup-buildx-action@v3
if: matrix.os == 'ubuntu-latest'
if: matrix.os == 'ubuntu-24.04'

# Otherwise we use our docker containers to run builds
- run: cargo generate-lockfile && ./ci/run-docker.sh ${{ matrix.target }}
if: matrix.os == 'ubuntu-latest'
- name: Run in Docker
if: matrix.os == 'ubuntu-24.04'
run: cargo generate-lockfile && ./ci/run-docker.sh ${{ matrix.target }}

# Workaround to keep Docker cache smaller
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
- name: Move Docker cache
if: matrix.os == 'ubuntu-latest'
if: matrix.os == 'ubuntu-24.04'
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache

clippy:
name: Clippy
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
submodules: true
# Unlike rustfmt, stable clippy does not work on code with nightly features.
- name: Install nightly `clippy`
run: |
rustup set profile minimal
rustup default nightly
rustup component add clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy -- -D clippy::all

miri:
name: Miri
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -177,7 +178,7 @@ jobs:

rustfmt:
name: Rustfmt
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -186,27 +187,13 @@ jobs:
run: rustup set profile minimal && rustup default stable && rustup component add rustfmt
- run: cargo fmt -- --check

clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
# Unlike rustfmt, stable clippy does not work on code with nightly features.
- name: Install nightly `clippy`
run: |
rustup set profile minimal && rustup default nightly && rustup component add clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy -- -D clippy::all

success:
needs:
- test
- rustfmt
- clippy
- miri
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
# GitHub branch protection is exceedingly silly and treats "jobs skipped because a dependency
# failed" as success. So we have to do some contortions to ensure the job fails if any of its
# dependencies fails.
Expand Down
File renamed without changes.
9 changes: 7 additions & 2 deletions ci/docker/aarch64-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
ARG IMAGE=ubuntu:24.04
FROM $IMAGE

RUN apt-get update && \
apt-get install -y --no-install-recommends \
gcc libc6-dev ca-certificates \
gcc-aarch64-linux-gnu libc6-dev-arm64-cross \
gcc-aarch64-linux-gnu m4 make libc6-dev-arm64-cross \
qemu-user-static
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \

ENV TOOLCHAIN_PREFIX=aarch64-linux-gnu-
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="$TOOLCHAIN_PREFIX"gcc \
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUNNER=qemu-aarch64-static \
AR_aarch64_unknown_linux_gnu="$TOOLCHAIN_PREFIX"ar \
CC_aarch64_unknown_linux_gnu="$TOOLCHAIN_PREFIX"gcc \
QEMU_LD_PREFIX=/usr/aarch64-linux-gnu \
RUST_TEST_THREADS=1
7 changes: 6 additions & 1 deletion ci/docker/arm-unknown-linux-gnueabi/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
ARG IMAGE=ubuntu:24.04
FROM $IMAGE

RUN apt-get update && \
apt-get install -y --no-install-recommends \
gcc libc6-dev ca-certificates \
gcc-arm-linux-gnueabi libc6-dev-armel-cross qemu-user-static
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_LINKER=arm-linux-gnueabi-gcc \

ENV TOOLCHAIN_PREFIX=arm-linux-gnueabi-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_LINKER="$TOOLCHAIN_PREFIX"gcc \
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABI_RUNNER=qemu-arm-static \
AR_arm_unknown_linux_gnueabi="$TOOLCHAIN_PREFIX"ar \
CC_arm_unknown_linux_gnueabi="$TOOLCHAIN_PREFIX"gcc \
QEMU_LD_PREFIX=/usr/arm-linux-gnueabi \
RUST_TEST_THREADS=1
7 changes: 6 additions & 1 deletion ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
ARG IMAGE=ubuntu:24.04
FROM $IMAGE

RUN apt-get update && \
apt-get install -y --no-install-recommends \
gcc libc6-dev ca-certificates \
gcc-arm-linux-gnueabihf libc6-dev-armhf-cross qemu-user-static
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc \

ENV TOOLCHAIN_PREFIX=arm-linux-gnueabihf-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER="$TOOLCHAIN_PREFIX"gcc \
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_RUNNER=qemu-arm-static \
AR_arm_unknown_linux_gnueabihf="$TOOLCHAIN_PREFIX"ar \
CC_arm_unknown_linux_gnueabihf="$TOOLCHAIN_PREFIX"gcc \
QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf \
RUST_TEST_THREADS=1
7 changes: 6 additions & 1 deletion ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
ARG IMAGE=ubuntu:24.04
FROM $IMAGE

RUN apt-get update && \
apt-get install -y --no-install-recommends \
gcc libc6-dev ca-certificates \
gcc-arm-linux-gnueabihf libc6-dev-armhf-cross qemu-user-static
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc \

ENV TOOLCHAIN_PREFIX=arm-linux-gnueabihf-
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER="$TOOLCHAIN_PREFIX"gcc \
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_RUNNER=qemu-arm-static \
AR_armv7_unknown_linux_gnueabihf="$TOOLCHAIN_PREFIX"ar \
CC_armv7_unknown_linux_gnueabihf="$TOOLCHAIN_PREFIX"gcc \
QEMU_LD_PREFIX=/usr/arm-linux-gnueabihf \
RUST_TEST_THREADS=1
3 changes: 2 additions & 1 deletion ci/docker/i586-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
ARG IMAGE=ubuntu:24.04
FROM $IMAGE

RUN apt-get update && \
apt-get install -y --no-install-recommends \
gcc-multilib libc6-dev ca-certificates
gcc-multilib m4 make libc6-dev ca-certificates
3 changes: 2 additions & 1 deletion ci/docker/i686-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
ARG IMAGE=ubuntu:24.04
FROM $IMAGE

RUN apt-get update && \
apt-get install -y --no-install-recommends \
gcc-multilib libc6-dev ca-certificates
gcc-multilib m4 make libc6-dev ca-certificates
1 change: 1 addition & 0 deletions ci/docker/loongarch64-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ RUN apt-get update && \

ENV CARGO_TARGET_LOONGARCH64_UNKNOWN_LINUX_GNU_LINKER=loongarch64-linux-gnu-gcc-14 \
CARGO_TARGET_LOONGARCH64_UNKNOWN_LINUX_GNU_RUNNER=qemu-loongarch64-static \
AR_loongarch64_unknown_linux_gnu=loongarch64-linux-gnu-ar \
CC_loongarch64_unknown_linux_gnu=loongarch64-linux-gnu-gcc-14 \
QEMU_LD_PREFIX=/usr/loongarch64-linux-gnu \
RUST_TEST_THREADS=1
5 changes: 4 additions & 1 deletion ci/docker/mips-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ RUN apt-get update && \
gcc-mips-linux-gnu libc6-dev-mips-cross \
binfmt-support qemu-user-static qemu-system-mips

ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_GNU_LINKER=mips-linux-gnu-gcc \
ENV TOOLCHAIN_PREFIX=mips-linux-gnu-
ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_GNU_LINKER="$TOOLCHAIN_PREFIX"gcc \
CARGO_TARGET_MIPS_UNKNOWN_LINUX_GNU_RUNNER=qemu-mips-static \
AR_mips_unknown_linux_gnu="$TOOLCHAIN_PREFIX"ar \
CC_mips_unknown_linux_gnu="$TOOLCHAIN_PREFIX"gcc \
QEMU_LD_PREFIX=/usr/mips-linux-gnu \
RUST_TEST_THREADS=1
8 changes: 6 additions & 2 deletions ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
ARG IMAGE=ubuntu:24.04
FROM $IMAGE

RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
Expand All @@ -9,8 +10,11 @@ RUN apt-get update && \
libc6-dev-mips64-cross \
qemu-user-static \
qemu-system-mips
ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER=mips64-linux-gnuabi64-gcc \

ENV TOOLCHAIN_PREFIX=mips64-linux-gnuabi64-
ENV CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_LINKER="$TOOLCHAIN_PREFIX"gcc \
CARGO_TARGET_MIPS64_UNKNOWN_LINUX_GNUABI64_RUNNER=qemu-mips64-static \
CC_mips64_unknown_linux_gnuabi64=mips64-linux-gnuabi64-gcc \
AR_mips64_unknown_linux_gnuabi64="$TOOLCHAIN_PREFIX"ar \
CC_mips64_unknown_linux_gnuabi64="$TOOLCHAIN_PREFIX"gcc \
QEMU_LD_PREFIX=/usr/mips64-linux-gnuabi64 \
RUST_TEST_THREADS=1
Loading
Loading