Skip to content

Commit 5275e2a

Browse files
feat(gitlab-registry): added minor major and channel tags (#2)
Authored-By: Lucky (https://github.com/lucbas) Co-authored-by: Valmir Selmani <[email protected]>
1 parent 917fc09 commit 5275e2a

File tree

4 files changed

+102
-25
lines changed

4 files changed

+102
-25
lines changed

README.md

-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
[![npm version](https://img.shields.io/npm/v/semantic-release-gitlab-registry.svg)](https://www.npmjs.com/package/semantic-release-gitlab-registry)
44
[![npm downloads](https://img.shields.io/npm/dm/semantic-release-gitlab-registry.svg)](https://www.npmjs.com/package/semantic-release-gitlab-registry)
55
[![Build Status](https://travis-ci.org/lgaticaq/semantic-release-gitlab-registry.svg?branch=master)](https://travis-ci.org/lgaticaq/semantic-release-gitlab-registry)
6-
[![dependencies Status](https://img.shields.io/david/lgaticaq/semantic-release-gitlab-registry/status.svg)](https://david-dm.org/lgaticaq/semantic-release-gitlab-registry)
7-
[![devDependencies Status](https://img.shields.io/david/lgaticaq/semantic-release-gitlab-registry/dev-status.svg)](https://david-dm.org/lgaticaq/semantic-release-gitlab-registry?type=dev)
8-
[![peerDependencies Status](https://img.shields.io/david/lgaticaq/semantic-release-gitlab-registry/peer-status.svg)](https://david-dm.org/lgaticaq/semantic-release-gitlab-registry?type=peer)
96
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
107

118
Set of [semantic-release](https://github.com/semantic-release/semantic-release) plugins for publishing a docker image to [GitLab Container Registry](https://docs.gitlab.com/ce/user/project/container_registry.html).

lib/publish.js

+50-18
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,75 @@
11
const execa = require('execa')
2+
const semver = require('semver')
23

34
/**
45
* @typedef {import('./index').Context} Context
56
*/
67
/**
7-
* Push new docker image.
8+
* Tag and push new docker images with semantic versioning.
89
*
910
* @param {Object} pluginConfig - The plugin configuration.
1011
* @param {Context} context - The semantic-release context.
1112
* @returns {Promise} A `Promise` that resolve to docker push command.
1213
*/
1314
module.exports = async (pluginConfig, { nextRelease: { version }, logger }) => {
14-
try {
15+
/**
16+
* Tag and push docker image by version.
17+
*
18+
* @param {string} version - Tag version.
19+
* @returns {Promise} A `Promise` that resolve to docker push command.
20+
*/
21+
async function publish (version) {
1522
logger.log(
1623
`Pushing version ${
1724
process.env.CI_REGISTRY_IMAGE
1825
}:${version} to GitLab Container Registry`
1926
)
20-
21-
// Push both new version and latest
22-
await execa(
23-
'docker',
24-
[
25-
'tag',
26-
`${process.env.CI_REGISTRY_IMAGE}:latest`,
27-
`${process.env.CI_REGISTRY_IMAGE}:${version}`
28-
],
29-
{
30-
stdio: 'inherit'
31-
}
32-
)
27+
// tag image if not latest
28+
if (version !== 'latest') {
29+
await execa(
30+
'docker',
31+
[
32+
'tag',
33+
`${process.env.CI_REGISTRY_IMAGE}:latest`,
34+
`${process.env.CI_REGISTRY_IMAGE}:${version}`
35+
],
36+
{
37+
stdio: 'inherit'
38+
}
39+
)
40+
}
41+
// push image
3342
await execa(
3443
'docker',
3544
['push', `${process.env.CI_REGISTRY_IMAGE}:${version}`],
3645
{ stdio: 'inherit' }
3746
)
38-
await execa('docker', ['push', `${process.env.CI_REGISTRY_IMAGE}:latest`], {
39-
stdio: 'inherit'
40-
})
47+
}
48+
49+
try {
50+
// parse version to parts
51+
const major = semver.major(version)
52+
const minor = semver.minor(version)
53+
const patch = semver.patch(version)
54+
const prerelease = semver.prerelease(version)
55+
const isProdRelease = prerelease.length === 0
56+
57+
// first release version as it is
58+
await publish(version)
59+
60+
if (isProdRelease) {
61+
// on production release X:latest, X:1.1, X:1
62+
await publish(`${major}.${minor}`)
63+
await publish(`${major}`)
64+
await publish('latest')
65+
return
66+
} else {
67+
const [channel] = prerelease
68+
69+
// on other channels release X:channel, X:1.1.1-channel
70+
await publish(channel)
71+
await publish(`${major}.${minor}.${patch}-${channel}`)
72+
}
4173
} catch (err) {
4274
throw new Error('docker push failed')
4375
}

package-lock.json

+50-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
"homepage": "https://github.com/lgaticaq/semantic-release-gitlab-registry#readme",
3232
"dependencies": {
3333
"@semantic-release/error": "^2.2.0",
34-
"execa": "^1.0.0"
34+
"execa": "^1.0.0",
35+
"semver": "^7.2.1"
3536
},
3637
"devDependencies": {
3738
"@commitlint/cli": "7.4.0",

0 commit comments

Comments
 (0)