diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 538ce381..560dafe0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,11 +22,10 @@ jobs: steps: - uses: actions/checkout@v3 with: - token: ${{ secrets.CREATE_PR_TOKEN }} + persist-credentials: false - uses: taiki-e/create-gh-release-action@v1 with: changelog: CHANGELOG.md title: $version branch: 'main|v[0-9]+' token: ${{ secrets.GITHUB_TOKEN }} - - run: ci/publish.sh diff --git a/ci/publish.sh b/ci/publish.sh deleted file mode 100755 index e65f6809..00000000 --- a/ci/publish.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash -# SPDX-License-Identifier: Apache-2.0 OR MIT -set -euo pipefail -IFS=$'\n\t' -cd "$(dirname "$0")"/.. - -# shellcheck disable=SC2154 -trap 's=$?; echo >&2 "$0: Error on line "${LINENO}": ${BASH_COMMAND}"; exit ${s}' ERR - -bail() { - echo >&2 "error: $*" - exit 1 -} - -if [[ -z "${CI:-}" ]]; then - bail "this script is intended to call from release workflow on CI" -fi -ref="${GITHUB_REF:-}" -if [[ "${ref}" != "refs/tags/"* ]]; then - bail "tag ref should start with 'refs/tags/'" -fi -tag="${ref#refs/tags/}" - -git config user.name "Taiki Endo" -git config user.email "te316e89@gmail.com" - -version="${tag}" -version="${version#v}" - -tools=() -for tool in tools/codegen/base/*.json; do - tools+=("$(basename "${tool%.*}")") -done -# Aliases -tools+=(nextest) -# Not manifest-based -tools+=(valgrind) - -( - set -x - - major_version_tag="v${version%%.*}" - git checkout -b "${major_version_tag}" - git push origin refs/heads/"${major_version_tag}" - if git --no-pager tag | grep -Eq "^${major_version_tag}$"; then - git tag -d "${major_version_tag}" - git push --delete origin refs/tags/"${major_version_tag}" - fi - git tag "${major_version_tag}" - git checkout main - git branch -d "${major_version_tag}" -) - -for tool in "${tools[@]}"; do - ( - set -x - git checkout -b "${tool}" - sed -i -e "s/required: true/required: false/g" action.yml - sed -i -e "s/# default: #publish:tool/default: ${tool}/g" action.yml - git add action.yml - git commit -m "${tool}" - git push origin -f refs/heads/"${tool}" - if git --no-pager tag | grep -Eq "^${tool}$"; then - git tag -d "${tool}" - git push --delete origin refs/tags/"${tool}" - fi - git tag "${tool}" - git checkout main - git branch -D "${tool}" - ) -done - -set -x - -git push origin --tags diff --git a/tools/publish.sh b/tools/publish.sh index d22dd876..7be1bce1 100755 --- a/tools/publish.sh +++ b/tools/publish.sh @@ -102,7 +102,53 @@ if [[ -n "${tags}" ]]; then x git commit -m "Release ${version}" fi -x git tag "${tag}" -# TODO: the following still assumes admin permissions -x git push origin main -x git push origin --tags +tools=() +for tool in tools/codegen/base/*.json; do + tools+=("$(basename "${tool%.*}")") +done +# Aliases +tools+=(nextest) +# Not manifest-based +tools+=(valgrind) + +( + set -x + + git tag "${tag}" + git push origin main + git push origin --tags + + major_version_tag="v${version%%.*}" + git checkout -b "${major_version_tag}" + git push origin refs/heads/"${major_version_tag}" + if git --no-pager tag | grep -Eq "^${major_version_tag}$"; then + git tag -d "${major_version_tag}" + git push --delete origin refs/tags/"${major_version_tag}" + fi + git tag "${major_version_tag}" + git checkout main + git branch -d "${major_version_tag}" +) + +for tool in "${tools[@]}"; do + ( + set -x + git checkout -b "${tool}" + sed -i -e "s/required: true/required: false/g" action.yml + sed -i -e "s/# default: #publish:tool/default: ${tool}/g" action.yml + git add action.yml + git commit -m "${tool}" + git push origin -f refs/heads/"${tool}" + if git --no-pager tag | grep -Eq "^${tool}$"; then + git tag -d "${tool}" + git push --delete origin refs/tags/"${tool}" + fi + git tag "${tool}" + git checkout main + git branch -D "${tool}" + ) +done + +set -x + +git push origin --tags