mirror of
https://github.com/taiki-e/install-action.git
synced 2026-05-05 20:50:27 +00:00
Compare commits
9 Commits
v2.77.0
...
cargo-no-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
393d7e2945 | ||
|
|
cca35edeb1 | ||
|
|
e60138699e | ||
|
|
651945350f | ||
|
|
bfbdc59475 | ||
|
|
9f306516af | ||
|
|
d1eee517af | ||
|
|
a4ad60dd6a | ||
|
|
39b209ec4a |
2
.github/.cspell/project-dictionary.txt
vendored
2
.github/.cspell/project-dictionary.txt
vendored
@@ -34,7 +34,6 @@ rdme
|
||||
rootfs
|
||||
sccache
|
||||
SHASUMS
|
||||
shortstat
|
||||
sigstore
|
||||
startswith
|
||||
syft
|
||||
@@ -43,7 +42,6 @@ udeps
|
||||
USERPROFILE
|
||||
wasmtime
|
||||
watchexec
|
||||
worktree
|
||||
xbuild
|
||||
xscale
|
||||
xwin
|
||||
|
||||
16
.github/workflows/ci.yml
vendored
16
.github/workflows/ci.yml
vendored
@@ -32,20 +32,20 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
miri:
|
||||
uses: taiki-e/github-actions/.github/workflows/miri.yml@75415970465917c31d702710acd9c9248b9af314 # main
|
||||
uses: taiki-e/github-actions/.github/workflows/miri.yml@2474ed4664eb8903c151603a9d841512c069f7f6 # main
|
||||
with:
|
||||
# NB: sync with test job's --exclude option
|
||||
args: --exclude install-action-internal-codegen
|
||||
msrv:
|
||||
uses: taiki-e/github-actions/.github/workflows/msrv.yml@75415970465917c31d702710acd9c9248b9af314 # main
|
||||
uses: taiki-e/github-actions/.github/workflows/msrv.yml@2474ed4664eb8903c151603a9d841512c069f7f6 # main
|
||||
test-manifest-schema:
|
||||
uses: taiki-e/github-actions/.github/workflows/test.yml@75415970465917c31d702710acd9c9248b9af314 # main
|
||||
uses: taiki-e/github-actions/.github/workflows/test.yml@2474ed4664eb8903c151603a9d841512c069f7f6 # main
|
||||
with:
|
||||
# NB: sync with miri job's --exclude option
|
||||
test-args: --exclude install-action-internal-codegen
|
||||
no-std: false
|
||||
tidy:
|
||||
uses: taiki-e/github-actions/.github/workflows/tidy.yml@75415970465917c31d702710acd9c9248b9af314 # main
|
||||
uses: taiki-e/github-actions/.github/workflows/tidy.yml@2474ed4664eb8903c151603a9d841512c069f7f6 # main
|
||||
permissions:
|
||||
contents: write # for creating branch for pr
|
||||
pull-requests: write # unused (used in `codegen-automerge: true` case)
|
||||
@@ -117,8 +117,6 @@ jobs:
|
||||
- uses: ./
|
||||
with:
|
||||
tool: ${{ steps.tool-list.outputs.tool }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# Test all shells listed in https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell
|
||||
- name: Test bash
|
||||
run: just --version && shfmt --version && protoc --version && rustc --version && cargo --version && rustup --version
|
||||
@@ -159,7 +157,7 @@ jobs:
|
||||
- run: env
|
||||
- uses: ./
|
||||
with:
|
||||
# NB: Update alias list in release.yml, case for aliases in main.sh,
|
||||
# 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
|
||||
@@ -167,8 +165,6 @@ jobs:
|
||||
typos-cli
|
||||
wasm-bindgen-cli
|
||||
wasmtime-cli
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Test bash
|
||||
run: cargo-nextest nextest --version && taplo --version
|
||||
shell: bash
|
||||
@@ -319,8 +315,6 @@ jobs:
|
||||
- uses: ./
|
||||
with:
|
||||
tool: ${{ steps.tool-list.outputs.tool }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Test bash
|
||||
run: just --version && shfmt --version
|
||||
shell: bash
|
||||
|
||||
2
.github/workflows/manifest.yml
vendored
2
.github/workflows/manifest.yml
vendored
@@ -32,7 +32,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
manifest:
|
||||
uses: taiki-e/github-actions/.github/workflows/gen.yml@a6df8c9ea0038c730f138f0f849d692cf387ea4e # main
|
||||
uses: taiki-e/github-actions/.github/workflows/gen.yml@2474ed4664eb8903c151603a9d841512c069f7f6 # main
|
||||
permissions:
|
||||
contents: write # for creating branch for pr
|
||||
pull-requests: write # for gh pr review --approve
|
||||
|
||||
403
.github/workflows/release.yml
vendored
403
.github/workflows/release.yml
vendored
@@ -32,408 +32,21 @@ concurrency:
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
prepare:
|
||||
if: github.repository_owner == 'taiki-e' && inputs.target == 'install-action'
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
|
||||
- uses: taiki-e/install-action@58e862542551f667fa44c8a2a4a1d64ad477c96a # v2.75.17
|
||||
with:
|
||||
tool: parse-changelog
|
||||
fallback: none
|
||||
- id: check
|
||||
run: |
|
||||
IFS=$'\n\t'
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
retry() {
|
||||
for i in {1..10}; do
|
||||
if "$@"; then
|
||||
return 0
|
||||
else
|
||||
sleep "${i}"
|
||||
fi
|
||||
done
|
||||
"$@"
|
||||
}
|
||||
bail() {
|
||||
printf '::error::%s\n' "$*"
|
||||
exit 1
|
||||
}
|
||||
if { sed --help 2>&1 || true; } | grep -Eq -e '-i extension'; then
|
||||
in_place=(-i '')
|
||||
else
|
||||
in_place=(-i)
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2153
|
||||
version="${VERSION}"
|
||||
printf 'version(input): %s\n' "${version}"
|
||||
# shellcheck disable=SC2153
|
||||
tag_prefix="${TAG_PREFIX}"
|
||||
printf 'tag_prefix: %s\n' "${tag_prefix}"
|
||||
# shellcheck disable=SC2153
|
||||
changelog="${CHANGELOG}"
|
||||
printf 'changelog: %s\n' "${changelog}"
|
||||
|
||||
# Get the current date.
|
||||
release_date=$(date -u '+%Y-%m-%d')
|
||||
printf 'release-date: %s\n' "${release_date}"
|
||||
printf 'release-date=%s\n' "${release_date}" >>"${GITHUB_OUTPUT}"
|
||||
|
||||
# Get the current revision.
|
||||
rev=$(git rev-parse HEAD)
|
||||
printf 'rev: %s\n' "${rev}"
|
||||
printf 'rev=%s\n' "${rev}" >>"${GITHUB_OUTPUT}"
|
||||
|
||||
prev_version=$(parse-changelog --title-no-link "${changelog}" | cut -d' ' -f1)
|
||||
|
||||
# Determine the new version number and tag name.
|
||||
case "${version}" in
|
||||
major | minor | patch)
|
||||
if [[ ! "${prev_version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
bail "pre-release/build-metadata"
|
||||
fi
|
||||
major="${prev_version%%.*}"
|
||||
minor_patch="${prev_version#*.}"
|
||||
minor="${minor_patch%%.*}"
|
||||
patch="${minor_patch#*.}"
|
||||
case "${version}" in
|
||||
major) version="$((major+1)).0.0" ;;
|
||||
minor) version="${major}.$((minor+1)).0" ;;
|
||||
patch) version="${major}.${minor}.$((patch+1))" ;;
|
||||
esac
|
||||
;;
|
||||
*) version="${version#v}" ;;
|
||||
esac
|
||||
if [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z\.-]+)?(\+[0-9A-Za-z\.-]+)?$ ]]; then
|
||||
bail "invalid version format '${version}'"
|
||||
fi
|
||||
printf 'version: %s\n' "${version}"
|
||||
printf 'version=%s\n' "${version}" >>"${GITHUB_OUTPUT}"
|
||||
tag="${tag_prefix}${version}"
|
||||
printf 'tag: %s\n' "${tag}"
|
||||
printf 'tag=%s\n' "${tag}" >>"${GITHUB_OUTPUT}"
|
||||
|
||||
# Make sure the same release has not been created in the past.
|
||||
if gh release view "${tag}" &>/dev/null; then
|
||||
bail "tag '${tag}' has already been created and pushed"
|
||||
fi
|
||||
# Make sure that the release was created from an allowed branch.
|
||||
if ! git branch | grep -Eq '\* '"${BRANCH}"'$'; then
|
||||
bail "current branch is not '${BRANCH}'"
|
||||
fi
|
||||
|
||||
changed_paths=()
|
||||
retry git fetch origin --tags &>/dev/null
|
||||
tags=$(git --no-pager tag | { grep -E "^${tag_prefix}[0-9]+" || true; })
|
||||
if [[ -n "${tags}" ]]; then
|
||||
printf 'has-tags=true\n' >>"${GITHUB_OUTPUT}"
|
||||
# Make sure the same release does not exist in changelog.
|
||||
if grep -Eq "^## \\[${version//./\\.}\\]" "${changelog}"; then
|
||||
bail "release ${version} already exist in ${changelog}"
|
||||
fi
|
||||
if grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "link to ${version} already exist in ${changelog}"
|
||||
fi
|
||||
|
||||
# Update changelog.
|
||||
changed_paths+=("${changelog}")
|
||||
remote_url=$(grep -E '^\[Unreleased\]: https://' "${changelog}" | sed -E 's/^\[Unreleased\]: //; s/\.\.\.HEAD$//')
|
||||
prev_tag="${remote_url#*/compare/}"
|
||||
remote_url="${remote_url%/compare/*}"
|
||||
sed -E "${in_place[@]}" \
|
||||
-e "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n## [${version}] - ${release_date}/" \
|
||||
-e "s#^\[Unreleased\]: https://.*#[Unreleased]: ${remote_url}/compare/${tag}...HEAD\\n[${version}]: ${remote_url}/compare/${prev_tag}...${tag}#" "${changelog}"
|
||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
else
|
||||
# Make sure the release exists in changelog.
|
||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||
bail "release ${version} does not exist in ${changelog} or has wrong release date"
|
||||
fi
|
||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "link to ${version} does not exist in ${changelog}"
|
||||
fi
|
||||
fi
|
||||
# Make sure that a valid release note for this version exists.
|
||||
# https://github.com/taiki-e/parse-changelog
|
||||
changes=$(parse-changelog "${changelog}" "${version}")
|
||||
if [[ -z "${changes}" ]]; then
|
||||
bail "changelog for ${version} has no body"
|
||||
fi
|
||||
printf '============== CHANGELOG ==============\n'
|
||||
printf '%s\n' "${changes}"
|
||||
printf '=======================================\n'
|
||||
|
||||
if [[ -n "${tags}" ]]; then
|
||||
git -c color.ui=always diff "${changed_paths[@]}"
|
||||
git add "${changed_paths[@]}"
|
||||
fi
|
||||
# Make sure that there is no unintended change.
|
||||
git add -N .
|
||||
git -c color.ui=always diff --exit-code
|
||||
|
||||
(
|
||||
set -x
|
||||
git show HEAD --shortstat
|
||||
)
|
||||
env:
|
||||
VERSION: ${{ inputs.version }}
|
||||
TAG_PREFIX: v
|
||||
CHANGELOG: CHANGELOG.md
|
||||
BRANCH: main
|
||||
outputs:
|
||||
has-tags: ${{ steps.check.outputs.has-tags }}
|
||||
release-date: ${{ steps.check.outputs.release-date }}
|
||||
rev: ${{ steps.check.outputs.rev }}
|
||||
tag: ${{ steps.check.outputs.tag }}
|
||||
version: ${{ steps.check.outputs.version }}
|
||||
|
||||
release:
|
||||
if: github.repository_owner == 'taiki-e' && inputs.target == 'install-action'
|
||||
needs: prepare
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 60
|
||||
environment:
|
||||
name: release
|
||||
deployment: false
|
||||
uses: taiki-e/github-actions/.github/workflows/action-release.yml@2474ed4664eb8903c151603a9d841512c069f7f6 # main
|
||||
permissions:
|
||||
contents: write # for taiki-e/create-gh-release-action
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
|
||||
- uses: taiki-e/install-action@58e862542551f667fa44c8a2a4a1d64ad477c96a # v2.75.17
|
||||
secrets:
|
||||
PUSH_TOKEN_APP_CLIENT_ID: ${{ secrets.PUSH_TOKEN_APP_CLIENT_ID }}
|
||||
PUSH_TOKEN_APP_PRIVATE_KEY: ${{ secrets.PUSH_TOKEN_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
tool: parse-changelog
|
||||
fallback: none
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
id: push-token
|
||||
with:
|
||||
client-id: ${{ secrets.PUSH_TOKEN_APP_CLIENT_ID }}
|
||||
private-key: ${{ secrets.PUSH_TOKEN_APP_PRIVATE_KEY }}
|
||||
- name: Create and push release commit and tag
|
||||
id: push
|
||||
run: |
|
||||
IFS=$'\n\t'
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
retry() {
|
||||
for i in {1..10}; do
|
||||
if "$@"; then
|
||||
return 0
|
||||
else
|
||||
sleep "${i}"
|
||||
fi
|
||||
done
|
||||
"$@"
|
||||
}
|
||||
bail() {
|
||||
printf '::error::%s\n' "$*"
|
||||
exit 1
|
||||
}
|
||||
if { sed --help 2>&1 || true; } | grep -Eq -e '-i extension'; then
|
||||
in_place=(-i '')
|
||||
else
|
||||
in_place=(-i)
|
||||
fi
|
||||
|
||||
git config user.name 'Taiki Endo'
|
||||
git config user.email 'te316e89@gmail.com'
|
||||
|
||||
# shellcheck disable=SC2153
|
||||
version="${VERSION}"
|
||||
# shellcheck disable=SC2153
|
||||
tag="${TAG}"
|
||||
# shellcheck disable=SC2153
|
||||
changelog="${CHANGELOG}"
|
||||
# shellcheck disable=SC2153
|
||||
release_date="${RELEASE_DATE}"
|
||||
|
||||
# Make sure the current revision is same as prepare step.
|
||||
# --unshallow is necessary to successfully push the
|
||||
# "releases/${major_version_tag}" branch in the subsequent step.
|
||||
retry git fetch origin --unshallow &>/dev/null
|
||||
rev=$(git rev-parse HEAD)
|
||||
if [[ "${rev}" != "${PREPARE_REV}" ]]; then
|
||||
bail "revision difference between prepare step"
|
||||
fi
|
||||
|
||||
# Make sure the same release has not been created in the past.
|
||||
if gh release view "${tag}" &>/dev/null; then
|
||||
bail "tag '${tag}' has already been created and pushed"
|
||||
fi
|
||||
# Make sure that the release was created from an allowed branch.
|
||||
if ! git branch | grep -Eq '\* '"${BRANCH}"'$'; then
|
||||
bail "current branch is not '${BRANCH}'"
|
||||
fi
|
||||
|
||||
changed_paths=()
|
||||
if [[ "${HAS_TAGS}" == "true" ]]; then
|
||||
# Update changelog.
|
||||
changed_paths+=("${changelog}")
|
||||
remote_url=$(grep -E '^\[Unreleased\]: https://' "${changelog}" | sed -E 's/^\[Unreleased\]: //; s/\.\.\.HEAD$//')
|
||||
prev_tag="${remote_url#*/compare/}"
|
||||
remote_url="${remote_url%/compare/*}"
|
||||
sed -E "${in_place[@]}" \
|
||||
-e "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n## [${version}] - ${release_date}/" \
|
||||
-e "s#^\[Unreleased\]: https://.*#[Unreleased]: ${remote_url}/compare/${tag}...HEAD\\n[${version}]: ${remote_url}/compare/${prev_tag}...${tag}#" "${changelog}"
|
||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||
bail "failed to update ${changelog}"
|
||||
fi
|
||||
fi
|
||||
changes=$(parse-changelog "${changelog}" "${version}")
|
||||
printf '============== CHANGELOG ==============\n'
|
||||
printf '%s\n' "${changes}"
|
||||
printf '=======================================\n'
|
||||
|
||||
if [[ "${HAS_TAGS}" == "true" ]]; then
|
||||
# Create a release commit.
|
||||
(
|
||||
set -x
|
||||
git add "${changed_paths[@]}"
|
||||
git commit -m "Release ${version}"
|
||||
)
|
||||
fi
|
||||
|
||||
major_version_tag="v${version%%.*}"
|
||||
(
|
||||
set -x
|
||||
git tag "${tag}"
|
||||
git branch "releases/${major_version_tag}"
|
||||
git tag -f "${major_version_tag}"
|
||||
)
|
||||
refs=("refs/heads/${BRANCH}" "refs/tags/${tag}" "refs/heads/releases/${major_version_tag}" "+refs/tags/${major_version_tag}")
|
||||
|
||||
tools=()
|
||||
for tool in tools/codegen/base/*.json; do
|
||||
tool="${tool##*/}"
|
||||
tools+=("${tool%.*}")
|
||||
done
|
||||
# Aliases.
|
||||
# NB: Update case for aliases in main.sh, tool input option in test-alias job
|
||||
# in .github/workflows/ci.yml, and match for alias for tools/codegen/src/tools-markdown.rs.
|
||||
tools+=(
|
||||
nextest
|
||||
taplo-cli
|
||||
typos-cli
|
||||
wasm-bindgen-cli
|
||||
wasmtime-cli
|
||||
)
|
||||
# Non-manifest-based tools.
|
||||
tools+=(valgrind)
|
||||
|
||||
branches=()
|
||||
for tool in "${tools[@]}"; do
|
||||
(
|
||||
set -x
|
||||
git checkout -b "releases/${tool}"
|
||||
sed -E "${in_place[@]}" action.yml \
|
||||
-e "s/required: true/required: false/g" \
|
||||
-e "s/# default: #publish:tool/default: ${tool}/g"
|
||||
git add action.yml
|
||||
git commit -m "${tool}"
|
||||
git tag -f "${tool}"
|
||||
git checkout refs/tags/"${tag}"
|
||||
)
|
||||
refs+=("+refs/heads/releases/${tool}" "+refs/tags/${tool}")
|
||||
branches+=("releases/${tool}")
|
||||
done
|
||||
|
||||
prev_credential_helper=$(git config get --local credential.helper || true)
|
||||
if [[ -n "${prev_credential_helper}" ]]; then
|
||||
printf 'credential helper is already set (%s)\n' "${prev_credential_helper}"
|
||||
else
|
||||
protocol="${GITHUB_SERVER_URL%%://*}"
|
||||
hostname="${GITHUB_SERVER_URL#*://}"
|
||||
(
|
||||
set -x
|
||||
git config --local credential.helper cache
|
||||
)
|
||||
git credential approve <<EOF
|
||||
protocol=${protocol}
|
||||
host=${hostname}
|
||||
username=${GITHUB_ACTOR}
|
||||
password=${PUSH_TOKEN}
|
||||
EOF
|
||||
# Remove credential helper config on exit.
|
||||
trap -- '(set -x; git credential-cache exit; git config --local --unset credential.helper || true)' EXIT
|
||||
fi
|
||||
|
||||
(
|
||||
set -x
|
||||
retry git push origin --atomic "${refs[@]}"
|
||||
git branch -d "releases/${major_version_tag}"
|
||||
git branch -D "${branches[@]}"
|
||||
|
||||
schema_workspace=/tmp/workspace
|
||||
rm -rf -- "${schema_workspace}"
|
||||
# Checkout manifest-schema branch
|
||||
schema_version="$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name == "install-action-manifest-schema") | .version')"
|
||||
if [[ "${schema_version}" == "0."* ]]; then
|
||||
schema_version="0.$(cut -d. -f2 <<<"${schema_version}")"
|
||||
else
|
||||
schema_version="$(cut -d. -f1 <<<"${schema_version}")"
|
||||
fi
|
||||
schema_branch="manifest-schema-${schema_version}"
|
||||
|
||||
git worktree add --force "${schema_workspace}"
|
||||
(
|
||||
cd -- "${schema_workspace}"
|
||||
if git fetch origin "${schema_branch}"; then
|
||||
git checkout "origin/${schema_branch}" -B "${schema_branch}"
|
||||
elif ! git checkout "${schema_branch}"; then
|
||||
# New branch with no history. Credit: https://stackoverflow.com/a/13969482
|
||||
git checkout --orphan "${schema_branch}"
|
||||
git rm -rf -- . || true
|
||||
git commit -m 'Initial commit' --allow-empty
|
||||
fi
|
||||
)
|
||||
|
||||
# Copy over schema
|
||||
cp -- ./manifests/* "${schema_workspace}"
|
||||
|
||||
(
|
||||
cd -- "${schema_workspace}"
|
||||
# Stage changes
|
||||
git add .
|
||||
# Detect changes, then commit and push if changes exist
|
||||
if [[ "$(git status --porcelain=v1 | LC_ALL=C wc -l)" != "0" ]]; then
|
||||
git commit -m 'Update manifest schema'
|
||||
retry git push origin HEAD
|
||||
fi
|
||||
)
|
||||
|
||||
rm -rf -- "${schema_workspace}"
|
||||
git worktree prune
|
||||
# TODO: get branch in schema_workspace dir instead
|
||||
git branch -D "${schema_branch}" "${schema_workspace##*/}"
|
||||
)
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE_DATE: ${{ needs.prepare.outputs.release-date }}
|
||||
HAS_TAGS: ${{ needs.prepare.outputs.has-tags }}
|
||||
TAG: ${{ needs.prepare.outputs.tag }}
|
||||
CHANGELOG: CHANGELOG.md
|
||||
BRANCH: main
|
||||
PREPARE_REV: ${{ needs.prepare.outputs.rev }}
|
||||
# Note that if we use secrets.GITHUB_TOKEN, the pushed commit/tag cannot trigger other workflows.
|
||||
PUSH_TOKEN: ${{ steps.push-token.outputs.token }}
|
||||
- uses: taiki-e/create-gh-release-action@eba8ea96c86cca8a37f1b56e94b4d13301fba651 # v1.11.0
|
||||
with:
|
||||
changelog: CHANGELOG.md
|
||||
title: $version
|
||||
branch: main
|
||||
ref: refs/tags/${{ needs.prepare.outputs.tag }}
|
||||
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@75415970465917c31d702710acd9c9248b9af314 # main
|
||||
uses: taiki-e/github-actions/.github/workflows/rust-release.yml@2474ed4664eb8903c151603a9d841512c069f7f6 # main
|
||||
permissions:
|
||||
contents: write # for taiki-e/create-gh-release-action
|
||||
id-token: write # for rust-lang/crates-io-auth-action
|
||||
@@ -444,7 +57,7 @@ jobs:
|
||||
with:
|
||||
version: ${{ inputs.version }}
|
||||
tag-prefix: install-action-manifest-schema-
|
||||
crates: tools/manifest-schema
|
||||
package: install-action-manifest-schema
|
||||
changelog: tools/manifest-schema/CHANGELOG.md
|
||||
title: $prefix $version
|
||||
prefix: install-action-manifest-schema
|
||||
|
||||
@@ -10,6 +10,12 @@ Note: In this file, do not use the hard wrap in the middle of a sentence for com
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [2.77.1] - 2026-05-05
|
||||
|
||||
- Update `tombi@latest` to 0.10.3.
|
||||
|
||||
- Update `martin@latest` to 1.8.2.
|
||||
|
||||
## [2.77.0] - 2026-05-05
|
||||
|
||||
- Support `rust`. ([#1779](https://github.com/taiki-e/install-action/pull/1779))
|
||||
@@ -6460,7 +6466,8 @@ Note: This release is considered a breaking change because installing on version
|
||||
|
||||
Initial release
|
||||
|
||||
[Unreleased]: https://github.com/taiki-e/install-action/compare/v2.77.0...HEAD
|
||||
[Unreleased]: https://github.com/taiki-e/install-action/compare/v2.77.1...HEAD
|
||||
[2.77.1]: https://github.com/taiki-e/install-action/compare/v2.77.0...v2.77.1
|
||||
[2.77.0]: https://github.com/taiki-e/install-action/compare/v2.76.0...v2.77.0
|
||||
[2.76.0]: https://github.com/taiki-e/install-action/compare/v2.75.30...v2.76.0
|
||||
[2.75.30]: https://github.com/taiki-e/install-action/compare/v2.75.29...v2.75.30
|
||||
|
||||
@@ -4,8 +4,8 @@ description: GitHub Action for installing development tools
|
||||
inputs:
|
||||
tool:
|
||||
description: Tools to install (whitespace or comma separated list)
|
||||
required: true
|
||||
# default: #publish:tool
|
||||
required: false
|
||||
default: cargo-no-dev-deps
|
||||
checksum:
|
||||
description: Whether to enable checksums (strongly discouraged to disable)
|
||||
required: false
|
||||
|
||||
3
main.sh
3
main.sh
@@ -774,6 +774,7 @@ for tool in "${tools[@]}"; do
|
||||
esac
|
||||
fi
|
||||
installed_bin=()
|
||||
# NB: Update tools/ci/release-post-commit.sh when adding non-manifest-based tools.
|
||||
case "${tool}" in
|
||||
rust)
|
||||
if [[ "${version}" == 'latest' ]]; then
|
||||
@@ -957,7 +958,7 @@ for tool in "${tools[@]}"; do
|
||||
;;
|
||||
*)
|
||||
# Handle aliases.
|
||||
# NB: Update alias list in .github/workflows/release.yml, tool input option in test-alias in .github/workflows/ci.yml,
|
||||
# NB: Update alias list in tools/ci/release-post-commit.sh, tool input option in test-alias in .github/workflows/ci.yml,
|
||||
# and match for alias for tools/codegen/src/tools-markdown.rs.
|
||||
# TODO(codegen): auto-detect cases where crate name and tool name are different.
|
||||
case "${tool}" in
|
||||
|
||||
24
manifests/martin.json
generated
24
manifests/martin.json
generated
@@ -31,13 +31,31 @@
|
||||
}
|
||||
},
|
||||
"latest": {
|
||||
"version": "1.8.0"
|
||||
"version": "1.8.2"
|
||||
},
|
||||
"1": {
|
||||
"version": "1.8.0"
|
||||
"version": "1.8.2"
|
||||
},
|
||||
"1.8": {
|
||||
"version": "1.8.0"
|
||||
"version": "1.8.2"
|
||||
},
|
||||
"1.8.2": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DEAA75F9C0717B",
|
||||
"hash": "b7ce4906219974f33c0c80994fde6afe503cd8fc6e4c37fd75caf77f320d98cc"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DEAA75F8954F43",
|
||||
"hash": "6be5743e73b43bc7ef34d17b94e7fdce5f3eafa26120a67ce317b55d557ba481"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DEAA75F885D044",
|
||||
"hash": "d994a862ae5ded571da994f3e525c04e4afb8ee355e3c91135fb0ff78f8d1294"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DEAA75F8A93635",
|
||||
"hash": "11a05523e1e59c8322bae7bb49442eaa22bb355905222f96e723b9ca42dd4316"
|
||||
}
|
||||
},
|
||||
"1.8.0": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
34
manifests/prek.json
generated
34
manifests/prek.json
generated
@@ -44,6 +44,40 @@
|
||||
"0.3": {
|
||||
"version": "0.3.11"
|
||||
},
|
||||
"0.3.12": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DEAA7D00F52541",
|
||||
"hash": "6e4874a2d83451df4946e81f161dc8c6bdc675064cca1f2e1e8b0921dc862ae8"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"etag": "0x8DEAA7D008188C4",
|
||||
"hash": "ed4aa96e2c71a29d30d5e8e8b173155cda9f6aea9822e4773ccff70da5a8287a"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"etag": "0x8DEAA7D00B66709",
|
||||
"hash": "b75cdae3279806c7a046b18c45c601fe3ec1a380f11911bc39c5273100e18fce"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"etag": "0x8DEAA7CFF326611",
|
||||
"hash": "2d7bc8ce9bb8521a2b9f67ad23d556fbf208a8cf5d141f09c3dbae919df756aa"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"etag": "0x8DEAA7CFEEC3638",
|
||||
"hash": "8e31a0e21c2d70e0583500f728e2c1aaba45c397a2ef2c4ea43afb7cd64f5d04"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"etag": "0x8DEAA7CFEF85D7F",
|
||||
"hash": "6f69d45aa32571e9c34104564dd06a32b7aeec9802831a00a5074fa1a89d5ba9"
|
||||
},
|
||||
"riscv64_linux_gnu": {
|
||||
"etag": "0x8DEAA7D0042F174",
|
||||
"hash": "c4b23c1b7381f251499bba7e5d01c356a39b313f8fe0a5bf53a0e1f4f7d8d91a"
|
||||
},
|
||||
"s390x_linux_gnu": {
|
||||
"etag": "0x8DEAA7D006A2383",
|
||||
"hash": "5b6073abfcfd85c692c6e0f71185f24af911b55d6303a4dfa65fb0c6951d3ede"
|
||||
}
|
||||
},
|
||||
"0.3.11": {
|
||||
"x86_64_linux_musl": {
|
||||
"etag": "0x8DEA414EFB86FDD",
|
||||
|
||||
40
manifests/tombi.json
generated
40
manifests/tombi.json
generated
@@ -2,10 +2,46 @@
|
||||
"rust_crate": null,
|
||||
"template": null,
|
||||
"latest": {
|
||||
"version": "0.10.2"
|
||||
"version": "0.10.3"
|
||||
},
|
||||
"0.10": {
|
||||
"version": "0.10.2"
|
||||
"version": "0.10.3"
|
||||
},
|
||||
"0.10.4": {
|
||||
"x86_64_linux_musl": {
|
||||
"url": "https://github.com/tombi-toml/tombi/releases/download/v0.10.4/tombi-cli-0.10.4-x86_64-unknown-linux-musl.tar.gz",
|
||||
"etag": "0x8DEAA621E82D459",
|
||||
"hash": "2988df7c5ac115dc20ebd42f45ba039df0b8cda110b444f419bec814db2c880a",
|
||||
"bin": "tombi-cli-0.10.4-x86_64-unknown-linux-musl/tombi"
|
||||
},
|
||||
"x86_64_macos": {
|
||||
"url": "https://github.com/tombi-toml/tombi/releases/download/v0.10.4/tombi-cli-0.10.4-x86_64-apple-darwin.tar.gz",
|
||||
"etag": "0x8DEAA621E732E8B",
|
||||
"hash": "f3ba04e491d0e2dbf42ecf6fc5d0e0c54d2b71cc74c8a4f59d34717a57544d15",
|
||||
"bin": "tombi-cli-0.10.4-x86_64-apple-darwin/tombi"
|
||||
},
|
||||
"x86_64_windows": {
|
||||
"url": "https://github.com/tombi-toml/tombi/releases/download/v0.10.4/tombi-cli-0.10.4-x86_64-pc-windows-msvc.zip",
|
||||
"etag": "0x8DEAA621EFE096F",
|
||||
"hash": "150c3b9f0ddb3a16faec88980df034889f618d671bdeecec4a49e45f507a4a7d"
|
||||
},
|
||||
"aarch64_linux_musl": {
|
||||
"url": "https://github.com/tombi-toml/tombi/releases/download/v0.10.4/tombi-cli-0.10.4-aarch64-unknown-linux-musl.tar.gz",
|
||||
"etag": "0x8DEAA621E95363E",
|
||||
"hash": "0aac20f61dc0ead3eab386ecaf176ad19b8734e02a2efc031bbaeefc3ace7661",
|
||||
"bin": "tombi-cli-0.10.4-aarch64-unknown-linux-musl/tombi"
|
||||
},
|
||||
"aarch64_macos": {
|
||||
"url": "https://github.com/tombi-toml/tombi/releases/download/v0.10.4/tombi-cli-0.10.4-aarch64-apple-darwin.tar.gz",
|
||||
"etag": "0x8DEAA621EE6566A",
|
||||
"hash": "efff1d4fd57364c1b6f0ab7045006ed58d6fdf79925022213d44f4e0993a37a1",
|
||||
"bin": "tombi-cli-0.10.4-aarch64-apple-darwin/tombi"
|
||||
},
|
||||
"aarch64_windows": {
|
||||
"url": "https://github.com/tombi-toml/tombi/releases/download/v0.10.4/tombi-cli-0.10.4-aarch64-pc-windows-msvc.zip",
|
||||
"etag": "0x8DEAA621E83490D",
|
||||
"hash": "2a035a8a3b51dcc5cbff9c84391734499acf7d70279ecf317fc717d22e003647"
|
||||
}
|
||||
},
|
||||
"0.10.3": {
|
||||
"x86_64_linux_musl": {
|
||||
|
||||
86
tools/ci/release-post-commit.sh
Executable file
86
tools/ci/release-post-commit.sh
Executable file
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
set -CeEuo pipefail
|
||||
IFS=$'\n\t'
|
||||
trap -- 's=$?; printf >&2 "%s\n" "${0##*/}:${LINENO}: \`${BASH_COMMAND}\` exit with ${s}"; exit ${s}' ERR
|
||||
cd -- "$(dirname -- "$0")"/../..
|
||||
|
||||
tools=()
|
||||
for tool in tools/codegen/base/*.json; do
|
||||
tool="${tool##*/}"
|
||||
tools+=("${tool%.*}")
|
||||
done
|
||||
# Aliases.
|
||||
# NB: Update case for aliases in main.sh, tool input option in test-alias job
|
||||
# in .github/workflows/ci.yml, and match for alias for tools/codegen/src/tools-markdown.rs.
|
||||
tools+=(
|
||||
nextest
|
||||
taplo-cli
|
||||
typos-cli
|
||||
wasm-bindgen-cli
|
||||
wasmtime-cli
|
||||
)
|
||||
# Non-manifest-based tools.
|
||||
tools+=(
|
||||
rust
|
||||
valgrind
|
||||
)
|
||||
|
||||
for tool in "${tools[@]}"; do
|
||||
(
|
||||
set -x
|
||||
git checkout -b "releases/${tool}"
|
||||
sed -Ei action.yml \
|
||||
-e "s/required: true/required: false/g" \
|
||||
-e "s/# default: #publish:tool/default: ${tool}/g"
|
||||
git add action.yml
|
||||
git commit -m "${tool}"
|
||||
git tag -f "${tool}"
|
||||
git checkout main
|
||||
)
|
||||
refs+=",+refs/heads/releases/${tool},+refs/tags/${tool}"
|
||||
done
|
||||
|
||||
set -x
|
||||
|
||||
# Copy manifests to tmp dir.
|
||||
manifests=/tmp/manifests
|
||||
rm -rf -- "${manifests}"
|
||||
mkdir -p -- "${manifests}"
|
||||
cp -- ./manifests/* "${manifests}"
|
||||
|
||||
# Checkout manifest-schema branch
|
||||
schema_version="$(grep -Eo "^version = \".*\" #publish:version" tools/manifest-schema/Cargo.toml)"
|
||||
schema_version="$(cut -d\" -f2 <<<"${schema_version}")"
|
||||
if [[ "${schema_version}" == '0.'* ]]; then
|
||||
schema_version="0.$(cut -d. -f2 <<<"${schema_version}")"
|
||||
else
|
||||
schema_version="$(cut -d. -f1 <<<"${schema_version}")"
|
||||
fi
|
||||
schema_branch="manifest-schema-${schema_version}"
|
||||
refs+=",refs/heads/${schema_branch}"
|
||||
|
||||
if git fetch origin "${schema_branch}"; then
|
||||
git checkout "origin/${schema_branch}" -B "${schema_branch}"
|
||||
elif ! git checkout "${schema_branch}"; then
|
||||
# New branch with no history. Credit: https://stackoverflow.com/a/13969482
|
||||
git checkout --orphan "${schema_branch}"
|
||||
git rm -rf -- . || true
|
||||
git commit -m 'Initial commit' --allow-empty
|
||||
fi
|
||||
|
||||
# Copy over schema
|
||||
cp -- "${manifests}"/* ./
|
||||
|
||||
# Stage changes
|
||||
git add .
|
||||
# Detect changes, then commit and push if changes exist
|
||||
if [[ "$(git status --porcelain=v1 | LC_ALL=C wc -l)" != "0" ]]; then
|
||||
git commit -m 'Update manifest schema'
|
||||
fi
|
||||
git checkout main
|
||||
|
||||
printf 'additional-refs: %s\n' "${refs}"
|
||||
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
|
||||
printf 'additional-refs=%s\n' "${refs}" >>"${GITHUB_OUTPUT}"
|
||||
fi
|
||||
@@ -4,6 +4,7 @@
|
||||
"tag_prefix": "",
|
||||
"rust_crate": "${package}",
|
||||
"version_range": ">= 0.8.16",
|
||||
"ignore": ["0.11.9"],
|
||||
"signing": {
|
||||
"version_range": ">= 0.9.13",
|
||||
"kind": {
|
||||
|
||||
@@ -31,9 +31,13 @@ pub struct BaseManifest {
|
||||
/// Path to binaries in archive. Default to `${tool}${exe}`.
|
||||
pub bin: Option<StringOrArray>,
|
||||
pub signing: Option<Signing>,
|
||||
pub version_range: Option<String>,
|
||||
/// Include to manifest, but exclude from candidate for latest and omitted versions.
|
||||
#[serde(default)]
|
||||
pub broken: Vec<semver::Version>,
|
||||
pub version_range: Option<String>,
|
||||
/// Exclude from manifest.
|
||||
#[serde(default)]
|
||||
pub ignore: Vec<semver::Version>,
|
||||
/// Use glibc build if host_env is gnu.
|
||||
#[serde(default)]
|
||||
pub prefer_linux_gnu: bool,
|
||||
|
||||
@@ -96,7 +96,11 @@ fn main() {
|
||||
semver_version = format!("{default_major_version}.{version}").parse();
|
||||
}
|
||||
}
|
||||
Some((Reverse(semver_version.ok()?), (version, release)))
|
||||
let semver_version = semver_version.ok()?;
|
||||
if base_info.ignore.contains(&semver_version) {
|
||||
return None;
|
||||
}
|
||||
Some((Reverse(semver_version), (version, release)))
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ targets=(
|
||||
powerpc64le-unknown-linux-gnu
|
||||
powerpc64le-unknown-linux-musl
|
||||
riscv64gc-unknown-linux-gnu
|
||||
# riscv64gc-unknown-linux-musl # tier 2 without host tools
|
||||
# riscv64gc-unknown-linux-musl # tier 2 without host tools: TODO: https://github.com/rust-lang/rust/issues/156191
|
||||
s390x-unknown-linux-gnu
|
||||
# s390x-unknown-linux-musl # tier 3
|
||||
x86_64-apple-darwin
|
||||
|
||||
Reference in New Issue
Block a user