13
13
# GitHub Secret variable Notes
14
14
# ------------------------------- ---------------------------------------
15
15
# SIMP_CORE_REF_FOR_BUILDING_RPMS simp-core ref (tag) to use to build
16
- # RPMs with `rake pkg:single`
16
+ # RPMs with `rake pkg:single` against
17
+ # `build/rpms/dependencies.yaml`
17
18
# SIMP_DEV_GPG_SIGNING_KEY GPG signing key's secret key
18
19
# SIMP_DEV_GPG_SIGNING_KEY_ID User ID (name) of signing key
19
20
# SIMP_DEV_GPG_SIGNING_KEY_PASSPHRASE Passphrase to use GPG signing key
26
27
# * If triggered by another workflow, it will be necessary to provide a GitHub
27
28
# access token via the the `target_repo_token` parameter
28
29
#
30
+ #
29
31
---
30
32
name : ' RELENG: Build + attach RPMs to GitHub Release'
31
33
61
63
target_repo_token :
62
64
description : " API token for uploading to target repo"
63
65
required : false
66
+ path_to_build :
67
+ # Example: simp-core builds pupmod from . and simp* from src/assets/simp
68
+ description : " Subpath to alternative RPM project"
69
+ required : false
64
70
dry_run :
65
71
description : " Dry run (Test-build RPMs)"
66
72
required : false
67
73
default : ' no'
74
+ verbose :
75
+ description : ' Verbose RPM builds when "yes"'
76
+ required : false
77
+ default : ' no'
68
78
69
79
env :
70
80
TARGET_REPO : ${{ (github.event.inputs.target_repo != null && format('{0}/{1}', github.repository_owner, github.event.inputs.target_repo)) || github.repository }}
71
81
RELEASE_TAG : ${{ github.event.inputs.release_tag }}
72
82
73
83
jobs :
74
84
create-and-attach-rpms-to-github-release :
75
- name : Build and attach RPMs to Release
85
+ name : >
86
+ Build and attach RPMs to Release:
87
+ ${{ (github.event.inputs.target_repo != null && format('{0}/{1}', github.repository_owner, github.event.inputs.target_repo)) || github.repository }}
88
+ ${{ github.event.inputs.release_tag }}
89
+ (build os: ${{ github.event.inputs.build_container_os }})
76
90
runs-on : ubuntu-20.04
77
91
steps :
78
92
- name : " Validate inputs"
93
+ id : validate-inputs
79
94
run : |
80
95
if ! [[ "$TARGET_REPO" =~ ^[a-z0-9][a-z0-9-]+/[a-z0-9][a-z0-9_-]+$ ]]; then
81
96
printf '::error ::Target repository name has invalid format: %s\n' "$TARGET_REPO"
82
97
exit 88
83
98
fi
84
99
85
- if ! [[ "$RELEASE_TAG" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+(-(rc|alpha|beta|pre)?([0-9]+)?)?$ ]]; then
86
- printf '::error ::Release Tag format is not SemVer or SemVer-ish RPM: %s\n' "$RELEASE_TAG"
100
+ if [[ "$RELEASE_TAG" =~ ^(simp-|v)?([0-9]+\.[0-9]+\.[0-9]+)(-(rc|RC|[Aa]lpha|[Bb]eta|pre|post)?([0-9]+)?)?$ ]]; then
101
+ if [ -n "${BASH_REMATCH[5]}" ]; then
102
+ echo "::set-output name=prebuild_number::${BASH_REMATCH[5]#-}"
103
+ fi
104
+ if [ -n "${BASH_REMATCH[3]}" ]; then
105
+ echo "::set-output name=prebuild_suffix::${BASH_REMATCH[3]#-}"
106
+ fi
107
+ if [ -n "${BASH_REMATCH[2]}" ]; then
108
+ echo "::set-output name=build_semver::${BASH_REMATCH[2]}"
109
+ fi
110
+ else
111
+ printf '::error ::Release Tag format is not SemVer, X.Y.Z-R, X.Y.Z-<prerelease>: "%s"\n' "$RELEASE_TAG"
87
112
exit 88
88
113
fi
89
114
90
115
- name : >
91
116
Query info for ${{ env.TARGET_REPO }}
92
- release ${{ github.event.inputs.release_tag }}
117
+ release ${{ github.event.inputs.release_tag }} ${{ steps.validate-inputs.outputs.prebuild_suffix }}
118
+ build os ${{ github.event.inputs.build_container_os }}
93
119
(autocreate_release = '${{ github.event.inputs.autocreate_release }}')
94
120
id: release-api
95
121
env:
96
122
AUTOCREATE_RELEASE: ${{ github.event.inputs.autocreate_release }}
123
+ PREBUILD_TAG: ${{ steps.validate-inputs.outputs.prebuild_suffix }}
97
124
uses: actions/github-script@v4
98
125
with:
99
126
github-token: ${{ github.event.inputs.target_repo_token || secrets.GITHUB_TOKEN }}
@@ -103,7 +130,8 @@ jobs:
103
130
const autocreate_release = (process.env.AUTOCREATE_RELEASE == 'yes')
104
131
const owner_data = { owner: owner, repo: repo }
105
132
const release_data = Object.assign( {tag: tag}, owner_data )
106
- const create_release_data = Object.assign( {tag_name: tag}, owner_data )
133
+ const prerelease = process.env.PREBUILD_TAG ? true : false
134
+ const create_release_data = Object.assign( {tag_name: tag, prerelease: prerelease}, owner_data )
107
135
const tag_data = Object.assign( {ref: `tags/${tag}`}, owner_data )
108
136
109
137
function id_from_release(data) {
@@ -168,7 +196,35 @@ jobs:
168
196
clean : true
169
197
fetch-depth : 0
170
198
171
- - name : ' Build & Sign RPMs for ${{ github.event.inputs.release_tag }} Release'
199
+ - name : ' Customize RPM Release tag via build/rpm_metadata/release (pre-release only)'
200
+ if : steps.validate-inputs.outputs.prebuild_suffix
201
+ env :
202
+ BUILD_SEMVER : ${{ steps.validate-inputs.outputs.build_semver }}
203
+ PREBUILD_TAG : ${{ steps.validate-inputs.outputs.prebuild_suffix }}
204
+ PREBUILD_NUMBER : ${{ steps.validate-inputs.outputs.prebuild_number }}
205
+ # Note: To accomodate the capabilities of EL7's version of RPM, the
206
+ # release number is formatted according to the Fedora Packaging
207
+ # Guidelines' "Traditional versioning" conventions:
208
+ #
209
+ # - https://fedoraproject.org/en-US/packaging-guidelines/Versioning/
210
+ # - https://fedoraproject.org/wiki/Package_Versioning_Examples
211
+ #
212
+ run : |
213
+ mkdir -p build/rpm_metadata
214
+ # Special case for simp-doc's unique data format in /release
215
+ if [[ "$TARGET_REPO" =~ ^simp\/simp-doc$ ]]; then
216
+ echo "version: $BUILD_SEMVER" > build/rpm_metadata/release
217
+ echo "release: 0.${PREBUILD_NUMBER:-$GITHUB_RUN_NUMBER}.${PREBUILD_TAG}" >> build/rpm_metadata/release
218
+ printf '::warning ::Added file build/rpm_metadata/release with content "%s"\n' "$(cat build/rpm_metadata/release)"
219
+ else
220
+ echo "0.${PREBUILD_NUMBER:-$GITHUB_RUN_NUMBER}.${PREBUILD_TAG}" > build/rpm_metadata/release
221
+ printf '::warning ::Added file build/rpm_metadata/release with content "%s"\n' "$(cat build/rpm_metadata/release)"
222
+ fi
223
+
224
+ - name : >
225
+ Build & Sign RPMs for
226
+ ${{ github.event.inputs.release_tag }}
227
+ Release (${{ github.event.inputs.build_container_os }})
172
228
uses: simp/github-action-build-and-sign-pkg-single-rpm@v2
173
229
id: build-and-sign-rpm
174
230
with:
@@ -177,6 +233,8 @@ jobs:
177
233
gpg_signing_key_passphrase: ${{ secrets.SIMP_DEV_GPG_SIGNING_KEY_PASSPHRASE }}
178
234
simp_core_ref_for_building_rpms: ${{ secrets.SIMP_CORE_REF_FOR_BUILDING_RPMS }}
179
235
simp_builder_docker_image: 'docker.io/simpproject/simp_build_${{ github.event.inputs.build_container_os }}:latest'
236
+ path_to_build: "${{ (github.event.inputs.path_to_build != null && format('{0}/{1}', github.workspace, github.event.inputs.path_to_build)) || github.workspace }}"
237
+ verbose: ${{ github.event.inputs.verbose }}
180
238
181
239
- name : " Wipe all previous assets from GitHub Release (when clean == 'yes')"
182
240
if : ${{ github.event.inputs.clean == 'yes' && github.event.inputs.dry_run != 'yes' }}
@@ -197,7 +255,7 @@ jobs:
197
255
await github.repos.deleteReleaseAsset({ owner, repo, asset_id })
198
256
})
199
257
200
- - name : ' Upload RPM file(s) to GitHub Release (github-script) '
258
+ - name : " Upload RPM file(s) to GitHub Release (dry_run != 'yes') "
201
259
if : ${{ github.event.inputs.dry_run != 'yes' }}
202
260
uses : actions/github-script@v4
203
261
env :
0 commit comments