Update release script to use pull request (#1603)

* Update release script to use pull request

* Add checking and updating SRI hashes to release script

* Simplify update-sri return

* Move uncommitted changes check to the top level
This commit is contained in:
ylemkimon
2018-08-17 22:48:29 +09:00
committed by GitHub
parent 46e7939fa9
commit 062cfb17a5
2 changed files with 144 additions and 97 deletions

View File

@@ -8,6 +8,7 @@ NEXT_VERSION=
BRANCH=$(git rev-parse --abbrev-ref HEAD)
NARGS=0
DRY_RUN=
PUBLISH=
INSANE=0
# usage [ERROR-MESSAGES...] EXIT-CODE
@@ -20,21 +21,24 @@ usage() {
echo "./release.sh [OPTIONS] <VERSION_TO_RELEASE> [NEXT_VERSION]"
echo ""
echo "Options:"
echo " --publish|-p: publish a release."
echo " --dry-run|-n: only print commands, do not execute them."
echo ""
echo "Examples:"
echo " When releasing a new point release:"
echo " ./release.sh 0.6.3 0.6.4"
echo " When releasing a new major version:"
echo " ./release.sh 0.7.0 0.8.0"
echo ""
echo "You may omit NEXT_VERSION in order to avoid updating the version field"
echo "of the package.json."
echo ""
echo "Run this on the master branch, if you have permission to directly push"
echo "to the master branch. Otherwise, create a branch with the version number"
echo "as its name and a suffix to distinguish from its tag, e.g.,"
echo "'v1.0.0-release', and run this on it."
echo "Run this on the master branch. This will create a release branch."
echo "Open a pull request and after it gets merged, run with --publish"
echo "option on the master branch."
echo ""
echo "To update SRI hashes, run this again on the generated release branch"
echo ""
echo "Examples:"
echo " When releasing a v0.6.3:"
echo " ./release.sh 0.6.3 0.6.4"
echo " Open a pull request from v0.6.3-release to master."
echo " After it's merged:"
echo " ./release.sh -p 0.6.3"
exit $1
}
@@ -45,6 +49,9 @@ while [ $# -gt 0 ]; do
git() { echo "git $*"; }
yarn() { echo "yarn $*"; }
;;
--publish|-p)
PUBLISH=true
;;
-h|-\?|--help)
usage 0
;;
@@ -79,12 +86,16 @@ if ! command git diff --stat --exit-code HEAD; then
echo "Please make sure you have no uncommitted changes" >&2
: $((++INSANE))
fi
if [[ $BRANCH != @(v*|master) ]]; then
if [[ $BRANCH != @(v*-release|master) ]]; then
echo "'$BRANCH' does not look like a release branch to me" >&2
: $((++INSANE))
fi
if [[ -z "$NEXT_VERSION" ]]; then
if [[ $PUBLISH ]]; then
echo "About to publish $VERSION from $BRANCH. "
elif [[ $BRANCH != "master" ]]; then
echo "About to update SRI hashes for $BRANCH. "
elif [[ -z "$NEXT_VERSION" ]]; then
echo "About to release $VERSION from $BRANCH. "
else
echo "About to release $VERSION from $BRANCH and bump to $NEXT_VERSION-pre."
@@ -98,94 +109,119 @@ if [[ "$CONFIRM" != "y" ]]; then
exit 1
fi
# Make a new detached HEAD
git checkout "$BRANCH"
git pull
git checkout --detach
# Edit package.json to the right version (see
# http://stackoverflow.com/a/22084103 for why we need the .bak file to make
# this mac & linux compatible)
sed -i.bak -E 's|"version": "[^"]+",|"version": "'$VERSION'",|' package.json
rm -f package.json.bak
# Build generated files and add them to the repository
git clean -fdx dist
yarn dist
sed -i.bak -E '/^\/dist\/$/d' .gitignore
rm -f .gitignore.bak
git add .gitignore dist/
# Edit docs to use CSS from CDN
grep -l '{@stylesheet: katex.min.css}' docs/*.md | xargs sed -i.bak \
's|{@stylesheet: katex.min.css}|<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@./dist/katex.min.css" integrity="sha384-katex.min.css" crossorigin="anonymous"/>|'
# Update the version number in CDN URLs included in the README and the documentation,
# and regenerate the Subresource Integrity hash for these files.
node update-sri.js "${VERSION}" README.md contrib/*/README.md dist/README.md \
docs/*.md docs/*.md.bak website/pages/index.html
# Generate a new version of the docs and publish the website
pushd website
yarn run version "${VERSION}"
# Restore docs to use local built CSS
for file in ../docs/*.md.bak; do
mv -f "$file" "${file%.bak}"
done
USE_SSH=true yarn publish-gh-pages
popd
# Make the commit and tag, and push them.
git add package.json README.md contrib/*/README.md dist/README.md \
docs/*.md website/pages/index.html website/versioned_docs/ \
website/versioned_sidebars/ website/versions.json
git commit -n -m "v$VERSION"
git diff --stat --exit-code # check for uncommitted changes
git tag -a "v$VERSION" -m "v$VERSION"
git push origin "v$VERSION"
# Update npm (cdnjs update automatically)
yarn publish --new-version "${VERSION}"
# Go back to original branch to bump
git checkout "$BRANCH"
if [ ! -z "$NEXT_VERSION" ]; then
# Edit package.json to the next version
sed -i.bak -E 's|"version": "[^"]+",|"version": "'$NEXT_VERSION'-pre",|' package.json
rm -f package.json.bak
git add package.json
fi
# Refer to the just-released version in the documentation of the
# development branch, too. Most people will read docs on master.
git checkout "v${VERSION}" -- README.md contrib/*/README.md docs/*.md website/
if [[ -z "$NEXT_VERSION" ]]; then
git commit -n -m "Release v$VERSION"
else
git commit -n -m "Bump $BRANCH to v$NEXT_VERSION-pre"
fi
git push origin "$BRANCH"
# Go back to the tag which has katex.tar.gz and katex.zip
git checkout "v$VERSION"
echo ""
echo "The automatic parts are done!"
if [[ $BRANCH != "master" ]]; then
echo "Now all that's left is to create a pull request against master from '$BRANCH'"
echo "and to create the release on github."
# Build generated files
yarn build
# Regenerate the Subresource Integrity hash in the README and the documentation
node update-sri.js "${VERSION}" README.md contrib/*/README.md \
docs/*.md website/pages/index.html website/versioned_docs/version-$VERSION/*.md
# Make the commit and push
git add README.md contrib/*/README.md \
docs website/pages/index.html website/versioned_docs/
git commit -n -m "Update SRI hashes"
git push
elif [[ ! $PUBLISH ]]; then
# Make a release branch
git checkout -b "v$VERSION-release"
# Edit package.json to the right version, as it's inlined (see
# http://stackoverflow.com/a/22084103 for why we need the .bak file to make
# this mac & linux compatible)
sed -i.bak -E 's|"version": "[^"]+",|"version": "'$VERSION'",|' package.json
rm -f package.json.bak
# Build generated files
yarn build
if [ ! -z "$NEXT_VERSION" ]; then
# Edit package.json to the next version
sed -i.bak -E 's|"version": "[^"]+",|"version": "'$NEXT_VERSION'-pre",|' package.json
rm -f package.json.bak
git add package.json
fi
# Edit docs to use CSS from CDN
grep -l '{@stylesheet: katex.min.css}' docs/*.md | xargs sed -i.bak \
's|{@stylesheet: katex.min.css}|<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@./dist/katex.min.css" integrity="sha384-katex.min.css" crossorigin="anonymous"/>|'
# Update the version number in CDN URLs included in the README and the documentation,
# and regenerate the Subresource Integrity hash for these files.
node update-sri.js "${VERSION}" README.md contrib/*/README.md \
docs/*.md docs/*.md.bak website/pages/index.html
# Generate a new version of the docs
pushd website
yarn run version "${VERSION}"
popd
# Restore docs to use local built CSS
for file in docs/*.md.bak; do
mv -f "$file" "${file%.bak}"
done
# Make the commit and push
git add package.json README.md contrib/*/README.md \
docs website/pages/index.html website/versioned_docs/ \
website/versioned_sidebars/ website/versions.json
if [[ -z "$NEXT_VERSION" ]]; then
git commit -n -m "Release v$VERSION"
else
git commit -n -m "Release v$VERSION" -m "Bump $BRANCH to v$NEXT_VERSION-pre"
fi
git push -u origin "v$VERSION-release"
echo ""
echo "The automatic parts are done!"
echo "Now create a pull request against master from 'v$VERSION-release'"
echo "Visit https://github.com/Khan/KaTeX/pulls to open a pull request."
echo "After it gets merged, run './release.sh -p $VERSION'!"
echo "Note that if KaTeX source code is changed after running this script,"
echo "you have to run the release script again."
else
echo "Now all that's left is to create the release on github."
# Make a new detached HEAD
git checkout --detach
# Edit package.json to the right version
sed -i.bak -E 's|"version": "[^"]+",|"version": "'$VERSION'",|' package.json
rm -f package.json.bak
# Build generated files and add them to the repository
git clean -fdx dist
yarn dist
sed -i.bak -E '/^\/dist\/$/d' .gitignore
rm -f .gitignore.bak
# Check Subresource Integrity hashes
node update-sri.js check README.md contrib/*/README.md
# Make the commit and tag, and push them.
git add package.json .gitignore dist/
git commit -n -m "v$VERSION"
git diff --stat --exit-code # check for uncommitted changes
git tag -a "v$VERSION" -m "v$VERSION"
git push origin "v$VERSION"
# Update npm (cdnjs update automatically)
yarn publish --new-version "${VERSION}"
# Publish the website
pushd website
USE_SSH=true yarn publish-gh-pages
popd
echo ""
echo "The automatic parts are done!"
echo "Now all that's left is to create the release on GitHub."
echo "Visit https://github.com/Khan/KaTeX/releases/new?tag=v$VERSION to edit the release notes."
echo "Don't forget to upload katex.tar.gz and katex.zip to the release!"
fi
echo "Visit https://github.com/Khan/KaTeX/releases/new?tag=v$VERSION to edit the release notes"
echo "Don't forget to upload katex.tar.gz and katex.zip to the release!"
git diff --stat --exit-code # check for uncommitted changes
if [[ ${DRY_RUN} ]]; then
echo ""