-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
87 lines (67 loc) · 2.53 KB
/
index.js
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
const core = require('@actions/core');
const github = require('@actions/github');
const fs = require('fs-extra');
const semver = require('semver');
const dedent = require('dedent');
const main = async () => {
try {
const {draft: isDraft, prerelease: isPrerelease, tag_name: gitTag} = github.context.payload.release;
const gitTagWithoutV = gitTag.slice(1);
const packageJson = await fs.readJson('./package.json');
const packageJsonVersion = packageJson?.version;
if (isDraft) {
core.setFailed('Release is a draft. Skip publish.');
return;
}
if (!packageJsonVersion) {
core.setFailed('Package.json is missing version.');
return;
}
if (!gitTag.startsWith('v')) {
core.setFailed('Release git tag does not start with `v`, ie. `v1.2.3`.');
return;
}
if (gitTagWithoutV !== packageJsonVersion) {
core.setFailed(
dedent(`
Release git tag does not match package.json version.
Release git tag: ${gitTagWithoutV}
Package.json version: ${packageJsonVersion}
`)
);
return;
}
if (!semver.valid(gitTagWithoutV)) {
core.setFailed('Release git tag and package.json versions are not valid semver.');
return;
}
const semverPrerelease = semver.prerelease(gitTagWithoutV);
// eslint-disable-next-line unicorn/no-null
const hasSemverPrerelease = semverPrerelease !== null;
let versionTag = '';
if (isPrerelease && !hasSemverPrerelease) {
core.setFailed(
'Release in GitHub is marked as `pre-release`, but release git tag and package.json versions do not follow pre-release format, ie. `1.2.3-beta.1'
);
return;
}
if (!isPrerelease && hasSemverPrerelease) {
core.setFailed(
'Release git tag and package.json versions follow pre-release format, ie. `1.2.3-beta.1, but release in GitHub is not marked as `pre-release`.'
);
return;
}
if (isPrerelease && hasSemverPrerelease) {
versionTag += semverPrerelease[0];
}
core.setOutput('version', gitTagWithoutV);
core.setOutput('tag', versionTag);
} catch (error) {
core.setFailed(error.message);
}
};
if (require.main === module) {
main();
} else {
module.exports = main;
}