|
| 1 | +#!/bin/bash |
| 2 | +set -xeo pipefail |
| 3 | +shopt -s expand_aliases |
| 4 | + |
| 5 | +gh_repo=bwt-dev/libbwt-nodejs |
| 6 | +node_image=node:14 |
| 7 | + |
| 8 | +git diff-index --quiet HEAD || (echo >&2 git working directory is dirty && exit 1) |
| 9 | + |
| 10 | +[ -n "$BWT_BASE" ] || (echo >&2 BWT_BASE is required && exit 1) |
| 11 | +[ -n "$LIBBWT_COMMIT" ] || (echo >&2 LIBBWT_COMMIT is required && exit 1) |
| 12 | + |
| 13 | +(cd libbwt && git fetch local && git reset --hard $LIBBWT_COMMIT) |
| 14 | + |
| 15 | +version=$(grep -E '^version =' libbwt/Cargo.toml | cut -d'"' -f2) |
| 16 | + |
| 17 | +echo -e "Releasing libbwt-nodejs v$version\n" |
| 18 | + |
| 19 | +# Prepare unreleased changelog |
| 20 | +changelog=$(sed -nr '/^## (Unreleased|'$version' )/{n;:a;n;/^## /q;p;ba}' CHANGELOG.md) |
| 21 | +changelog="- Update to [bwt v$version](https://github.com/bwt-dev/bwt/releases/tag/v$version)"$'\n'$changelog |
| 22 | +grep '## Unreleased' CHANGELOG.md > /dev/null \ |
| 23 | + && sed -i "s/^## Unreleased/## $version - $(date +%Y-%m-%d)/" CHANGELOG.md |
| 24 | + |
| 25 | +# Update version number in README |
| 26 | +sed -i -r "s~libbwt-nodejs-[0-9a-z.-]+\.~libbwt-nodejs-$version.~g; s~/(download|tag)/v[0-9a-z.-]+~/\1/v$version~;" README.md |
| 27 | + |
| 28 | +# Build |
| 29 | +if [ -z "$SKIP_BUILD" ]; then |
| 30 | + echo Building... |
| 31 | + rm -rf dist/* |
| 32 | + |
| 33 | + docker run -it --rm -u `id -u` -v $(pwd):/usr/src/libbwt-nodejs -w /usr/src/libbwt-nodejs \ |
| 34 | + -v $BWT_BASE/libbwt/dist:/usr/src/libbwt-dist -e LIBBWT_DIST=/usr/src/libbwt-dist \ |
| 35 | + $node_image ./scripts/build.sh |
| 36 | + |
| 37 | + rm -rf dist/*/ # remove subdirectories, keep files only |
| 38 | +fi |
| 39 | + |
| 40 | +# Sign |
| 41 | +gpg --clearsign --digest-algo sha256 SHA256SUMS > SHA256SUMS.asc |
| 42 | + |
| 43 | +# Git tag and push |
| 44 | +if [ -z "$SKIP_GIT" ]; then |
| 45 | + git add {package,npm-shrinkwrap}.json {CHANGELOG,README}.md SHA256SUMS SHA256SUMS.asc libbwt |
| 46 | + git commit -S -m v$version |
| 47 | + git tag --sign -m "$changelog" v$version |
| 48 | + git branch -f latest HEAD |
| 49 | + git push gh master latest |
| 50 | + git push gh --tags |
| 51 | +fi |
| 52 | + |
| 53 | +if [ -z "$SKIP_NPM" ]; then |
| 54 | + echo Publishing to npm... |
| 55 | + npm publish file:dist/libbwt-nodejs-$version.tgz |
| 56 | +fi |
| 57 | + |
| 58 | +# Upload distribution files to GitHub releases |
| 59 | +if [[ -z "$SKIP_UPLOAD" && -n "$GH_TOKEN" ]]; then |
| 60 | + echo Uploading to github... |
| 61 | + gh_auth="Authorization: token $GH_TOKEN" |
| 62 | + gh_base=https://api.github.com/repos/$gh_repo |
| 63 | + |
| 64 | + sleep 3 # allow some time for the job to show up on travis |
| 65 | + travis_job=$(curl -s "https://api.travis-ci.org/v3/repo/${gh_repo/\//%2F}/branch/v$version" | jq -r '.last_build.id // ""') |
| 66 | + |
| 67 | + release_text="### Changelog"$'\n'$'\n'$changelog$'\n'$'\n'$(sed "s/VERSION/$version/g; s/TRAVIS_JOB/$travis_job/g;" scripts/release-footer.md) |
| 68 | + release_opt=$(jq -n --arg version v$version --arg text "$release_text" \ |
| 69 | + '{ tag_name: $version, name: $version, body: $text, draft:true }') |
| 70 | + gh_release=$(curl -sf -H "$gh_auth" $gh_base/releases/tags/v$version \ |
| 71 | + || curl -sf -H "$gh_auth" -d "$release_opt" $gh_base/releases) |
| 72 | + gh_upload=$(echo "$gh_release" | jq -r .upload_url | sed -e 's/{?name,label}//') |
| 73 | + |
| 74 | + for file in SHA256SUMS.asc dist/*; do |
| 75 | + echo ">> Uploading $file" |
| 76 | + |
| 77 | + curl -f --progress-bar -H "$gh_auth" -H "Content-Type: application/octet-stream" \ |
| 78 | + --data-binary @"$file" "$gh_upload?name=$(basename "$file")" | (grep -v browser_download_url || true) |
| 79 | + done |
| 80 | + |
| 81 | + # mark release as public once everything is ready |
| 82 | + curl -sf -H "$gh_auth" -X PATCH "$gh_base/releases/$(echo "$gh_release" | jq -r .id)" \ |
| 83 | + -d '{"draft":false}' > /dev/null |
| 84 | +fi |
0 commit comments