mirror of
https://github.com/taiki-e/install-action.git
synced 2026-04-09 18:11:48 +08:00
181 lines
6.1 KiB
YAML
181 lines
6.1 KiB
YAML
name: CI
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
- dev
|
|
schedule:
|
|
- cron: '0 0,6,12,18 * * *'
|
|
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
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
tidy:
|
|
uses: taiki-e/workflows/.github/workflows/tidy.yml@main
|
|
|
|
test:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-20.04
|
|
- os: ubuntu-22.04
|
|
- os: ubuntu-20.04
|
|
tool: major.minor.patch
|
|
- os: ubuntu-20.04
|
|
tool: major.minor
|
|
- os: ubuntu-20.04
|
|
tool: major
|
|
- os: macos-11
|
|
- os: macos-12
|
|
- os: windows-2019
|
|
- os: windows-2022
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
persist-credentials: false
|
|
# 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 }}" >>"${GITHUB_OUTPUT}"
|
|
- uses: ./
|
|
with:
|
|
tool: ${{ steps.tool-list.outputs.tool }}
|
|
# 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
|
|
- name: Test powershell
|
|
run: just --version; shfmt --version; protoc --version
|
|
shell: powershell
|
|
if: startsWith(matrix.os, 'windows')
|
|
# We use the version output to check the version of 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 -V)" != "$(jq -r '.latest.version' manifests/cargo-binstall.json)" ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
test-container:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
container:
|
|
- ubuntu:18.04 # glibc 2.27
|
|
- ubuntu:20.04 # glibc 2.31
|
|
- ubuntu:22.04 # glibc 2.35
|
|
- debian:10-slim # glibc 2.28
|
|
- debian:11-slim # glibc 2.31
|
|
- debian:12-slim # glibc 2.36
|
|
- fedora:latest # glibc 2.37 (as of fedora 38)
|
|
- rockylinux:8 # glibc 2.28
|
|
- rockylinux:8-minimal # glibc 2.28
|
|
- rockylinux:9 # glibc 2.34
|
|
- rockylinux:9-minimal # glibc 2.34
|
|
- centos:7 # glibc 2.17
|
|
- alpine:latest # musl 1.2.4 (as of alpine 3.18)
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
container: ${{ matrix.container }}
|
|
steps:
|
|
- name: Install requirements (ubuntu/debian)
|
|
run: |
|
|
set -euxo pipefail
|
|
apt-get -o Acquire::Retries=10 -qq update
|
|
apt-get -o Acquire::Retries=10 -o Dpkg::Use-Pty=0 install -y --no-install-recommends cargo
|
|
if: startsWith(matrix.container, 'ubuntu') || startsWith(matrix.container, 'debian')
|
|
- name: Install requirements (fedora/rockylinux)
|
|
run: |
|
|
set -euxo pipefail
|
|
dnf=dnf
|
|
if ! type -P dnf &>/dev/null; then
|
|
dnf=microdnf
|
|
fi
|
|
# tar and gzip are required for actions/checkout on rockylinux:*-minimal
|
|
$dnf install -y cargo tar gzip
|
|
if: startsWith(matrix.container, 'fedora') || startsWith(matrix.container, 'rockylinux')
|
|
- name: Install requirements (centos)
|
|
run: |
|
|
set -euxo pipefail
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable
|
|
echo "$HOME/.cargo/bin" >>"${GITHUB_PATH}"
|
|
if: startsWith(matrix.container, 'centos')
|
|
- name: Install requirements (alpine)
|
|
run: |
|
|
set -eux
|
|
apk --no-cache add bash cargo
|
|
shell: sh
|
|
if: startsWith(matrix.container, 'alpine')
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
persist-credentials: false
|
|
# 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 >>"${GITHUB_OUTPUT}"
|
|
- uses: ./
|
|
with:
|
|
tool: ${{ steps.tool-list.outputs.tool }}
|
|
|
|
manifest:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
persist-credentials: false
|
|
- name: Install Rust
|
|
run: rustup toolchain add nightly --no-self-update && rustup default nightly
|
|
- run: tools/manifest.sh
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- id: diff
|
|
run: tools/ci/manifest.sh
|
|
if: github.repository_owner == 'taiki-e' && (github.event_name == 'schedule' || github.event_name == 'push' && github.ref == 'refs/heads/main')
|
|
- uses: peter-evans/create-pull-request@v5
|
|
with:
|
|
title: Update manifest
|
|
body: |
|
|
Auto-generated by [create-pull-request](https://github.com/peter-evans/create-pull-request)
|
|
branch: update-manifest
|
|
token: ${{ secrets.CREATE_PR_TOKEN }}
|
|
if: github.repository_owner == 'taiki-e' && (github.event_name == 'schedule' || github.event_name == 'push' && github.ref == 'refs/heads/main') && steps.diff.outputs.success == 'false'
|
|
- run: git add -N . && git diff --exit-code
|