blob: f588fc35d6f3b90cff01eb8ad3786a63440f83b4 [file] [log] [blame]
#!/bin/bash
set -e -o pipefail
die () { printf '\n\tERROR: %s\n\n' "$*"; exit 1; }
#
# 0. Precheck that a release has been prepped (and we have an access token)
#
test "$(git rev-list --count @{upstream}..)" != 0 \
|| die 'No unpushed commits, first run script/prep-release.sh'
tagname="$(git describe --candidates=0 --match 'v*.*.*')"
test "$tagname" \
|| die 'No version tag for HEAD, first run script/prep-release.sh'
tarball="mathquill-${tagname#v}.tgz"
zipfile="mathquill-${tagname#v}.zip"
ls "$tarball" "$zipfile" >/dev/null \
|| die 'No tarball or zipfile, first run script/prep-release.sh'
test "$GITHUB_ACCESS_TOKEN" || {
echo
echo ' ERROR: No $GITHUB_ACCESS_TOKEN defined.'
echo
echo 'This script needs an access token to create GitHub Releases.'
echo 'Follow these instructions to create a token authorized for the "repo" scope:'
echo ' https://help.github.com/articles/creating-an-access-token-for-command-line-use/'
echo 'Then do:'
echo " GITHUB_ACCESS_TOKEN=<token> $0"
exit 1
}
#
# 1. npm publish
#
npm publish $tarball
#
# 2. git push, with tag
#
git push origin master tag $tagname
#
# 3. Create GitHub Release
#
changelog_entry="$(git show CHANGELOG.md | grep '^+' | sed -n '2,$ s/^+// p')"
json="$(
tagname=$tagname \
summary="$(echo "$changelog_entry" | sed -n '1 s/^## // p')" \
body="$(echo "$changelog_entry" | tail +5)" \
node -p 'JSON.stringify({
tag_name: process.env.tagname,
name: process.env.summary,
body: process.env.body
})'
)"
endpoint='https://api.github.com/repos/mathquill/mathquill/releases'
release_response="$(curl -s "$endpoint" -d "$json" \
-H "Authorization: token $GITHUB_ACCESS_TOKEN")"
upload_url="$(response="$release_response" \
node -p 'JSON.parse(process.env.response).upload_url' | sed 's/{.*}$//')"
cat $tarball | curl "$upload_url?name=$tarball" --data-binary @- \
-H 'Content-Type: application/x-gzip' -H "Authorization: token $GITHUB_ACCESS_TOKEN"
cat $zipfile | curl "$upload_url?name=$zipfile" --data-binary @- \
-H 'Content-Type: application/zip' -H "Authorization: token $GITHUB_ACCESS_TOKEN"
#
# 4. Cleanup
#
rm -rf package $tarball $zipfile