Automate crates publishing #1084
Workflow file for this run
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: CI | |
on: | |
pull_request: | |
push: | |
merge_group: | |
schedule: | |
- cron: '0 0 * * *' # Every day at midnight | |
jobs: | |
checks: | |
name: Checks | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 20 | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: arduino/setup-protoc@v2 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- run: cargo check --examples --tests --all-targets | |
- run: cargo check --examples --tests --all-targets --all-features | |
- run: rustup toolchain install nightly --component rustfmt | |
- run: cargo +nightly fmt --all -- --check --files-with-diff | |
- run: cargo clippy --all-targets -- -D warnings | |
- run: cargo clippy --all-targets --all-features -- -D warnings | |
- run: cargo doc --no-deps | |
env: | |
RUSTDOCFLAGS: -Dwarnings | |
tests: | |
name: Tests | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 15 | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: arduino/setup-protoc@v2 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- env: | |
# runc::tests::test_exec needs $XDG_RUNTIME_DIR to be set | |
XDG_RUNTIME_DIR: /tmp/dummy-xdr | |
run: | | |
# runc-shim::cgroup::test_add_cgroup needs root permission to set cgroup | |
mkdir -p /tmp/dummy-xdr | |
export PROTOC=$(which protoc) | |
sudo -E $(command -v cargo) test | |
sudo -E $(command -v cargo) test --all-features | |
# Collect build timings | |
# See https://blog.rust-lang.org/2022/04/07/Rust-1.60.0.html#cargo---timings | |
timings: | |
name: Timings | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: arduino/setup-protoc@v2 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- run: cargo build --all-features --timings | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: cargo-timing | |
path: target/cargo-timings/cargo-timing.html | |
if-no-files-found: error | |
deny: | |
name: Deny | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: EmbarkStudios/cargo-deny-action@v1 | |
integration: | |
name: Integration | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 40 | |
strategy: | |
matrix: | |
os: [ubuntu-20.04, ubuntu-22.04] | |
containerd: [v1.6.21, v1.7.1] | |
steps: | |
- name: Checkout extensions | |
uses: actions/checkout@v3 | |
- name: Checkout containerd | |
uses: actions/checkout@v3 | |
with: | |
repository: containerd/containerd | |
path: src/github.com/containerd/containerd | |
ref: ${{ matrix.containerd }} | |
- name: Get Go Version | |
run: | | |
go_version=$(awk -F': ' '/GO_VERSION/ {gsub(/["'\'']/, "", $2); print $2; exit}' .github/workflows/release.yml) | |
echo "GO_VERSION=$go_version" >> $GITHUB_ENV | |
working-directory: src/github.com/containerd/containerd | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install containerd | |
env: | |
GOFLAGS: -modcacherw | |
CGO_ENABLED: 1 | |
run: | | |
# Install containerd dependencies first | |
sudo apt-get install -y gperf | |
sudo -E PATH=$PATH script/setup/install-seccomp | |
sudo -E PATH=$PATH script/setup/install-runc | |
sudo -E PATH=$PATH script/setup/install-cni $(grep containernetworking/plugins go.mod | awk '{print $2}') | |
# Install containerd | |
sudo -E PATH=$PATH make bin/containerd GO_BUILD_FLAGS="-mod=vendor" BUILDTAGS="no_btrfs no_devmapper" | |
sudo -E PATH=$PATH install bin/containerd /usr/local/bin/ | |
working-directory: src/github.com/containerd/containerd | |
- name: Install shim | |
run: | | |
cargo build --release --bin containerd-shim-runc-v2-rs | |
sudo install -D ./target/release/containerd-shim-runc-v2-rs /usr/local/bin/ | |
## get latest go version for integrations tests so we can skip runnings tests | |
- uses: actions/setup-go@v4 | |
with: | |
go-version: '1.20.4' | |
- name: Integration | |
env: | |
GOPROXY: direct | |
TEST_RUNTIME: "io.containerd.runc.v2-rs" | |
TESTFLAGS_PARALLEL: 1 | |
EXTRA_TESTFLAGS: "-no-criu -test.skip='(TestContainerPTY|TestContainerExecLargeOutputWithTTY)'" | |
TESTFLAGS_RACE: "-race" | |
run: | | |
# https://github.com/containerd/rust-extensions/issues/147#issuecomment-1684553369 | |
cd integration/client | |
sudo -E PATH=$PATH go mod edit -dropreplace github.com/AdaLogics/go-fuzz-headers | |
sudo -E PATH=$PATH go get -u github.com/AdaLogics/go-fuzz-headers | |
cd ../.. | |
sudo -E PATH=$PATH make integration | |
working-directory: src/github.com/containerd/containerd |