Incrementing Release Version -- Custom #30
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: Increment Release Version Pipeline | |
run-name: "Incrementing Release Version -- ${{github.event.inputs.action}}" | |
on: | |
workflow_dispatch: | |
inputs: | |
action: | |
type: choice | |
description: Version To Increment (If Custom. Please Input Release or Development Version Below) | |
options: | |
- Major | |
- Minor | |
- Patch | |
- Custom | |
required: true | |
release_version: | |
description: Name of release. May follow SemVer (Major.Minor.Patch) format | |
development_version: | |
description: Name of next development version. Must follow SemVer + "-" + <TEXT> (Major.Minor.Patch-TEXT) format | |
env: | |
INCREMENTING_VERSION: ${{github.event.inputs.action}} | |
DEVELOPMENT_VERSION_INPUT: ${{github.event.inputs.development_version}} | |
RELEASE_VERSION_INPUT: ${{github.event.inputs.release_version}} | |
jobs: | |
get_custom_inputs: | |
runs-on: ubuntu-latest | |
name: Get Custom Inputs | |
env: | |
NEXT_DEV_VERSION: "" | |
NEXT_RELEASE_VERSION: "" | |
outputs: | |
REUSE_DEV_VERSION: ${{env.NEXT_DEV_VERSION}} | |
REUSE_RELEASE_VERSION: ${{env.NEXT_RELEASE_VERSION}} | |
if: github.event.inputs.action == 'Custom' | |
steps: | |
- name: Stops If Fields Are Empty | |
if: env.DEVELOPMENT_VERSION_INPUT == '' && env.RELEASE_VERSION_INPUT == '' | |
run: | | |
echo "Please Enter A Development Or Release Version" | |
exit 1 | |
- name: Checkout Code Repository | |
uses: actions/checkout@v4 | |
- name: Downloading Java | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '11' | |
distribution: 'temurin' | |
- name: Get Current Version | |
run: | | |
echo "POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV | |
- name: Set Release Version | |
run: echo "NEXT_RELEASE_VERSION=${{env.POM_VERSION}}" >> $GITHUB_ENV | |
- name: If Developemt Version Is Entered And Does Not Contains SNAPSHOT | |
if: ${{env.DEVELOPMENT_VERSION_INPUT}} != '' && !contains(${{env.DEVELOPMENT_VERSION_INPUT}}, '-SNAPSHOT') | |
run: | | |
echo "Setting Next Dev To ${{env.NEXT_DEV_VERSION}}" | |
env: | |
NEXT_DEV_VERSION: ${{env.DEVELOPMENT_VERSION_INPUT}} | |
- name: If Developemt Version Is Entered And Contains SNAPSHOT | |
if: env.DEVELOPMENT_VERSION_INPUT != '' && contains(${{env.DEVELOPMENT_VERSION_INPUT}}, '-SNAPSHOT') | |
uses: xom9ikk/split@v1 | |
id: splitVersionDev | |
with: | |
string: ${{env.DEVELOPMENT_VERSION_INPUT}} | |
separator: -SNAPSHOT | |
limit: -1 | |
- name: If Developemt Version Is Entered And Contains SNAPSHOT - Set Enviroment | |
if: env.DEVELOPMENT_VERSION_INPUT != '' && contains(${{env.DEVELOPMENT_VERSION_INPUT}}, '-SNAPSHOT') | |
run: echo "NEXT_DEV_VERSION=${{steps.splitVersionDev.outputs._0}}" | |
- name: If Release Version Is Entered And Does Not Contains SNAPSHOT | |
if: env.RELEASE_VERSION_INPUT != '' && !contains(${{env.RELEASE_VERSION_INPUT}}, '-SNAPSHOT') | |
run: echo "Setting Next Release To ${{env.NEXT_RELEASE_VERSION}}" | |
env: | |
NEXT_RELEASE_VERSION: ${{env.RELEASE_VERSION_INPUT}} | |
- name: If Release Version Is Entered And Contains SNAPSHOT | |
if: env.RELEASE_VERSION_INPUT != '' && contains(${{env.RELEASE_VERSION_INPUT}}, '-SNAPSHOT') | |
uses: xom9ikk/split@v1 | |
id: splitVersionRelease | |
with: | |
string: ${{env.RELEASE_VERSION_INPUT}} | |
separator: -SNAPSHOT | |
limit: -1 | |
- name: If Release Version Is Entered And Contains SNAPSHOT - Set Enviroment | |
if: env.RELEASE_VERSION_INPUT != '' && contains(${{env.RELEASE_VERSION_INPUT}}, '-SNAPSHOT') | |
run: echo "NEXT_RELEASE_VERSION=${{steps.splitVersionRelease.outputs._0}}" | |
- name: Print Versions | |
run: | | |
echo "Next Dev Version: ${{env.NEXT_DEV_VERSION}}" | |
echo "Next Release Version: ${{env.NEXT_RELEASE_VERSION}}" | |
calling-release-workflow: | |
needs: get_custom_inputs | |
permissions: write-all | |
uses: OmOmofonmwan/GitHub_Actions_POC/.github/workflows/reusable_release_poc.yaml@main | |
with: | |
release_version: ${{needs.get_custom_inputs.outputs.REUSE_RELEASE_VERSION}} | |
snapshot_version: ${{needs.get_custom_inputs.outputs.REUSE_DEV_VERSION}} | |
get_version: | |
runs-on: ubuntu-latest | |
name: Get Version | |
if: github.event.inputs.action != 'Custom' | |
outputs: | |
RELEASE_VERSION: ${{steps.splitVersion.outputs._0}} | |
_MAJOR: ${{steps.splitVersionMinor.outputs._0}} | |
_MINOR: ${{steps.splitVersionMinor.outputs._1}} | |
_PATCH: ${{steps.splitVersionMinor.outputs._2}} | |
steps: | |
- name: Checkout Code Repository | |
uses: actions/checkout@v4 | |
- name: Downloading Java | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '11' | |
distribution: 'temurin' | |
- name: Get Current Version | |
run: | | |
echo "POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV | |
- name: Print Version | |
run: echo ${{env.POM_VERSION}} | |
- name: Split version code | |
uses: xom9ikk/split@v1 | |
id: splitVersion | |
with: | |
string: ${{env.POM_VERSION}} | |
separator: -SNAPSHOT | |
limit: -1 | |
- name: Split version code - Minor | |
uses: xom9ikk/split@v1 | |
id: splitVersionMinor | |
with: | |
string: ${{steps.splitVersion.outputs._0}} | |
separator: . | |
limit: -1 | |
increment_version: | |
runs-on: ubuntu-latest | |
needs: get_version | |
outputs: | |
NEXT_SNAPSHOT_VERSION: ${{steps.nextSnapshotVersion.outputs.NEXT_SNAPSHOT_VERSION}} | |
RELEASE_VERSION: ${{needs.get_version.outputs.RELEASE_VERSION}} | |
name: "Increment ${{github.event.inputs.action}} Version" | |
steps: | |
- name: Set Env - Major | |
shell: bash | |
run: | | |
VERSION_PICKED=${{env.INCREMENTING_VERSION}} | |
if [[ "$VERSION_PICKED" == "Major" ]]; then | |
echo "VERSION_NUMBER=${{needs.get_version.outputs._MAJOR}}" >> $GITHUB_ENV | |
elif [[ "$VERSION_PICKED" == "Minor" ]]; then | |
echo "VERSION_NUMBER=${{needs.get_version.outputs._MINOR}}" >> $GITHUB_ENV | |
else | |
echo "VERSION_NUMBER=${{needs.get_version.outputs._PATCH}}" >> $GITHUB_ENV | |
fi | |
- name: Print Version | |
run: echo ${{env.INCREMENTING_VERSION}} -- ${{env.VERSION_NUMBER}} | |
- name: Increment Version | |
run: echo "NEW_VERSION_NUMBER=$((${{env.VERSION_NUMBER}} + 1))" >> $GITHUB_ENV | |
- name: Generate New Snapshot Version Output | |
id: nextSnapshotVersion | |
shell: bash | |
run: | | |
VERSION_PICKED=${{env.INCREMENTING_VERSION}} | |
if [[ "$VERSION_PICKED" == "Major" ]]; then | |
echo "NEXT_SNAPSHOT_VERSION=${{env.NEW_VERSION_NUMBER}}.0.0" >> $GITHUB_OUTPUT | |
elif [[ "$VERSION_PICKED" == "Minor" ]]; then | |
echo "NEXT_SNAPSHOT_VERSION=${{needs.get_version.outputs._MAJOR}}.${{env.NEW_VERSION_NUMBER}}.0" >> $GITHUB_OUTPUT | |
else | |
echo "NEXT_SNAPSHOT_VERSION=${{needs.get_version.outputs._MAJOR}}.${{needs.get_version.outputs._MINOR}}.${{env.NEW_VERSION_NUMBER}}" >> $GITHUB_OUTPUT | |
fi | |
set_build_and_tag_release: | |
runs-on: ubuntu-latest | |
needs: increment_version | |
name: "Set, Build & Tag Release Version" | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout Code Repository | |
uses: actions/checkout@v4 | |
- name: Downloading Java | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '21' | |
distribution: 'temurin' | |
- name: Set Release Version | |
run: mvn -B versions:set -DnewVersion=${{needs.increment_version.outputs.RELEASE_VERSION}} -DgenerateBackupPoms=false | |
- name: Build Release Version | |
run: mvn -version mvn clean install | |
- name: Create tag | |
uses: actions/github-script@v5 | |
with: | |
script: | | |
github.rest.git.createRef({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
ref: 'refs/tags/${{needs.increment_version.outputs.RELEASE_VERSION}}', | |
sha: context.sha | |
}) | |
set_next_dev: | |
runs-on: ubuntu-latest | |
name: Set Next Snapshot Version | |
needs: | |
- increment_version | |
- set_build_and_tag_release | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout Code Repository | |
uses: actions/checkout@v4 | |
- name: Downloading Java | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '21' | |
distribution: 'temurin' | |
- name: Set Dev Version | |
run: mvn -B versions:set -DnewVersion=${{needs.increment_version.outputs.NEXT_SNAPSHOT_VERSION}}-SNAPSHOT -DgenerateBackupPoms=false | |
- name: Commit & Push | |
run: | | |
git add . | |
git config user.name fda_shield_omoruyi | |
git config user.email [email protected] | |
git commit -m 'Set next dev version to ${{needs.increment_version.outputs.NEXT_SNAPSHOT_VERSION}}' | |
git push origin HEAD:main | |
git push --tags origin | |
create_release: | |
name: Create Release | |
permissions: write-all | |
needs: | |
- increment_version | |
- set_build_and_tag_release | |
- set_next_dev | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@master | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token | |
with: | |
tag_name: ${{needs.increment_version.outputs.RELEASE_VERSION}} | |
release_name: Release ${{needs.increment_version.outputs.RELEASE_VERSION}} | |
body: | | |
New Release Version ${{needs.increment_version.outputs.RELEASE_VERSION}} | |
draft: false | |
prerelease: false | |