ci: Update config

This commit is contained in:
Taiki Endo
2026-05-17 15:43:16 +09:00
parent bcc3289ff6
commit e22b9c4d37
3 changed files with 202 additions and 183 deletions
-1
View File
@@ -31,7 +31,6 @@ ppcle
prek prek
quickinstall quickinstall
rdme rdme
rootfs
sccache sccache
SHASUMS SHASUMS
sigstore sigstore
+194 -179
View File
@@ -32,13 +32,16 @@ concurrency:
jobs: jobs:
miri: miri:
needs: tidy
uses: taiki-e/github-actions/.github/workflows/miri.yml@931686d4e4cf88b13e790040727ccde2dba8ec62 # main uses: taiki-e/github-actions/.github/workflows/miri.yml@931686d4e4cf88b13e790040727ccde2dba8ec62 # main
with: with:
# NB: sync with test job's --exclude option # NB: sync with test job's --exclude option
args: --exclude install-action-internal-codegen args: --exclude install-action-internal-codegen
msrv: msrv:
needs: tidy
uses: taiki-e/github-actions/.github/workflows/msrv.yml@931686d4e4cf88b13e790040727ccde2dba8ec62 # main uses: taiki-e/github-actions/.github/workflows/msrv.yml@931686d4e4cf88b13e790040727ccde2dba8ec62 # main
test-manifest-schema: test-manifest-schema:
needs: tidy
uses: taiki-e/github-actions/.github/workflows/test.yml@931686d4e4cf88b13e790040727ccde2dba8ec62 # main uses: taiki-e/github-actions/.github/workflows/test.yml@931686d4e4cf88b13e790040727ccde2dba8ec62 # main
with: with:
# NB: sync with miri job's --exclude option # NB: sync with miri job's --exclude option
@@ -50,15 +53,18 @@ jobs:
security-events: write # for github/codeql-action/* security-events: write # for github/codeql-action/*
test: test:
needs: tidy
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
# NB: Sync list with https://github.com/taiki-e/checkout-action/blob/HEAD/.github/workflows/ci.yml # NB: Sync list with https://github.com/taiki-e/checkout-action/blob/HEAD/.github/workflows/ci.yml
- os: ubuntu-22.04 # --------------------------------------------------------------------
- os: ubuntu-22.04-arm # GitHub-hosted runners
- os: ubuntu-24.04 - os: ubuntu-24.04
- os: ubuntu-24.04-arm - os: ubuntu-24.04-arm
- os: ubuntu-22.04
- os: ubuntu-22.04-arm
- os: ubuntu-slim - os: ubuntu-slim
- os: ubuntu-22.04 - os: ubuntu-22.04
tool: major.minor.patch tool: major.minor.patch
@@ -66,19 +72,19 @@ jobs:
tool: major.minor tool: major.minor
- os: ubuntu-22.04 - os: ubuntu-22.04
tool: major tool: major
- os: macos-14 - os: macos-26
- os: macos-15 - os: macos-15
- os: macos-15-intel - os: macos-15-intel
- os: macos-26 - os: macos-14
- os: windows-2022 - os: windows-2025
- os: windows-2022 - os: windows-2025
bash: msys64 bash: msys2
- os: windows-2022 - os: windows-2025
bash: cygwin bash: cygwin
- os: windows-2025 - os: windows-2022
- os: windows-2025 - os: windows-2022
bash: msys64 bash: msys2
- os: windows-2025 - os: windows-2022
bash: cygwin bash: cygwin
- os: windows-11-arm - os: windows-11-arm
- os: windows-2022 - os: windows-2022
@@ -87,170 +93,75 @@ jobs:
tool: major.minor tool: major.minor
- os: windows-2022 - os: windows-2022
tool: major tool: major
runs-on: ${{ matrix.os }} # --------------------------------------------------------------------
timeout-minutes: 60 # Containers
steps: # --------------------------------------------------------------------
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 # Debian-based
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version` - container: debian:sid # glibc
- run: rm -- Cargo.toml - container: debian:testing # glibc
- name: Generate tool list - container: debian:13-slim # glibc 2.41
id: tool-list - container: debian:12-slim # glibc 2.36
run: tools/ci/tool-list.sh "${TOOL}" "${OS}" "${BASH}" >>"${GITHUB_OUTPUT}" - container: debian:11-slim # glibc 2.31, EoL
env: - container: debian:10-slim # glibc 2.28, EoL, end of LTS
TOOL: ${{ matrix.tool }} - container: debian:9-slim # glibc 2.24, EoL, end of LTS
OS: ${{ matrix.os }} - container: debian/eol:jessie-slim # 8, glibc 2.19, EoL, end of LTS
BASH: ${{ matrix.bash }} - container: ubuntu:devel # glibc
- run: | - container: ubuntu:rolling # glibc
printf '%s\n' 'C:\msys64\mingw32\bin' >>"${GITHUB_PATH}" - container: ubuntu:26.04 # glibc 2.43
printf '%s\n' 'C:\msys64\usr\bin' >>"${GITHUB_PATH}" - container: ubuntu:24.04 # glibc 2.39
if: matrix.bash == 'msys64' - container: ubuntu:22.04 # glibc 2.35
- run: | - container: ubuntu:20.04 # glibc 2.31, EoL
choco install --no-progress --requirechecksums cygwin - container: ubuntu:18.04 # glibc 2.27, EoL
printf '%s\n' 'C:\tools\cygwin\bin' >>"${GITHUB_PATH}" - container: ubuntu:16.04 # glibc 2.23, EoL, end of ESM
printf '%s\n' 'C:\tools\cygwin\usr\bin' >>"${GITHUB_PATH}" - container: ubuntu:14.04 # glibc 2.19, EoL, end of ESM
if: matrix.bash == 'cygwin' # --------------------------------------------------------------------
- run: env # Fedora/RHEL-based
- uses: ./ - container: fedora:latest # glibc
with: - container: centos:7 # glibc 2.17, EoL
tool: ${{ steps.tool-list.outputs.tool }} - container: centos:6 # glibc 2.12, EoL
# Test all shells listed in https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell - container: almalinux:10 # glibc 2.39
- name: Test bash - container: almalinux:10-minimal # glibc 2.39
run: just --version && shfmt --version && protoc --version && rustc --version && cargo --version && rustup --version - container: almalinux:9 # glibc 2.34
shell: bash - container: almalinux:9-minimal # glibc 2.34
- name: Test sh - container: almalinux:8 # glibc 2.28
run: just --version && shfmt --version && protoc --version && rustc --version && cargo --version && rustup --version - container: almalinux:8-minimal # glibc 2.28
shell: sh # --------------------------------------------------------------------
if: startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos') # SUSE-based
- name: Test pwsh - container: opensuse/tumbleweed:latest # glibc
run: just --version; shfmt --version; protoc --version; rustc --version; cargo --version; rustup --version - container: opensuse/leap:latest # glibc
shell: pwsh # --------------------------------------------------------------------
if: matrix.os != 'ubuntu-slim' # apk
- name: Test powershell - container: alpine:3.23 # musl 1.2.5
run: just --version; shfmt --version; protoc --version; rustc --version; cargo --version; rustup --version - container: alpine:3.22 # musl 1.2.5
shell: powershell - container: alpine:3.21 # musl 1.2.5
if: startsWith(matrix.os, 'windows') # Skip intermediate versions that have reached EoL by default.
- name: Test cmd # - container: alpine:3.20 # musl 1.2.5, EoL
run: just --version & shfmt --version & protoc --version & rustc --version & cargo --version & rustup --version # - container: alpine:3.19 # musl 1.2.4, EoL
shell: cmd # zizmor: ignore[misfeature] used for compatibility testing # - container: alpine:3.18 # musl 1.2.4, EoL
if: startsWith(matrix.os, 'windows') # - container: alpine:3.17 # musl 1.2.3, EoL
# We use the version output to check the version of cargo-binstall, but they # - container: alpine:3.16 # musl 1.2.3, EoL
# several times change the version output format in the past so we need to # - container: alpine:3.15 # musl 1.2.2, EoL
# check it with CI. (e.g., 0.14.0->0.16.0 update change it # - container: alpine:3.14 # musl 1.2.2, EoL
# from "cargo-binstall <version>" to "<version>") # - container: alpine:3.13 # musl 1.2.2, EoL
- run: | # - container: alpine:3.12 # musl 1.1.24, EoL
if [[ "$(cargo-binstall binstall -V)" != "$(jq -r '.latest.version' manifests/cargo-binstall.json)" ]]; then # - container: alpine:3.11 # musl 1.1.24, EoL
exit 1 # - container: alpine:3.10 # musl 1.1.22, EoL
fi # - container: alpine:3.9 # musl 1.1.20, EoL
if: matrix.bash != 'cygwin' && matrix.os != 'windows-11-arm' # - container: alpine:3.8 # musl 1.1.19, EoL
# - container: alpine:3.7 # musl 1.1.18, EoL, broken env command
test-alias: # - container: alpine:3.6 # musl 1.1.16, EoL, broken env command
runs-on: ubuntu-24.04 # - container: alpine:3.5 # musl 1.1.15, EoL
timeout-minutes: 60 # - container: alpine:3.4 # musl 1.1.14, EoL
steps: # - container: alpine:3.3 # musl 1.1.12, EoL
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2 - container: alpine:3.2 # musl 1.1.11, EoL
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version` # --------------------------------------------------------------------
- run: rm -- Cargo.toml # Arch-based
- run: env - container: archlinux:latest # glibc
- uses: ./ runs-on: ${{ matrix.os || 'ubuntu-24.04' }}
with: timeout-minutes: 30
# NB: Update alias list in tools/ci/release-post-commit.sh, case for aliases in main.sh,
# and match for alias for tools/codegen/src/tools-markdown.rs.
tool: |
nextest
taplo-cli
typos-cli
wasm-bindgen-cli
wasmtime-cli
- name: Test bash
run: cargo-nextest nextest --version && taplo --version
shell: bash
- name: Test sh
run: cargo-nextest nextest --version && taplo --version
shell: sh
test-fallback:
strategy:
fail-fast: false
matrix:
include:
- fallback: none
- fallback: cargo-install
- fallback: cargo-binstall
- fallback: cargo-binstall
version: 0.3
runs-on: ubuntu-24.04-arm
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version`
- run: rm -- Cargo.toml
- run: env
- uses: ./
id: install
continue-on-error: ${{ matrix.fallback == 'none' }}
with:
tool: parse-changelog@${{ matrix.version || '0.4.6' }}
fallback: ${{ matrix.fallback }}
- run: exit 1
if: matrix.fallback == 'none' && steps.install.outcome != 'failure'
- name: Test bash
run: parse-changelog --version
shell: bash
if: matrix.fallback != 'none'
- name: Test sh
run: parse-changelog --version
shell: sh
if: matrix.fallback != 'none'
test-container:
strategy:
fail-fast: false
matrix:
container:
# NB: Sync list with https://github.com/taiki-e/checkout-action/blob/HEAD/.github/workflows/ci.yml
- ubuntu:14.04 # glibc 2.19
- ubuntu:16.04 # glibc 2.23
- ubuntu:18.04 # glibc 2.27
- ubuntu:20.04 # glibc 2.31
- ubuntu:22.04 # glibc 2.35
- ubuntu:24.04 # glibc 2.39
- ubuntu:26.04 # glibc 2.42
- ubuntu:rolling
- debian:9-slim # glibc 2.24
- debian:10-slim # glibc 2.28
- debian:11-slim # glibc 2.31
- debian:12-slim # glibc 2.36
- debian:13-slim # glibc 2.41
- debian:testing
- fedora:latest # glibc 2.39 (as of fedora 40)
- almalinux:8 # glibc 2.28
- almalinux:8-minimal # glibc 2.28
- almalinux:9 # glibc 2.34
- almalinux:9-minimal # glibc 2.34
- almalinux:10 # glibc 2.39
- almalinux:10-minimal # glibc 2.39
- centos:6 # glibc 2.12
- centos:7 # glibc 2.17
- opensuse/leap:latest # glibc 2.38 (as of leap 15.6)
- opensuse/tumbleweed:latest # glibc 2.39 (as of 2024-07-19)
# - archlinux:latest # glibc 2.39 (as of 2024-07-19)
- alpine:3.2 # musl 1.1.11
- alpine:3.14 # musl 1.2.2
- alpine:3.15 # musl 1.2.2
- alpine:3.16 # musl 1.2.3
- alpine:3.17 # musl 1.2.3
- alpine:3.18 # musl 1.2.4
- alpine:3.19 # musl 1.2.4
- alpine:3.20 # musl 1.2.5
- alpine:3.21 # musl 1.2.5
- alpine:3.22 # musl 1.2.5
- alpine:3.23 # musl 1.2.5
# - openwrt/rootfs:x86-64-openwrt-24.10 # musl 1.2.5
runs-on: ubuntu-24.04
timeout-minutes: 60
container: ${{ matrix.container }} container: ${{ matrix.container }}
steps: steps:
- name: Install requirements (old debian) - name: Install requirements (old Debian)
run: | run: |
# In Debian, the old repositories is removed from the main mirrors some time after EoL. # In Debian, the old repositories is removed from the main mirrors some time after EoL.
codename=$(grep -E '^VERSION_CODENAME=' /etc/os-release | cut -d= -f2) codename=$(grep -E '^VERSION_CODENAME=' /etc/os-release | cut -d= -f2)
@@ -258,7 +169,7 @@ jobs:
-e 's|security.debian.org|archive.debian.org/|g' \ -e 's|security.debian.org|archive.debian.org/|g' \
-e "/${codename}-updates/d" -e "/${codename}-updates/d"
if: startsWith(matrix.container, 'debian:9') || startsWith(matrix.container, 'debian:10') if: startsWith(matrix.container, 'debian:9') || startsWith(matrix.container, 'debian:10')
- name: Install requirements (centos) - name: Install requirements (CentOS)
run: | run: |
retry() { retry() {
for i in {1..10}; do for i in {1..10}; do
@@ -301,9 +212,22 @@ jobs:
- run: rm -- Cargo.toml - run: rm -- Cargo.toml
- name: Generate tool list - name: Generate tool list
id: tool-list id: tool-list
run: tools/ci/tool-list.sh "" "${CONTAINER}" >>"${GITHUB_OUTPUT}" run: tools/ci/tool-list.sh "${TOOL}" "${OS}" "${BASH}" >>"${GITHUB_OUTPUT}"
env: env:
CONTAINER: ${{ matrix.container }} TOOL: ${{ matrix.tool }}
OS: ${{ matrix.container || matrix.os }}
BASH: ${{ matrix.bash }}
- name: Setup MSYS2 bash
run: |
printf '%s\n' 'C:\msys64\mingw32\bin' >>"${GITHUB_PATH}"
printf '%s\n' 'C:\msys64\usr\bin' >>"${GITHUB_PATH}"
if: matrix.bash == 'msys2'
- name: Setup Cygwin bash
run: |
choco install --no-progress --requirechecksums cygwin
printf '%s\n' 'C:\tools\cygwin\bin' >>"${GITHUB_PATH}"
printf '%s\n' 'C:\tools\cygwin\usr\bin' >>"${GITHUB_PATH}"
if: matrix.bash == 'cygwin'
# remove bash installed by checkout-action # remove bash installed by checkout-action
- run: apk --no-cache del bash - run: apk --no-cache del bash
shell: sh shell: sh
@@ -311,13 +235,104 @@ jobs:
- uses: ./ - uses: ./
with: with:
tool: ${{ steps.tool-list.outputs.tool }} tool: ${{ steps.tool-list.outputs.tool }}
# Test all shells listed in https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell
- name: Test bash
run: just --version && shfmt --version && protoc --version && rustc --version && cargo --version && rustup --version
shell: bash
if: matrix.container == ''
- name: Test bash - name: Test bash
run: just --version && shfmt --version run: just --version && shfmt --version
shell: bash shell: bash
# TODO: OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown # TODO: OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
if: (!startsWith(matrix.container, 'opensuse')) if: matrix.container != '' && !startsWith(matrix.container, 'opensuse')
- name: Test sh
run: just --version && shfmt --version && protoc --version && rustc --version && cargo --version && rustup --version
shell: sh
if: matrix.container == ''
- name: Test sh - name: Test sh
run: just --version && shfmt --version run: just --version && shfmt --version
shell: sh shell: sh
# TODO: OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown # TODO: OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown
if: (!startsWith(matrix.container, 'opensuse')) if: matrix.container != '' && !startsWith(matrix.container, 'opensuse')
- name: Test pwsh
run: just --version; shfmt --version; protoc --version; rustc --version; cargo --version; rustup --version
shell: pwsh
if: matrix.os != 'ubuntu-slim' && matrix.container == ''
- name: Test powershell
run: just --version; shfmt --version; protoc --version; rustc --version; cargo --version; rustup --version
shell: powershell
if: startsWith(matrix.os, 'windows')
- name: Test cmd
run: just --version & shfmt --version & protoc --version & rustc --version & cargo --version & rustup --version
shell: cmd # zizmor: ignore[misfeature] used for compatibility testing
if: startsWith(matrix.os, 'windows')
# We use the version output to check the version of cargo-binstall, but they
# several times change the version output format in the past so we need to
# check it with CI. (e.g., 0.14.0->0.16.0 update change it
# from "cargo-binstall <version>" to "<version>")
- run: |
if [[ "$(cargo-binstall binstall -V)" != "$(jq -r '.latest.version' manifests/cargo-binstall.json)" ]]; then
exit 1
fi
if: matrix.bash != 'cygwin' && matrix.os != 'windows-11-arm' && !startsWith(matrix.container, 'opensuse')
test-alias:
needs: tidy
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version`
- run: rm -- Cargo.toml
- run: env
- uses: ./
with:
# NB: Update alias list in tools/ci/release-post-commit.sh, case for aliases in main.sh,
# and match for alias for tools/codegen/src/tools-markdown.rs.
tool: |
nextest
taplo-cli
typos-cli
wasm-bindgen-cli
wasmtime-cli
- name: Test bash
run: cargo-nextest nextest --version && taplo --version
shell: bash
- name: Test sh
run: cargo-nextest nextest --version && taplo --version
shell: sh
test-fallback:
needs: tidy
strategy:
fail-fast: false
matrix:
include:
- fallback: none
- fallback: cargo-install
- fallback: cargo-binstall
- fallback: cargo-binstall
version: 0.3
runs-on: ubuntu-24.04-arm
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version`
- run: rm -- Cargo.toml
- run: env
- uses: ./
id: install
continue-on-error: ${{ matrix.fallback == 'none' }}
with:
tool: parse-changelog@${{ matrix.version || '0.4.6' }}
fallback: ${{ matrix.fallback }}
- run: exit 1
if: matrix.fallback == 'none' && steps.install.outcome != 'failure'
- name: Test bash
run: parse-changelog --version
shell: bash
if: matrix.fallback != 'none'
- name: Test sh
run: parse-changelog --version
shell: sh
if: matrix.fallback != 'none'
+8 -3
View File
@@ -119,14 +119,19 @@ case "$(uname -s)" in
if ! type -P apt-get >/dev/null; then if ! type -P apt-get >/dev/null; then
incompat_tools+=(cyclonedx) incompat_tools+=(cyclonedx)
fi fi
if [[ "${runner}" == "ubuntu:14.04" ]]; then if [[ "${runner}" == 'ubuntu:14.04' ]]; then
incompat_tools+=(cyclonedx) incompat_tools+=(cyclonedx)
fi fi
if [[ "${runner}" == "almalinux:10"* ]]; then if [[ "${runner}" == 'almalinux:10'* ]]; then
incompat_tools+=(cargo-deb) # no dpkg in package manager incompat_tools+=(cargo-deb) # no dpkg in package manager
fi fi
;; ;;
Darwin) host_os=macos ;; Darwin)
host_os=macos
if [[ "${runner}" == 'macos-15-intel' ]]; then
incompat_tools+=(release-plz) # no prebuilt binary
fi
;;
MINGW* | MSYS* | CYGWIN* | Windows_NT) host_os=windows ;; MINGW* | MSYS* | CYGWIN* | Windows_NT) host_os=windows ;;
*) bail "unrecognized OS type '$(uname -s)'" ;; *) bail "unrecognized OS type '$(uname -s)'" ;;
esac esac