-
Notifications
You must be signed in to change notification settings - Fork 2
95 lines (79 loc) · 3.09 KB
/
update-release-tag.yaml
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Automatically moves the major tag vX when vX.Y.Z is created
name: Update release tag
on:
push:
tags:
- v*
jobs:
update-release-tag:
runs-on: ubuntu-latest
steps:
- name: Get repo HEAD ref
id: new-tag
uses: actions/github-script@v7
with:
script: |
const parsed = context.ref.match(/^refs\/tags\/(?<minor>(?<major>v\d+)\.\d+)\.\d+$/)
if (!parsed) {
console.log(`Ignoring tag ${context.ref} - not a semver release tag.`);
return;
}
const response = await github.rest.git.getRef({
ref: `heads/${context.payload.repository.default_branch}`,
owner: context.repo.owner,
repo: context.repo.repo
});
const repoHeadSha = response.data.object.sha;
if (repoHeadSha !== context.sha) {
console.log(`Ignoring tag at ${context.sha}, because repo HEAD is at ${repoHeadSha}.`);
return;
}
console.log(`Parsed major: ${parsed.groups.major}`);
core.setOutput('major', parsed.groups.major);
console.log(`Parsed minor: ${parsed.groups.minor}`);
core.setOutput('minor', parsed.groups.minor);
- name: Move major tag ${{ steps.new-tag.outputs.major }}
if: ${{ steps.new-tag.outputs.major }}
uses: actions/github-script@v7
with:
script: |
try {
await github.rest.git.deleteRef({
ref: `tags/${{ steps.new-tag.outputs.major }}`,
owner: context.repo.owner,
repo: context.repo.repo
});
console.log(`Deleted tags/${{ steps.new-tag.outputs.major }}.`);
}
catch (e) {
console.log(`IGNORED ERROR: failed to delete tags/${{ steps.new-tag.outputs.major }} - assuming it never existed: ${e}`);
}
await github.rest.git.createRef({
ref: `refs/tags/${{ steps.new-tag.outputs.major }}`,
sha: context.sha,
owner: context.repo.owner,
repo: context.repo.repo
});
console.log(`Created tags/${{ steps.new-tag.outputs.major }} at ${context.sha}.`);
- name: Move minor tag ${{ steps.new-tag.outputs.minor }}
if: ${{ steps.new-tag.outputs.minor }}
uses: actions/github-script@v7
with:
script: |
try {
await github.rest.git.deleteRef({
ref: `tags/${{ steps.new-tag.outputs.minor }}`,
owner: context.repo.owner,
repo: context.repo.repo
});
}
catch (e) {
console.log(`IGNORED ERROR: failed to delete tags/${{ steps.new-tag.outputs.minor }} - assuming it never existed: ${e}`);
}
await github.rest.git.createRef({
ref: `refs/tags/${{ steps.new-tag.outputs.minor }}`,
sha: context.sha,
owner: context.repo.owner,
repo: context.repo.repo
});
console.log(`Created tags/${{ steps.new-tag.outputs.minor }} at ${context.sha}.`);