Skip to content

ci: Upload artifacts created by libc-test #435

ci: Upload artifacts created by libc-test

ci: Upload artifacts created by libc-test #435

Workflow file for this run

name: CI
on:
merge_group:
pull_request:
types: [opened, synchronize, reopened]
env:
CARGO_TERM_VERBOSE: true
LIBC_CI: 1
defaults:
run:
shell: bash
jobs:
# style_check:
# name: Style check
# runs-on: ubuntu-24.04
# timeout-minutes: 10
# steps:
# - uses: actions/checkout@v4
# - name: Setup Rust toolchain
# run: ./ci/install-rust.sh
# - name: Check style
# run: ./ci/style.sh
# # This runs `cargo build --target ...` for all T1 and T2 targets`
# verify_build:
# name: Verify build
# strategy:
# matrix:
# toolchain: [stable, nightly, 1.63.0]
# os: [ubuntu-24.04, macos-14, windows-2022]
# include:
# - toolchain: beta
# os: ubuntu-24.04
# runs-on: ${{ matrix.os }}
# timeout-minutes: 25
# env:
# TOOLCHAIN: ${{ matrix.toolchain }}
# steps:
# - uses: actions/checkout@v4
# - name: Setup Rust toolchain
# run: ./ci/install-rust.sh
# # FIXME(ci): These `du` statements are temporary for debugging cache
# - name: Target size before restoring cache
# run: du -sh target | sort -k 2 || true
# - uses: Swatinem/rust-cache@v2
# with:
# key: ${{ matrix.os }}-${{ matrix.toolchain }}
# - name: Target size after restoring cache
# run: du -sh target | sort -k 2 || true
# - name: Execute build.sh
# run: ./ci/verify-build.sh
# - name: Target size after job completion
# run: du -sh target | sort -k 2
test_tier1:
name: Test tier1
strategy:
matrix:
include:
- target: i686-unknown-linux-gnu
docker: true
os: ubuntu-24.04
- target: x86_64-unknown-linux-gnu
docker: true
os: ubuntu-24.04
- target: aarch64-apple-darwin
os: macos-14
- target: x86_64-pc-windows-gnu
os: windows-2022
env:
ARCH_BITS: 64
ARCH: x86_64
- target: x86_64-pc-windows-msvc
os: windows-2022
# FIXME: It currently causes segfaults.
#- target: i686-pc-windows-gnu
# env:
# ARCH_BITS: 32
# ARCH: i686
- target: i686-pc-windows-msvc
os: windows-2022
runs-on: ${{ matrix.os }}
timeout-minutes: 25
env:
TARGET: ${{ matrix.target }}
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
run: ./ci/install-rust.sh
- uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
- name: Run natively
if: "!matrix.docker"
run: ./ci/run.sh ${{ matrix.target }}
- name: Run in Docker
if: "matrix.docker"
run: ./ci/run-docker.sh ${{ matrix.target }}
- name: Create CI artifacts
if: always()
run: python3 ci/create-artifacts.py
- uses: actions/upload-artifact@v4
with:
name: ${{ env.ARCHIVE_NAME }}-${{ matrix.target }}
path: ${{ env.ARCHIVE_PATH }}
retention-days: 5
# test_tier2:
# name: Test tier2
# needs: [test_tier1, style_check]
# runs-on: ubuntu-24.04
# strategy:
# fail-fast: true
# max-parallel: 12
# matrix:
# target:
# # FIXME(sparc): this takes much longer to run than any other job, put
# # it first to make sure it gets a head start.
# - sparc64-unknown-linux-gnu
# - 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
# - loongarch64-unknown-linux-musl
# - powerpc-unknown-linux-gnu
# - powerpc64-unknown-linux-gnu
# - powerpc64le-unknown-linux-gnu
# - riscv64gc-unknown-linux-gnu
# - s390x-unknown-linux-gnu
# - wasm32-unknown-emscripten
# - wasm32-wasip1
# - wasm32-wasip2
# - 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
# timeout-minutes: 25
# env:
# TARGET: ${{ matrix.target }}
# steps:
# - uses: actions/checkout@v4
# - name: Setup Rust toolchain
# run: ./ci/install-rust.sh
# - uses: Swatinem/rust-cache@v2
# with:
# key: ${{ matrix.target }}
# - name: Execute run-docker.sh
# run: ./ci/run-docker.sh ${{ matrix.target }}
# - name: Create CI artifacts
# if: always()
# run: python3 ci/create-artifacts.py
# - uses: actions/upload-artifact@v4
# with:
# name: ${{ env.ARCHIVE_NAME }}-${{ matrix.target }}
# path: ${{ env.ARCHIVE_PATH }}
# retention-days: 5
# test_tier2_vm:
# name: Test tier2 VM
# needs: [test_tier1, style_check]
# runs-on: ubuntu-latest
# strategy:
# fail-fast: true
# matrix:
# target:
# - x86_64-pc-solaris
# timeout-minutes: 25
# steps:
# - uses: actions/checkout@v4
# - name: test on Solaris
# uses: vmactions/solaris-vm@v1
# with:
# release: "11.4-gcc"
# usesh: true
# mem: 4096
# copyback: false
# prepare: |
# set -x
# source <(curl -s https://raw.githubusercontent.com/psumbera/solaris-rust/refs/heads/main/sh.rust-web-install)
# rustc --version
# uname -a
# run: |
# export PATH=$HOME/.rust_solaris/bin:$PATH
# ./ci/run.sh ${{ matrix.target }}
# check_cfg:
# name: "Check #[cfg]s"
# runs-on: ubuntu-24.04
# env:
# TOOLCHAIN: nightly
# timeout-minutes: 10
# steps:
# - uses: actions/checkout@v4
# - name: Setup Rust toolchain
# run: ./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-24.04
needs:
# - style_check
- test_tier1
# - test_tier2
# - test_tier2_vm
# - verify_build
# 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) }}'