diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cac35479..560dafe0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,4 +29,3 @@ jobs: title: $version branch: 'main|v[0-9]+' token: ${{ secrets.GITHUB_TOKEN }} - - run: ci/publish.sh diff --git a/ci/manifest.sh b/ci/manifest.sh index 44a497e0..1a126afb 100755 --- a/ci/manifest.sh +++ b/ci/manifest.sh @@ -3,15 +3,6 @@ set -euxo pipefail IFS=$'\n\t' cd "$(dirname "$0")"/.. -bail() { - echo >&2 "error: $*" - exit 1 -} - -if [[ -z "${CI:-}" ]]; then - bail "this script is intended to call from release workflow on CI" -fi - git config user.name "Taiki Endo" git config user.email "te316e89@gmail.com" diff --git a/ci/publish.sh b/ci/publish.sh deleted file mode 100755 index 4537ddc1..00000000 --- a/ci/publish.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bash -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-base -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 f3f9bff3..4aa6e2dc 100755 --- a/tools/publish.sh +++ b/tools/publish.sh @@ -14,14 +14,6 @@ trap 's=$?; echo >&2 "$0: Error on line "${LINENO}": ${BASH_COMMAND}"; exit ${s} # Note: This script requires the following tools: # - parse-changelog -x() { - local cmd="$1" - shift - ( - set -x - "${cmd}" "$@" - ) -} bail() { echo >&2 "error: $*" exit 1 @@ -48,7 +40,6 @@ 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 -q '\* main$'; then bail "current branch is not 'main'" fi @@ -97,11 +88,57 @@ echo "=======================================" if [[ -n "${tags}" ]]; then # Create a release commit. - x git add "${changelog}" - x git commit -m "Release ${version}" + git add "${changelog}" + 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-base +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