mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-06 03:38:39 +00:00
* Also edit dist/README.md. Otherwise npm publish will overwrite that AFTER the dist directory has been added, causing the git checkout to fail. And it's the right thing to do anyway, having ALL the READMEs edited. * Add all the modified READMEs so they get committed correctly. * Improve two references to master which are no longer accurate. * Check for uncommitted changes just before creating the tag. * Encourage always specifying the next version, as discussed in https://github.com/Khan/KaTeX/pull/615#discussion_r97208770
166 lines
4.8 KiB
Bash
Executable File
166 lines
4.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e -o pipefail
|
|
shopt -s extglob
|
|
|
|
VERSION=
|
|
NEXT_VERSION=
|
|
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
NARGS=0
|
|
DRY_RUN=
|
|
INSANE=0
|
|
|
|
# usage [ERROR-MESSAGES...] EXIT-STATUS
|
|
usage() {
|
|
while [[ $# -gt 1 ]]; do
|
|
echo "$1" >&2
|
|
shift
|
|
done
|
|
echo "Usage:"
|
|
echo "./release.sh [OPTIONS] <VERSION_TO_RELEASE> [NEXT_VERSION]"
|
|
echo ""
|
|
echo "Options:"
|
|
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 creating a commit on"
|
|
echo "the branch from which the release was created. Not recommended."
|
|
exit $1
|
|
}
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--dry-run|-n|--just-print)
|
|
DRY_RUN=true
|
|
git() { echo "git $*"; }
|
|
npm() { echo "npm $*"; }
|
|
;;
|
|
-h|-\?|--help)
|
|
usage 0
|
|
;;
|
|
-*)
|
|
usage "Unknown option: $1" "" 1
|
|
;;
|
|
*)
|
|
case "$NARGS" in
|
|
0)
|
|
VERSION="$1"
|
|
NARGS=1
|
|
;;
|
|
1)
|
|
NEXT_VERSION="$1"
|
|
NARGS=2
|
|
;;
|
|
*)
|
|
usage "Too many arguments: $1" "" 1
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [[ $NARGS = 0 ]]; then
|
|
usage "Missing argument: version number" "" 1
|
|
fi
|
|
|
|
# Some sanity checks up front
|
|
if ! command git diff --stat --exit-code HEAD; then
|
|
echo "Please make sure you have no uncommitted changes" >&2
|
|
: $((++INSANE))
|
|
fi
|
|
if ! command npm owner ls katex | grep -q "^$(command npm whoami) <"; then
|
|
echo "You don't seem do be logged into npm, use \`npm login\`" >&2
|
|
: $((++INSANE))
|
|
fi
|
|
if [[ $BRANCH != @(v*|master) ]]; then
|
|
echo "'$BRANCH' does not like a release branch to me" >&2
|
|
: $((++INSANE))
|
|
fi
|
|
|
|
if [[ -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."
|
|
fi
|
|
if [[ $INSANE != 0 ]]; then
|
|
read -r -p "$INSANE sanity check(s) failed, really proceed? [y/n] " CONFIRM
|
|
else
|
|
read -r -p "Look good? [y/n] " CONFIRM
|
|
fi
|
|
if [[ "$CONFIRM" != "y" ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Make a new detached HEAD
|
|
git checkout "$BRANCH"
|
|
git pull
|
|
git checkout --detach
|
|
|
|
# Build generated files and add them to the repository (for bower)
|
|
git clean -fdx build dist
|
|
make setup dist
|
|
sed -i.bak -E '/^\/dist\/$/d' .gitignore
|
|
rm -f .gitignore.bak
|
|
git add .gitignore dist/
|
|
|
|
# Edit package.json and bower.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
|
|
|
|
# Update the version number in CDN URLs included in the README files,
|
|
# and regenerate the Subresource Integrity hash for these files.
|
|
node update-sri.js "${VERSION}" README.md contrib/*/README.md dist/README.md
|
|
|
|
# Make the commit and tag, and push them.
|
|
git add package.json bower.json README.md contrib/*/README.md dist/README.md
|
|
git commit -n -m "v$VERSION"
|
|
git diff --stat --exit-status # check for uncommitted changes
|
|
git tag -a "v$VERSION" -m "v$VERSION"
|
|
git push origin "v$VERSION"
|
|
|
|
# Update npm (bower and cdnjs update automatically)
|
|
npm publish
|
|
|
|
if [ ! -z "$NEXT_VERSION" ]; then
|
|
# Go back to original branch to bump
|
|
git checkout "$BRANCH"
|
|
|
|
# Edit package.json and bower.json to the right version
|
|
sed -i.bak -E 's|"version": "[^"]+",|"version": "'$NEXT_VERSION'-pre",|' package.json
|
|
rm -f package.json.bak
|
|
|
|
# Refer to the just-released version in the documentation of the
|
|
# development branch, too. Most people will read docs on master.
|
|
node update-sri.js "${VERSION}" README.md contrib/*/README.md
|
|
|
|
git add package.json bower.json README.md contrib/*/README.md
|
|
git commit -n -m "Bump $BRANCH to v$NEXT_VERSION-pre"
|
|
git push origin "$BRANCH"
|
|
|
|
# Go back to the tag which has build/katex.tar.gz and build/katex.zip
|
|
git checkout "v$VERSION"
|
|
fi
|
|
|
|
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 build/katex.tar.gz and build/katex.zip to the release!"
|
|
|
|
if [[ ${DRY_RUN} ]]; then
|
|
echo ""
|
|
echo "This was a dry run."
|
|
echo "Operations using git or npm were printed not executed."
|
|
echo "Some files got modified, though, so you might want to undo "
|
|
echo "these changes now, e.g. using \`git checkout -- .\` or similar."
|
|
echo ""
|
|
fi
|