1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
name: Tag a Build
on:
# schedule event triggers always run on the default branch
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
schedule:
# run "nightly" builds on default branch every mon/wed/fri
- cron: "21 2 * * 2,4,6" # 2:21am UTC tues/thurs/sat == 7:21pm PDT mon/wed/fri -- see https://crontab.guru/#21_01_*_*_2,4,6
workflow_dispatch:
inputs:
channel:
description: "Channel to configure the build"
required: true
type: choice
default: "Test"
options:
- "Test"
- "Develop"
- "Project"
- "Release"
project:
description: "Project Name (used for channel name in project builds, and tag name for all builds)"
default: "hippo"
tag_override:
description: "Override the tag name (optional). If the tag already exists, a numeric suffix is appended."
required: false
jobs:
tag-release:
runs-on: ubuntu-latest
steps:
- name: Setup Env Vars
run: |
CHANNEL="${{ inputs.channel }}"
echo VIEWER_CHANNEL="Second_Life_${CHANNEL:-Develop}" >> ${GITHUB_ENV}
NIGHTLY_DATE=$(date --rfc-3339=date)
echo NIGHTLY_DATE=${NIGHTLY_DATE} >> ${GITHUB_ENV}
echo TAG_ID="$(echo ${{ github.sha }} | cut -c1-8)-${{ inputs.project || '${NIGHTLY_DATE}' }}" >> ${GITHUB_ENV}
- name: Create Tag
uses: actions/github-script@v8
with:
# use a real access token instead of GITHUB_TOKEN default.
# required so that the results of this tag creation can trigger the build workflow
# https://stackoverflow.com/a/71372524
# https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow
# this token will need to be renewed anually in January
github-token: ${{ secrets.LL_TAG_RELEASE_TOKEN }}
script: |
const override = `${{ inputs.tag_override }}`.trim();
const baseTag = override || `${{ env.VIEWER_CHANNEL }}#${{ env.TAG_ID }}`;
// Try the base tag first, then append -2, -3, etc. if it already exists
let tag = baseTag;
for (let attempt = 1; ; attempt++) {
try {
await github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: `refs/tags/${tag}`,
sha: context.sha
});
core.info(`Created tag: ${tag}`);
break;
} catch (e) {
if (e.status === 422 && attempt < 10) {
core.info(`Tag '${tag}' already exists, trying next suffix...`);
tag = `${baseTag}-${attempt + 1}`;
} else {
throw e;
}
}
}
|