Skip to content

Release

Release #6

Workflow file for this run

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/&/\&#38;/g' \
| sed 's/</\&#60;/g' \
| sed 's/>/\&#62;/g' \
| sed 's/{/\&#123;/g' \
| sed 's/}/\&#125;/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