mirror of
https://github.com/taiki-e/install-action.git
synced 2025-12-27 01:54:13 -05:00
295 lines
11 KiB
YAML
295 lines
11 KiB
YAML
name: CI
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
- dev
|
|
- ci-*
|
|
schedule:
|
|
- cron: '0 0 * * *'
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
CARGO_INCREMENTAL: 0
|
|
CARGO_NET_GIT_FETCH_WITH_CLI: true
|
|
CARGO_NET_RETRY: 10
|
|
CARGO_TERM_COLOR: always
|
|
RUST_BACKTRACE: 1
|
|
RUSTFLAGS: -D warnings
|
|
RUSTUP_MAX_RETRIES: 10
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash --noprofile --norc -CeEuxo pipefail {0}
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
miri:
|
|
uses: taiki-e/github-actions/.github/workflows/miri.yml@main
|
|
with:
|
|
# NB: sync with test job's --exclude option
|
|
args: --exclude install-action-internal-codegen
|
|
msrv:
|
|
uses: taiki-e/github-actions/.github/workflows/msrv.yml@main
|
|
test-manifest-schema:
|
|
uses: taiki-e/github-actions/.github/workflows/test.yml@main
|
|
with:
|
|
# NB: sync with miri job's --exclude option
|
|
test-args: --exclude install-action-internal-codegen
|
|
no-std: false
|
|
tidy:
|
|
uses: taiki-e/github-actions/.github/workflows/tidy.yml@main
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write # for gh pr edit --add-assignee
|
|
repository-projects: read # for gh pr edit --add-assignee
|
|
secrets: inherit
|
|
|
|
test:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
# 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
|
|
- os: ubuntu-24.04
|
|
- os: ubuntu-24.04-arm
|
|
- os: ubuntu-slim
|
|
- os: ubuntu-22.04
|
|
tool: major.minor.patch
|
|
- os: ubuntu-22.04
|
|
tool: major.minor
|
|
- os: ubuntu-22.04
|
|
tool: major
|
|
- os: macos-14
|
|
- os: macos-15
|
|
- os: macos-15-intel
|
|
- os: macos-26
|
|
- os: windows-2022
|
|
- os: windows-2022
|
|
bash: msys64
|
|
- os: windows-2022
|
|
bash: cygwin
|
|
- os: windows-2025
|
|
- os: windows-2025
|
|
bash: msys64
|
|
- os: windows-2025
|
|
bash: cygwin
|
|
- os: windows-11-arm
|
|
- os: windows-2022
|
|
tool: major.minor.patch
|
|
- os: windows-2022
|
|
tool: major.minor
|
|
- os: windows-2022
|
|
tool: major
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: taiki-e/checkout-action@v1
|
|
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version`
|
|
- run: rm -- Cargo.toml
|
|
- name: Generate tool list
|
|
id: tool-list
|
|
run: tools/ci/tool-list.sh "${{ matrix.tool }}" "${{ matrix.os }}" "${{ matrix.bash }}" >>"${GITHUB_OUTPUT}"
|
|
- run: |
|
|
printf '%s\n' 'C:\msys64\mingw32\bin' >>"${GITHUB_PATH}"
|
|
printf '%s\n' 'C:\msys64\usr\bin' >>"${GITHUB_PATH}"
|
|
if: matrix.bash == 'msys64'
|
|
- 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'
|
|
- run: env
|
|
- uses: ./
|
|
with:
|
|
tool: ${{ steps.tool-list.outputs.tool }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
# 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
|
|
shell: bash
|
|
- name: Test sh
|
|
run: just --version && shfmt --version && protoc --version
|
|
shell: sh
|
|
if: startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos')
|
|
- name: Test pwsh
|
|
run: just --version; shfmt --version; protoc --version
|
|
shell: pwsh
|
|
if: matrix.os != 'ubuntu-slim'
|
|
- name: Test powershell
|
|
run: just --version; shfmt --version; protoc --version
|
|
shell: powershell
|
|
if: startsWith(matrix.os, 'windows')
|
|
- name: Test cmd
|
|
run: just --version & shfmt --version & protoc --version
|
|
shell: cmd
|
|
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'
|
|
|
|
test-alias:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: taiki-e/checkout-action@v1
|
|
# 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/publish.rs and case for aliases in main.sh.
|
|
tool: |
|
|
nextest
|
|
taplo-cli
|
|
typos-cli
|
|
wasm-bindgen-cli
|
|
wasmtime-cli
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- 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:
|
|
fallback:
|
|
- none
|
|
- cargo-install
|
|
runs-on: ubuntu-24.04-arm
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: taiki-e/checkout-action@v1
|
|
# 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@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
|
|
- 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
|
|
- 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:latest # musl 1.2.5 (as of alpine 3.20)
|
|
# - openwrt/rootfs:x86-64-openwrt-24.10 # musl 1.2.5
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
container: ${{ matrix.container }}
|
|
steps:
|
|
- name: Install requirements (old debian)
|
|
run: |
|
|
# 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)
|
|
sed -i /etc/apt/sources.list -e 's/deb.debian.org/archive.debian.org/g' \
|
|
-e 's|security.debian.org|archive.debian.org/|g' \
|
|
-e "/${codename}-updates/d"
|
|
if: startsWith(matrix.container, 'debian:9') || startsWith(matrix.container, 'debian:10')
|
|
- name: Install requirements (centos)
|
|
run: |
|
|
# In CentOS, the old repositories is removed from the main mirrors just after EoL.
|
|
# https://github.com/rust-lang/rust/pull/126352
|
|
sed -i /etc/yum.repos.d/*.repo -e 's!^mirrorlist!#mirrorlist!' \
|
|
-e 's!^#baseurl=http://mirror.centos.org/!baseurl=https://vault.centos.org/!'
|
|
sed -i 's/enabled=1/enabled=0/' /etc/yum/pluginconf.d/fastestmirror.conf
|
|
if [[ "${{ matrix.container }}" == "centos:6" ]]; then
|
|
# CentOS 6's curl (7.19.7) has no curl has no --proto/--tlsv1.2.
|
|
yum install -y gcc openssl-devel
|
|
curl -fsSL --retry 10 https://curl.se/download/curl-7.34.0.tar.gz | tar xzf -
|
|
cd -- curl-*
|
|
./configure --prefix=/usr/local --with-ssl
|
|
make
|
|
make install
|
|
# for checkout-action https://github.com/taiki-e/checkout-action/blob/v1.3.0/.github/workflows/ci.yml#L135-L143
|
|
yum install -y openssh-clients perl perl-Error perl-TermReadKey rsync
|
|
rpm -i \
|
|
https://vault.ius.io/el6/x86_64/packages/p/perl-Git18-1.8.5.5-4.ius.el6.noarch.rpm \
|
|
https://vault.ius.io/el6/x86_64/packages/g/git18-1.8.5.5-4.ius.el6.x86_64.rpm
|
|
fi
|
|
if: startsWith(matrix.container, 'centos')
|
|
- uses: taiki-e/checkout-action@v1
|
|
# cross attempts to install rust-src when Cargo.toml is available even if `cross --version`
|
|
- run: rm -- Cargo.toml
|
|
- name: Generate tool list
|
|
id: tool-list
|
|
run: tools/ci/tool-list.sh "" "${{ matrix.container }}" >>"${GITHUB_OUTPUT}"
|
|
# remove bash installed by checkout-action
|
|
- run: apk --no-cache del bash
|
|
shell: sh
|
|
if: startsWith(matrix.container, 'alpine')
|
|
- uses: ./
|
|
with:
|
|
tool: ${{ steps.tool-list.outputs.tool }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Test bash
|
|
run: just --version && shfmt --version
|
|
shell: bash
|
|
# 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'))
|
|
- name: Test sh
|
|
run: just --version && shfmt --version
|
|
shell: sh
|
|
# 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'))
|