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 }} env: _DISTINCT_ID: ${{ inputs.distinct_id }} run: echo "${_DISTINCT_ID}" - name: Check out repository if: ${{ !inputs.skip_checkout || false }} uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: fetch-depth: 0 persist-credentials: false - name: Calculate version name id: calc-version-name env: _VERSION_NAME: ${{ inputs.version_name }} _PATCH_VERSION: ${{ inputs.patch_version }} run: | output() { local version_name=$1 echo "version_name=$version_name" >> "$GITHUB_OUTPUT" } # override version name if provided if [[ ! -z "${_VERSION_NAME}" ]]; then version_name=${_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}.${_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 "${_PATCH_VERSION}" ]]; then patch_version=${_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 env: _VERSION_NUMBER: ${{ inputs.version_number }} run: | # override version number if provided if [[ ! -z "${_VERSION_NUMBER}" ]]; then version_number=${_VERSION_NUMBER} echo "::warning::Override applied: $version_number" echo "version_number=$version_number" >> "$GITHUB_OUTPUT" exit 0 fi version_number=$(($GITHUB_RUN_NUMBER + ${BASE_VERSION_NUMBER})) echo "version_number=$version_number" >> "$GITHUB_OUTPUT" - name: Create version info JSON env: _VERSION_NUMBER: ${{ steps.calc-version-number.outputs.version_number }} _VERSION_NAME: ${{ steps.calc-version-name.outputs.version_name }} run: | json=$(cat < 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@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: version-info path: version_info.json