Skip to content
Open
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
217 changes: 20 additions & 197 deletions .github/workflows/full_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,203 +19,26 @@ jobs:
- name: Check style
run: sh ci/style.sh

build_channels_linux:
name: Build Channels Linux
runs-on: ubuntu-22.04
env:
OS: linux
strategy:
fail-fast: true
max-parallel: 5
matrix:
toolchain:
- stable
- beta
- nightly
- 1.63.0
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
run: TOOLCHAIN=${{ matrix.toolchain }} sh ./ci/install-rust.sh
- name: Execute build.sh
run: TOOLCHAIN=${{ matrix.toolchain }} sh ./ci/build.sh

build_channels_macos:
name: Build Channels macOS
needs: macos
env:
OS: macos
strategy:
fail-fast: true
max-parallel: 4
matrix:
target:
- { toolchain: stable, os: macos-14 }
- { toolchain: beta, os: macos-14 }
- { toolchain: nightly, os: macos-14 }
- { toolchain: 1.63.0, os: macos-14 }
runs-on: ${{ matrix.target.os }}
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
run: TOOLCHAIN=${{ matrix.target.toolchain }} sh ./ci/install-rust.sh
- name: Execute build.sh
run: TOOLCHAIN=${{ matrix.target.toolchain }} sh ./ci/build.sh
build_channels_omnios:
permissions:
contents: read # to fetch code (actions/checkout)

build_channels_windows:
name: Build Channels Windows
runs-on: windows-2022
name: Build Channels on OmniOS (illumos)
runs-on: ubuntu-latest
env:
OS: windows
strategy:
fail-fast: true
matrix:
toolchain:
- 1.63.0
- stable
steps:
- uses: actions/checkout@v4
- name: Self-update rustup
run: rustup self update
shell: bash
- name: Execute build.sh
run: TOOLCHAIN=${{ matrix.toolchain }} sh ./ci/build.sh
shell: bash

macos:
name: macOS
runs-on: macos-14
strategy:
fail-fast: true
matrix:
target:
- aarch64-apple-darwin
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
run: TARGET=${{ matrix.target }} sh ./ci/install-rust.sh
- name: Execute run.sh
run: sh ./ci/run.sh ${{ matrix.target }}

windows:
name: Windows
runs-on: windows-2022
env:
OS: windows
strategy:
fail-fast: true
matrix:
include:
- target: x86_64-pc-windows-gnu
env:
ARCH_BITS: 64
ARCH: x86_64
- target: x86_64-pc-windows-msvc
# FIXME: It currently causes segfaults.
#- target: i686-pc-windows-gnu
# env:
# ARCH_BITS: 32
# ARCH: i686
- target: i686-pc-windows-msvc
steps:
- uses: actions/checkout@v4
- name: Self-update rustup
run: rustup self update
shell: bash
- name: Setup Rust toolchain
run: TARGET=${{ matrix.target }} sh ./ci/install-rust.sh
shell: bash
- name: Execute run.sh
run: sh ./ci/run.sh ${{ matrix.target }}
shell: bash


docker_linux_tier1:
name: Docker Linux Tier1
runs-on: ubuntu-22.04
strategy:
fail-fast: true
matrix:
target:
- i686-unknown-linux-gnu
- x86_64-unknown-linux-gnu
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
run: TARGET=${{ matrix.target }} sh ./ci/install-rust.sh
- name: Execute run-docker.sh
run: sh ./ci/run-docker.sh ${{ matrix.target }}

docker_linux_tier2:
name: Docker Linux Tier2
needs: [docker_linux_tier1, style_check]
runs-on: ubuntu-22.04
strategy:
fail-fast: true
max-parallel: 12
matrix:
target:
- aarch64-linux-android
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
- arm-linux-androideabi
- arm-unknown-linux-gnueabihf
- arm-unknown-linux-musleabihf
- i686-linux-android
- i686-unknown-linux-musl
- loongarch64-unknown-linux-gnu
- powerpc-unknown-linux-gnu
- powerpc64-unknown-linux-gnu
- powerpc64le-unknown-linux-gnu
- s390x-unknown-linux-gnu
- riscv64gc-unknown-linux-gnu
- wasm32-wasip1
- wasm32-wasip2
- sparc64-unknown-linux-gnu
- wasm32-unknown-emscripten
- x86_64-linux-android
# FIXME: Exec format error (os error 8)
# - x86_64-unknown-linux-gnux32
- x86_64-unknown-linux-musl
# FIXME: It seems some items in `src/unix/mod.rs`
# aren't defined on redox actually.
# - x86_64-unknown-redox
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
run: TARGET=${{ matrix.target }} sh ./ci/install-rust.sh
- name: Execute run-docker.sh
run: sh ./ci/run-docker.sh ${{ matrix.target }}

check_cfg:
name: "Check #[cfg]s"
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
run: TOOLCHAIN=nightly sh ./ci/install-rust.sh
- name: Build with check-cfg
run: LIBC_CHECK_CFG=1 cargo build -Z unstable-options -Z check-cfg

# One job that "summarizes" the success state of this pipeline. This can then be added to branch
# protection, rather than having to add each job separately.
success:
name: success
runs-on: ubuntu-22.04
needs:
- docker_linux_tier1
- docker_linux_tier2
- macos
- windows
- style_check
- build_channels_linux
- build_channels_macos
- build_channels_windows
# 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.
if: always() # make sure this is never "skipped"
steps:
# Manually check the status of all dependencies. `if: failure()` does not work.
- name: check if any dependency failed
run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
OS: illumos
steps:
- uses: actions/checkout@v4
- name: Run OmniOS VM
id: omnios-ci
uses: vmactions/omnios-vm@v1
with:
envs: 'OS'
usesh: true
prepare: |
pkg install build-essential
run: |
INSTALL_RUSTUP=1 TOOLCHAIN=nightly sh ci/install-rust.sh
source "$HOME/.cargo/env"
sh ci/run.sh x86_64-unknown-illumos
7 changes: 7 additions & 0 deletions ci/install-rust.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ if [ -n "$TOOLCHAIN" ]; then
else
toolchain=nightly
fi

if [ "$INSTALL_RUSTUP" = "1" ]; then
echo "Install rustup"
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain "$toolchain"
source "$HOME/.cargo/env"
fi

if [ "$OS" = "windows" ]; then
: "${TARGET?The TARGET environment variable must be set.}"
rustup set profile minimal
Expand Down