diff --git a/.github/workflows/full_ci.yml b/.github/workflows/full_ci.yml index 826d11d68d583..1e109d0c0a4af 100644 --- a/.github/workflows/full_ci.yml +++ b/.github/workflows/full_ci.yml @@ -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 diff --git a/ci/install-rust.sh b/ci/install-rust.sh index d7a035af21689..40b16d82a0719 100644 --- a/ci/install-rust.sh +++ b/ci/install-rust.sh @@ -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