Skip to content

Commit c33d7d6

Browse files
committed
Adding helpers for semver usage
Signed-off-by: Mehdi Benadel <mehdi.benadel@gmail.com>
1 parent 8e5442c commit c33d7d6

File tree

5 files changed

+131
-16
lines changed

5 files changed

+131
-16
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
GITHUB_ACTION=__crazy-max_ghaction-dump-context
2+
GITHUB_ACTIONS=true
3+
GITHUB_ACTION_PATH=/home/runner/work/_actions/crazy-max/ghaction-dump-context/v1
4+
GITHUB_ACTION_REF=
5+
GITHUB_ACTION_REPOSITORY=
6+
GITHUB_ACTOR=crazy-max
7+
GITHUB_API_URL=https://api.github.com
8+
GITHUB_BASE_REF=
9+
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_7703d3cb-84db-438f-9f97-46e159388a55
10+
GITHUB_EVENT_NAME=push
11+
#GITHUB_EVENT_PATH=./__tests__/fixtures/event_tag_v9.5.7-alpha.2+fork.3.1.8.json
12+
GITHUB_GRAPHQL_URL=https://api.github.com/graphql
13+
GITHUB_HEAD_REF=
14+
GITHUB_JOB=test
15+
GITHUB_PATH=/home/runner/work/_temp/_runner_file_commands/add_path_7703d3cb-84db-438f-9f97-46e159388a55
16+
GITHUB_REF=refs/tags/v9.5.7-alpha.2+fork.3.1.8
17+
GITHUB_REF_NAME=v9.5.7-alpha.2+fork.3.1.8
18+
GITHUB_REF_PROTECTED=false
19+
GITHUB_REF_TYPE=tag
20+
GITHUB_REPOSITORY=docker/test-docker-action
21+
GITHUB_REPOSITORY_OWNER=docker
22+
GITHUB_RETENTION_DAYS=90
23+
GITHUB_RUN_ATTEMPT=1
24+
GITHUB_RUN_ID=2188815933
25+
GITHUB_RUN_NUMBER=21
26+
GITHUB_SERVER_URL=https://github.com
27+
GITHUB_SHA=860c1904a1ce19322e91ac35af1ab07466440c37
28+
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_7703d3cb-84db-438f-9f97-46e159388a55
29+
GITHUB_WORKFLOW=metadata
30+
GITHUB_WORKSPACE=/home/runner/work/test-docker-action/test-docker-action

__tests__/meta.test.ts

Lines changed: 67 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,13 +1201,15 @@ describe('tag', () => {
12011201
]
12021202
} as Inputs,
12031203
{
1204-
main: '2.0.8-beta.67',
1205-
partial: [],
1204+
main: '2.0',
1205+
partial: ["2"],
12061206
latest: false
12071207
} as Version,
12081208
[
1209-
'org/app:2.0.8-beta.67',
1210-
'ghcr.io/user/app:2.0.8-beta.67'
1209+
'org/app:2.0',
1210+
'org/app:2',
1211+
'ghcr.io/user/app:2.0',
1212+
'ghcr.io/user/app:2'
12111213
],
12121214
[
12131215
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
@@ -1217,7 +1219,7 @@ describe('tag', () => {
12171219
"org.opencontainers.image.source=https://github.com/octocat/Hello-World",
12181220
"org.opencontainers.image.title=Hello-World",
12191221
"org.opencontainers.image.url=https://github.com/octocat/Hello-World",
1220-
"org.opencontainers.image.version=2.0.8-beta.67"
1222+
"org.opencontainers.image.version=2.0"
12211223
],
12221224
undefined
12231225
],
@@ -1292,6 +1294,66 @@ describe('tag', () => {
12921294
],
12931295
undefined
12941296
],
1297+
[
1298+
'tag15.1',
1299+
'event_tag_v9.5.7-alpha.2+fork.3.1.8.env',
1300+
{
1301+
images: ['org/app', 'ghcr.io/user/app'],
1302+
tags: [
1303+
`type=semver,pattern={{> completeVersion}}`
1304+
]
1305+
} as Inputs,
1306+
{
1307+
main: '9.5.7-alpha.2+fork.3.1.8',
1308+
partial: [],
1309+
latest: false
1310+
} as Version,
1311+
[
1312+
'org/app:9.5.7-alpha.2+fork.3.1.8',
1313+
'ghcr.io/user/app:9.5.7-alpha.2+fork.3.1.8'
1314+
],
1315+
[
1316+
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
1317+
"org.opencontainers.image.description=This your first repo!",
1318+
"org.opencontainers.image.licenses=MIT",
1319+
"org.opencontainers.image.revision=860c1904a1ce19322e91ac35af1ab07466440c37",
1320+
"org.opencontainers.image.source=https://github.com/octocat/Hello-World",
1321+
"org.opencontainers.image.title=Hello-World",
1322+
"org.opencontainers.image.url=https://github.com/octocat/Hello-World",
1323+
"org.opencontainers.image.version=9.5.7-alpha.2+fork.3.1.8",
1324+
],
1325+
undefined
1326+
],
1327+
[
1328+
'tag15.1',
1329+
'event_tag_v9.5.7-alpha.2+fork.3.1.8.env',
1330+
{
1331+
images: ['org/app', 'ghcr.io/user/app'],
1332+
tags: [
1333+
`type=semver,pattern={{> buildMetadata}}{{> prereleaseMetadata}}.{{major}}.{{minor}}.{{patch}}`
1334+
]
1335+
} as Inputs,
1336+
{
1337+
main: '+fork.3.1.8-alpha.2.9.5.7',
1338+
partial: [],
1339+
latest: false
1340+
} as Version,
1341+
[
1342+
'org/app:+fork.3.1.8-alpha.2.9.5.7',
1343+
'ghcr.io/user/app:+fork.3.1.8-alpha.2.9.5.7'
1344+
],
1345+
[
1346+
"org.opencontainers.image.created=2020-01-10T00:30:00.000Z",
1347+
"org.opencontainers.image.description=This your first repo!",
1348+
"org.opencontainers.image.licenses=MIT",
1349+
"org.opencontainers.image.revision=860c1904a1ce19322e91ac35af1ab07466440c37",
1350+
"org.opencontainers.image.source=https://github.com/octocat/Hello-World",
1351+
"org.opencontainers.image.title=Hello-World",
1352+
"org.opencontainers.image.url=https://github.com/octocat/Hello-World",
1353+
"org.opencontainers.image.version=+fork.3.1.8-alpha.2.9.5.7",
1354+
],
1355+
undefined
1356+
],
12951357
[
12961358
'tag16',
12971359
'event_tag_v1.1.1.env',

dist/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/meta.ts

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -156,17 +156,39 @@ export class Meta {
156156
const sver = semver.parse(vraw, {
157157
loose: true
158158
});
159-
if (semver.prerelease(vraw)) {
160-
if (Meta.isRawStatement(tag.attrs['pattern'])) {
161-
vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag);
162-
} else {
163-
vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag);
164-
}
165-
} else {
166-
vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag);
159+
160+
const hbEnv = handlebars.create();
161+
162+
hbEnv.registerPartial('prereleaseMetadata', (data: semver.SemVer) => {
163+
return data.prerelease.length > 0 ? '-' + data.prerelease.join('.') : '';
164+
});
165+
166+
hbEnv.registerPartial('buildMetadata', (data: semver.SemVer) => {
167+
return data.build.length > 0 ? '+' + data.build.join('.') : '';
168+
});
169+
170+
hbEnv.registerPartial('completeVersion', (data: semver.SemVer) => {
171+
return [data.major, data.minor, data.patch].join('.') + (data.prerelease.length > 0 ? '-' + data.prerelease.join('.') : '') + (data.build.length > 0 ? '+' + data.build.join('.') : '');
172+
});
173+
174+
console.log("tag.attrs['pattern'] ", tag.attrs['pattern'], hbEnv.compile(tag.attrs['pattern'])(sver));
175+
console.log('version ', sver?.version);
176+
console.log('major ', sver?.major);
177+
console.log('minor ', sver?.minor);
178+
console.log('patch ', sver?.patch);
179+
console.log('prerelease ', sver?.prerelease);
180+
console.log('build ', sver?.build);
181+
console.log('prereleaseMetadata ', hbEnv.compile('{{> prereleaseMetadata}}')(sver));
182+
console.log('buildMetadata ', hbEnv.compile('{{> buildMetadata}}')(sver));
183+
console.log('completeVersion ', hbEnv.compile('{{> completeVersion}}')(sver));
184+
if (!semver.prerelease(vraw)) {
167185
latest = true;
168186
}
169187

188+
const hbTemplate = hbEnv.compile(tag.attrs['pattern']);
189+
190+
vraw = this.setValue(hbTemplate(sver), tag);
191+
170192
return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true');
171193
}
172194

@@ -333,6 +355,7 @@ export class Meta {
333355
public static isRawStatement(pattern: string): boolean {
334356
try {
335357
const hp = handlebars.parseWithoutProcessing(pattern);
358+
console.log('isRawStatement ', JSON.stringify(hp));
336359
if (hp.body.length == 1 && hp.body[0].type == 'MustacheStatement') {
337360
return hp.body[0]['path']['parts'].length == 1 && hp.body[0]['path']['parts'][0] == 'raw';
338361
}
@@ -591,6 +614,6 @@ export class Meta {
591614
}
592615

593616
private static sanitizeTag(tag: string): string {
594-
return tag.replace(/[^a-zA-Z0-9._-]+/g, '-');
617+
return tag.replace(/[^a-zA-Z0-9+._-]+/g, '-');
595618
}
596619
}

0 commit comments

Comments
 (0)