Skip to content

ci(publish): update workflow and enable dry run on push to master #2324

ci(publish): update workflow and enable dry run on push to master

ci(publish): update workflow and enable dry run on push to master #2324

Workflow file for this run

name: test
on:
pull_request:
push:
branches:
- master
env:
CARGO_TERM_COLOR: always
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
# https://users.rust-lang.org/t/cross-compiling-how-to-statically-link-glibc/83907/2
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc
# https://github.com/Mozilla-Actions/sccache-action#rust-code
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: sccache
jobs:
skip-check:
continue-on-error: false
runs-on: ubuntu-latest
outputs:
should_skip: ${{ steps.skip_check.outputs.should_skip }}
steps:
- id: skip_check
uses: fkirc/[email protected]
with:
concurrent_skipping: same_content
do_not_skip: '["pull_request"]'
lint:
name: lint (${{ matrix.os }})
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
- os: macos-latest
- os: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Setup Rust
if: ${{ steps.cache_build.outputs.cache-hit != 'true' }}
uses: dtolnay/rust-toolchain@stable
- name: Setup `cargo-binstall` and `taplo`
uses: taiki-e/install-action@v2
with:
tool: taplo-cli
- name: Check TOML format
if: ${{ contains(matrix.os, 'ubuntu') }}
run: |
taplo fmt
git diff --exit-code
- name: Check Rust format
if: ${{ contains(matrix.os, 'ubuntu') }}
run: |
cargo fmt --all --check
- name: Lint Rust
run: |
cargo clippy --all-targets --all-features
choco-test:
runs-on: windows-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-pc-windows-msvc
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-pc-windows-msvc
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test choco -- --test-threads=1
cargo test --features=test choco -- --ignored --test-threads=1
scoop-winget-test:
runs-on: windows-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-pc-windows-msvc
- name: Install scoop
shell: powershell
run: |
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
iwr -useb 'https://raw.githubusercontent.com/scoopinstaller/install/master/install.ps1' -outfile 'install.ps1'
.\install.ps1 -RunAsAdmin
(Resolve-Path ~\scoop\shims).Path >> $Env:GITHUB_PATH
- name: Verify scoop installation
run: |
Get-Command scoop
powershell scoop help
# Ironically, to install winget we need to install scoop first :D
# See: https://github.com/microsoft/winget-cli/issues/1328#issuecomment-1208640211
- name: Install winget
shell: powershell
run: scoop install winget
- name: Verify winget installation
run: |
Get-Command winget
winget --info
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-pc-windows-msvc
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test scoop
cargo test --features=test winget
cargo test --features=test scoop -- --ignored
cargo test --features=test winget -- --ignored
brew-test:
runs-on: macos-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin
- name: Build and run tests
env:
CARGO_BUILD_TARGET: aarch64-apple-darwin
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test brew
cargo test --features=test brew -- --ignored
port-test:
runs-on: macos-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- name: Get OS build
run: |
sw_vers > macos_build.txt
cat macos_build.txt
# https://github.com/actions/cache/issues/629#issuecomment-1189184648
- name: Create gtar wrapper
run: |
mkdir target
cat << 'EOF' > "target/gtar"
#!/bin/bash
set -x
exec sudo /opt/homebrew/bin/gtar.orig "$@"
EOF
- name: Install gtar wrapper
run: |
sudo mv /opt/homebrew/bin/gtar /opt/homebrew/bin/gtar.orig
sudo mv target/gtar /opt/homebrew/bin/gtar
sudo chmod +x /opt/homebrew/bin/gtar
/opt/homebrew/bin/gtar --usage
- name: Cache MacPorts
id: cache-macports
uses: actions/cache@v4
with:
path: /opt/local/
key: ${{ runner.os }}-macports-${{ hashFiles('macos_build.txt') }}
- name: Restore MacPorts PATH
if: steps.cache-macports.outputs.cache-hit == 'true'
run: echo "/opt/local/bin" >> "$GITHUB_PATH"
- name: Install MacPorts
if: steps.cache-macports.outputs.cache-hit != 'true'
run: |
curl -LO https://raw.githubusercontent.com/GiovanniBussi/macports-ci/master/macports-ci
source ./macports-ci install
sudo port install wget
port installed
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin
- name: Build and run tests
env:
CARGO_BUILD_TARGET: aarch64-apple-darwin
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test port
cargo test --features=test port -- --ignored
apt-test:
runs-on: ubuntu-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-unknown-linux-musl
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test apt
cargo test --features=test apt -- --ignored
dnf-test:
runs-on: ubuntu-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
container:
image: fedora:latest
steps:
- uses: actions/checkout@v4
- name: Setup extra build tools
run: dnf install -y make automake gcc gcc-c++ kernel-devel
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-unknown-linux-musl
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test dnf
cargo test --features=test dnf -- --ignored
emerge-test:
runs-on: ubuntu-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
container:
image: gentoo/stage3
steps:
- uses: actions/checkout@v4
- name: Setup extra build tools
run: |
# `pacaptr -Ss` might fail without this line.
emerge --sync || true
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-unknown-linux-musl
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test emerge
cargo test --features=test emerge -- --ignored
xbps-test:
runs-on: ubuntu-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
container:
image: ghcr.io/void-linux/void-glibc-full:latest
steps:
- name: Setup extra build tools
run: |
xbps-install -y -Su || (xbps-install -y -u xbps && xbps-install -y -Su)
xbps-install -y base-devel curl bash
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-unknown-linux-musl
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test xbps
cargo test --features=test xbps -- --ignored
zypper-test:
runs-on: ubuntu-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
container:
image: registry.opensuse.org/opensuse/bci/rust:latest
steps:
- name: Setup extra build tools
run: zypper install -y tar gzip curl gcc bash
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-unknown-linux-musl
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test zypper -- --test-threads=1
cargo test --features=test zypper -- --ignored --test-threads=1
apk-test:
runs-on: ubuntu-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
container:
image: rust:alpine
steps:
- name: Setup extra build tools
run: |
apk add -U build-base tar bash
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Build and run tests
env:
RUSTFLAGS: "-C target-feature=-crt-static"
CARGO_BUILD_TARGET: x86_64-unknown-linux-musl
run: |
cargo build --verbose
cargo test --features=test tests
cargo test --features=test apk
cargo test --features=test apk -- --ignored
pkcon-pip-conda-test:
runs-on: ubuntu-latest
needs: skip-check
if: ${{ needs.skip-check.outputs.should_skip != 'true' }}
steps:
- uses: actions/checkout@v4
- name: Setup extra build tools
run: |
sudo apt-get update
sudo apt-get install -y packagekit packagekit-tools
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- name: Build and run tests
env:
CARGO_BUILD_TARGET: x86_64-unknown-linux-musl
run: |
cargo build --verbose
cargo test --features=test pkcon
cargo test --features=test pip
cargo test --features=test conda
cargo test --features=test pkcon -- --ignored
cargo test --features=test pip -- --ignored
cargo test --features=test conda -- --ignored
# https://github.com/PyO3/pyo3/blob/42601f3af94242b017402b763a495798a92da8f8/.github/workflows/ci.yml#L452-L472
conclusion:
needs:
- lint
- choco-test
- scoop-winget-test
- brew-test
- port-test
- apt-test
- dnf-test
- emerge-test
- xbps-test
- zypper-test
- apk-test
- pkcon-pip-conda-test
if: always()
runs-on: ubuntu-latest
steps:
- name: Result
run: |
jq -C <<< "${needs}"
# Check if all needs were successful or skipped.
"$(jq -r 'all(.result as $result | (["success", "skipped"] | contains([$result])))' <<< "${needs}")"
env:
needs: ${{ toJson(needs) }}