Release #8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| bump: | |
| description: 'Version bump type' | |
| required: true | |
| type: choice | |
| options: | |
| - patch | |
| - minor | |
| - major | |
| overview: | |
| description: 'Release overview (will be placed at top of notes)' | |
| required: true | |
| jobs: | |
| release: | |
| name: Create tag and release | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.version.outputs.version }} | |
| steps: | |
| - name: Checkout target branch | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.ref_name }} | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Push version bump and tag | |
| id: version | |
| run: | | |
| git config user.name "github-actions" | |
| git config user.email "[email protected]" | |
| npm version ${{ github.event.inputs.bump }} --no-git-tag-version | |
| version=$(jq -r .version package.json) | |
| echo "version=$version" >> $GITHUB_OUTPUT | |
| sed -i "s/^export const BitpayPluginInfo = .*$/export const BitpayPluginInfo = 'BitPay_NodeJs_Client_v$version';/" src/Env.ts | |
| git add package.json package-lock.json src/Env.ts | |
| git commit -m "Bump version to $version" | |
| git tag $version | |
| git push origin ${{ github.ref_name }} | |
| git push origin $version | |
| - name: Get merged PR titles and format release notes | |
| id: changelog | |
| run: | | |
| git fetch --tags | |
| # Get most recent and previous tags | |
| tags=($(git tag --sort=-creatordate)) | |
| new_tag="${tags[0]}" | |
| prev_tag="${tags[1]}" | |
| if [ -z "$prev_tag" ]; then | |
| echo "Warning: No previous tag found. Skipping full changelog link." | |
| changelog="" | |
| else | |
| changelog="**Full Changelog**: https://github.com/${{ github.repository }}/compare/$prev_tag...$new_tag" | |
| fi | |
| prs=$(gh pr list --state merged --base "${{ github.ref_name }}" --json title,mergedAt --jq '[.[] | select(.mergedAt != null) | .title]') | |
| joined=$(echo "$prs" | jq -r '.[]' | sed 's/^/* /') | |
| echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV | |
| echo "${{ github.event.inputs.overview }}" >> $GITHUB_ENV | |
| echo "" >> $GITHUB_ENV | |
| echo "## What's Changed" >> $GITHUB_ENV | |
| echo "$joined" >> $GITHUB_ENV | |
| echo "" >> $GITHUB_ENV | |
| echo "$changelog" >> $GITHUB_ENV | |
| echo "EOF" >> $GITHUB_ENV | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Create GitHub release | |
| run: | | |
| gh release create "${{ steps.version.outputs.version }}" \ | |
| --title "${{ steps.version.outputs.version }}" \ | |
| --notes "${{ env.RELEASE_NOTES }}" | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| readme-changelog: | |
| name: Publish changelog to Readme | |
| needs: release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: Extract release data | |
| id: release_data | |
| run: | | |
| echo "title=${{ needs.release.outputs.version }}" >> $GITHUB_OUTPUT | |
| body=$(gh release view ${{ needs.release.outputs.version }} --json body --jq .body) | |
| body_escaped=$(echo "$body" \ | |
| | sed 's/&/\&/g' \ | |
| | sed 's/</\</g' \ | |
| | sed 's/>/\>/g' \ | |
| | sed 's/{/\{/g' \ | |
| | sed 's/}/\}/g') | |
| { | |
| echo "body<<EOF" | |
| echo "$body_escaped" | |
| echo "EOF" | |
| } >> $GITHUB_OUTPUT | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Publish changelog to Readme | |
| env: | |
| README_API_KEY: ${{ secrets.README_API_KEY }} | |
| run: | | |
| jq -n --arg title "Node.js Unified SDK v${{ steps.release_data.outputs.title }}" \ | |
| --arg body "${{ steps.release_data.outputs.body }}" \ | |
| '{ | |
| title: $title, | |
| content: { | |
| body: $body | |
| }, | |
| privacy: { view: "public" } | |
| }' > payload.json | |
| curl --location 'https://api.readme.com/v2/changelogs' \ | |
| --header "Authorization: Bearer $README_API_KEY" \ | |
| --header 'Content-Type: application/json' \ | |
| --data @payload.json |