You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
6.1 KiB
165 lines
6.1 KiB
name: Bump version |
|
|
|
on: |
|
workflow_dispatch: |
|
inputs: |
|
version_number_override: |
|
description: "New version override (leave blank for automatic calculation, example: '2024.1.0')" |
|
required: false |
|
type: string |
|
enable_slack_notification: |
|
description: "Enable Slack notifications for upcoming release?" |
|
default: false |
|
type: boolean |
|
|
|
permissions: {} |
|
|
|
jobs: |
|
bump_version: |
|
name: Bump version |
|
runs-on: ubuntu-22.04 |
|
permissions: |
|
id-token: write |
|
outputs: |
|
version: ${{ steps.set-final-version-output.outputs.version }} |
|
|
|
steps: |
|
- name: Validate version input |
|
if: ${{ inputs.version_number_override != '' }} |
|
uses: bitwarden/gh-actions/version-check@main |
|
with: |
|
version: ${{ inputs.version_number_override }} |
|
|
|
- name: Log in to Azure |
|
uses: bitwarden/gh-actions/azure-login@main |
|
with: |
|
subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} |
|
tenant_id: ${{ secrets.AZURE_TENANT_ID }} |
|
client_id: ${{ secrets.AZURE_CLIENT_ID }} |
|
|
|
- name: Get Azure Key Vault secrets |
|
id: get-kv-secrets |
|
uses: bitwarden/gh-actions/get-keyvault-secrets@main |
|
with: |
|
keyvault: gh-org-bitwarden |
|
secrets: "BW-GHAPP-ID,BW-GHAPP-KEY" |
|
|
|
- name: Log out from Azure |
|
uses: bitwarden/gh-actions/azure-logout@main |
|
|
|
- name: Generate GH App token |
|
uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1 |
|
id: app-token |
|
with: |
|
app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }} |
|
private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }} |
|
permission-contents: write |
|
|
|
- name: Check out repo |
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 |
|
with: |
|
token: ${{ steps.app-token.outputs.token }} |
|
persist-credentials: true |
|
|
|
- name: Set up Git |
|
run: | |
|
git config --local user.email "178206702+bw-ghapp[bot]@users.noreply.github.com" |
|
git config --local user.name "bw-ghapp[bot]" |
|
|
|
- name: Install xmllint |
|
run: | |
|
sudo apt-get update |
|
sudo apt-get install -y libxml2-utils |
|
|
|
- name: Get current version |
|
id: current-version |
|
run: | |
|
CURRENT_VERSION=$(xmllint -xpath "/Project/PropertyGroup/Version/text()" Directory.Build.props) |
|
echo "version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT" |
|
|
|
- name: Verify input version |
|
if: ${{ inputs.version_number_override != '' }} |
|
env: |
|
CURRENT_VERSION: ${{ steps.current-version.outputs.version }} |
|
NEW_VERSION: ${{ inputs.version_number_override }} |
|
run: | |
|
# Error if version has not changed. |
|
if [[ "$NEW_VERSION" == "$CURRENT_VERSION" ]]; then |
|
echo "Version has not changed." |
|
exit 1 |
|
fi |
|
|
|
# Check if version is newer. |
|
if printf '%s\n' "${CURRENT_VERSION}" "${NEW_VERSION}" | sort -C -V; then |
|
echo "Version check successful." |
|
else |
|
echo "Version check failed." |
|
exit 1 |
|
fi |
|
|
|
- name: Calculate next release version |
|
if: ${{ inputs.version_number_override == '' }} |
|
id: calculate-next-version |
|
uses: bitwarden/gh-actions/version-next@main |
|
with: |
|
version: ${{ steps.current-version.outputs.version }} |
|
|
|
- name: Bump version props for version override |
|
if: ${{ inputs.version_number_override != '' }} |
|
id: bump-version-override |
|
uses: bitwarden/gh-actions/version-bump@main |
|
with: |
|
file_path: "Directory.Build.props" |
|
version: ${{ inputs.version_number_override }} |
|
|
|
- name: Bump version props with automatic calculation |
|
if: ${{ inputs.version_number_override == '' }} |
|
id: bump-version-automatic |
|
uses: bitwarden/gh-actions/version-bump@main |
|
with: |
|
file_path: "Directory.Build.props" |
|
version: ${{ steps.calculate-next-version.outputs.version }} |
|
|
|
- name: Set final version output |
|
id: set-final-version-output |
|
env: |
|
_BUMP_VERSION_OVERRIDE_OUTCOME: ${{ steps.bump-version-override.outcome }} |
|
_INPUT_VERSION_NUMBER_OVERRIDE: ${{ inputs.version_number_override }} |
|
_BUMP_VERSION_AUTOMATIC_OUTCOME: ${{ steps.bump-version-automatic.outcome }} |
|
_CALCULATE_NEXT_VERSION: ${{ steps.calculate-next-version.outputs.version }} |
|
run: | |
|
if [[ "${_BUMP_VERSION_OVERRIDE_OUTCOME}" == "success" ]]; then |
|
echo "version=${_INPUT_VERSION_NUMBER_OVERRIDE}" >> "$GITHUB_OUTPUT" |
|
elif [[ "${_BUMP_VERSION_AUTOMATIC_OUTCOME}" == "success" ]]; then |
|
echo "version=${_CALCULATE_NEXT_VERSION}" >> "$GITHUB_OUTPUT" |
|
fi |
|
|
|
- name: Check if version changed |
|
id: version-changed |
|
run: | |
|
if [ -n "$(git status --porcelain)" ]; then |
|
echo "changes_to_commit=TRUE" >> "$GITHUB_OUTPUT" |
|
else |
|
echo "changes_to_commit=FALSE" >> "$GITHUB_OUTPUT" |
|
echo "No changes to commit!"; |
|
fi |
|
|
|
- name: Commit files |
|
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }} |
|
env: |
|
_FINAL_VERSION: ${{ steps.set-final-version-output.outputs.version }} |
|
run: git commit -m "Bumped version to ${_FINAL_VERSION}" -a |
|
|
|
- name: Push changes |
|
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }} |
|
run: git push -u origin "${GITHUB_REF}" |
|
|
|
- name: Report upcoming release version to Slack |
|
if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' && inputs.enable_slack_notification == true }} |
|
uses: bitwarden/gh-actions/report-upcoming-release-version@main |
|
with: |
|
version: ${{ steps.set-final-version-output.outputs.version }} |
|
project: ${{ github.repository }} |
|
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} |
|
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} |
|
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
|
|
|