mirror of
https://github.com/taiki-e/install-action.git
synced 2026-04-25 08:40:31 +00:00
Update tools/publish.sh
This commit is contained in:
@@ -21,7 +21,9 @@ bail() {
|
|||||||
|
|
||||||
version="${1:?}"
|
version="${1:?}"
|
||||||
version="${version#v}"
|
version="${version#v}"
|
||||||
tag="v${version}"
|
tag_prefix="v"
|
||||||
|
tag="${tag_prefix}${version}"
|
||||||
|
changelog="CHANGELOG.md"
|
||||||
if [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z\.-]+)?(\+[0-9A-Za-z\.-]+)?$ ]]; then
|
if [[ ! "${version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z\.-]+)?(\+[0-9A-Za-z\.-]+)?$ ]]; then
|
||||||
bail "invalid version format '${version}'"
|
bail "invalid version format '${version}'"
|
||||||
fi
|
fi
|
||||||
@@ -38,44 +40,55 @@ if gh release view "${tag}" &>/dev/null; then
|
|||||||
bail "tag '${tag}' has already been created and pushed"
|
bail "tag '${tag}' has already been created and pushed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! git branch | grep -q '\* main'; then
|
if ! git branch | grep -q '\* main$'; then
|
||||||
bail "current branch is not 'main'"
|
bail "current branch is not 'main'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
tags=$(git --no-pager tag)
|
|
||||||
if [[ -n "${tags}" ]]; then
|
|
||||||
# Make sure the same release does not exist in CHANGELOG.md.
|
|
||||||
release_date=$(date -u '+%Y-%m-%d')
|
release_date=$(date -u '+%Y-%m-%d')
|
||||||
if grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" CHANGELOG.md; then
|
tags=$(git --no-pager tag | (grep -E "^${tag_prefix}[0-9]+" || true))
|
||||||
bail "release ${version} already exist in CHANGELOG.md"
|
if [[ -n "${tags}" ]]; then
|
||||||
|
# Make sure the same release does not exist in changelog.
|
||||||
|
if grep -Eq "^## \\[${version//./\\.}\\]" "${changelog}"; then
|
||||||
|
bail "release ${version} already exist in ${changelog}"
|
||||||
fi
|
fi
|
||||||
if grep -Eq "^\\[${version//./\\.}\\]: " CHANGELOG.md; then
|
if grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||||
bail "link to ${version} already exist in CHANGELOG.md"
|
bail "link to ${version} already exist in ${changelog}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update changelog.
|
# Update changelog.
|
||||||
remote_url=$(grep -E '^\[Unreleased\]: https://' CHANGELOG.md | sed 's/^\[Unreleased\]: //; s/\.\.\.HEAD$//')
|
remote_url=$(grep -E '^\[Unreleased\]: https://' "${changelog}" | sed 's/^\[Unreleased\]: //; s/\.\.\.HEAD$//')
|
||||||
before_tag="${remote_url#*/compare/}"
|
before_tag="${remote_url#*/compare/}"
|
||||||
remote_url="${remote_url%/compare/*}"
|
remote_url="${remote_url%/compare/*}"
|
||||||
sed -i "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n## [${version}] - ${release_date}/" CHANGELOG.md
|
sed -i "s/^## \\[Unreleased\\]/## [Unreleased]\\n\\n## [${version}] - ${release_date}/" "${changelog}"
|
||||||
sed -i "s#^\[Unreleased\]: https://.*#[Unreleased]: ${remote_url}/compare/v${version}...HEAD\\n[${version}]: ${remote_url}/compare/${before_tag}...v${version}#" CHANGELOG.md
|
sed -i "s#^\[Unreleased\]: https://.*#[Unreleased]: ${remote_url}/compare/${tag}...HEAD\\n[${version}]: ${remote_url}/compare/${before_tag}...${tag}#" "${changelog}"
|
||||||
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" CHANGELOG.md; then
|
if ! grep -Eq "^## \\[${version//./\\.}\\] - ${release_date}$" "${changelog}"; then
|
||||||
bail "failed to update CHANGELOG.md"
|
bail "failed to update ${changelog}"
|
||||||
fi
|
fi
|
||||||
if ! grep -Eq "^\\[${version//./\\.}\\]: " CHANGELOG.md; then
|
if ! grep -Eq "^\\[${version//./\\.}\\]: " "${changelog}"; then
|
||||||
bail "failed to update CHANGELOG.md"
|
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
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Make sure that a valid release note for this version exists.
|
# Make sure that a valid release note for this version exists.
|
||||||
# https://github.com/taiki-e/parse-changelog
|
# https://github.com/taiki-e/parse-changelog
|
||||||
|
changes=$(parse-changelog "${changelog}" "${version}")
|
||||||
|
if [[ -z "${changes}" ]]; then
|
||||||
|
bail "changelog for ${version} has no body"
|
||||||
|
fi
|
||||||
echo "============== CHANGELOG =============="
|
echo "============== CHANGELOG =============="
|
||||||
parse-changelog CHANGELOG.md "${version}"
|
echo "${changes}"
|
||||||
echo "======================================="
|
echo "======================================="
|
||||||
|
|
||||||
if [[ -n "${tags}" ]]; then
|
if [[ -n "${tags}" ]]; then
|
||||||
# Create a release commit.
|
# Create a release commit.
|
||||||
git add CHANGELOG.md
|
git add "${changelog}"
|
||||||
git commit -m "Release ${version}"
|
git commit -m "Release ${version}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user