[PM-22157] independent version names in build workflows (#6074)

This commit is contained in:
mpbw2 2025-10-27 13:51:56 -04:00 committed by GitHub
parent e3b111c383
commit 064a98f86b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 199 additions and 9 deletions

159
.github/workflows/_version.yml vendored Normal file
View File

@ -0,0 +1,159 @@
name: Calculate Version Name and Number
on:
workflow_dispatch:
inputs:
app_codename:
description: "App Name - e.g. 'bwpm' or 'bwa'"
base_version_number:
description: "Base Version Number - Will be added to the calculated version number"
type: number
default: 0
version_name:
description: "Version Name Override - e.g. '2024.8.1'"
version_number:
description: "Version Number Override - e.g. '1021'"
patch_version:
description: "Patch Version Override - e.g. '999'"
distinct_id:
description: "Unique ID for this dispatch, used by dispatch-and-download.yml"
skip_checkout:
description: "Skip checking out the repository"
type: boolean
workflow_call:
inputs:
app_codename:
description: "App Name - e.g. 'bwpm' or 'bwa'"
type: string
base_version_number:
description: "Base Version Number - Will be added to the calculated version number"
type: number
default: 0
version_name:
description: "Version Name Override - e.g. '2024.8.1'"
type: string
version_number:
description: "Version Number Override - e.g. '1021'"
type: string
patch_version:
description: "Patch Version Override - e.g. '999'"
type: string
distinct_id:
description: "Unique ID for this dispatch, used by dispatch-and-download.yml"
type: string
skip_checkout:
description: "Skip checking out the repository"
type: boolean
outputs:
version_name:
description: "Version Name"
value: ${{ jobs.calculate-version.outputs.version_name }}
version_number:
description: "Version Number"
value: ${{ jobs.calculate-version.outputs.version_number }}
env:
APP_CODENAME: ${{ inputs.app_codename }}
BASE_VERSION_NUMBER: ${{ inputs.base_version_number || 0 }}
jobs:
calculate-version:
name: Calculate Version Name and Number
runs-on: ubuntu-22.04
permissions:
contents: read
outputs:
version_name: ${{ steps.calc-version-name.outputs.version_name }}
version_number: ${{ steps.calc-version-number.outputs.version_number }}
steps:
- name: Log inputs to job summary
uses: bitwarden/android/.github/actions/log-inputs@main
with:
inputs: "${{ toJson(inputs) }}"
- name: Echo distinct ID ${{ github.event.inputs.distinct_id }}
run: echo ${{ github.event.inputs.distinct_id }}
- name: Check out repository
if: ${{ !inputs.skip_checkout || false }}
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
with:
fetch-depth: 0
- name: Calculate version name
id: calc-version-name
run: |
output() {
local version_name=$1
echo "version_name=$version_name" >> $GITHUB_OUTPUT
}
# override version name if provided
if [[ ! -z "${{ inputs.version_name }}" ]]; then
version_name=${{ inputs.version_name }}
echo "::warning::Override applied: $version_name"
output "$version_name"
exit 0
fi
current_year=$(date +%Y)
current_month=$(date +%-m)
latest_tag_version=$(git tag -l --sort=-creatordate | grep "$APP_CODENAME" | head -n 1)
if [[ -z "$latest_tag_version" ]]; then
version_name="${current_year}.${current_month}.${{ inputs.patch_version || 0 }}"
echo "::warning::No tags found, did you checkout? Calculating version from current date: $version_name"
output "$version_name"
exit 0
fi
# Git tag was found, calculate version from latest tag
latest_version=${latest_tag_version:1} # remove 'v' from tag version
latest_major_version=$(echo $latest_version | cut -d "." -f 1)
latest_minor_version=$(echo $latest_version | cut -d "." -f 2)
patch_version=0
if [[ ! -z "${{ inputs.patch_version }}" ]]; then
patch_version=${{ inputs.patch_version }}
echo "::warning::Patch Version Override applied: $patch_version"
elif [[ "$current_year" == "$latest_major_version" && "$current_month" == "$latest_minor_version" ]]; then
latest_patch_version=$(echo $latest_version | cut -d "." -f 3)
patch_version=$(($latest_patch_version + 1))
fi
version_name="${current_year}.${current_month}.${patch_version}"
output "$version_name"
- name: Calculate version number
id: calc-version-number
run: |
# override version number if provided
if [[ ! -z "${{ inputs.version_number }}" ]]; then
version_number=${{ inputs.version_number }}
echo "::warning::Override applied: $version_number"
echo "version_number=$version_number" >> $GITHUB_OUTPUT
exit 0
fi
version_number=$(($GITHUB_RUN_NUMBER + ${{ env.BASE_VERSION_NUMBER }}))
echo "version_number=$version_number" >> $GITHUB_OUTPUT
- name: Create version info JSON
run: |
json='{
"version_number": "${{ steps.calc-version-number.outputs.version_number }}",
"version_name": "${{ steps.calc-version-name.outputs.version_name }}"
}'
echo "$json" > version_info.json
echo "## version-info.json" >> $GITHUB_STEP_SUMMARY
echo '```json' >> $GITHUB_STEP_SUMMARY
echo "$json" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
- name: Upload version info artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: version-info
path: version_info.json

View File

@ -15,6 +15,9 @@ on:
description: "Optional. Build number to use. Overrides default of GitHub run number." description: "Optional. Build number to use. Overrides default of GitHub run number."
required: false required: false
type: number type: number
patch_version:
description: "Order 999 - Overrides Patch version"
type: boolean
distribute-to-firebase: distribute-to-firebase:
description: "Optional. Distribute artifacts to Firebase." description: "Optional. Distribute artifacts to Firebase."
required: false required: false
@ -36,6 +39,17 @@ permissions:
id-token: write id-token: write
jobs: jobs:
version:
name: Calculate Version Name and Number
uses: bitwarden/android/.github/workflows/_version.yml@main
with:
app_codename: "bwa"
base_version_number: 0
version_name: ${{ inputs.version-name }}
version_number: ${{ inputs.version-code }}
patch_version: ${{ inputs.patch_version && '999' || '' }}
secrets: inherit
build: build:
name: Build Authenticator name: Build Authenticator
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
@ -107,6 +121,7 @@ jobs:
publish_playstore: publish_playstore:
name: Publish Authenticator Play Store artifacts name: Publish Authenticator Play Store artifacts
needs: needs:
- version
- build - build
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
strategy: strategy:
@ -236,8 +251,8 @@ jobs:
- name: Increment version - name: Increment version
env: env:
DEFAULT_VERSION_CODE: ${{ github.run_number }} DEFAULT_VERSION_CODE: ${{ github.run_number }}
INPUT_VERSION_CODE: "${{ inputs.version-code }}" INPUT_VERSION_CODE: "${{ needs.version.outputs.version_number }}"
INPUT_VERSION_NAME: ${{ inputs.version-name }} INPUT_VERSION_NAME: ${{ needs.version.outputs.version_name }}
run: | run: |
VERSION_CODE="${INPUT_VERSION_CODE:-$DEFAULT_VERSION_CODE}" VERSION_CODE="${INPUT_VERSION_CODE:-$DEFAULT_VERSION_CODE}"
VERSION_NAME_INPUT="${INPUT_VERSION_NAME:-}" VERSION_NAME_INPUT="${INPUT_VERSION_NAME:-}"

View File

@ -15,6 +15,9 @@ on:
description: "Optional. Build number to use. Overrides default of GitHub run number." description: "Optional. Build number to use. Overrides default of GitHub run number."
required: false required: false
type: number type: number
patch_version:
description: "Order 999 - Overrides Patch version"
type: boolean
distribute-to-firebase: distribute-to-firebase:
description: "Optional. Distribute artifacts to Firebase." description: "Optional. Distribute artifacts to Firebase."
required: false required: false
@ -37,6 +40,18 @@ permissions:
id-token: write id-token: write
jobs: jobs:
version:
name: Calculate Version Name and Number
uses: bitwarden/android/.github/workflows/_version.yml@main
with:
app_codename: "bwpm"
# Start from 11000 to prevent collisions with mobile build version codes
base_version_number: 11000
version_name: ${{ inputs.version-name }}
version_number: ${{ inputs.version-code }}
patch_version: ${{ inputs.patch_version && '999' || '' }}
secrets: inherit
build: build:
name: Build name: Build
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
@ -115,6 +130,7 @@ jobs:
publish_playstore: publish_playstore:
name: Publish Play Store artifacts name: Publish Play Store artifacts
needs: needs:
- version
- build - build
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
strategy: strategy:
@ -230,10 +246,10 @@ jobs:
- name: Increment version - name: Increment version
env: env:
VERSION_CODE: ${{ inputs.version-code }} VERSION_CODE: ${{ needs.version.outputs.version_number }}
VERSION_NAME: ${{ inputs.version-name }} VERSION_NAME: ${{ needs.version.outputs.version_name }}
run: | run: |
VERSION_CODE="${VERSION_CODE:-$((11000 + GITHUB_RUN_NUMBER))}" VERSION_CODE="${VERSION_CODE:-$GITHUB_RUN_NUMBER}"
bundle exec fastlane setBuildVersionInfo \ bundle exec fastlane setBuildVersionInfo \
versionCode:$VERSION_CODE \ versionCode:$VERSION_CODE \
versionName:$VERSION_NAME versionName:$VERSION_NAME
@ -436,6 +452,7 @@ jobs:
publish_fdroid: publish_fdroid:
name: Publish F-Droid artifacts name: Publish F-Droid artifacts
needs: needs:
- version
- build - build
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
steps: steps:
@ -530,13 +547,12 @@ jobs:
"$GITHUB_RUN_ID" \ "$GITHUB_RUN_ID" \
"$GITHUB_RUN_ATTEMPT" "$GITHUB_RUN_ATTEMPT"
# Start from 11000 to prevent collisions with mobile build version codes
- name: Increment version - name: Increment version
env: env:
VERSION_CODE: ${{ inputs.version-code }} VERSION_CODE: ${{ needs.version.outputs.version_number }}
VERSION_NAME: ${{ inputs.version-name }} VERSION_NAME: ${{ needs.version.outputs.version_name }}
run: | run: |
VERSION_CODE="${VERSION_CODE:-$((11000 + GITHUB_RUN_NUMBER))}" VERSION_CODE="${VERSION_CODE:-$GITHUB_RUN_NUMBER}"
bundle exec fastlane setBuildVersionInfo \ bundle exec fastlane setBuildVersionInfo \
versionCode:$VERSION_CODE \ versionCode:$VERSION_CODE \
versionName:$VERSION_NAME versionName:$VERSION_NAME