corpus

self-hosted listenbrainz and last.fm proxy
Log | Files | Refs | README | LICENSE

release (969B)


      1 #!/usr/bin/env bash
      2 set -euo pipefail
      3 
      4 require() { command -v "$1" &>/dev/null || {
      5 	echo "error: $1 not found"
      6 	exit 1
      7 }; }
      8 require git
      9 require git-cliff
     10 require jq
     11 
     12 # --- pre-flight ---
     13 
     14 if [ -n "$(git status --porcelain)" ]; then
     15 	echo "error: working tree is dirty"
     16 	exit 1
     17 fi
     18 
     19 next=$(git-cliff --bumped-version 2>/dev/null | sed 's/^v//')
     20 
     21 if git tag | grep -qx "v$next"; then
     22 	echo "no releasable commits since v$next"
     23 	exit 0
     24 fi
     25 
     26 echo "releasing -> v$next"
     27 
     28 # --- update files ---
     29 
     30 jq --arg v "$next" '.version = $v' package.json >package.json.tmp
     31 mv package.json.tmp package.json
     32 
     33 # --- run git-cliff ---
     34 git-cliff --tag "v$next" --output CHANGELOG.md
     35 
     36 # --- remove newlines ---
     37 sed -i -e :a -e '/^\s*$/{$d;N;ba' -e '}' CHANGELOG.md
     38 
     39 # --- commit, tag, push ---
     40 
     41 git add package.json pnpm-lock.yaml CHANGELOG.md flake.nix
     42 git commit --no-verify -m "chore: release v$next"
     43 git tag -a "v$next" -m "release v$next"
     44 git push
     45 git push --tags
     46 
     47 echo "released v$next"