diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..dc85f9e --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,48 @@ +name: Release + +on: + push: + tags: ['v*'] + +permissions: + contents: write + +jobs: + release: + name: Publish GitHub Release + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Extract release notes from CHANGELOG + run: | + version="${GITHUB_REF_NAME#v}" + awk -v v="$version" ' + $0 == "## [" v "]" || index($0, "## [" v "] ") == 1 { found = 1; next } + found && /^## \[/ { exit } + found && /^\[[^]]+\]: / { exit } + found { print } + ' CHANGELOG.md > release-notes.md + + if [ ! -s release-notes.md ]; then + echo "::error::CHANGELOG.md has no section for [$version]. Add it before tagging." + exit 1 + fi + + - name: Publish release + env: + GH_TOKEN: ${{ github.token }} + run: | + prerelease="" + case "$GITHUB_REF_NAME" in + *-*) prerelease="--prerelease" ;; + *) prerelease="--latest" ;; + esac + + gh release create "$GITHUB_REF_NAME" \ + --verify-tag \ + --title "rhttp $GITHUB_REF_NAME" \ + --notes-file release-notes.md \ + $prerelease