Create Release #16
This file contains 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: Create Release | |
on: | |
workflow_dispatch: | |
inputs: | |
release-type: | |
required: true | |
type: choice | |
description: What type of release | |
options: | |
- major | |
- minor | |
- patch | |
jobs: | |
determine-next-versions: | |
name: Determine Next Version | |
runs-on: ubuntu-latest | |
outputs: | |
next-major: ${{ steps.nexttag.outputs.major }} | |
next-minor: ${{ steps.nexttag.outputs.minor }} | |
next-patch: ${{ steps.nexttag.outputs.patch }} | |
branch-major: ${{ steps.branchnames.outputs.major-branch }} | |
branch-minor: ${{ steps.branchnames.outputs.minor-branch }} | |
branch-patch: ${{ steps.branchnames.outputs.patch-branch }} | |
previous-tag: ${{ steps.getprevioustag.outputs.previous-tag }} | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
tags: true | |
- name: Get Previous Tag | |
id: getprevioustag | |
run: | | |
previous_tag=$(git describe --tags $(git rev-list --tags --max-count=1)) | |
echo "Previous Tag: $previous_tag" | |
echo "previous_tag=$previous_tag" >> $GITHUB_ENV | |
echo "::set-output name=previous-tag::$previous_tag" | |
- name: Get Next Versions | |
id: nexttag | |
uses: "WyriHaximus/github-action-next-semvers@v1" | |
with: | |
version: ${{ steps.getprevioustag.outputs.previous-tag }} | |
- name: Build Branch Names | |
id: branchnames | |
run: | | |
echo "major-branch=release-major-v${{ steps.nexttag.outputs.major }}" >> $GITHUB_OUTPUT | |
echo "minor-branch=release-minor-v${{ steps.nexttag.outputs.minor }}" >> $GITHUB_OUTPUT | |
echo "patch-branch=release-patch-v${{ steps.nexttag.outputs.patch }}" >> $GITHUB_OUTPUT | |
create-release-branch: | |
name: Create Release Branch | |
runs-on: ubuntu-latest | |
needs: determine-next-versions | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v3 | |
- name: Create major release branch | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
git checkout -b ${{ needs.determine-next-versions.outputs.branch-major }} | |
git push origin ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Create minor release branch | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
git checkout -b ${{ needs.determine-next-versions.outputs.branch-minor }} | |
git push origin ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Create patch release branch | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
git checkout -b ${{ needs.determine-next-versions.outputs.branch-patch }} | |
git push origin ${{ needs.determine-next-versions.outputs.branch-patch }} | |
create-change-file: | |
name: Generate Change File | |
runs-on: ubuntu-latest | |
needs: create-release-branch | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # Fetch full history to ensure proper branch switching | |
- name: Fetch full history if shallow | |
run: | | |
if [ -f .git/shallow ]; then | |
git fetch --unshallow | |
fi | |
- name: Clean working tree | |
run: | | |
git reset --hard HEAD | |
- name: Switch to Release Branch (Major) | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
git fetch origin ${{ needs.determine-next-versions.outputs.branch-major }} | |
git checkout ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Switch to Release Branch (Minor) | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
git fetch origin ${{ needs.determine-next-versions.outputs.branch-minor }} | |
git checkout ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Switch to Release Branch (Patch) | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
git fetch origin ${{ needs.determine-next-versions.outputs.branch-patch }} | |
git checkout ${{ needs.determine-next-versions.outputs.branch-patch }} | |
- name: Verify Current Branch | |
run: git branch --show-current | |
- name: Generate Change File for Major Release | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
mkdir -p change | |
echo '{ | |
"type": "major", | |
"comment": "Automated major version bump", | |
"packageName": "@passageidentity/passage-react-native", | |
"email": "[email protected]", | |
"dependentChangeType": "major" | |
}' > change/@passageidentity-passage-react-native-$(uuidgen).json | |
- name: Generate Change File for Minor Release | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
mkdir -p change | |
echo '{ | |
"type": "minor", | |
"comment": "Automated minor version bump", | |
"packageName": "@passageidentity/passage-react-native", | |
"email": "[email protected]"", | |
"dependentChangeType": "minor" | |
}' > change/@passageidentity-passage-react-native-$(uuidgen).json | |
- name: Generate Change File for Patch Release | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
mkdir -p change | |
echo '{ | |
"type": "patch", | |
"comment": "Automated patch version bump", | |
"packageName": "@passageidentity/passage-react-native", | |
"email": "[email protected]", | |
"dependentChangeType": "patch" | |
}' > change/@passageidentity-passage-react-native-$(uuidgen).json | |
- name: Configure Git | |
run: | | |
git config --global user.name "Your GitHub Actions Bot" | |
git config --global user.email "[email protected]" | |
- name: Commit Change File for Major Release | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
git add change/ | |
git commit -m "chore: add changefile for major release" | |
git push origin ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Commit Change File for Minor Release | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
git add change/ | |
git commit -m "chore: add changefile for minor release" | |
git push origin ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Commit Change File for Patch Release | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
git add change/ | |
git commit -m "chore: add changefile for patch release" | |
git push origin ${{ needs.determine-next-versions.outputs.branch-patch }} | |
- name: Beachball Check | |
run: npm run beachball:check | |
- name: Beachball Bump | |
run: npm run beachball:bump | |
bump-version: | |
name: Bump the Version | |
runs-on: ubuntu-latest | |
needs: [determine-next-versions, create-release-branch, create-change-file] | |
steps: | |
- name: Check out code - major release | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Check out code - minor release | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Check out code - patch release | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-patch }} | |
- name: Update major version in package.json | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-major }} | |
jq --arg new_version "$new_version" '.version = $new_version' package.json > package.tmp.json && mv package.tmp.json package.json | |
echo "Updated to version $new_version" | |
- name: Update minor version in package.json | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-minor }} | |
jq --arg new_version "$new_version" '.version = $new_version' package.json > package.tmp.json && mv package.tmp.json package.json | |
echo "Updated to version $new_version" | |
- name: Update patch version in package.json | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-patch }} | |
jq --arg new_version "$new_version" '.version = $new_version' package.json > package.tmp.json && mv package.tmp.json package.json | |
echo "Updated to version $new_version" | |
- name: Install dependencies and update package-lock.json | |
run: npm install | |
- name: Prepend to CHANGELOG.md - major release | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-major }} | |
previous_tag=${{ needs.determine-next-versions.outputs.previous-tag }} | |
git fetch --tags | |
git fetch --all | |
release_notes=$(git log --pretty=format:"* %s" $previous_tag..HEAD) | |
echo "Release Notes: $release_notes" | |
echo -e "## $new_version\n\n$release_notes\n\n$(cat CHANGELOG.md)" > CHANGELOG.md | |
echo "Prepended CHANGELOG.md with version $new_version" | |
- name: Prepend to CHANGELOG.md - minor release | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-minor }} | |
previous_tag=${{ needs.determine-next-versions.outputs.previous-tag }} | |
git fetch --tags | |
git fetch --all | |
release_notes=$(git log --pretty=format:"* %s" $previous_tag..HEAD) | |
echo "Release Notes: $release_notes" | |
echo -e "## $new_version\n\n$release_notes\n\n$(cat CHANGELOG.md)" > CHANGELOG.md | |
echo "Prepended CHANGELOG.md with version $new_version" | |
- name: Prepend to CHANGELOG.md - patch release | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-patch }} | |
previous_tag=${{ needs.determine-next-versions.outputs.previous-tag }} | |
git fetch --tags | |
git fetch --all | |
release_notes=$(git log --pretty=format:"* %s" $previous_tag..HEAD) | |
echo "Release Notes: $release_notes" | |
echo -e "## $new_version\n\n$release_notes\n\n$(cat CHANGELOG.md)" > CHANGELOG.md | |
echo "Prepended CHANGELOG.md with version $new_version" | |
- name: Commit major version change | |
uses: stefanzweifel/git-auto-commit-action@v4 | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
with: | |
commit_message: "Bumped version to ${{ needs.determine-next-versions.outputs.next-major }}" | |
branch: ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Commit minor version change | |
uses: stefanzweifel/git-auto-commit-action@v4 | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
with: | |
commit_message: "Bumped version to ${{ needs.determine-next-versions.outputs.next-minor }}" | |
branch: ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Commit patch version change | |
uses: stefanzweifel/git-auto-commit-action@v4 | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
with: | |
commit_message: "Bumped version to ${{ needs.determine-next-versions.outputs.next-patch }}" | |
branch: ${{ needs.determine-next-versions.outputs.branch-patch }} | |
create-github-release: | |
name: Create GitHub Release | |
runs-on: ubuntu-latest | |
needs: [determine-next-versions, create-release-branch, bump-version] | |
steps: | |
- name: Configure Git | |
run: | | |
git config --global user.name "Your GitHub Actions Bot" | |
git config --global user.email "[email protected]" | |
- name: Create Release - major | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
uses: ncipollo/release-action@v1 | |
with: | |
tag: "v${{ needs.determine-next-versions.outputs.next-major }}" | |
generateReleaseNotes: true | |
draft: false | |
- name: Create Release - minor | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
uses: ncipollo/release-action@v1 | |
with: | |
tag: "v${{ needs.determine-next-versions.outputs.next-minor }}" | |
generateReleaseNotes: true | |
draft: false | |
- name: Create Release - patch | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
uses: ncipollo/release-action@v1 | |
with: | |
tag: "v${{ needs.determine-next-versions.outputs.next-patch }}" | |
generateReleaseNotes: true | |
draft: false | |
create-pull-request: | |
name: Create Pull Request | |
runs-on: ubuntu-latest | |
needs: [ create-github-release, determine-next-versions ] | |
steps: | |
- name: Check out code - major release | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Check out code - minor release | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Check out code - patch release | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-patch }} | |
- name: Create pull request for major release into main | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
uses: thomaseizinger/[email protected] | |
with: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
head: ${{needs.determine-next-versions.outputs.branch-major}} | |
base: main | |
title: v${{ needs.determine-next-versions.outputs.next-major }} into main | |
body: | | |
This PR was created by the create-release-branch workflow. | |
New Release: v${{ needs.determine-next-versions.outputs.next-major }} | |
I've updated the version name and code commit. | |
- name: Create pull request for minor release into main | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
uses: thomaseizinger/[email protected] | |
with: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
head: ${{needs.determine-next-versions.outputs.branch-minor}} | |
base: main | |
title: v${{ needs.determine-next-versions.outputs.next-minor }} into main | |
body: | | |
This PR was created by the create-release-branch workflow. | |
New Release: v${{ needs.determine-next-versions.outputs.next-minor }} | |
I've updated the version name and code commit. | |
- name: Create pull request for patch release into main | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
uses: thomaseizinger/[email protected] | |
with: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
head: ${{needs.determine-next-versions.outputs.branch-patch}} | |
base: main | |
title: v${{ needs.determine-next-versions.outputs.next-patch }} into main | |
body: | | |
This PR was created by the create-release-branch workflow. | |
New Release: v${{ needs.determine-next-versions.outputs.next-patch }} | |
I've updated the version name and code commit. | |
publish-sdk: | |
name: Publish SDK | |
runs-on: ubuntu-latest | |
needs: [ create-github-release, determine-next-versions ] | |
steps: | |
- name: Trigger publish workflow - major | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
curl -X POST \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
https://api.github.com/repos/${{ github.repository }}/dispatches \ | |
-d '{"event_type":"publish", "client_payload": {"ref": "${{needs.determine-next-versions.outputs.branch-major}}"}}' | |
- name: Trigger publish workflow - minor | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
curl -X POST \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
https://api.github.com/repos/${{ github.repository }}/dispatches \ | |
-d '{"event_type":"publish", "client_payload": {"ref": "${{needs.determine-next-versions.outputs.branch-minor}}"}}' | |
- name: Trigger publish workflow - patch | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
curl -X POST \ | |
-H "Accept: application/vnd.github.v3+json" \ | |
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
https://api.github.com/repos/${{ github.repository }}/dispatches \ | |
-d '{"event_type":"publish", "client_payload": {"ref": "${{needs.determine-next-versions.outputs.branch-patch}}"}}' |