@sebbo2002/semantic-release-docker 2.0.0-develop.2 → 2.0.1-develop.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +29 -13
- package/dist/index.js.map +1 -1
- package/dist/types.js +2 -1
- package/package.json +14 -15
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Context } from 'semantic-release';
|
|
2
|
-
import { MajorAndMinorPart, NormalizedPluginConfigTags, NormalizedPluginConfig, PluginConfig, PluginConfigTagKeys, TagTask, PublishResponse } from './types
|
|
2
|
+
import { MajorAndMinorPart, NormalizedPluginConfigTags, NormalizedPluginConfig, PluginConfig, PluginConfigTagKeys, TagTask, PublishResponse } from './types';
|
|
3
3
|
export { PluginConfig, NormalizedPluginConfigTags, NormalizedPluginConfig, PluginConfigTagKeys, MajorAndMinorPart, TagTask };
|
|
4
4
|
export declare function parseConfig(config: PluginConfig): NormalizedPluginConfig;
|
|
5
5
|
export declare function getBaseImage(input: string): string;
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -7,8 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
9
|
});
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.publish = exports.pushImage = exports.tagImage = exports.docker = exports.getUrlFromImage = exports.getTagTasks = exports.getMajorAndMinorPart = exports.isPreRelease = exports.getBaseImage = exports.parseConfig = void 0;
|
|
16
|
+
const execa_1 = __importDefault(require("execa"));
|
|
17
|
+
function parseConfig(config) {
|
|
12
18
|
const result = {
|
|
13
19
|
images: [],
|
|
14
20
|
tag: {
|
|
@@ -39,7 +45,8 @@ export function parseConfig(config) {
|
|
|
39
45
|
});
|
|
40
46
|
return result;
|
|
41
47
|
}
|
|
42
|
-
|
|
48
|
+
exports.parseConfig = parseConfig;
|
|
49
|
+
function getBaseImage(input) {
|
|
43
50
|
let p = input.split('@')[0].split(':');
|
|
44
51
|
// it's a ":port"
|
|
45
52
|
if (p[1] && p[1].includes('/')) {
|
|
@@ -47,10 +54,12 @@ export function getBaseImage(input) {
|
|
|
47
54
|
}
|
|
48
55
|
return p[0];
|
|
49
56
|
}
|
|
50
|
-
|
|
57
|
+
exports.getBaseImage = getBaseImage;
|
|
58
|
+
function isPreRelease(context) {
|
|
51
59
|
return Boolean(context.nextRelease && context.nextRelease.version.includes('-'));
|
|
52
60
|
}
|
|
53
|
-
|
|
61
|
+
exports.isPreRelease = isPreRelease;
|
|
62
|
+
function getMajorAndMinorPart(version) {
|
|
54
63
|
if (!version) {
|
|
55
64
|
return {
|
|
56
65
|
major: null,
|
|
@@ -63,7 +72,8 @@ export function getMajorAndMinorPart(version) {
|
|
|
63
72
|
minor: parts[1]
|
|
64
73
|
};
|
|
65
74
|
}
|
|
66
|
-
|
|
75
|
+
exports.getMajorAndMinorPart = getMajorAndMinorPart;
|
|
76
|
+
function getTagTasks(config, context) {
|
|
67
77
|
const result = [];
|
|
68
78
|
if (!context.nextRelease) {
|
|
69
79
|
return [];
|
|
@@ -114,7 +124,8 @@ export function getTagTasks(config, context) {
|
|
|
114
124
|
});
|
|
115
125
|
return result;
|
|
116
126
|
}
|
|
117
|
-
|
|
127
|
+
exports.getTagTasks = getTagTasks;
|
|
128
|
+
function getUrlFromImage(image) {
|
|
118
129
|
const parts = getBaseImage(image).split('/');
|
|
119
130
|
if (parts[0] === 'ghcr.io' && parts.length === 3) {
|
|
120
131
|
return `https://github.com/${parts[1]}/${parts[2]}/pkgs/container/${parts[2]}`;
|
|
@@ -130,10 +141,11 @@ export function getUrlFromImage(image) {
|
|
|
130
141
|
return `https://hub.docker.com/_/${parts[0]}/tags`;
|
|
131
142
|
}
|
|
132
143
|
}
|
|
133
|
-
|
|
144
|
+
exports.getUrlFromImage = getUrlFromImage;
|
|
145
|
+
function docker(command) {
|
|
134
146
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
147
|
try {
|
|
136
|
-
yield
|
|
148
|
+
yield (0, execa_1.default)('docker', command);
|
|
137
149
|
}
|
|
138
150
|
catch (error) {
|
|
139
151
|
if (typeof error === 'object' && error !== null && 'command' in error && 'message' in error) {
|
|
@@ -147,17 +159,20 @@ export function docker(command) {
|
|
|
147
159
|
}
|
|
148
160
|
});
|
|
149
161
|
}
|
|
150
|
-
|
|
162
|
+
exports.docker = docker;
|
|
163
|
+
function tagImage(input, output) {
|
|
151
164
|
return __awaiter(this, void 0, void 0, function* () {
|
|
152
165
|
yield docker(['tag', input, output]);
|
|
153
166
|
});
|
|
154
167
|
}
|
|
155
|
-
|
|
168
|
+
exports.tagImage = tagImage;
|
|
169
|
+
function pushImage(image) {
|
|
156
170
|
return __awaiter(this, void 0, void 0, function* () {
|
|
157
171
|
yield docker(['push', image]);
|
|
158
172
|
});
|
|
159
173
|
}
|
|
160
|
-
|
|
174
|
+
exports.pushImage = pushImage;
|
|
175
|
+
function publish(pluginConfig, context) {
|
|
161
176
|
var _a;
|
|
162
177
|
return __awaiter(this, void 0, void 0, function* () {
|
|
163
178
|
if (!context.nextRelease) {
|
|
@@ -184,7 +199,8 @@ export function publish(pluginConfig, context) {
|
|
|
184
199
|
};
|
|
185
200
|
});
|
|
186
201
|
}
|
|
187
|
-
|
|
202
|
+
exports.publish = publish;
|
|
203
|
+
exports.default = {
|
|
188
204
|
publish
|
|
189
205
|
};
|
|
190
206
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"url": "https://github.com/sebbo2002/semantic-release-docker/issues"
|
|
5
5
|
},
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"execa": "^
|
|
7
|
+
"execa": "^5.1.1"
|
|
8
8
|
},
|
|
9
9
|
"description": "Plugin for semantic-release that tags a previously built Docker image and pushes it to one or more Docker registries",
|
|
10
10
|
"devDependencies": {
|
|
@@ -14,31 +14,31 @@
|
|
|
14
14
|
"@semantic-release/exec": "^6.0.3",
|
|
15
15
|
"@semantic-release/git": "^10.0.1",
|
|
16
16
|
"@types/mocha": "^9.1.1",
|
|
17
|
-
"@types/node": "^18.
|
|
18
|
-
"@types/semantic-release": "^17.2.
|
|
19
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
20
|
-
"@typescript-eslint/parser": "^5.
|
|
21
|
-
"
|
|
22
|
-
"eslint
|
|
23
|
-
"
|
|
17
|
+
"@types/node": "^18.6.3",
|
|
18
|
+
"@types/semantic-release": "^17.2.4",
|
|
19
|
+
"@typescript-eslint/eslint-plugin": "^5.32.0",
|
|
20
|
+
"@typescript-eslint/parser": "^5.32.0",
|
|
21
|
+
"c8": "^7.12.0",
|
|
22
|
+
"eslint": "^8.21.0",
|
|
23
|
+
"eslint-plugin-jsonc": "^2.3.1",
|
|
24
24
|
"license-checker": "^25.0.1",
|
|
25
25
|
"mocha": "^10.0.0",
|
|
26
26
|
"mochawesome": "^7.1.3",
|
|
27
|
-
"nyc": "^15.1.0",
|
|
28
27
|
"semantic-release-license": "^1.0.3",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
28
|
+
"source-map-support": "^0.5.21",
|
|
29
|
+
"ts-node": "^10.8.2",
|
|
30
|
+
"typedoc": "^0.23.10",
|
|
31
31
|
"typescript": "^4.7.4"
|
|
32
32
|
},
|
|
33
33
|
"engines": {
|
|
34
34
|
"node": "^12.20.0 || >=14.13.1"
|
|
35
35
|
},
|
|
36
|
-
"exports": "./dist/index.js",
|
|
37
36
|
"files": [
|
|
38
37
|
"/dist"
|
|
39
38
|
],
|
|
40
39
|
"homepage": "https://github.com/sebbo2002/semantic-release-docker#readme",
|
|
41
40
|
"license": "MIT",
|
|
41
|
+
"main": "dist/index.js",
|
|
42
42
|
"name": "@sebbo2002/semantic-release-docker",
|
|
43
43
|
"repository": {
|
|
44
44
|
"type": "git",
|
|
@@ -47,11 +47,10 @@
|
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "tsc",
|
|
49
49
|
"build-all": "./.github/workflows/build.sh",
|
|
50
|
-
"coverage": "
|
|
50
|
+
"coverage": "c8 mocha",
|
|
51
51
|
"license-check": "license-checker --production --summary",
|
|
52
52
|
"lint": "eslint . --ext .ts,.json",
|
|
53
53
|
"test": "docker pull alpine:latest && mocha"
|
|
54
54
|
},
|
|
55
|
-
"
|
|
56
|
-
"version": "2.0.0-develop.2"
|
|
55
|
+
"version": "2.0.1-develop.2"
|
|
57
56
|
}
|