@sebbo2002/semantic-release-docker 3.0.0-develop.1 → 3.0.0-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 CHANGED
@@ -1,19 +1,55 @@
1
1
  import { Context } from 'semantic-release';
2
- import { MajorAndMinorPart, NormalizedPluginConfigTags, NormalizedPluginConfig, PluginConfig, PluginConfigTagKeys, TagTask, PublishResponse } from './types';
3
- export { PluginConfig, NormalizedPluginConfigTags, NormalizedPluginConfig, PluginConfigTagKeys, MajorAndMinorPart, TagTask };
4
- export declare function parseConfig(config: PluginConfig): NormalizedPluginConfig;
5
- export declare function getBaseImage(input: string): string;
6
- export declare function isPreRelease(context: Context): boolean;
7
- export declare function getMajorAndMinorPart(version: string | undefined): MajorAndMinorPart;
8
- export declare function getTagTasks(config: NormalizedPluginConfig, context: Context): TagTask[];
9
- export declare function getUrlFromImage(image: string): string | undefined;
10
- export declare function exec(file: string, args: string[]): Promise<void>;
11
- export declare function isRegCtlAvailable(): Promise<boolean>;
12
- export declare function tagImage(input: string, output: string): Promise<void>;
13
- export declare function pushImage(image: string): Promise<void>;
14
- export declare function copyImage(input: string, output: string): Promise<void>;
15
- export declare function publish(pluginConfig: PluginConfig, context: Context): Promise<boolean | PublishResponse>;
2
+
3
+ interface PluginConfig {
4
+ images: string | string[];
5
+ tag?: {
6
+ latest?: boolean;
7
+ major?: boolean;
8
+ minor?: boolean;
9
+ version?: boolean;
10
+ channel?: boolean;
11
+ };
12
+ }
13
+ interface NormalizedPluginConfigTags {
14
+ latest: boolean;
15
+ major: boolean;
16
+ minor: boolean;
17
+ version: boolean;
18
+ channel: boolean;
19
+ }
20
+ type PluginConfigTagKeys = keyof NormalizedPluginConfigTags;
21
+ interface NormalizedPluginConfig {
22
+ images: string[];
23
+ tag: NormalizedPluginConfigTags;
24
+ }
25
+ interface MajorAndMinorPart {
26
+ major: string | null;
27
+ minor: string | null;
28
+ }
29
+ interface TagTask {
30
+ input: string;
31
+ output: string;
32
+ }
33
+ interface PublishResponse {
34
+ name: string;
35
+ url?: string;
36
+ channel?: string;
37
+ }
38
+
39
+ declare function parseConfig(config: PluginConfig): NormalizedPluginConfig;
40
+ declare function getBaseImage(input: string): string;
41
+ declare function isPreRelease(context: Context): boolean;
42
+ declare function getMajorAndMinorPart(version: string | undefined): MajorAndMinorPart;
43
+ declare function getTagTasks(config: NormalizedPluginConfig, context: Context): TagTask[];
44
+ declare function getUrlFromImage(image: string): string | undefined;
45
+ declare function exec(file: string, args: string[]): Promise<void>;
46
+ declare function isRegCtlAvailable(): Promise<boolean>;
47
+ declare function tagImage(input: string, output: string): Promise<void>;
48
+ declare function pushImage(image: string): Promise<void>;
49
+ declare function copyImage(input: string, output: string): Promise<void>;
50
+ declare function publish(pluginConfig: PluginConfig, context: Context): Promise<boolean | PublishResponse>;
16
51
  declare const _default: {
17
52
  publish: typeof publish;
18
53
  };
19
- export default _default;
54
+
55
+ export { MajorAndMinorPart, NormalizedPluginConfig, NormalizedPluginConfigTags, PluginConfig, PluginConfigTagKeys, TagTask, copyImage, _default as default, exec, getBaseImage, getMajorAndMinorPart, getTagTasks, getUrlFromImage, isPreRelease, isRegCtlAvailable, parseConfig, publish, pushImage, tagImage };
package/dist/index.js CHANGED
@@ -1,241 +1,2 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
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.copyImage = exports.pushImage = exports.tagImage = exports.isRegCtlAvailable = exports.exec = exports.getUrlFromImage = exports.getTagTasks = exports.getMajorAndMinorPart = exports.isPreRelease = exports.getBaseImage = exports.parseConfig = void 0;
16
- const execa_1 = __importDefault(require("execa"));
17
- let IS_REGCTL_AVAILABLE = undefined;
18
- function parseConfig(config) {
19
- const result = {
20
- images: [],
21
- tag: {
22
- latest: true,
23
- major: true,
24
- minor: true,
25
- version: true,
26
- channel: true
27
- }
28
- };
29
- if (typeof config.images === 'string') {
30
- result.images.push(config.images);
31
- }
32
- else if (Array.isArray(config.images)) {
33
- config.images
34
- .filter(image => typeof image === 'string')
35
- .forEach(image => result.images.push(image));
36
- }
37
- else {
38
- throw new Error('Configuration invalid: No image defined!');
39
- }
40
- const tagNames = Object.keys(result.tag);
41
- tagNames.forEach(name => {
42
- const value = config.tag ? config.tag[name] : undefined;
43
- if (value === true || value === false) {
44
- result.tag[name] = value;
45
- }
46
- });
47
- return result;
48
- }
49
- exports.parseConfig = parseConfig;
50
- function getBaseImage(input) {
51
- let p = input.split('@')[0].split(':');
52
- // it's a ":port"
53
- if (p[1] && p[1].includes('/')) {
54
- p = [p[0] + ':' + p[1], p[2]];
55
- }
56
- return p[0];
57
- }
58
- exports.getBaseImage = getBaseImage;
59
- function isPreRelease(context) {
60
- return Boolean(context.nextRelease && context.nextRelease.version.includes('-'));
61
- }
62
- exports.isPreRelease = isPreRelease;
63
- function getMajorAndMinorPart(version) {
64
- if (!version) {
65
- return {
66
- major: null,
67
- minor: null
68
- };
69
- }
70
- const parts = version.split('.', 2);
71
- return {
72
- major: parts[0],
73
- minor: parts[1]
74
- };
75
- }
76
- exports.getMajorAndMinorPart = getMajorAndMinorPart;
77
- function getTagTasks(config, context) {
78
- const result = [];
79
- if (!context.nextRelease) {
80
- return [];
81
- }
82
- const version = context.nextRelease.version;
83
- config.images.forEach(input => {
84
- var _a;
85
- const outputBase = getBaseImage(input);
86
- // version
87
- if (config.tag.version && version) {
88
- result.push({
89
- input,
90
- output: `${outputBase}:${version}`
91
- });
92
- }
93
- if (!isPreRelease(context)) {
94
- const { major, minor } = getMajorAndMinorPart(version);
95
- // latest
96
- if (config.tag.latest) {
97
- result.push({
98
- input,
99
- output: `${outputBase}:latest`
100
- });
101
- }
102
- // major
103
- if (config.tag.major && major) {
104
- result.push({
105
- input,
106
- output: `${outputBase}:${major}`
107
- });
108
- }
109
- // minor
110
- if (config.tag.minor && major && minor) {
111
- result.push({
112
- input,
113
- output: `${outputBase}:${major}.${minor}`
114
- });
115
- }
116
- }
117
- // channel
118
- const channel = (_a = context.nextRelease) === null || _a === void 0 ? void 0 : _a.channel;
119
- if (config.tag.channel && channel) {
120
- result.push({
121
- input,
122
- output: `${outputBase}:${channel}`
123
- });
124
- }
125
- });
126
- return result;
127
- }
128
- exports.getTagTasks = getTagTasks;
129
- function getUrlFromImage(image) {
130
- const parts = getBaseImage(image).split('/');
131
- if (parts[0] === 'ghcr.io' && parts.length === 3) {
132
- return `https://github.com/${parts[1]}/${parts[2]}/pkgs/container/${parts[2]}`;
133
- }
134
- if (parts[0] === 'registry.gitlab.com' && parts.length >= 3) {
135
- return `https://gitlab.com/${parts[1]}/${parts[2]}/container_registry`;
136
- }
137
- const couldBeAHostname = parts[0].includes('.');
138
- if (!couldBeAHostname && parts.length === 2) {
139
- return `https://hub.docker.com/r/${parts[0]}/${parts[1]}/tags`;
140
- }
141
- if (!couldBeAHostname && parts.length === 1) {
142
- return `https://hub.docker.com/_/${parts[0]}/tags`;
143
- }
144
- }
145
- exports.getUrlFromImage = getUrlFromImage;
146
- function exec(file, args) {
147
- return __awaiter(this, void 0, void 0, function* () {
148
- try {
149
- yield (0, execa_1.default)(file, args);
150
- }
151
- catch (error) {
152
- if (typeof error === 'object' && error !== null && 'command' in error && 'message' in error) {
153
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
154
- // @ts-ignore
155
- throw new Error(`Unable to run "${error.command}": ${error.message}`);
156
- }
157
- else {
158
- throw new Error(`Unable to run "${args.join(' ')}": ${error}`);
159
- }
160
- }
161
- });
162
- }
163
- exports.exec = exec;
164
- function isRegCtlAvailable() {
165
- return __awaiter(this, void 0, void 0, function* () {
166
- if (IS_REGCTL_AVAILABLE !== undefined) {
167
- return IS_REGCTL_AVAILABLE;
168
- }
169
- try {
170
- yield (0, execa_1.default)('which', ['regctl']);
171
- IS_REGCTL_AVAILABLE = true;
172
- return true;
173
- }
174
- catch (error) {
175
- IS_REGCTL_AVAILABLE = false;
176
- return false;
177
- }
178
- });
179
- }
180
- exports.isRegCtlAvailable = isRegCtlAvailable;
181
- function tagImage(input, output) {
182
- return __awaiter(this, void 0, void 0, function* () {
183
- yield exec('docker', ['tag', input, output]);
184
- });
185
- }
186
- exports.tagImage = tagImage;
187
- function pushImage(image) {
188
- return __awaiter(this, void 0, void 0, function* () {
189
- yield exec('docker', ['push', image]);
190
- });
191
- }
192
- exports.pushImage = pushImage;
193
- function copyImage(input, output) {
194
- return __awaiter(this, void 0, void 0, function* () {
195
- yield exec('regctl', ['image', 'copy', input, output]);
196
- });
197
- }
198
- exports.copyImage = copyImage;
199
- function publish(pluginConfig, context) {
200
- var _a;
201
- return __awaiter(this, void 0, void 0, function* () {
202
- if (!context.nextRelease) {
203
- context.logger.log('No release schedules, so no images to tag.');
204
- return false;
205
- }
206
- const config = parseConfig(pluginConfig);
207
- const tasks = getTagTasks(config, context);
208
- if (!tasks.length) {
209
- return false;
210
- }
211
- for (const task of tasks) {
212
- if (yield isRegCtlAvailable()) {
213
- context.logger.log(`Copy with regctl ${task.input} → ${task.output}`);
214
- try {
215
- yield copyImage(task.input, task.output);
216
- continue;
217
- }
218
- catch (error) {
219
- context.logger.error(error);
220
- context.logger.log('Retry without regctl…');
221
- }
222
- }
223
- context.logger.log(`Tag ${task.input} → ${task.output}`);
224
- yield tagImage(task.input, task.output);
225
- context.logger.log(`Push ${task.output}`);
226
- yield pushImage(task.output);
227
- }
228
- const channel = (_a = context.nextRelease) === null || _a === void 0 ? void 0 : _a.channel;
229
- const firstTask = tasks[0];
230
- return {
231
- name: `Docker container (${firstTask.output})`,
232
- url: getUrlFromImage(firstTask.output),
233
- channel
234
- };
235
- });
236
- }
237
- exports.publish = publish;
238
- exports.default = {
239
- publish
240
- };
1
+ var g=(t,e,r)=>new Promise((o,i)=>{var s=a=>{try{n(r.next(a))}catch(l){i(l)}},u=a=>{try{n(r.throw(a))}catch(l){i(l)}},n=a=>a.done?o(a.value):Promise.resolve(a.value).then(s,u);n((r=r.apply(t,e)).next())});import{execa as p}from"execa";var f;function h(t){let e={images:[],tag:{latest:!0,major:!0,minor:!0,version:!0,channel:!0}};if(typeof t.images=="string")e.images.push(t.images);else if(Array.isArray(t.images))t.images.filter(o=>typeof o=="string").forEach(o=>e.images.push(o));else throw new Error("Configuration invalid: No image defined!");return Object.keys(e.tag).forEach(o=>{let i=t.tag?t.tag[o]:void 0;(i===!0||i===!1)&&(e.tag[o]=i)}),e}function m(t){let e=t.split("@")[0].split(":");return e[1]&&e[1].includes("/")&&(e=[e[0]+":"+e[1],e[2]]),e[0]}function d(t){return!!(t.nextRelease&&t.nextRelease.version.includes("-"))}function $(t){if(!t)return{major:null,minor:null};let e=t.split(".",2);return{major:e[0],minor:e[1]}}function y(t,e){let r=[];if(!e.nextRelease)return[];let o=e.nextRelease.version;return t.images.forEach(i=>{var n;let s=m(i);if(t.tag.version&&o&&r.push({input:i,output:`${s}:${o}`}),!d(e)){let{major:a,minor:l}=$(o);t.tag.latest&&r.push({input:i,output:`${s}:latest`}),t.tag.major&&a&&r.push({input:i,output:`${s}:${a}`}),t.tag.minor&&a&&l&&r.push({input:i,output:`${s}:${a}.${l}`})}let u=(n=e.nextRelease)==null?void 0:n.channel;t.tag.channel&&u&&r.push({input:i,output:`${s}:${u}`})}),r}function P(t){let e=m(t).split("/");if(e[0]==="ghcr.io"&&e.length===3)return`https://github.com/${e[1]}/${e[2]}/pkgs/container/${e[2]}`;if(e[0]==="registry.gitlab.com"&&e.length>=3)return`https://gitlab.com/${e[1]}/${e[2]}/container_registry`;let r=e[0].includes(".");if(!r&&e.length===2)return`https://hub.docker.com/r/${e[0]}/${e[1]}/tags`;if(!r&&e.length===1)return`https://hub.docker.com/_/${e[0]}/tags`}function c(t,e){return g(this,null,function*(){try{yield p(t,e)}catch(r){throw typeof r=="object"&&r!==null&&"command"in r&&"message"in r?new Error(`Unable to run "${r.command}": ${r.message}`):new Error(`Unable to run "${e.join(" ")}": ${r}`)}})}function C(){return g(this,null,function*(){if(f!==void 0)return f;try{return yield p("which",["regctl"]),f=!0,!0}catch(t){return f=!1,!1}})}function w(t,e){return g(this,null,function*(){yield c("docker",["tag",t,e])})}function b(t){return g(this,null,function*(){yield c("docker",["push",t])})}function x(t,e){return g(this,null,function*(){yield c("regctl",["image","copy",t,e])})}function k(t,e){return g(this,null,function*(){var u;if(!e.nextRelease)return e.logger.log("No release schedules, so no images to tag."),!1;let r=h(t),o=y(r,e);if(!o.length)return!1;for(let n of o){if(yield C()){e.logger.log(`Copy with regctl ${n.input} \u2192 ${n.output}`);try{yield x(n.input,n.output);continue}catch(a){e.logger.error(a),e.logger.log("Retry without regctl\u2026")}}e.logger.log(`Tag ${n.input} \u2192 ${n.output}`),yield w(n.input,n.output),e.logger.log(`Push ${n.output}`),yield b(n.output)}let i=(u=e.nextRelease)==null?void 0:u.channel,s=o[0];return{name:`Docker container (${s.output})`,url:P(s.output),channel:i}})}var j={publish:k};export{x as copyImage,j as default,c as exec,m as getBaseImage,$ as getMajorAndMinorPart,y as getTagTasks,P as getUrlFromImage,d as isPreRelease,C as isRegCtlAvailable,h as parseConfig,k as publish,b as pushImage,w as tagImage};
241
2
  //# 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":"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"}
1
+ {"version":3,"sources":["../src/lib/index.ts"],"sourcesContent":["import { Context } from 'semantic-release';\nimport {\n MajorAndMinorPart,\n NormalizedPluginConfigTags,\n NormalizedPluginConfig,\n PluginConfig,\n PluginConfigTagKeys,\n TagTask,\n PublishResponse\n} from './types.js';\nimport { execa } from 'execa';\n\nexport {\n PluginConfig,\n NormalizedPluginConfigTags,\n NormalizedPluginConfig,\n PluginConfigTagKeys,\n MajorAndMinorPart,\n TagTask\n};\n\nlet IS_REGCTL_AVAILABLE: boolean | undefined= undefined;\n\nexport function parseConfig (config: PluginConfig): NormalizedPluginConfig {\n const result: NormalizedPluginConfig = {\n images: [],\n tag: {\n latest: true,\n major: true,\n minor: true,\n version: true,\n channel: true\n }\n };\n\n if (typeof config.images === 'string') {\n result.images.push(config.images);\n } else if (Array.isArray(config.images)) {\n config.images\n .filter(image => typeof image === 'string')\n .forEach(image => result.images.push(image));\n } else {\n throw new Error('Configuration invalid: No image defined!');\n }\n\n const tagNames = Object.keys(result.tag) as PluginConfigTagKeys[];\n tagNames.forEach(name => {\n const value = config.tag ? config.tag[name] : undefined;\n if (value === true || value === false) {\n result.tag[name] = value;\n }\n });\n\n return result;\n}\n\nexport function getBaseImage (input: string): string {\n let p = input.split('@')[0].split(':');\n\n // it's a \":port\"\n if (p[1] && p[1].includes('/')) {\n p = [p[0] + ':' + p[1], p[2]];\n }\n\n return p[0];\n}\n\nexport function isPreRelease (context: Context): boolean {\n return Boolean(context.nextRelease && context.nextRelease.version.includes('-'));\n}\n\nexport function getMajorAndMinorPart (version: string | undefined): MajorAndMinorPart {\n if (!version) {\n return {\n major: null,\n minor: null\n };\n }\n\n const parts = version.split('.', 2);\n return {\n major: parts[0],\n minor: parts[1]\n };\n}\n\nexport function getTagTasks (config: NormalizedPluginConfig, context: Context): TagTask[] {\n const result: TagTask[] = [];\n\n if (!context.nextRelease) {\n return [];\n }\n\n const version = context.nextRelease.version;\n config.images.forEach(input => {\n const outputBase = getBaseImage(input);\n\n // version\n if (config.tag.version && version) {\n result.push({\n input,\n output: `${outputBase}:${version}`\n });\n }\n\n if (!isPreRelease(context)) {\n const { major, minor } = getMajorAndMinorPart(version);\n\n // latest\n if (config.tag.latest) {\n result.push({\n input,\n output: `${outputBase}:latest`\n });\n }\n\n // major\n if (config.tag.major && major) {\n result.push({\n input,\n output: `${outputBase}:${major}`\n });\n }\n\n // minor\n if (config.tag.minor && major && minor) {\n result.push({\n input,\n output: `${outputBase}:${major}.${minor}`\n });\n }\n }\n\n // channel\n const channel = context.nextRelease?.channel;\n if (config.tag.channel && channel) {\n result.push({\n input,\n output: `${outputBase}:${channel}`\n });\n }\n });\n\n return result;\n}\n\nexport function getUrlFromImage (image: string): string | undefined {\n const parts = getBaseImage(image).split('/');\n if (parts[0] === 'ghcr.io' && parts.length === 3) {\n return `https://github.com/${parts[1]}/${parts[2]}/pkgs/container/${parts[2]}`;\n }\n if (parts[0] === 'registry.gitlab.com' && parts.length >= 3) {\n return `https://gitlab.com/${parts[1]}/${parts[2]}/container_registry`;\n }\n\n const couldBeAHostname = parts[0].includes('.');\n if (!couldBeAHostname && parts.length === 2) {\n return `https://hub.docker.com/r/${parts[0]}/${parts[1]}/tags`;\n }\n if (!couldBeAHostname && parts.length === 1) {\n return `https://hub.docker.com/_/${parts[0]}/tags`;\n }\n}\n\nexport async function exec (file: string, args: string[]): Promise<void> {\n try {\n await execa(file, args);\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'command' in error && 'message' in error) {\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n throw new Error(`Unable to run \"${error.command}\": ${error.message}`);\n } else {\n throw new Error(`Unable to run \"${args.join(' ')}\": ${error}`);\n }\n }\n}\n\nexport async function isRegCtlAvailable (): Promise<boolean> {\n if(IS_REGCTL_AVAILABLE !== undefined) {\n return IS_REGCTL_AVAILABLE;\n }\n\n try {\n await execa('which', ['regctl']);\n IS_REGCTL_AVAILABLE = true;\n return true;\n }\n catch(error) {\n IS_REGCTL_AVAILABLE = false;\n return false;\n }\n}\n\nexport async function tagImage (input: string, output: string): Promise<void> {\n await exec('docker', ['tag', input, output]);\n}\n\nexport async function pushImage (image: string): Promise<void> {\n await exec('docker', ['push', image]);\n}\n\nexport async function copyImage (input: string, output: string): Promise<void> {\n await exec('regctl', ['image', 'copy', input, output]);\n}\n\nexport async function publish (pluginConfig: PluginConfig, context: Context): Promise<boolean | PublishResponse> {\n if (!context.nextRelease) {\n context.logger.log('No release schedules, so no images to tag.');\n return false;\n }\n\n const config = parseConfig(pluginConfig);\n const tasks = getTagTasks(config, context);\n if (!tasks.length) {\n return false;\n }\n\n for (const task of tasks) {\n if(await isRegCtlAvailable()) {\n context.logger.log(`Copy with regctl ${task.input} → ${task.output}`);\n\n try {\n await copyImage(task.input, task.output);\n continue;\n }\n catch(error) {\n context.logger.error(error);\n context.logger.log('Retry without regctl…');\n }\n }\n\n context.logger.log(`Tag ${task.input} → ${task.output}`);\n await tagImage(task.input, task.output);\n\n context.logger.log(`Push ${task.output}`);\n await pushImage(task.output);\n }\n\n const channel = context.nextRelease?.channel;\n const firstTask = tasks[0];\n return {\n name: `Docker container (${firstTask.output})`,\n url: getUrlFromImage(firstTask.output),\n channel\n };\n}\n\nexport default {\n publish\n};\n"],"mappings":"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","names":["execa","IS_REGCTL_AVAILABLE","parseConfig","config","result","image","name","value","getBaseImage","input","p","isPreRelease","context","getMajorAndMinorPart","version","parts","getTagTasks","_a","outputBase","major","minor","channel","getUrlFromImage","couldBeAHostname","exec","file","args","__async","execa","error","isRegCtlAvailable","tagImage","output","pushImage","copyImage","publish","pluginConfig","tasks","task","firstTask","lib_default"]}
package/package.json CHANGED
@@ -4,53 +4,57 @@
4
4
  "url": "https://github.com/sebbo2002/semantic-release-docker/issues"
5
5
  },
6
6
  "dependencies": {
7
- "execa": "^5.1.1"
7
+ "execa": "^7.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": {
11
- "@qiwi/semantic-release-gh-pages-plugin": "^5.2.4",
11
+ "@qiwi/semantic-release-gh-pages-plugin": "^5.2.5",
12
12
  "@semantic-release/changelog": "^6.0.2",
13
13
  "@semantic-release/exec": "^6.0.3",
14
14
  "@semantic-release/git": "^10.0.1",
15
15
  "@semantic-release/npm": "^9.0.2",
16
16
  "@types/mocha": "^10.0.0",
17
- "@types/node": "^18.11.18",
18
- "@types/semantic-release": "^20.0.0",
19
- "@typescript-eslint/eslint-plugin": "^5.49.0",
20
- "@typescript-eslint/parser": "^5.49.0",
21
- "c8": "^7.12.0",
22
- "eslint": "^8.32.0",
23
- "eslint-plugin-jsonc": "^2.6.0",
17
+ "@types/node": "^18.15.3",
18
+ "@types/semantic-release": "^20.0.1",
19
+ "@typescript-eslint/eslint-plugin": "^5.54.1",
20
+ "@typescript-eslint/parser": "^5.54.1",
21
+ "c8": "^7.13.0",
22
+ "eslint": "^8.36.0",
23
+ "eslint-plugin-jsonc": "^2.7.0",
24
24
  "license-checker": "^25.0.1",
25
25
  "mocha": "^10.2.0",
26
26
  "mochawesome": "^7.1.3",
27
27
  "semantic-release-license": "^1.0.3",
28
28
  "source-map-support": "^0.5.21",
29
29
  "ts-node": "^10.8.2",
30
- "typedoc": "^0.23.24",
31
- "typescript": "^4.9.5"
30
+ "tsup": "^6.7.0",
31
+ "typedoc": "^0.23.28",
32
+ "typescript": "^5.0.2"
32
33
  },
33
34
  "engines": {
34
35
  "node": "^14.8.0 || >=16.0.0"
35
36
  },
37
+ "exports": "./dist/index.js",
36
38
  "files": [
37
39
  "/dist"
38
40
  ],
39
41
  "homepage": "https://github.com/sebbo2002/semantic-release-docker#readme",
40
42
  "license": "MIT",
41
- "main": "dist/index.js",
43
+ "main": "./dist/index.js",
44
+ "module": "./dist/index.js",
42
45
  "name": "@sebbo2002/semantic-release-docker",
43
46
  "repository": {
44
47
  "type": "git",
45
48
  "url": "git+https://github.com/sebbo2002/semantic-release-docker.git"
46
49
  },
47
50
  "scripts": {
48
- "build": "tsc",
51
+ "build": "tsup",
49
52
  "build-all": "./.github/workflows/build.sh",
50
53
  "coverage": "c8 mocha",
51
54
  "license-check": "license-checker --production --summary",
52
55
  "lint": "eslint . --ext .ts,.json",
53
56
  "test": "docker pull alpine:latest && mocha"
54
57
  },
55
- "version": "3.0.0-develop.1"
58
+ "type": "module",
59
+ "version": "3.0.0-develop.2"
56
60
  }
package/dist/types.d.ts DELETED
@@ -1,35 +0,0 @@
1
- export interface PluginConfig {
2
- images: string | string[];
3
- tag?: {
4
- latest?: boolean;
5
- major?: boolean;
6
- minor?: boolean;
7
- version?: boolean;
8
- channel?: boolean;
9
- };
10
- }
11
- export interface NormalizedPluginConfigTags {
12
- latest: boolean;
13
- major: boolean;
14
- minor: boolean;
15
- version: boolean;
16
- channel: boolean;
17
- }
18
- export type PluginConfigTagKeys = keyof NormalizedPluginConfigTags;
19
- export interface NormalizedPluginConfig {
20
- images: string[];
21
- tag: NormalizedPluginConfigTags;
22
- }
23
- export interface MajorAndMinorPart {
24
- major: string | null;
25
- minor: string | null;
26
- }
27
- export interface TagTask {
28
- input: string;
29
- output: string;
30
- }
31
- export interface PublishResponse {
32
- name: string;
33
- url?: string;
34
- channel?: string;
35
- }
package/dist/types.js DELETED
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/lib/types.ts"],"names":[],"mappings":""}