Skip to content

Commit b9e57db

Browse files
BUILD-9058 reuse BUILD_NUMBER from env
1 parent c4694c3 commit b9e57db

File tree

4 files changed

+80
-15
lines changed

4 files changed

+80
-15
lines changed

.github/workflows/test-build-number.yml

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,27 @@ jobs:
2121
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
2222
with:
2323
sparse-checkout: get-build-number
24-
- uses: ./get-build-number
2524
- uses: ./get-build-number
2625
id: get_build_number
2726
- name: Check build number generation
2827
run: |
29-
echo "Build number: ${BUILD_NUMBER}"
28+
echo "BUILD_NUMBER: ${BUILD_NUMBER}"
3029
[[ "${BUILD_NUMBER}" =~ ^[0-9]+$ ]]
3130
32-
test-build-number-reuse:
31+
- uses: ./get-build-number
32+
id: get_build_number_second_call
33+
- name: Check build number is stable across calls
34+
env:
35+
BUILD_NUMBER_FROM_FIRST_CALL: ${{ steps.get_build_number.outputs.BUILD_NUMBER }}
36+
BUILD_NUMBER_FROM_SECOND_CALL: ${{ steps.get_build_number_second_call.outputs.BUILD_NUMBER }}
37+
run: |
38+
if [[ "${BUILD_NUMBER_FROM_FIRST_CALL}" != "${BUILD_NUMBER_FROM_SECOND_CALL}" ]]; then
39+
echo -e "::error title=test-build-number-generation::Build number '${BUILD_NUMBER_FROM_FIRST_CALL}' from first call" \
40+
"does not match the build number from second call '${BUILD_NUMBER_FROM_SECOND_CALL}'."
41+
exit 1
42+
fi
43+
44+
test-build-number-reuse-from-cache:
3345
needs: test-build-number-generation
3446
runs-on: github-ubuntu-latest-s
3547
permissions:
@@ -42,14 +54,14 @@ jobs:
4254
- uses: ./get-build-number
4355
- name: Check build number was reused
4456
run: |
45-
echo "Build number: ${BUILD_NUMBER}"
57+
echo "BUILD_NUMBER: ${BUILD_NUMBER}"
4658
if [[ "${BUILD_NUMBER}" != "${{ needs.test-build-number-generation.outputs.BUILD_NUMBER }}" ]]; then
4759
echo -e "::error title=test-build-number-reuse::Build number '${BUILD_NUMBER}' does not match the previous job build number" \
4860
"'${{ needs.test-build-number-generation.outputs.BUILD_NUMBER }}' despite it is the same workflow run.\n" \
4961
"Prefer using the output from SonarSource/ci-github-actions/get-build-number instead of calling it from distinct jobs."
5062
fi
5163
52-
test-build-number-reuse-windows:
64+
test-build-number-reuse-from-cache-windows:
5365
needs: test-build-number-generation
5466
runs-on: github-windows-latest-s
5567
permissions:
@@ -63,9 +75,48 @@ jobs:
6375
- name: Check build number was reused
6476
shell: bash
6577
run: |
66-
echo "Build number: ${BUILD_NUMBER}"
78+
echo "BUILD_NUMBER: ${BUILD_NUMBER}"
6779
if [[ "${BUILD_NUMBER}" != "${{ needs.test-build-number-generation.outputs.BUILD_NUMBER }}" ]]; then
68-
echo -e "::error title=test-build-number-reuse::Build number '${BUILD_NUMBER}' does not match the previous job build number" \
69-
"'${{ needs.test-build-number-generation.outputs.BUILD_NUMBER }}' despite it is the same workflow run.\n" \
80+
echo -e "::error title=test-build-number-reuse-from-cache-windows::Build number '${BUILD_NUMBER}' does not match the previous" \
81+
"job build number '${{ needs.test-build-number-generation.outputs.BUILD_NUMBER }}' despite it is the same workflow run.\n" \
7082
"Prefer using the output from SonarSource/ci-github-actions/get-build-number instead of calling it from distinct jobs."
7183
fi
84+
85+
test-build-number-reuse-from-env:
86+
needs: test-build-number-generation
87+
runs-on: github-ubuntu-latest-s
88+
permissions:
89+
id-token: write
90+
contents: read
91+
steps:
92+
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
93+
with:
94+
sparse-checkout: get-build-number
95+
- uses: ./get-build-number
96+
id: get_build_number
97+
env:
98+
BUILD_NUMBER: ${{ needs.test-build-number-generation.outputs.BUILD_NUMBER }}
99+
- name: Check build number was reused
100+
env:
101+
BUILD_NUMBER_FROM_ENV: ${{ needs.test-build-number-generation.outputs.BUILD_NUMBER }}
102+
BUILD_NUMBER_RETURNED: ${{ steps.get_build_number.outputs.BUILD_NUMBER }}
103+
run: |
104+
echo "BUILD_NUMBER: ${BUILD_NUMBER}"
105+
if [[ "${BUILD_NUMBER_FROM_ENV}" != "${BUILD_NUMBER_RETURNED}" ]]; then
106+
echo -e "::error title=test-build-number-reuse-from-env::Build number returned by get-build-number '${BUILD_NUMBER_RETURNED}'" \
107+
"does not match the build number passed by env ${BUILD_NUMBER_FROM_ENV}."
108+
exit 1
109+
fi
110+
111+
test-build-number-reuse:
112+
if: always()
113+
needs:
114+
- test-build-number-generation
115+
- test-build-number-reuse-from-cache
116+
- test-build-number-reuse-from-cache-windows
117+
- test-build-number-reuse-from-env
118+
runs-on: github-ubuntu-latest-s
119+
steps:
120+
- uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
121+
with:
122+
jobs: ${{ toJSON(needs) }}

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ jobs:
5858
- uses: SonarSource/ci-github-actions/get-build-number@v1
5959
```
6060
61+
### Environment variables
62+
63+
If `BUILD_NUMBER` is present in the environment, it will be reused as the build number.
64+
6165
### Inputs
6266

6367
No inputs are required for this action.

get-build-number/action.yml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,19 @@ outputs:
99
runs:
1010
using: composite
1111
steps:
12+
# Reuse build number from environment if provided (e.g. from a parent workflow)
13+
- name: Save build number from environment to file
14+
id: from-env
15+
if: env.BUILD_NUMBER != ''
16+
shell: bash
17+
run: |
18+
echo "BUILD_NUMBER ${BUILD_NUMBER} provided from environment, skipping both increment and save to cache."
19+
echo "${BUILD_NUMBER}" > build_number.txt
20+
echo "skip=true" >> $GITHUB_OUTPUT
21+
1222
# Reuse current build number in case of rerun
1323
- name: Get cached build number
24+
if: steps.from-env.outputs.skip != 'true'
1425
uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
1526
id: current-build-number
1627
with:
@@ -21,16 +32,16 @@ runs:
2132
# Otherwise, increment the build number
2233
- name: Get secrets from Vault
2334
id: secrets
24-
if: steps.current-build-number.outputs.cache-hit != 'true'
35+
if: steps.from-env.outputs.skip != 'true' && steps.current-build-number.outputs.cache-hit != 'true'
2536
uses: SonarSource/vault-action-wrapper@320bd31b03e5dacaac6be51bbbb15adf7caccc32 # 3.1.0
2637
with:
2738
secrets: development/github/token/{REPO_OWNER_NAME_DASH}-build-number token | github_token;
2839
- name: Get new build number
29-
if: steps.current-build-number.outputs.cache-hit != 'true'
40+
if: steps.from-env.outputs.skip != 'true' && steps.current-build-number.outputs.cache-hit != 'true'
3041
shell: bash
3142
env:
32-
GITHUB_TOKEN: ${{ steps.current-build-number.outputs.cache-hit != 'true' && fromJSON(steps.secrets.outputs.vault).github_token
33-
|| '' }}
43+
GITHUB_TOKEN: ${{ steps.current-build-number.outputs.cache-hit != 'true' &&
44+
steps.secrets.outputs.vault && fromJSON(steps.secrets.outputs.vault).github_token || '' }}
3445
run: ${GITHUB_ACTION_PATH}/get_build_number.sh
3546

3647
- name: Export build number
@@ -41,9 +52,10 @@ runs:
4152
echo "BUILD_NUMBER: ${BUILD_NUMBER}"
4253
echo "BUILD_NUMBER=${BUILD_NUMBER}" >> "$GITHUB_ENV"
4354
echo "BUILD_NUMBER=${BUILD_NUMBER}" >> "$GITHUB_OUTPUT"
55+
4456
- name: Save build number to cache
4557
uses: actions/cache/save@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
46-
if: steps.current-build-number.outputs.cache-hit != 'true'
58+
if: steps.from-env.outputs.skip != 'true' && steps.current-build-number.outputs.cache-hit != 'true'
4759
with:
4860
path: build_number.txt
4961
key: build-number-${{ github.run_id }}

promote/action.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ runs:
2222
mkdir .actions/
2323
ln -s "${GITHUB_ACTION_PATH}/../get-build-number" .actions/get-build-number
2424
- uses: ./.actions/get-build-number
25-
if: env.BUILD_NUMBER == ''
26-
id: get_build_number
2725
- name: Vault
2826
id: secrets
2927
uses: SonarSource/vault-action-wrapper@320bd31b03e5dacaac6be51bbbb15adf7caccc32 # 3.1.0

0 commit comments

Comments
 (0)