Create Release #21
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 }} | |
bump-version: | |
name: Bump the Version | |
runs-on: ubuntu-latest | |
needs: [determine-next-versions, create-release-branch] | |
steps: | |
- name: Check out code - major release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Check out code - minor release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Check out code - patch release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-patch }} | |
- name: Update major version in pubspec.yaml and podspec | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-major }} | |
awk -v new_version="$new_version" ' | |
{ | |
if ($0 ~ /^ s.version/) { | |
print " s.version = \x27" new_version "\x27" | |
} else { | |
print $0 | |
} | |
}' ios/passage_flutter.podspec > temp_podspec.podspec | |
mv temp_podspec.podspec ios/passage_flutter.podspec | |
sed -i "s/version: .*/version: $new_version/" pubspec.yaml | |
echo "Updated to major version $new_version" | |
- name: Update minor version in pubspec.yaml and podspec | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-minor }} | |
awk -v new_version="$new_version" ' | |
{ | |
if ($0 ~ /^ s.version/) { | |
print " s.version = \x27" new_version "\x27" | |
} else { | |
print $0 | |
} | |
}' ios/passage_flutter.podspec > temp_podspec.podspec | |
mv temp_podspec.podspec ios/passage_flutter.podspec | |
sed -i "s/version: .*/version: $new_version/" pubspec.yaml | |
echo "Updated to minor version $new_version" | |
- name: Update patch version in pubspec.yaml and podspec | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
run: | | |
new_version=${{ needs.determine-next-versions.outputs.next-patch }} | |
awk -v new_version="$new_version" ' | |
{ | |
if ($0 ~ /^ s.version/) { | |
print " s.version = \x27" new_version "\x27" | |
} else { | |
print $0 | |
} | |
}' ios/passage_flutter.podspec > temp_podspec.podspec | |
mv temp_podspec.podspec ios/passage_flutter.podspec | |
sed -i "s/version: .*/version: $new_version/" pubspec.yaml | |
echo "Updated to patch version $new_version" | |
- 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 | |
git log -1 | |
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 | |
git log -1 | |
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 | |
git log -1 | |
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: Check out code - major release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
- name: Check out code - minor release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
- name: Check out code - patch release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
- name: Create Release - major | |
uses: ncipollo/release-action@v1 | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
with: | |
tag: "v${{ needs.determine-next-versions.outputs.next-major }}" | |
generateReleaseNotes: true | |
draft: false | |
- name: Create Release - minor | |
uses: ncipollo/release-action@v1 | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
with: | |
tag: "v${{ needs.determine-next-versions.outputs.next-minor }}" | |
generateReleaseNotes: true | |
draft: false | |
- name: Create Release - patch | |
uses: ncipollo/release-action@v1 | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
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 | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-major }} | |
- name: Check out code - minor release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-minor }} | |
- name: Check out code - patch release | |
uses: actions/checkout@v3 | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
with: | |
ref: ${{ needs.determine-next-versions.outputs.branch-patch }} | |
- name: Create pull request for major release into main | |
uses: thomaseizinger/create-pull-request@1.0.0 | |
if: ${{ github.event.inputs.release-type == 'major' }} | |
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 | |
uses: thomaseizinger/create-pull-request@1.0.0 | |
if: ${{ github.event.inputs.release-type == 'minor' }} | |
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 | |
uses: thomaseizinger/create-pull-request@1.0.0 | |
if: ${{ github.event.inputs.release-type == 'patch' }} | |
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 }}"}}' |