Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ce6ef907a3 | |||
| 6d7a42908e | |||
| 6781fd19ff | |||
| a57fab1097 | |||
| cbcfb63b3c | |||
| 22768809da | |||
| beda42d1b9 | |||
| 8c81258e17 | |||
| 72ba4c2e30 | |||
| 46c12f2314 | |||
| ebed786d72 | |||
| 96c7d7b3fb | |||
| 77ed6cea39 | |||
| 6375f431d4 | |||
| a7630fe7b4 | |||
| 4e684d9160 | |||
| 7a3c44a504 | |||
| bcafa651c6 | |||
| 5fcbfa21c8 | |||
| 998827db3b | |||
| 36ea559b28 | |||
| b9748cee12 | |||
| da5042f4cf | |||
| 15d8d82803 | |||
| 72ebf88048 | |||
| 0b245c87d3 | |||
| d7d9bd3dfd | |||
| 4f15e020b0 | |||
| 3aaebfb2de | |||
| ba17eb0eaf | |||
| 2ee5e6bf78 | |||
| 3b668bf190 | |||
| 5a93c317c5 | |||
| 9186124e39 | |||
| a741de180c | |||
| fcab6c3a5d | |||
| 63657eacb1 | |||
| 7884c40aa9 | |||
| 9d3ccd80b1 | |||
| 83d1e35ab7 | |||
| 92c7641add | |||
| 2662e7f922 | |||
| f664066dd8 | |||
| 5c9160eeb4 | |||
| 6b3d9c4ee2 | |||
| 6e30db588f | |||
| 681e18935e | |||
| fc8c5f0cb2 | |||
| 0868af0c56 | |||
| 25935f53ae | |||
| 4a48eb8bb7 | |||
| 394468c7e8 | |||
| 37ff462bdb | |||
| 036090998c | |||
| 11ca0e4a7c | |||
| a44ceb537f | |||
| 505d159458 | |||
| 5b4e9d21d5 | |||
| eb128acbf7 | |||
| ce6cee8c85 | |||
| 063190eb1d |
@@ -1,13 +0,0 @@
|
||||
# Clippy configuration
|
||||
# https://doc.rust-lang.org/nightly/clippy/lint_configuration.html
|
||||
|
||||
allow-private-module-inception = true
|
||||
avoid-breaking-exported-api = false
|
||||
disallowed-names = []
|
||||
disallowed-macros = [
|
||||
{ path = "std::dbg", reason = "it is okay to use during development, but please do not include it in main branch" },
|
||||
]
|
||||
disallowed-methods = [
|
||||
]
|
||||
disallowed-types = [
|
||||
]
|
||||
@@ -1,52 +0,0 @@
|
||||
{
|
||||
"version": "0.2",
|
||||
"gitignoreRoot": ".",
|
||||
"useGitignore": true,
|
||||
"dictionaryDefinitions": [
|
||||
{
|
||||
"name": "organization-dictionary",
|
||||
"path": "https://raw.githubusercontent.com/taiki-e/github-actions/HEAD/.github/.cspell/organization-dictionary.txt",
|
||||
"addWords": true
|
||||
},
|
||||
{
|
||||
"name": "project-dictionary",
|
||||
"path": "./.github/.cspell/project-dictionary.txt",
|
||||
"addWords": true
|
||||
},
|
||||
{
|
||||
"name": "rust-dependencies",
|
||||
"path": "./.github/.cspell/rust-dependencies.txt",
|
||||
"addWords": true
|
||||
}
|
||||
],
|
||||
"dictionaries": [
|
||||
"organization-dictionary",
|
||||
"project-dictionary",
|
||||
"rust-dependencies"
|
||||
],
|
||||
"ignoreRegExpList": [
|
||||
// Copyright notice
|
||||
"Copyright .*",
|
||||
"SPDX-(File|Snippet)CopyrightText: .*",
|
||||
// GHA actions/workflows
|
||||
"uses: .+@[\\w_.-]+",
|
||||
// GHA context (repo name, owner name, etc.)
|
||||
"github.[\\w_.-]+ (=|!)= '[^']+'",
|
||||
// GH username
|
||||
"( |\\[)@[\\w_-]+",
|
||||
// Git config username
|
||||
"git config( --[^ ]+)? user.name .*",
|
||||
// Username in TODO|FIXME comment
|
||||
"(TODO|FIXME)\\([\\w_., -]+\\)",
|
||||
// Cargo.toml authors
|
||||
"authors *= *\\[[^\\]]*\\]",
|
||||
"\"[^\"]* <[\\w_.+-]+@[\\w.-]+>\""
|
||||
],
|
||||
"languageSettings": [
|
||||
{
|
||||
"languageId": ["*"],
|
||||
"dictionaries": ["bash", "cpp-refined", "rust"]
|
||||
}
|
||||
],
|
||||
"ignorePaths": []
|
||||
}
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html
|
||||
[advisories]
|
||||
unused-ignored-advisory = "deny"
|
||||
yanked = "deny"
|
||||
unmaintained = "none"
|
||||
unsound = "all"
|
||||
git-fetch-with-cli = true
|
||||
ignore = [
|
||||
]
|
||||
|
||||
# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html
|
||||
[bans]
|
||||
multiple-versions = "warn"
|
||||
wildcards = "deny"
|
||||
allow-wildcard-paths = true
|
||||
build.executables = "deny"
|
||||
build.interpreted = "deny"
|
||||
build.include-dependencies = true
|
||||
build.include-workspace = false # covered by tools/tidy.sh
|
||||
build.include-archives = true
|
||||
build.allow-build-scripts = [
|
||||
{ name = "proc-macro2" }, # via serde_derive
|
||||
{ name = "quote" }, # via serde_derive
|
||||
{ name = "semver" },
|
||||
{ name = "serde_core" },
|
||||
{ name = "serde" }, # https://github.com/serde-rs/serde/issues/2972
|
||||
]
|
||||
build.bypass = [
|
||||
]
|
||||
|
||||
# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html
|
||||
[licenses]
|
||||
unused-allowed-license = "deny"
|
||||
unused-license-exception = "deny"
|
||||
private.ignore = true
|
||||
allow = [
|
||||
"Apache-2.0",
|
||||
"MIT",
|
||||
"Unicode-3.0", # unicode-ident
|
||||
]
|
||||
|
||||
# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html
|
||||
[sources]
|
||||
unused-allowed-source = "deny"
|
||||
unknown-registry = "deny"
|
||||
unknown-git = "deny"
|
||||
allow-git = [
|
||||
]
|
||||
@@ -1,24 +0,0 @@
|
||||
# EditorConfig configuration
|
||||
# https://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{css,html,json,md,rb,ps1,sh,yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[*.{js,yml,yaml}]
|
||||
quote_type = single
|
||||
|
||||
[*.sh]
|
||||
# https://google.github.io/styleguide/shellguide.html#s5.3-pipelines
|
||||
binary_next_line = true
|
||||
# https://google.github.io/styleguide/shellguide.html#s5.5-case-statement
|
||||
switch_case_indent = true
|
||||
@@ -1,2 +0,0 @@
|
||||
# Change indent size of shell script files to match scripts in CI config
|
||||
946918579413996845b77e146aa8eb3c6f40f7ab
|
||||
@@ -1,4 +0,0 @@
|
||||
* text=auto eol=lf
|
||||
tools/tidy.sh linguist-detectable=false
|
||||
.github/.cspell/rust-dependencies.txt linguist-generated
|
||||
manifests/** linguist-generated
|
||||
@@ -1,48 +0,0 @@
|
||||
almalinux
|
||||
archlinux
|
||||
binstall
|
||||
callgrind
|
||||
CDPATH
|
||||
convco
|
||||
coreutils
|
||||
covgate
|
||||
cyclonedx
|
||||
cygdrive
|
||||
deadlinks
|
||||
deepsource
|
||||
docgarden
|
||||
doas
|
||||
enablerepo
|
||||
epel
|
||||
espup
|
||||
fastestmirror
|
||||
grcov
|
||||
gungraun
|
||||
insta
|
||||
knope
|
||||
LASTEXITCODE
|
||||
leptos
|
||||
libicu
|
||||
linkcheck
|
||||
mdbook
|
||||
microdnf
|
||||
minisig
|
||||
mirrorlist
|
||||
nextest
|
||||
pluginconf
|
||||
ppcle
|
||||
prek
|
||||
quickinstall
|
||||
rdme
|
||||
sccache
|
||||
SHASUMS
|
||||
sigstore
|
||||
syft
|
||||
tombi
|
||||
udeps
|
||||
USERPROFILE
|
||||
wasmtime
|
||||
watchexec
|
||||
xbuild
|
||||
xscale
|
||||
xwin
|
||||
@@ -1,6 +0,0 @@
|
||||
# This file is @generated by tidy.sh.
|
||||
# It is not intended for manual editing.
|
||||
|
||||
flate
|
||||
minisign
|
||||
ureq
|
||||
@@ -1 +0,0 @@
|
||||
blank_issues_enabled: true
|
||||
@@ -1,46 +0,0 @@
|
||||
name: New tool suggestion
|
||||
description: Suggest support for a new tool
|
||||
labels: [enhancement]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for a new tool suggestion!
|
||||
|
||||
Normally, you don't need to open an issue to request support for a new tool.
|
||||
Instead, please submit a pull request.
|
||||
(See [DEVELOPMENT.md](https://github.com/taiki-e/install-action/blob/main/DEVELOPMENT.md) for how to add support for a new tool.)
|
||||
|
||||
That said, if you have any questions before getting started, or if you’re unable to contribute for any reason, feel free to open an issue.
|
||||
- type: input
|
||||
id: name
|
||||
attributes:
|
||||
label: Tool name
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: pre-built
|
||||
attributes:
|
||||
label: Are official pre-built binaries provided?
|
||||
description: |
|
||||
If "No", this issue will be blocked until official pre-built binaries are provided.<br>
|
||||
If "Unknown", this issue will be blocked until it is determined that it is provided.<br>
|
||||
(When the tool is a Rust crate, it may already be available via fallback even if "No" or "Unknown".)<br>
|
||||
options:
|
||||
- 'Yes'
|
||||
- 'No'
|
||||
- Unknown
|
||||
default: 2
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: url
|
||||
attributes:
|
||||
label: Website or repository link
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: context
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: Any additional context that you believe may be relevant.
|
||||
@@ -1,23 +0,0 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: cargo
|
||||
directory: /
|
||||
schedule:
|
||||
interval: weekly
|
||||
cooldown:
|
||||
default-days: 14 # Note: Unless dependencies are pinned/locked, the effect is limited.
|
||||
commit-message:
|
||||
prefix: ''
|
||||
ignore:
|
||||
# https://github.com/taiki-e/install-action/pull/831#issuecomment-2650284580
|
||||
- dependency-name: ureq
|
||||
labels: []
|
||||
- package-ecosystem: github-actions
|
||||
directory: /
|
||||
schedule:
|
||||
interval: monthly
|
||||
cooldown:
|
||||
default-days: 14
|
||||
commit-message:
|
||||
prefix: ''
|
||||
labels: []
|
||||
@@ -1,327 +0,0 @@
|
||||
name: CI
|
||||
|
||||
permissions: {}
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
- ci-*
|
||||
schedule:
|
||||
- cron: '0 2 * * *'
|
||||
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:
|
||||
tidy:
|
||||
uses: taiki-e/github-actions/.github/workflows/tidy.yml@1bb80ca038216cd1fb7b6ca6d76240b3772963ab # main
|
||||
permissions:
|
||||
security-events: write # for github/codeql-action/*
|
||||
test-manifest-schema:
|
||||
needs: tidy
|
||||
uses: taiki-e/github-actions/.github/workflows/rust-test.yml@1bb80ca038216cd1fb7b6ca6d76240b3772963ab # main
|
||||
with:
|
||||
test-args: --exclude install-action-internal-codegen
|
||||
no-std: false
|
||||
|
||||
test:
|
||||
needs: tidy
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
# NB: Sync list with https://github.com/taiki-e/checkout-action/blob/HEAD/.github/workflows/ci.yml
|
||||
# --------------------------------------------------------------------
|
||||
# GitHub-hosted runners
|
||||
- os: ubuntu-24.04
|
||||
- os: ubuntu-24.04-arm
|
||||
- os: ubuntu-22.04
|
||||
- os: ubuntu-22.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-26
|
||||
- os: macos-15
|
||||
- os: macos-15-intel
|
||||
- os: windows-2025
|
||||
- os: windows-2025
|
||||
bash: msys2
|
||||
- os: windows-2025
|
||||
bash: cygwin
|
||||
- os: windows-2022
|
||||
- os: windows-2022
|
||||
bash: msys2
|
||||
- os: windows-2022
|
||||
bash: cygwin
|
||||
- os: windows-11-arm
|
||||
- os: windows-2022
|
||||
tool: major.minor.patch
|
||||
- os: windows-2022
|
||||
tool: major.minor
|
||||
- os: windows-2022
|
||||
tool: major
|
||||
# --------------------------------------------------------------------
|
||||
# Containers
|
||||
# --------------------------------------------------------------------
|
||||
# Debian-based
|
||||
- container: debian:sid # glibc
|
||||
- container: debian:testing # glibc
|
||||
- container: debian:13-slim # glibc 2.41
|
||||
- container: debian:12-slim # glibc 2.36
|
||||
- container: debian:11-slim # glibc 2.31, EoL
|
||||
- container: debian:10-slim # glibc 2.28, EoL, end of LTS
|
||||
- container: debian:9-slim # glibc 2.24, EoL, end of LTS
|
||||
- container: debian/eol:jessie-slim # 8, glibc 2.19, EoL, end of LTS
|
||||
- container: ubuntu:devel # glibc
|
||||
- container: ubuntu:rolling # glibc
|
||||
- container: ubuntu:26.04 # glibc 2.43
|
||||
- container: ubuntu:24.04 # glibc 2.39
|
||||
- container: ubuntu:22.04 # glibc 2.35
|
||||
- container: ubuntu:20.04 # glibc 2.31, EoL
|
||||
- container: ubuntu:18.04 # glibc 2.27, EoL
|
||||
- container: ubuntu:16.04 # glibc 2.23, EoL, end of ESM
|
||||
- container: ubuntu:14.04 # glibc 2.19, EoL, end of ESM
|
||||
# --------------------------------------------------------------------
|
||||
# Fedora/RHEL-based
|
||||
- container: fedora:latest # glibc
|
||||
- container: centos:7 # glibc 2.17, EoL
|
||||
- container: centos:6 # glibc 2.12, EoL
|
||||
- container: almalinux:10 # glibc 2.39
|
||||
- container: almalinux:10-minimal # glibc 2.39
|
||||
- container: almalinux:9 # glibc 2.34
|
||||
- container: almalinux:9-minimal # glibc 2.34
|
||||
- container: almalinux:8 # glibc 2.28
|
||||
- container: almalinux:8-minimal # glibc 2.28
|
||||
# --------------------------------------------------------------------
|
||||
# SUSE-based
|
||||
# - container: opensuse/tumbleweed:latest # glibc # TODO: zypper timeout
|
||||
- container: opensuse/leap:latest # glibc
|
||||
# --------------------------------------------------------------------
|
||||
# apk
|
||||
- container: alpine:3.23 # musl 1.2.5
|
||||
- container: alpine:3.22 # musl 1.2.5
|
||||
- container: alpine:3.21 # musl 1.2.5
|
||||
# Skip intermediate versions that have reached EoL by default.
|
||||
# - container: alpine:3.20 # musl 1.2.5, EoL
|
||||
# - container: alpine:3.19 # musl 1.2.4, EoL
|
||||
# - container: alpine:3.18 # musl 1.2.4, EoL
|
||||
# - container: alpine:3.17 # musl 1.2.3, EoL
|
||||
# - container: alpine:3.16 # musl 1.2.3, EoL
|
||||
# - container: alpine:3.15 # musl 1.2.2, EoL
|
||||
# - container: alpine:3.14 # musl 1.2.2, EoL
|
||||
# - container: alpine:3.13 # musl 1.2.2, EoL
|
||||
# - container: alpine:3.12 # musl 1.1.24, EoL
|
||||
# - container: alpine:3.11 # musl 1.1.24, EoL
|
||||
# - container: alpine:3.10 # musl 1.1.22, EoL
|
||||
# - container: alpine:3.9 # musl 1.1.20, EoL
|
||||
# - container: alpine:3.8 # musl 1.1.19, EoL
|
||||
# - container: alpine:3.7 # musl 1.1.18, EoL, broken env command
|
||||
# - container: alpine:3.6 # musl 1.1.16, EoL, broken env command
|
||||
# - container: alpine:3.5 # musl 1.1.15, EoL
|
||||
# - container: alpine:3.4 # musl 1.1.14, EoL
|
||||
# - container: alpine:3.3 # musl 1.1.12, EoL
|
||||
- container: alpine:3.2 # musl 1.1.11, EoL
|
||||
# --------------------------------------------------------------------
|
||||
# Arch-based
|
||||
- container: archlinux:latest # glibc
|
||||
runs-on: ${{ matrix.os || 'ubuntu-24.04' }}
|
||||
timeout-minutes: 30
|
||||
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: |
|
||||
retry() {
|
||||
for i in {1..10}; do
|
||||
if "$@"; then
|
||||
return 0
|
||||
else
|
||||
sleep "${i}"
|
||||
fi
|
||||
done
|
||||
"$@"
|
||||
}
|
||||
# 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 [[ "${CONTAINER}" == "centos:6" ]]; then
|
||||
# CentOS 6's curl (7.19.7) has no curl has no --proto/--tlsv1.2.
|
||||
retry yum install -y gcc openssl-devel
|
||||
retry 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
|
||||
retry yum install -y openssh-clients perl perl-Error perl-TermReadKey rsync
|
||||
retry 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
|
||||
env:
|
||||
CONTAINER: ${{ matrix.container }}
|
||||
if: startsWith(matrix.container, 'centos')
|
||||
# gcc for rustc
|
||||
- run: apk --no-cache add gcc
|
||||
shell: sh
|
||||
if: startsWith(matrix.container, 'alpine')
|
||||
- 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
|
||||
- name: Generate tool list
|
||||
id: tool-list
|
||||
run: tools/ci/tool-list.sh "${TOOL}" "${OS}" "${BASH}" >>"${GITHUB_OUTPUT}"
|
||||
env:
|
||||
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
|
||||
- run: apk --no-cache del bash
|
||||
shell: sh
|
||||
if: startsWith(matrix.container, 'alpine')
|
||||
- uses: ./
|
||||
with:
|
||||
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
|
||||
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: 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
|
||||
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: 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'
|
||||
@@ -1,33 +0,0 @@
|
||||
name: Manifest
|
||||
|
||||
permissions: {}
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
- ci-*
|
||||
schedule:
|
||||
- cron: '0 0,3,6,9,12,15,18,21 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
manifest:
|
||||
uses: taiki-e/github-actions/.github/workflows/gen.yml@1bb80ca038216cd1fb7b6ca6d76240b3772963ab # main
|
||||
permissions:
|
||||
contents: write # for creating branch for pr
|
||||
secrets:
|
||||
PR_TOKEN_APP_PRIVATE_KEY: ${{ secrets.PR_TOKEN_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
script: tools/manifest.sh
|
||||
commit-script: tools/ci/manifest.sh
|
||||
title: Update manifest
|
||||
branch: update-manifest
|
||||
install-cosign: true
|
||||
install-parse-changelog: true
|
||||
@@ -1,58 +0,0 @@
|
||||
name: Release
|
||||
|
||||
permissions: {}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
target:
|
||||
description: Package to be released
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- install-action
|
||||
- install-action-manifest-schema
|
||||
version:
|
||||
description: Version to be increased
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- patch
|
||||
- minor
|
||||
- major
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
release:
|
||||
if: github.repository_owner == 'taiki-e' && inputs.target == 'install-action'
|
||||
uses: taiki-e/github-actions/.github/workflows/action-release.yml@1bb80ca038216cd1fb7b6ca6d76240b3772963ab # main
|
||||
permissions:
|
||||
contents: write # for taiki-e/create-gh-release-action
|
||||
secrets:
|
||||
PUSH_TOKEN_APP_CLIENT_ID: ${{ secrets.PUSH_TOKEN_APP_CLIENT_ID }}
|
||||
PUSH_TOKEN_APP_PRIVATE_KEY: ${{ secrets.PUSH_TOKEN_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
version: ${{ inputs.version }}
|
||||
post-commit-script: tools/ci/release-post-commit.sh
|
||||
|
||||
release-manifest-schema:
|
||||
if: github.repository_owner == 'taiki-e' && inputs.target == 'install-action-manifest-schema'
|
||||
uses: taiki-e/github-actions/.github/workflows/rust-release.yml@1bb80ca038216cd1fb7b6ca6d76240b3772963ab # main
|
||||
permissions:
|
||||
contents: write # for taiki-e/create-gh-release-action
|
||||
id-token: write # for rust-lang/crates-io-auth-action
|
||||
attestations: write # unused (used when options for uploading binaries are set)
|
||||
secrets:
|
||||
PUSH_TOKEN_APP_CLIENT_ID: ${{ secrets.PUSH_TOKEN_APP_CLIENT_ID }}
|
||||
PUSH_TOKEN_APP_PRIVATE_KEY: ${{ secrets.PUSH_TOKEN_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
version: ${{ inputs.version }}
|
||||
tag-prefix: install-action-manifest-schema-
|
||||
package: install-action-manifest-schema
|
||||
changelog: tools/manifest-schema/CHANGELOG.md
|
||||
title: $prefix $version
|
||||
prefix: install-action-manifest-schema
|
||||
commit-prefix: 'manifest-schema: '
|
||||
@@ -1,6 +0,0 @@
|
||||
# zizmor configuration
|
||||
# https://docs.zizmor.sh/configuration/
|
||||
|
||||
rules:
|
||||
anonymous-definition: { disable: true } # This is pedantic/auditor only audit and requires explicitly naming each job, but is usually redundant.
|
||||
dependabot-cooldown: { config: { days: 14 } }
|
||||
@@ -1,8 +0,0 @@
|
||||
target
|
||||
Cargo.lock
|
||||
mutants.out*
|
||||
tmp
|
||||
|
||||
# For platform and editor specific settings, it is recommended to add to
|
||||
# a global .gitignore file.
|
||||
# Refs: https://docs.github.com/en/github/using-git/ignoring-files#configuring-ignored-files-for-all-repositories-on-your-computer
|
||||
@@ -1,11 +0,0 @@
|
||||
# https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md
|
||||
config:
|
||||
line-length: false # MD013
|
||||
no-duplicate-heading: false # MD024
|
||||
no-blanks-blockquote: false # MD028 (this warns valid GFM alerts usage)
|
||||
no-inline-html: false # MD033
|
||||
no-emphasis-as-heading: false # MD036
|
||||
|
||||
# https://github.com/DavidAnson/markdownlint-cli2#markdownlint-cli2jsonc
|
||||
noBanner: true
|
||||
noProgress: true
|
||||
@@ -1 +0,0 @@
|
||||
manifests/*.json
|
||||
@@ -1,34 +0,0 @@
|
||||
# Rustfmt configuration
|
||||
# https://github.com/rust-lang/rustfmt/blob/HEAD/Configurations.md
|
||||
|
||||
# Rustfmt cannot format long lines inside macros, but this option detects this.
|
||||
# This is unstable (tracking issue: https://github.com/rust-lang/rustfmt/issues/3391)
|
||||
error_on_line_overflow = true
|
||||
|
||||
# Override the default formatting style.
|
||||
# See https://internals.rust-lang.org/t/running-rustfmt-on-rust-lang-rust-and-other-rust-lang-repositories/8732/81.
|
||||
use_small_heuristics = "Max"
|
||||
# This is unstable (tracking issue: https://github.com/rust-lang/rustfmt/issues/3370)
|
||||
overflow_delimited_expr = true
|
||||
# This is unstable (tracking issue: https://github.com/rust-lang/rustfmt/issues/4991).
|
||||
imports_granularity = "Crate"
|
||||
# This is unstable (tracking issue: https://github.com/rust-lang/rustfmt/issues/5083).
|
||||
group_imports = "StdExternalCrate"
|
||||
# This is unstable (tracking issue: https://github.com/rust-lang/rustfmt/issues/5081).
|
||||
hex_literal_case = "Upper"
|
||||
|
||||
# Apply rustfmt to more places.
|
||||
# This is unstable (tracking issue: https://github.com/rust-lang/rustfmt/issues/3348).
|
||||
format_code_in_doc_comments = true
|
||||
|
||||
# Automatically fix deprecated style.
|
||||
use_field_init_shorthand = true
|
||||
use_try_shorthand = true
|
||||
|
||||
# Set the default settings again to always apply the proper formatting without
|
||||
# being affected by the editor settings.
|
||||
edition = "2021"
|
||||
style_edition = "2024"
|
||||
hard_tabs = false
|
||||
newline_style = "Unix"
|
||||
tab_spaces = 4
|
||||
@@ -1,38 +0,0 @@
|
||||
# ShellCheck configuration
|
||||
# https://github.com/koalaman/shellcheck/blob/HEAD/shellcheck.1.md#rc-files
|
||||
|
||||
# See also:
|
||||
# https://github.com/koalaman/shellcheck/wiki/Optional
|
||||
# https://google.github.io/styleguide/shellguide.html
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/Directive#external-sources
|
||||
external-sources=true
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2249
|
||||
# enable=add-default-case
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2244
|
||||
enable=avoid-nullary-conditions
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2312
|
||||
# enable=check-extra-masked-returns
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2310
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2311
|
||||
# enable=check-set-e-suppressed
|
||||
|
||||
# enable=check-unassigned-uppercase
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2230
|
||||
enable=deprecate-which
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2248
|
||||
enable=quote-safe-variables
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2292
|
||||
# https://google.github.io/styleguide/shellguide.html#s6.3-tests
|
||||
enable=require-double-brackets
|
||||
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2250
|
||||
# https://google.github.io/styleguide/shellguide.html#s5.6-variable-expansion
|
||||
enable=require-variable-braces
|
||||
@@ -1,9 +0,0 @@
|
||||
# Taplo configuration
|
||||
# https://taplo.tamasfe.dev/configuration/formatter-options.html
|
||||
|
||||
[formatting]
|
||||
align_comments = false
|
||||
allowed_blank_lines = 1
|
||||
array_auto_collapse = false
|
||||
array_auto_expand = false
|
||||
indent_string = " "
|
||||
-8033
File diff suppressed because it is too large
Load Diff
-53
@@ -1,53 +0,0 @@
|
||||
[workspace]
|
||||
resolver = "2"
|
||||
members = ["tools/codegen", "tools/manifest-schema"]
|
||||
|
||||
# This table is shared by projects under github.com/taiki-e.
|
||||
# Expect for unexpected_cfgs.check-cfg, it is not intended for manual editing.
|
||||
[workspace.lints.rust]
|
||||
deprecated_safe = "warn"
|
||||
improper_ctypes = "warn"
|
||||
improper_ctypes_definitions = "warn"
|
||||
non_ascii_idents = "warn"
|
||||
rust_2018_idioms = "warn"
|
||||
single_use_lifetimes = "warn"
|
||||
unexpected_cfgs = { level = "warn", check-cfg = [
|
||||
] }
|
||||
unnameable_types = "warn"
|
||||
unreachable_pub = "warn"
|
||||
unsafe_op_in_unsafe_fn = "warn"
|
||||
[workspace.lints.clippy]
|
||||
all = "warn" # Downgrade deny-by-default lints
|
||||
pedantic = "warn"
|
||||
as_ptr_cast_mut = "warn"
|
||||
as_underscore = "warn"
|
||||
default_union_representation = "warn"
|
||||
inline_asm_x86_att_syntax = "warn"
|
||||
trailing_empty_array = "warn"
|
||||
transmute_undefined_repr = "warn"
|
||||
undocumented_unsafe_blocks = "warn"
|
||||
unused_trait_names = "warn"
|
||||
# Suppress buggy or noisy clippy lints
|
||||
bool_assert_comparison = { level = "allow", priority = 1 }
|
||||
borrow_as_ptr = { level = "allow", priority = 1 } # https://github.com/rust-lang/rust-clippy/issues/8286
|
||||
cast_lossless = { level = "allow", priority = 1 } # suggested code has poor codegen with -C opt-level=0 https://godbolt.org/z/GzTxzbd9q
|
||||
collapsible_match = { level = "allow", priority = 1 }
|
||||
declare_interior_mutable_const = { level = "allow", priority = 1 } # https://github.com/rust-lang/rust-clippy/issues/7665
|
||||
doc_markdown = { level = "allow", priority = 1 }
|
||||
float_cmp = { level = "allow", priority = 1 } # https://github.com/rust-lang/rust-clippy/issues/7725
|
||||
incompatible_msrv = { level = "allow", priority = 1 } # buggy: doesn't consider cfg, https://github.com/rust-lang/rust-clippy/issues/12280, https://github.com/rust-lang/rust-clippy/issues/12257#issuecomment-2093667187
|
||||
manual_assert = { level = "allow", priority = 1 }
|
||||
manual_range_contains = { level = "allow", priority = 1 } # https://github.com/rust-lang/rust-clippy/issues/6455#issuecomment-1225966395
|
||||
missing_errors_doc = { level = "allow", priority = 1 }
|
||||
module_name_repetitions = { level = "allow", priority = 1 } # buggy: https://github.com/rust-lang/rust-clippy/issues?q=is%3Aissue+is%3Aopen+module_name_repetitions
|
||||
naive_bytecount = { level = "allow", priority = 1 }
|
||||
nonminimal_bool = { level = "allow", priority = 1 } # buggy: https://github.com/rust-lang/rust-clippy/issues?q=is%3Aissue+is%3Aopen+nonminimal_bool
|
||||
range_plus_one = { level = "allow", priority = 1 } # buggy: https://github.com/rust-lang/rust-clippy/issues?q=is%3Aissue+is%3Aopen+range_plus_one
|
||||
similar_names = { level = "allow", priority = 1 }
|
||||
single_match = { level = "allow", priority = 1 }
|
||||
single_match_else = { level = "allow", priority = 1 }
|
||||
struct_excessive_bools = { level = "allow", priority = 1 }
|
||||
struct_field_names = { level = "allow", priority = 1 }
|
||||
too_many_arguments = { level = "allow", priority = 1 }
|
||||
too_many_lines = { level = "allow", priority = 1 }
|
||||
type_complexity = { level = "allow", priority = 1 }
|
||||
@@ -1,64 +0,0 @@
|
||||
# Development Guide
|
||||
|
||||
## Add support for new tool
|
||||
|
||||
(Example: [ffbd316](https://github.com/taiki-e/install-action/commit/ffbd316e0fe98cb460dae3a66cd2ef9deb398bb1))
|
||||
|
||||
1\. Add base manifest to [`tools/codegen/base`](tools/codegen/base) directory.
|
||||
|
||||
See JSON files in `tools/codegen/base` directory for examples of the manifest.
|
||||
|
||||
2\. Generate manifest with the following command (replace `<tool>` with the tool name).
|
||||
|
||||
```sh
|
||||
./tools/manifest.sh <tool>
|
||||
```
|
||||
|
||||
> If you're having problem with github api rate limit, you can use your GITHUB_TOKEN to increase the rate limit.
|
||||
> If you have `Github CLI` installed (the command `gh`), you can:
|
||||
>
|
||||
> ```sh
|
||||
> GITHUB_TOKEN=$(gh auth token) ./tools/manifest.sh <tool>
|
||||
> ```
|
||||
|
||||
3\. Update `TOOLS.md` with the following command.
|
||||
|
||||
```sh
|
||||
./tools/update-markdown.sh
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If one of the CI builds fails due to a bin path or release asset_name, fix the problem in the base
|
||||
manifest, and re-run the manifest tool `tools/manifest.sh` to regenerate the manifest json file. The
|
||||
base manifest supports overriding the bin path per platform by adding the `"bin"` / `"asset_name"`
|
||||
to the platform object.
|
||||
|
||||
If CI fails only for containers using older versions of glibc or musl, you may need to add the tool
|
||||
name to one of the `*_incompat` arrays in `tools/ci/tool-list.sh`.
|
||||
|
||||
## Release new version
|
||||
|
||||
Releases are performed by running the [release workflow](https://github.com/taiki-e/install-action/actions/workflows/release.yml) via workflow dispatch. The owner and collaborators can start the release workflow, but the owner’s [approval](https://docs.github.com/en/actions/reference/workflows-and-actions/deployments-and-environments#required-reviewers) is required before the actual release.
|
||||
|
||||
### Minor version vs patch version
|
||||
|
||||
Increase the patch version if only the following changes are included.
|
||||
|
||||
- Update the `@latest` version of the tool.
|
||||
|
||||
Rationale: Normally, tool versions are controlled by the `@<version>` syntax, which is explicitly separated from the versioning of the install-action itself.
|
||||
|
||||
Exception: If the major or minor version of the `cargo-binstall` is updated, the minor version may be increased because the behavior of the fallback may change slightly.
|
||||
|
||||
- Fix regressions or minor bugs.
|
||||
|
||||
Rationale: Semantic Versioning.
|
||||
|
||||
- Improve documentation or diagnostics.
|
||||
|
||||
Rationale: Semantic Versioning.
|
||||
|
||||
Usually increase the minor version otherwise.
|
||||
|
||||
Adding support for a new tool may conflict with existing fallbacks, so it is necessary to increase the minor version.
|
||||
-177
@@ -1,177 +0,0 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
Permission is hereby granted, free of charge, to any
|
||||
person obtaining a copy of this software and associated
|
||||
documentation files (the "Software"), to deal in the
|
||||
Software without restriction, including without
|
||||
limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software
|
||||
is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice
|
||||
shall be included in all copies or substantial portions
|
||||
of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
||||
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||||
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
@@ -1,204 +0,0 @@
|
||||
<!-- omit in toc -->
|
||||
# install-action
|
||||
|
||||
[](https://github.com/taiki-e/install-action/releases/latest)
|
||||
[](https://github.com/taiki-e/install-action/actions)
|
||||
|
||||
GitHub Action for installing development tools (mainly from GitHub Releases).
|
||||
|
||||
- [Usage](#usage)
|
||||
- [Inputs](#inputs)
|
||||
- [Example workflow](#example-workflow)
|
||||
- [Supported tools](#supported-tools)
|
||||
- [Add support for new tool](#add-support-for-new-tool)
|
||||
- [Security](#security)
|
||||
- [Compatibility](#compatibility)
|
||||
- [Related Projects](#related-projects)
|
||||
- [License](#license)
|
||||
|
||||
## Usage
|
||||
|
||||
### Inputs
|
||||
|
||||
| Name | Required | Description | Type | Default |
|
||||
| ---- | :------: | ----------- | ---- | ------- |
|
||||
| tool | **✓** | Tools to install (whitespace or comma separated list) | String | |
|
||||
| checksum | | Whether to enable checksums (strongly discouraged to disable) | Boolean | `true` |
|
||||
| fallback | | Whether to use fallback (none, cargo-binstall, or cargo-install) | String | `cargo-binstall` |
|
||||
|
||||
### Example workflow
|
||||
|
||||
To install the latest version:
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@v2
|
||||
with:
|
||||
tool: cargo-hack
|
||||
```
|
||||
|
||||
You can use the shorthand (if you do not need to pin the versions of this action and the installed tool):
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@cargo-hack
|
||||
```
|
||||
|
||||
To install a specific version, use `@version` syntax:
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@v2
|
||||
with:
|
||||
tool: cargo-hack@0.5.24
|
||||
```
|
||||
|
||||
You can also omit patch version.
|
||||
(You can also omit the minor version if the major version is 1 or greater.)
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@v2
|
||||
with:
|
||||
tool: cargo-hack@0.5
|
||||
```
|
||||
|
||||
For some tools, we support installing additional components at the same time by `+<additional>` syntax:
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@v2
|
||||
with:
|
||||
# Install rust stable with rustfmt component and wasm32-wasip1 target.
|
||||
tool: rust+rustfmt+wasm32-wasip1
|
||||
# When installing another rust version:
|
||||
# tool: rust@nightly + rustfmt + wasm32-wasip1
|
||||
```
|
||||
|
||||
To install multiple tools:
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@v2
|
||||
with:
|
||||
tool: cargo-hack,cargo-minimal-versions
|
||||
```
|
||||
|
||||
Or:
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@cargo-hack
|
||||
- uses: taiki-e/install-action@cargo-minimal-versions
|
||||
```
|
||||
|
||||
Tool names can also be separated with whitespaces (line, space, tab).
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@v2
|
||||
with:
|
||||
tool: |
|
||||
cargo-hack
|
||||
cargo-minimal-versions
|
||||
```
|
||||
|
||||
## Supported tools
|
||||
|
||||
See [TOOLS.md](TOOLS.md) for the list of tools that are installed from manifests managed in this action.
|
||||
|
||||
If a tool not included in the list above is specified, this action uses [cargo-binstall] as a fallback.
|
||||
|
||||
If you want to ensure that fallback is not used, use `fallback: none`.
|
||||
|
||||
```yaml
|
||||
- uses: taiki-e/install-action@v2
|
||||
with:
|
||||
tool: cargo-hack
|
||||
# Possible values:
|
||||
# - none: disable all fallback options
|
||||
# - cargo-binstall (default): use cargo-binstall (includes "quickinstall" and "install from source")
|
||||
# - cargo-install: use `cargo install`
|
||||
fallback: none
|
||||
```
|
||||
|
||||
On platforms where cargo-binstall does not provide prebuilt binaries, cargo-install fallback is used instead of cargo-binstall fallback.
|
||||
|
||||
### Add support for new tool
|
||||
|
||||
See the [development guide](DEVELOPMENT.md) for how to add support for new tool.
|
||||
|
||||
## Security
|
||||
|
||||
The `@v<major>` and `@<tool_name>` tags are updated with each release. If you want to enhance workflow stability and security against supply chain attacks, consider using the `@v<major>.<minor>.<patch>` tag or their hash to pin the version and regularly updating with [dependency cooldown]. Since all releases are immutable, pinning the version in either way should have the same effect. Pinning `@<tool_name>` tags by hash is strongly discouraged, as it causes the workflow to reference a [commit that is not present on the repository](https://docs.zizmor.sh/audits/#impostor-commit) when a new version is released.
|
||||
|
||||
The default fallback (cargo-binstall) is often affected by GitHub's API rate limits, so we [pass the `${{ github.token }}` to cargo-binstall](https://github.com/taiki-e/install-action/issues/561). Disabling the cargo-binstall fallback prevent passing token so helps enhance security.
|
||||
|
||||
See the [Supported tools section](#supported-tools) for how to ensure that fallback is not used.
|
||||
|
||||
<!-- omit in toc -->
|
||||
### Security on installation from GitHub Releases
|
||||
|
||||
**Tools covered in this section:** Tools in the [supported tools list](TOOLS.md) where column "Where will it be installed from" is "GitHub Releases".
|
||||
|
||||
This action will download the tool or its installer from GitHub Releases using HTTPS with tlsv1.2+. This is basically considered to be the same level of security as [the recommended installation of rustup](https://www.rust-lang.org/tools/install).
|
||||
|
||||
Additionally, this action will also verify SHA256 checksums for downloaded files for all tools covered in this section. This is enabled by default and can be disabled by setting the `checksum` input option to `false` (strongly discouraged to disable).
|
||||
|
||||
Additionally, we also verify [artifact attestations](https://docs.github.com/en/actions/concepts/security/artifact-attestations) or signature if the tool publishes artifact attestations or distributes signed archives. Verification is done at the stage of getting the checksum, so disabling the checksum will also disable verification.
|
||||
|
||||
When installing with `taiki-e/install-action@<tool_name>`, `tool: <tool_name>`, or `tool: <tool_name>@<omitted_version>`, The tool version is reflects upstream releases with a delay of one to a few days (as with other common package managers that verify checksums or signatures). A delay of at least one day is known as [dependency cooldown] and is intended to mitigate the risk of supply chain attacks (the specific cooldown period may be changed in the future). You can bypass the cooldown by explicitly specifying a version. If you want a longer cooldown, consider using the property described below.
|
||||
|
||||
When installing with `tool: <tool_name>` or `tool: <tool_name>@<omitted_version>`, the tool version is associated with the install-action version, so pinning install-action version with the `@v<major>.<minor>.<patch>` tag or their hash also pins the version of the tool being installed. This also means that if a [dependency cooldown] applies to the action itself, a cooldown of one to a few days longer will apply to the tools installed by that action.
|
||||
|
||||
[dependency cooldown]: https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns
|
||||
|
||||
<!-- omit in toc -->
|
||||
### Security on other installation methods
|
||||
|
||||
See the linked documentation for information on security when installed using [rustup](https://rust-lang.github.io/rustup/security.html), [snap](https://snapcraft.io/docs), or [cargo-binstall](https://github.com/cargo-bins/cargo-binstall#faq).
|
||||
|
||||
If the installation method is rustup and rustup is not yet installed, this action downloads [rustup-init for the current platform](https://rust-lang.github.io/rustup/installation/other.html#manual-installation) using HTTPS with tlsv1.2+, verifies SHA256 checksum, and then installs rustup using it.
|
||||
|
||||
If the installation method is cargo-binstall and cargo-binstall is not yet installed or outdated, this action installs cargo-binstall [from GitHub Releases](#security-on-installation-from-github-releases).
|
||||
|
||||
See the [Supported tools section](#supported-tools) for how to ensure that fallback is not used.
|
||||
|
||||
## Compatibility
|
||||
|
||||
This action has been tested for GitHub-hosted runners (Ubuntu, macOS, Windows) and containers (Ubuntu, Debian, Fedora, CentOS, Alma, openSUSE, Arch, Alpine).
|
||||
|
||||
On Linux, if any required tools are missing, this action will attempt to install them from distro's package manager, so no pre-setup is usually required (except for CentOS or Debian 10 (or older) or very old distro described below, which was already EoL and needs to use vault/archive repos -- see "Install requirements" in [our CI config](https://github.com/taiki-e/install-action/blob/HEAD/.github/workflows/ci.yml) for example of setup).
|
||||
|
||||
On other platforms, at least the following tools are required:
|
||||
|
||||
- bash 3.2+
|
||||
- jq 1.3+ (only on non-Windows platforms)
|
||||
- curl 7.34+ (or RHEL7/CentOS7's patched curl 7.29)
|
||||
|
||||
Known environments affected by the above version requirements are CentOS 6 (EoL on 2020-11) using curl 7.19, and Ubuntu 12.04 (EoL on 2017-04) using curl 7.22 (see "Install requirements" in [our CI config](https://github.com/taiki-e/install-action/blob/HEAD/.github/workflows/ci.yml) for example of workaround).
|
||||
|
||||
Note that what this action installs for its setup (such as above tools) is considered an implementation detail if they are installed by this action's side, and there is no guarantee that they will be available in subsequent steps, because this action is not an action for installing those tools.
|
||||
|
||||
## Related Projects
|
||||
|
||||
- [cache-cargo-install-action]: GitHub Action for `cargo install` with cache.
|
||||
- [create-gh-release-action]: GitHub Action for creating GitHub Releases based on changelog.
|
||||
- [upload-rust-binary-action]: GitHub Action for building and uploading Rust binary to GitHub Releases.
|
||||
- [setup-cross-toolchain-action]: GitHub Action for setup toolchains for cross compilation and cross testing for Rust.
|
||||
- [checkout-action]: GitHub Action for checking out a repository. (Simplified actions/checkout alternative that does not depend on Node.js.)
|
||||
- [homebrew-tap]: Homebrew tap for projects under github.com/taiki-e.
|
||||
- [scoop-bucket]: Scoop bucket for projects under github.com/taiki-e.
|
||||
|
||||
[cache-cargo-install-action]: https://github.com/taiki-e/cache-cargo-install-action
|
||||
[cargo-binstall]: https://github.com/cargo-bins/cargo-binstall
|
||||
[checkout-action]: https://github.com/taiki-e/checkout-action
|
||||
[create-gh-release-action]: https://github.com/taiki-e/create-gh-release-action
|
||||
[homebrew-tap]: https://github.com/taiki-e/homebrew-tap
|
||||
[scoop-bucket]: https://github.com/taiki-e/scoop-bucket
|
||||
[setup-cross-toolchain-action]: https://github.com/taiki-e/setup-cross-toolchain-action
|
||||
[upload-rust-binary-action]: https://github.com/taiki-e/upload-rust-binary-action
|
||||
|
||||
## License
|
||||
|
||||
Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or
|
||||
[MIT license](LICENSE-MIT) at your option.
|
||||
|
||||
Each of the tools installed by this action has a different license. See the
|
||||
[Supported tools](#supported-tools) section for more information.
|
||||
|
||||
Unless you explicitly state otherwise, any contribution intentionally submitted
|
||||
for inclusion in the work by you, as defined in the Apache-2.0 license, shall
|
||||
be dual licensed as above, without any additional terms or conditions.
|
||||
@@ -1,115 +0,0 @@
|
||||
# Tools
|
||||
|
||||
This is a list of tools that are installed from manifests managed in this action.
|
||||
|
||||
If a tool not included in the list below is specified, this action uses [cargo-binstall] as a fallback.
|
||||
|
||||
See the [Supported tools section in README.md](README.md#supported-tools) for how to ensure that fallback is not used.
|
||||
|
||||
> If `$CARGO_HOME/bin` is not available, Rust-related binaries will be installed to `$HOME/.cargo/bin`.<br>
|
||||
> If `$HOME/.cargo/bin` is not available, Rust-related binaries will be installed to `$HOME/.install-action/bin`.<br>
|
||||
|
||||
> [!WARNING]
|
||||
> Please note that the fact that a specific tool is listed here does **NOT** mean that the maintainer trusts the tool for safety or has reviewed its code.
|
||||
|
||||
| Name | Where binaries will be installed | Where will it be installed from | Supported platform | License | Note |
|
||||
| ---- | -------------------------------- | ------------------------------- | ------------------ | ------- | ---- |
|
||||
| [**auto-doc**](https://github.com/tj-actions/auto-doc) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/tj-actions/auto-doc/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/tj-actions/auto-doc/blob/main/LICENSE) | |
|
||||
| [**biome**](https://biomejs.dev) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/biomejs/biome/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/biomejs/biome/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/biomejs/biome/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-apple-runner**](https://github.com/madsmtm/cargo-apple-runner) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/madsmtm/cargo-apple-runner/releases) | macOS | [Zlib](https://github.com/madsmtm/cargo-apple-runner/blob/main/LICENSE-ZLIB.txt) OR [Apache-2.0](https://github.com/madsmtm/cargo-apple-runner/blob/main/LICENSE-APACHE.txt) OR [MIT](https://github.com/madsmtm/cargo-apple-runner/blob/main/LICENSE-MIT.txt) | |
|
||||
| [**cargo-audit**](https://github.com/rustsec/rustsec/tree/HEAD/cargo-audit) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rustsec/rustsec/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/rustsec/rustsec/blob/main/cargo-audit/LICENSE-APACHE) OR [MIT](https://github.com/rustsec/rustsec/blob/main/cargo-audit/LICENSE-MIT) | |
|
||||
| [**cargo-auditable**](https://github.com/rust-secure-code/cargo-auditable) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rust-secure-code/cargo-auditable/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/rust-secure-code/cargo-auditable/blob/master/LICENSE-APACHE) OR [MIT](https://github.com/rust-secure-code/cargo-auditable/blob/master/LICENSE-MIT) | |
|
||||
| [**cargo-binstall**](https://github.com/cargo-bins/cargo-binstall) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/cargo-bins/cargo-binstall/releases) | Linux, macOS, Windows | [GPL-3.0](https://github.com/cargo-bins/cargo-binstall/blob/main/crates/bin/LICENSE) | |
|
||||
| [**cargo-careful**](https://github.com/RalfJung/cargo-careful) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/RalfJung/cargo-careful/releases) | Linux, macOS, Windows | [MIT](https://github.com/RalfJung/cargo-careful/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/RalfJung/cargo-careful/blob/master/LICENSE-APACHE) | |
|
||||
| [**cargo-crap**](https://github.com/minikin/cargo-crap) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/minikin/cargo-crap/releases) | Linux, macOS, Windows | [MIT](https://github.com/minikin/cargo-crap/blob/main/LICENSE) | |
|
||||
| [**cargo-cyclonedx**](https://github.com/CycloneDX/cyclonedx-rust-cargo) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/CycloneDX/cyclonedx-rust-cargo/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/CycloneDX/cyclonedx-rust-cargo/blob/main/LICENSE) | |
|
||||
| [**cargo-deadlinks**](https://github.com/deadlinks/cargo-deadlinks) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/deadlinks/cargo-deadlinks/releases) | Linux, macOS, Windows | [MIT](https://github.com/deadlinks/cargo-deadlinks/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/deadlinks/cargo-deadlinks/blob/master/LICENSE-APACHE) | |
|
||||
| [**cargo-deb**](https://github.com/kornelski/cargo-deb) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/kornelski/cargo-deb/releases) | Linux | [MIT](https://github.com/kornelski/cargo-deb/blob/main/LICENSE) | |
|
||||
| [**cargo-deny**](https://github.com/EmbarkStudios/cargo-deny) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/EmbarkStudios/cargo-deny/releases) | Linux, macOS, Windows | [MIT](https://github.com/EmbarkStudios/cargo-deny/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/EmbarkStudios/cargo-deny/blob/main/LICENSE-APACHE) | |
|
||||
| [**cargo-dinghy**](https://github.com/sonos/dinghy) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/sonos/dinghy/releases) | Linux, macOS | [MIT](https://github.com/sonos/dinghy/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/sonos/dinghy/blob/main/LICENSE-APACHE) | |
|
||||
| [**cargo-export**](https://github.com/bazhenov/cargo-export) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/bazhenov/cargo-export/releases) | Linux, macOS, Windows | [MIT](https://github.com/bazhenov/cargo-export/blob/master/LICENSE) | |
|
||||
| [**cargo-hack**](https://github.com/taiki-e/cargo-hack) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/taiki-e/cargo-hack/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/taiki-e/cargo-hack/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/cargo-hack/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-insta**](https://insta.rs/) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/mitsuhiko/insta/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/mitsuhiko/insta/blob/master/LICENSE) | |
|
||||
| [**cargo-lambda**](https://github.com/cargo-lambda/cargo-lambda) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/cargo-lambda/cargo-lambda/releases) | Linux, macOS, Windows | [MIT](https://github.com/cargo-lambda/cargo-lambda/blob/main/LICENSE) | |
|
||||
| [**cargo-leptos**](https://github.com/leptos-rs/cargo-leptos) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/leptos-rs/cargo-leptos/releases) | Linux, macOS, Windows | [MIT](https://github.com/leptos-rs/cargo-leptos/blob/main/LICENSE) | |
|
||||
| [**cargo-llvm-cov**](https://github.com/taiki-e/cargo-llvm-cov) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/taiki-e/cargo-llvm-cov/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/taiki-e/cargo-llvm-cov/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/cargo-llvm-cov/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-machete**](https://github.com/bnjbvr/cargo-machete) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/bnjbvr/cargo-machete/releases) | Linux, macOS, Windows | [MIT](https://github.com/bnjbvr/cargo-machete/blob/main/LICENSE.md) | |
|
||||
| [**cargo-make**](https://github.com/sagiegurari/cargo-make) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/sagiegurari/cargo-make/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/sagiegurari/cargo-make/blob/master/LICENSE) | |
|
||||
| [**cargo-minimal-versions**](https://github.com/taiki-e/cargo-minimal-versions) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/taiki-e/cargo-minimal-versions/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/taiki-e/cargo-minimal-versions/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/cargo-minimal-versions/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-mutants**](https://github.com/sourcefrog/cargo-mutants) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/sourcefrog/cargo-mutants/releases) | Linux, macOS, Windows | [MIT](https://github.com/sourcefrog/cargo-mutants/blob/main/LICENSE) | |
|
||||
| [**cargo-neat**](https://github.com/killzoner/cargo-neat) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/killzoner/cargo-neat/releases) | Linux, macOS, Windows | [MIT](https://github.com/killzoner/cargo-neat/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/killzoner/cargo-neat/blob/master/LICENSE-APACHE) | |
|
||||
| [**cargo-nextest**](https://github.com/nextest-rs/nextest) (alias: `nextest`) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/nextest-rs/nextest/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/nextest-rs/nextest/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/nextest-rs/nextest/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-no-dev-deps**](https://github.com/taiki-e/cargo-no-dev-deps) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/taiki-e/cargo-no-dev-deps/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/taiki-e/cargo-no-dev-deps/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/cargo-no-dev-deps/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-rdme**](https://github.com/orium/cargo-rdme) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/orium/cargo-rdme/releases) | Linux, macOS, Windows | [MPL-2.0](https://github.com/orium/cargo-rdme/blob/main/LICENSE.md) | |
|
||||
| [**cargo-semver-checks**](https://github.com/obi1kenobi/cargo-semver-checks) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/obi1kenobi/cargo-semver-checks/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/obi1kenobi/cargo-semver-checks/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/obi1kenobi/cargo-semver-checks/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-shear**](https://github.com/Boshen/cargo-shear) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/Boshen/cargo-shear/releases) | Linux, macOS, Windows | [MIT](https://github.com/Boshen/cargo-shear/blob/main/LICENSE) | |
|
||||
| [**cargo-sort**](https://github.com/DevinR528/cargo-sort) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/DevinR528/cargo-sort/releases) | Linux, macOS, Windows | [Apache-2.0 OR MIT](https://github.com/DevinR528/cargo-sort/blob/v1.0.9/Cargo.toml#L5) | |
|
||||
| [**cargo-spellcheck**](https://github.com/drahnr/cargo-spellcheck) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/drahnr/cargo-spellcheck/releases) | Linux, Windows | [LGPLv2.1](https://github.com/drahnr/cargo-spellcheck/blob/master/LICENSE-LGPL) | |
|
||||
| [**cargo-tarpaulin**](https://github.com/xd009642/tarpaulin) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/xd009642/tarpaulin/releases) | Linux, macOS, Windows | [MIT](https://github.com/xd009642/tarpaulin/blob/develop/LICENSE-MIT) OR [Apache-2.0](https://github.com/xd009642/tarpaulin/blob/develop/LICENSE-APACHE) | |
|
||||
| [**cargo-udeps**](https://github.com/est31/cargo-udeps) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/est31/cargo-udeps/releases) | Linux, macOS, Windows | [Apache-2.0 OR MIT](https://github.com/est31/cargo-udeps/blob/master/LICENSE) | |
|
||||
| [**cargo-valgrind**](https://github.com/jfrimmel/cargo-valgrind) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/jfrimmel/cargo-valgrind/releases) | Linux, macOS, Windows | [MIT](https://github.com/jfrimmel/cargo-valgrind/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/jfrimmel/cargo-valgrind/blob/master/LICENSE-APACHE) | |
|
||||
| [**cargo-vet**](https://github.com/mozilla/cargo-vet) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/mozilla/cargo-vet/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/mozilla/cargo-vet/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/mozilla/cargo-vet/blob/main/LICENSE-MIT) | |
|
||||
| [**cargo-xwin**](https://github.com/rust-cross/cargo-xwin) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rust-cross/cargo-xwin/releases) | Linux, macOS, Windows | [MIT](https://github.com/rust-cross/cargo-xwin/blob/main/LICENSE) | |
|
||||
| [**cargo-zigbuild**](https://github.com/rust-cross/cargo-zigbuild) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rust-cross/cargo-zigbuild/releases) | Linux, macOS, Windows | [MIT](https://github.com/rust-cross/cargo-zigbuild/blob/main/LICENSE) | |
|
||||
| [**convco**](https://github.com/convco/convco) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/convco/convco/releases) | Linux, macOS, Windows | [MIT](https://github.com/convco/convco/blob/main/LICENSE) | |
|
||||
| [**coreutils**](https://github.com/uutils/coreutils) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/uutils/coreutils/releases) | Linux, macOS, Windows | [MIT](https://github.com/uutils/coreutils/blob/main/LICENSE) | |
|
||||
| [**cosign**](https://github.com/sigstore/cosign) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/sigstore/cosign/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/sigstore/cosign/blob/main/LICENSE) | |
|
||||
| [**covgate**](https://github.com/jesse-black/covgate) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/jesse-black/covgate/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/jesse-black/covgate/blob/main/LICENSE) | |
|
||||
| [**cross**](https://github.com/cross-rs/cross) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/cross-rs/cross/releases) | Linux, macOS, Windows | [MIT](https://github.com/cross-rs/cross/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/cross-rs/cross/blob/main/LICENSE-APACHE) | |
|
||||
| [**cyclonedx**](https://github.com/CycloneDX/cyclonedx-cli) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/CycloneDX/cyclonedx-cli/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/CycloneDX/cyclonedx-cli/blob/main/LICENSE) | |
|
||||
| [**deepsource**](https://github.com/DeepSourceCorp/cli) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/DeepSourceCorp/cli/releases) | Linux, macOS, Windows | [BSD-2-Clause](https://github.com/DeepSourceCorp/cli/blob/master/LICENSE) | |
|
||||
| [**docgarden**](https://github.com/jesse-black/docgarden) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/jesse-black/docgarden/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/jesse-black/docgarden/blob/main/LICENSE) | |
|
||||
| [**dprint**](https://github.com/dprint/dprint) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/dprint/dprint/releases) | Linux, macOS, Windows | [MIT](https://github.com/dprint/dprint/blob/main/LICENSE) | |
|
||||
| [**earthly**](https://github.com/earthly/earthly) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/earthly/earthly/releases) | Linux, macOS, Windows | [MPL-2.0](https://github.com/earthly/earthly/blob/main/LICENSE) | |
|
||||
| [**editorconfig-checker**](https://github.com/editorconfig-checker/editorconfig-checker) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/editorconfig-checker/editorconfig-checker/releases) | Linux, macOS, Windows | [MIT](https://github.com/editorconfig-checker/editorconfig-checker/blob/main/LICENSE) | |
|
||||
| [**espup**](https://github.com/esp-rs/espup) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/esp-rs/espup/releases) | Linux, macOS, Windows | [MIT](https://github.com/esp-rs/espup/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/esp-rs/espup/blob/main/LICENSE-APACHE) | |
|
||||
| [**git-cliff**](https://github.com/orhun/git-cliff) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/orhun/git-cliff/releases) | Linux, macOS, Windows | [MIT](https://github.com/orhun/git-cliff/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/orhun/git-cliff/blob/main/LICENSE-APACHE) | |
|
||||
| [**grcov**](https://github.com/mozilla/grcov) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/mozilla/grcov/releases) | Linux, macOS, Windows | [MPL-2.0](https://github.com/mozilla/grcov/blob/master/LICENSE-MPL-2.0) | |
|
||||
| [**gungraun-runner**](https://gungraun.github.io/gungraun/) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/gungraun/gungraun/releases) | Linux | [Apache-2.0](https://github.com/gungraun/gungraun/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/gungraun/gungraun/blob/main/LICENSE-MIT) | |
|
||||
| [**hyperfine**](https://github.com/sharkdp/hyperfine) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/sharkdp/hyperfine/releases) | Linux, macOS, Windows | [MIT](https://github.com/sharkdp/hyperfine/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/sharkdp/hyperfine/blob/master/LICENSE-APACHE) | |
|
||||
| [**iai-callgrind-runner (deprecated)**](https://gungraun.github.io/gungraun/) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/iai-callgrind/iai-callgrind/releases) | Linux | [Apache-2.0](https://github.com/iai-callgrind/iai-callgrind/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/iai-callgrind/iai-callgrind/blob/main/LICENSE-MIT) | renamed to `gungraun-runner` |
|
||||
| [**jaq**](https://github.com/01mf02/jaq) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/01mf02/jaq/releases) | Linux, macOS, Windows | [MIT](https://github.com/01mf02/jaq/blob/main/LICENSE-MIT) | |
|
||||
| [**just**](https://github.com/casey/just) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/casey/just/releases) | Linux, macOS, Windows | [CC0-1.0](https://github.com/casey/just/blob/master/LICENSE) | |
|
||||
| [**kingfisher**](https://github.com/mongodb/kingfisher) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/mongodb/kingfisher/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/mongodb/kingfisher/blob/main/LICENSE) | |
|
||||
| [**knope**](https://github.com/knope-dev/knope) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/knope-dev/knope/releases) | Linux, macOS, Windows | [MIT](https://github.com/knope-dev/knope/blob/main/LICENSE) | |
|
||||
| [**martin**](https://maplibre.org/martin/) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/maplibre/martin/releases) | Linux, macOS | [MIT](https://github.com/maplibre/martin/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/maplibre/martin/blob/main/LICENSE-APACHE) | |
|
||||
| [**mdbook**](https://github.com/rust-lang/mdBook) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rust-lang/mdBook/releases) | Linux, macOS, Windows | [MPL-2.0](https://github.com/rust-lang/mdBook/blob/master/LICENSE) | |
|
||||
| [**mdbook-alerts (deprecated)**](https://github.com/lambdalisue/rs-mdbook-alerts) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/lambdalisue/rs-mdbook-alerts/releases) | Linux, macOS, Windows | [MIT](https://github.com/lambdalisue/rs-mdbook-alerts/blob/main/LICENSE) | included in `mdbook` |
|
||||
| [**mdbook-d2**](https://github.com/danieleades/mdbook-d2) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/danieleades/mdbook-d2/releases) | Linux, macOS, Windows | [MIT](https://github.com/danieleades/mdbook-d2/blob/main/LICENSE) | |
|
||||
| [**mdbook-linkcheck**](https://github.com/Michael-F-Bryan/mdbook-linkcheck) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/Michael-F-Bryan/mdbook-linkcheck/releases) | Linux, macOS, Windows | [MIT](https://github.com/Michael-F-Bryan/mdbook-linkcheck/blob/master/LICENSE) | |
|
||||
| [**mdbook-mermaid**](https://github.com/badboy/mdbook-mermaid) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/badboy/mdbook-mermaid/releases) | Linux, macOS, Windows | [MPL-2.0](https://github.com/badboy/mdbook-mermaid/blob/main/LICENSE) | |
|
||||
| [**mdbook-mermaid-ssr**](https://github.com/CommanderStorm/mdbook-mermaid-ssr) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/CommanderStorm/mdbook-mermaid-ssr/releases) | Linux, macOS, Windows | [MPL-2.0](https://github.com/CommanderStorm/mdbook-mermaid-ssr/blob/main/LICENSE) | |
|
||||
| [**mise**](https://github.com/jdx/mise) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/jdx/mise/releases) | Linux, macOS, Windows | [MIT](https://github.com/jdx/mise/blob/main/LICENSE) | |
|
||||
| [**osv-scanner**](https://github.com/google/osv-scanner) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/google/osv-scanner/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/google/osv-scanner/blob/main/LICENSE) | |
|
||||
| [**parse-changelog**](https://github.com/taiki-e/parse-changelog) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/taiki-e/parse-changelog/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/taiki-e/parse-changelog/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/parse-changelog/blob/main/LICENSE-MIT) | |
|
||||
| [**parse-dockerfile**](https://github.com/taiki-e/parse-dockerfile) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/taiki-e/parse-dockerfile/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/taiki-e/parse-dockerfile/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/taiki-e/parse-dockerfile/blob/main/LICENSE-MIT) | |
|
||||
| [**prek**](https://github.com/j178/prek) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/j178/prek/releases) | Linux, macOS, Windows | [MIT](https://github.com/j178/prek/blob/master/LICENSE) | |
|
||||
| [**protoc**](https://github.com/protocolbuffers/protobuf) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/protocolbuffers/protobuf/releases) | Linux, macOS, Windows | [BSD-3-Clause](https://github.com/protocolbuffers/protobuf/blob/main/LICENSE) | |
|
||||
| [**rclone**](https://github.com/rclone/rclone) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/rclone/rclone/releases) | Linux, macOS, Windows | [MIT](https://github.com/rclone/rclone/blob/master/COPYING) | |
|
||||
| [**release-plz**](https://release-plz.dev/) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/release-plz/release-plz/releases) | Linux, macOS, Windows | [MIT](https://github.com/release-plz/release-plz/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/release-plz/release-plz/blob/main/LICENSE-APACHE) | |
|
||||
| [**rust**](https://rust-lang.org) | `$CARGO_HOME/bin` | rustup | Linux, macOS, Windows | [Apache-2.0 OR MIT](https://github.com/rust-lang/rust/blob/main/COPYRIGHT) | |
|
||||
| [**sccache**](https://github.com/mozilla/sccache) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/mozilla/sccache/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/mozilla/sccache/blob/main/LICENSE) | |
|
||||
| [**shellcheck**](https://www.shellcheck.net) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/koalaman/shellcheck/releases) | Linux, macOS, Windows | [GPL-3.0](https://github.com/koalaman/shellcheck/blob/master/LICENSE) | |
|
||||
| [**shfmt**](https://github.com/mvdan/sh) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/mvdan/sh/releases) | Linux, macOS, Windows | [BSD-3-Clause](https://github.com/mvdan/sh/blob/master/LICENSE) | |
|
||||
| [**syft**](https://github.com/anchore/syft) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/anchore/syft/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/anchore/syft/blob/main/LICENSE) | |
|
||||
| [**taplo**](https://github.com/tamasfe/taplo) (alias: `taplo-cli`) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/tamasfe/taplo/releases) | Linux, macOS, Windows | [MIT](https://github.com/tamasfe/taplo/blob/master/LICENSE) | |
|
||||
| [**tombi**](https://tombi-toml.github.io/tombi/) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/tombi-toml/tombi/releases) | Linux, macOS, Windows | [MIT](https://github.com/tombi-toml/tombi/blob/main/LICENSE) | |
|
||||
| [**trivy**](https://github.com/aquasecurity/trivy) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/aquasecurity/trivy/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/aquasecurity/trivy/blob/main/LICENSE) | |
|
||||
| [**trunk**](https://github.com/trunk-rs/trunk) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/trunk-rs/trunk/releases) | Linux, macOS, Windows | [MIT](https://github.com/trunk-rs/trunk/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/trunk-rs/trunk/blob/main/LICENSE-APACHE) | |
|
||||
| [**typos**](https://github.com/crate-ci/typos) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/crate-ci/typos/releases) | Linux, macOS, Windows | [MIT](https://github.com/crate-ci/typos/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/crate-ci/typos/blob/master/LICENSE-APACHE) | |
|
||||
| [**ubi**](https://github.com/houseabsolute/ubi) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/houseabsolute/ubi/releases) | Linux, macOS, Windows | [MIT](https://github.com/houseabsolute/ubi/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/houseabsolute/ubi/blob/master/LICENSE-APACHE) | |
|
||||
| [**uv**](https://github.com/astral-sh/uv) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/astral-sh/uv/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/astral-sh/uv/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/astral-sh/uv/blob/main/LICENSE-MIT) | |
|
||||
| [**vacuum**](https://github.com/daveshanley/vacuum) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/daveshanley/vacuum/releases) | Linux, macOS, Windows | [MIT](https://github.com/daveshanley/vacuum/blob/main/LICENSE) | |
|
||||
| [**valgrind**](https://valgrind.org/) | `/snap/bin` | [snap](https://snapcraft.io/install/valgrind/ubuntu) | Linux | [GPL-2.0](https://sourceware.org/git/?p=valgrind.git;a=blob;f=COPYING;hb=HEAD) | |
|
||||
| [**wait-for-them**](https://github.com/shenek/wait-for-them) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/shenek/wait-for-them/releases) | Linux, macOS, Windows | [GPL-3.0](https://github.com/shenek/wait-for-them/blob/v0.4.0/Cargo.toml#L7) | |
|
||||
| [**wash**](https://github.com/wasmCloud/wasmCloud) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/wasmCloud/wasmCloud/releases) | Linux, macOS, Windows | [Apache-2.0](https://github.com/wasmCloud/wasmCloud/blob/main/LICENSE) | |
|
||||
| [**wasm-bindgen**](https://github.com/wasm-bindgen/wasm-bindgen) (alias: `wasm-bindgen-cli`) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/wasm-bindgen/wasm-bindgen/releases) | Linux, macOS, Windows | [MIT](https://github.com/wasm-bindgen/wasm-bindgen/blob/main/LICENSE-MIT) OR [Apache-2.0](https://github.com/wasm-bindgen/wasm-bindgen/blob/main/LICENSE-APACHE) | |
|
||||
| [**wasm-pack**](https://github.com/wasm-bindgen/wasm-pack) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/wasm-bindgen/wasm-pack/releases) | Linux, macOS, Windows | [MIT](https://github.com/wasm-bindgen/wasm-pack/blob/master/LICENSE-MIT) OR [Apache-2.0](https://github.com/wasm-bindgen/wasm-pack/blob/master/LICENSE-APACHE) | |
|
||||
| [**wasm-tools**](https://github.com/bytecodealliance/wasm-tools) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/bytecodealliance/wasm-tools/releases) | Linux, macOS, Windows | [Apache-2.0 WITH LLVM-exception](https://github.com/bytecodealliance/wasm-tools/blob/main/LICENSE-APACHE) OR [Apache-2.0](https://github.com/bytecodealliance/wasm-tools/blob/main/LICENSE-APACHE) OR [MIT](https://github.com/bytecodealliance/wasm-tools/blob/main/LICENSE-MIT) | |
|
||||
| [**wasmtime**](https://github.com/bytecodealliance/wasmtime) (alias: `wasmtime-cli`) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/bytecodealliance/wasmtime/releases) | Linux, macOS, Windows | [Apache-2.0 WITH LLVM-exception](https://github.com/bytecodealliance/wasmtime/blob/main/LICENSE) | |
|
||||
| [**xbuild**](https://github.com/rust-mobile/xbuild) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/rust-mobile/xbuild/releases) | Linux, macOS, Windows | [Apache-2.0 OR MIT](https://github.com/rust-mobile/xbuild/blob/v0.2.0/xbuild/Cargo.toml#L7) | |
|
||||
| [**xh**](https://github.com/ducaale/xh) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/ducaale/xh/releases) | Linux, macOS, Windows | [MIT](https://github.com/ducaale/xh/blob/master/LICENSE) | |
|
||||
| [**zizmor**](https://github.com/zizmorcore/zizmor) | `$CARGO_HOME/bin` | [GitHub Releases](https://github.com/zizmorcore/zizmor/releases) | Linux, macOS, Windows | [MIT](https://github.com/zizmorcore/zizmor/blob/main/LICENSE) | |
|
||||
| [**zola**](https://github.com/getzola/zola) | `$HOME/.install-action/bin` | [GitHub Releases](https://github.com/getzola/zola/releases) | Linux, macOS, Windows | [MIT](https://github.com/getzola/zola/blob/master/LICENSE) | |
|
||||
|
||||
[cargo-binstall]: https://github.com/cargo-bins/cargo-binstall
|
||||
-97
@@ -1,97 +0,0 @@
|
||||
name: Install development tools
|
||||
description: GitHub Action for installing development tools
|
||||
|
||||
inputs:
|
||||
tool:
|
||||
description: Tools to install (whitespace or comma separated list)
|
||||
required: false
|
||||
default: cargo-lambda
|
||||
checksum:
|
||||
description: Whether to enable checksums (strongly discouraged to disable)
|
||||
required: false
|
||||
default: 'true'
|
||||
fallback:
|
||||
description: Whether to use fallback (none, cargo-binstall, or cargo-install)
|
||||
required: false
|
||||
default: 'cargo-binstall'
|
||||
|
||||
# Note:
|
||||
# - inputs.* should be manually mapped to INPUT_* due to https://github.com/actions/runner/issues/665
|
||||
# - For context containing path, use GITHUB_*/RUNNER_* instead of github.*/runner.* due to https://github.com/actions/runner/issues/2185
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- run: |
|
||||
bail() {
|
||||
printf '::error::install-action: %s\n' "$*"
|
||||
exit 1
|
||||
}
|
||||
# If /bin/sh is dash, environment variable containing % is not imported, but is fine
|
||||
# because it also means that it will not be exposed to subprocess.
|
||||
if /usr/bin/env | grep -Eq '^BASH_FUNC_'; then
|
||||
bail 'bash function injection via BASH_FUNC_ environment variable is not allowed for security reasons'
|
||||
fi
|
||||
if ! command -v bash >/dev/null; then
|
||||
if grep -Eq '^ID=alpine' /etc/os-release; then
|
||||
printf '::group::Install packages required for install-action (bash)\n'
|
||||
# NB: sync with apk_install in main.sh
|
||||
if command -v sudo >/dev/null; then
|
||||
sudo apk --no-cache add bash
|
||||
elif command -v doas >/dev/null; then
|
||||
doas apk --no-cache add bash
|
||||
else
|
||||
apk --no-cache add bash
|
||||
fi
|
||||
printf '::endgroup::\n'
|
||||
else
|
||||
bail 'this action requires bash'
|
||||
fi
|
||||
fi
|
||||
bash --noprofile --norc "${GITHUB_ACTION_PATH:?}/main.sh"
|
||||
shell: /usr/bin/env -u ENV -u BASH_ENV -u CDPATH -u SHELLOPTS -u BASHOPTS /bin/sh -eu {0} # zizmor: ignore[misfeature] false positive
|
||||
env:
|
||||
# NB: Sync with Windows case.
|
||||
INPUT_TOOL: ${{ inputs.tool }}
|
||||
INPUT_CHECKSUM: ${{ inputs.checksum }}
|
||||
INPUT_FALLBACK: ${{ inputs.fallback }}
|
||||
DEFAULT_GITHUB_TOKEN: ${{ inputs.fallback == 'cargo-binstall' && github.token || '' }}
|
||||
ACTION_USER_AGENT: ${{ github.action_repository }} (${{ github.action_ref }})
|
||||
RUNNER_OS: ${{ runner.os }}
|
||||
RUNNER_ARCH: ${{ runner.arch }}
|
||||
if: runner.os != 'Windows'
|
||||
# Use pwsh and retry on bash startup failure to work around windows-11-arm runner bug:
|
||||
# https://github.com/actions/partner-runner-images/issues/169
|
||||
- run: |
|
||||
Set-StrictMode -Version Latest
|
||||
$remove_env = @('ENV','BASH_ENV','CDPATH','SHELLOPTS','BASHOPTS','BASH_FUNC_*')
|
||||
foreach ($name in $remove_env) {
|
||||
if (Test-Path "Env:$name") { Remove-Item "Env:\$name" }
|
||||
}
|
||||
for ($i=1; $i -le 10; $i++) {
|
||||
$prev_err_action = $ErrorActionPreference
|
||||
$ErrorActionPreference = "Continue"
|
||||
& bash --noprofile --norc "$env:GITHUB_ACTION_PATH\main.sh"
|
||||
$code = $LASTEXITCODE
|
||||
$ErrorActionPreference = "$prev_err_action"
|
||||
if (Test-Path "$env:USERPROFILE\.install-action\init") {
|
||||
# If bash started successfully, main.sh creates init file.
|
||||
Remove-Item "$env:USERPROFILE\.install-action\init" -Force
|
||||
exit $code
|
||||
}
|
||||
if ($i -lt 10) {
|
||||
Write-Output "::warning::install-action: installation failed due to bash startup failure (<https://github.com/actions/partner-runner-images/issues/169>); retrying..."
|
||||
}
|
||||
}
|
||||
Write-Output "::error::install-action: installation failed due to bash startup failure (<https://github.com/actions/partner-runner-images/issues/169>); this maybe resolved by re-running job"
|
||||
exit 1
|
||||
shell: pwsh
|
||||
env:
|
||||
# NB: Sync with non-Windows case.
|
||||
INPUT_TOOL: ${{ inputs.tool }}
|
||||
INPUT_CHECKSUM: ${{ inputs.checksum }}
|
||||
INPUT_FALLBACK: ${{ inputs.fallback }}
|
||||
DEFAULT_GITHUB_TOKEN: ${{ inputs.fallback == 'cargo-binstall' && github.token || '' }}
|
||||
ACTION_USER_AGENT: ${{ github.action_repository }} (${{ github.action_ref }})
|
||||
RUNNER_OS: ${{ runner.os }}
|
||||
RUNNER_ARCH: ${{ runner.arch }}
|
||||
if: runner.os == 'Windows'
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user