New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

gitlab-releaser

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gitlab-releaser - npm Package Compare versions

Comparing version 3.0.0 to 4.0.0

22

bin/gitlab-releaser.js

@@ -17,9 +17,23 @@ #!/usr/bin/env node

program.version(pkg.version)
.option('-s, --schema <schema>', 'the schema type of the JSON input file', SchemaTypes.gitlabReleaser)
.option('-r, --release <release>', `the reference used to retrieve release data, required if schema type is ${SchemaTypes.gitlabReleaser} or if release pulls data from a CHANGELOG (default: "$CI_COMMIT_TAG")`, env.ci.commit.tag)
program
.version(pkg.version)
.option(
'-s, --schema <schema>',
'the schema type of the JSON input file',
SchemaTypes.gitlabReleaser
)
.option(
'-r, --release <release>',
`the reference used to retrieve release data, required if schema type is ${SchemaTypes.gitlabReleaser} or if release pulls data from a CHANGELOG (default: "$CI_COMMIT_TAG")`,
env.ci.commit.tag
)
.parse(process.argv);
const options = program.opts();
const command = getReleaseCliCommand(gitlabDirectory, fileNames[options.schema], options.schema, options.release);
const command = getReleaseCliCommand(
gitlabDirectory,
fileNames[options.schema],
options.schema,
options.release
);
saveReleaseCliScript(gitlabDirectory, releaseScriptName, command);

65

index.js

@@ -13,3 +13,8 @@ 'use strict';

const { usesChangelog, processChangelogData } = require('./lib/changelog');
const { isValidGitLabReleaser, isValidRelease, isValidSchemaType, SchemaTypes } = require('./lib/schema');
const {
isValidGitLabReleaser,
isValidRelease,
isValidSchemaType,
SchemaTypes
} = require('./lib/schema');
const cli = require('./lib/cli-args');

@@ -27,3 +32,8 @@

const getErrorLogEntry = (message) => {
return { message, level: logger.levels.error, exitOnError: true, errorCode: 1 };
return {
message,
level: logger.levels.error,
exitOnError: true,
errorCode: 1
};
};

@@ -55,6 +65,8 @@

if (usesChangelog(data)) {
validateReleaseName(releaseName, 'Release must be specified to process CHANGELOG data');
validateReleaseName(
releaseName,
'Release must be specified to process CHANGELOG data'
);
processedData = processChangelogData(data, releaseName);
}
else {
} else {
processedData = data;

@@ -76,4 +88,6 @@ }

const getReleaseFromGitLabReleaser = (data, releaseName) => {
const releaseData = data.releases && Object.keys(data.releases).includes(releaseName)
? data.releases[releaseName] : {};
const releaseData =
data.releases && Object.keys(data.releases).includes(releaseName)
? data.releases[releaseName]
: {};
return { ...data.defaults, ...releaseData };

@@ -90,3 +104,9 @@ };

if (!isValidSchemaType(type)) {
logger.log(getErrorLogEntry(`Schema type "${type}" is invalid, must be one of '${Object.values(SchemaTypes).join('\', \'')}'`));
logger.log(
getErrorLogEntry(
`Schema type "${type}" is invalid, must be one of '${Object.values(
SchemaTypes
).join("', '")}'`
)
);
}

@@ -110,3 +130,9 @@ };

*/
const getReleaseCliCommand = (directory, releaseFileName, type, releaseName) => {
// eslint-disable-next-line max-lines-per-function
const getReleaseCliCommand = (
directory,
releaseFileName,
type,
releaseName
) => {
validateSchemaType(type);

@@ -120,8 +146,14 @@

if (!isValidGitLabReleaser(data)) {
logger.log(getErrorLogEntry(`"${releaseFile}" is invalid gitlab-releaser file`));
logger.log(
getErrorLogEntry(
`"${releaseFile}" is invalid gitlab-releaser file`
)
);
}
validateReleaseName(releaseName, 'Release must be specified if schema type is gitlab-releaser');
validateReleaseName(
releaseName,
'Release must be specified if schema type is gitlab-releaser'
);
release = getReleaseFromGitLabReleaser(data, releaseName);
}
else {
} else {
release = data;

@@ -131,3 +163,5 @@ }

if (!isValidRelease(release)) {
logger.log(getErrorLogEntry(`"${releaseFile}" is invalid release file`));
logger.log(
getErrorLogEntry(`"${releaseFile}" is invalid release file`)
);
}

@@ -156,4 +190,3 @@ return processReleaseData(release, releaseName);

logger.log({ message: `Saved file "${releaseScriptFile}"` });
}
catch (error) {
} catch (error) {
logger.log(getErrorLogEntry(`Error saving file\n${error.message}`));

@@ -160,0 +193,0 @@ }

@@ -27,3 +27,5 @@ 'use strict';

const usesChangelog = (data) => {
return data.name === changelogKeyword || data.description === changelogKeyword;
return (
data.name === changelogKeyword || data.description === changelogKeyword
);
};

@@ -33,3 +35,3 @@

* Gets release data from a CHANGELOG file. Will log error and exit
* process if no CHANGELOG is found or the tag cannot be found in
* process if no CHANGELOG is found or the release cannot be found in
* the CHANGELOG.

@@ -39,3 +41,3 @@ *

* @static
* @param {string} tag The tag to find in the CHANGELOG.
* @param {string} releaseName The release name to find in the CHANGELOG.
* @param {string} changelogPath The directory to find the CHANGELOG.

@@ -45,5 +47,10 @@ * @returns {object} The release name/description from

*/
const getReleaseDataFromChangelog = (tag, changelogPath = './') => {
if (!tag) {
logger.log({ message: 'Tag not specified, but required to process changelog', level: logger.levels.error });
// eslint-disable-next-line max-lines-per-function
const getReleaseDataFromChangelog = (releaseName, changelogPath = './') => {
if (!releaseName) {
logger.log({
message:
'Release name not specified, but required to process changelog',
level: logger.levels.error
});
}

@@ -53,10 +60,24 @@ const changelog = releaselog.findChangelog(changelogPath);

if (changelog) {
releaseDataFromChangelog = releaselog.getReleaseDetails(changelog, tag);
releaseDataFromChangelog = releaselog.getReleaseDetails(
changelog,
releaseName
);
if (releaseDataFromChangelog) {
logger.log({ message: `Found release "${releaseDataFromChangelog.title}" in "${changelog}"` });
return { name: releaseDataFromChangelog.title, description: releaseDataFromChangelog.notes };
logger.log({
message: `Found release "${releaseDataFromChangelog.title}" in "${changelog}"`
});
return {
name: releaseDataFromChangelog.title,
description: releaseDataFromChangelog.notes
};
}
logger.log({ message: `Release not found in changelog "${changelog}" for tag "${tag}"`, level: logger.levels.error });
logger.log({
message: `Release not found in changelog "${changelog}" for release name "${releaseName}"`,
level: logger.levels.error
});
}
logger.log({ message: `Changelog not found in directory "${changelogPath}"`, level: logger.levels.error });
logger.log({
message: `Changelog not found in directory "${changelogPath}"`,
level: logger.levels.error
});
};

@@ -69,8 +90,8 @@

* @static
* @param {object} data The release.
* @param {string} tag The tag to find in the CHANGELOG.
* @returns {object} The release updated with CHANGELOG data.
* @param {object} data The release.
* @param {string} releaseName The release name to find in the CHANGELOG.
* @returns {object} The release updated with CHANGELOG data.
*/
const processChangelogData = (data, tag) => {
const changelogData = getReleaseDataFromChangelog(tag);
const processChangelogData = (data, releaseName) => {
const changelogData = getReleaseDataFromChangelog(releaseName);
const processedData = data;

@@ -77,0 +98,0 @@ if (data.name === changelogKeyword) {

@@ -29,3 +29,4 @@ 'use strict';

const releaseSchemaFile = 'release.schema.json';
const schemaIdBase = 'https://gitlab.com/gitlab-ci-utils/gitlab-releaser/-/raw/master/schemas';
const schemaIdBase =
'https://gitlab.com/gitlab-ci-utils/gitlab-releaser/-/raw/master/schemas';
const gitlabReleaserSchemaId = `${schemaIdBase}/${gitlabReleaserSchemaFile}`;

@@ -58,3 +59,9 @@ const releaseSchemaId = `${schemaIdBase}/${releaseSchemaFile}`;

const validateDataAgainstSchema = (schemaFiles, schemaId, data) => {
const schemas = schemaFiles.map(schemaFile => JSON.parse(fs.readFileSync(path.join(__dirname, '..', schemaDirectory, schemaFile))));
const schemas = schemaFiles.map((schemaFile) =>
JSON.parse(
fs.readFileSync(
path.join(__dirname, '..', schemaDirectory, schemaFile)
)
)
);
const validate = new Ajv({ schemas }).getSchema(schemaId);

@@ -73,3 +80,7 @@ return validate(data);

const isValidGitLabReleaser = (data) => {
return validateDataAgainstSchema([gitlabReleaserSchemaFile, releaseSchemaFile], gitlabReleaserSchemaId, data);
return validateDataAgainstSchema(
[gitlabReleaserSchemaFile, releaseSchemaFile],
gitlabReleaserSchemaId,
data
);
};

@@ -86,3 +97,7 @@

const isValidRelease = (data) => {
return validateDataAgainstSchema([releaseSchemaFile], releaseSchemaId, data);
return validateDataAgainstSchema(
[releaseSchemaFile],
releaseSchemaId,
data
);
};

@@ -89,0 +104,0 @@

@@ -14,3 +14,3 @@ 'use strict';

const quoteRegex = /'/g;
const quoteRegexReplace = '\'"\'"\'';
const quoteRegexReplace = "'\"'\"'";

@@ -46,3 +46,5 @@ // Escape an environment variable parameter substitution

// then remove any double single quotes.
return `'${value.replace(quoteRegex, quoteRegexReplace).replace(variableRegex, variableRegexReplace)}'`.replace(/''/g, '');
return `'${value
.replace(quoteRegex, quoteRegexReplace)
.replace(variableRegex, variableRegexReplace)}'`.replace(/''/g, '');
}

@@ -49,0 +51,0 @@ return value;

{
"name": "gitlab-releaser",
"version": "3.0.0",
"version": "4.0.0",
"description": "Generate arguments for GitLab release-cli command",

@@ -8,8 +8,11 @@ "bin": "./bin/gitlab-releaser.js",

"scripts": {
"start": "node ./bin/gitlab-releaser.js",
"test": "jest --ci",
"hooks-pre-commit": "npm run lint && npm run prettier-check",
"hooks-pre-push": "npm audit --audit-level=high && npm test",
"lint": "npm run lint-js && npm run lint-md",
"lint-js": "eslint \"**/*.js\"",
"lint-md": "markdownlint **/*.md --ignore node_modules --ignore Archive",
"lint": "npm run lint-js && npm run lint-md",
"push": "npm run lint && npm audit --audit-level=high && npm test"
"prettier-check": "prettier --check --ignore-path=.gitignore .",
"prettier-fix": "prettier --write --ignore-path=.gitignore .",
"start": "node ./bin/gitlab-releaser.js",
"test": "jest --ci"
},

@@ -28,3 +31,3 @@ "repository": {

"engines": {
"node": "^12.20.0 || ^14.15.0 || >=16.0.0"
"node": "^14.15.0 || ^16.13.0 || >=18.0.0"
},

@@ -42,16 +45,17 @@ "files": [

"devDependencies": {
"@aarongoldenthal/eslint-config-standard": "^12.0.2",
"@aarongoldenthal/eslint-config-standard": "^14.0.0",
"bin-tester": "^2.0.1",
"eslint": "^8.12.0",
"jest": "^27.5.1",
"jest-junit": "^13.0.0",
"markdownlint-cli": "^0.31.1"
"eslint": "^8.16.0",
"jest": "^28.1.0",
"jest-junit": "^13.2.0",
"markdownlint-cli": "^0.31.1",
"prettier": "^2.6.2"
},
"dependencies": {
"ajv": "^8.11.0",
"ci-logger": "^4.0.1",
"commander": "^9.1.0",
"gitlab-ci-env": "^4.5.0",
"releaselog": "^2.1.4"
"ci-logger": "^4.0.2",
"commander": "^9.3.0",
"gitlab-ci-env": "^5.0.0",
"releaselog": "^3.0.0"
}
}

@@ -20,15 +20,15 @@ # GitLab Releaser

{
"name": "v1.0.0 (2020-10-28)",
"description": "Another release",
"tag_name": "1.0.0",
"assets": {
"links": [
{
"name": "npm",
"url": "https://www.npmjs.com/package/gitlab-releaser",
"type": "package"
}
]
},
"milestones": [ "1.0.0" ]
"name": "v1.0.0 (2020-10-28)",
"description": "Another release",
"tag_name": "1.0.0",
"assets": {
"links": [
{
"name": "npm",
"url": "https://www.npmjs.com/package/gitlab-releaser",
"type": "package"
}
]
},
"milestones": ["1.0.0"]
}

@@ -45,27 +45,27 @@ ```

{
"defaults": {
"assets": {
"links": [
{
"name": "npm",
"url": "https://www.npmjs.com/package/gitlab-releaser",
"type": "package"
}
]
"defaults": {
"assets": {
"links": [
{
"name": "npm",
"url": "https://www.npmjs.com/package/gitlab-releaser",
"type": "package"
}
]
}
},
"releases": {
"1.0.0": {
"name": "v1.0.0 (2020-10-28)",
"description": "Another release",
"tag_name": "1.0.0",
"milestones": ["1.0.0"]
},
"releases": {
"1.0.0": {
"name": "v1.0.0 (2020-10-28)",
"description": "Another release",
"tag_name": "1.0.0",
"milestones": [ "1.0.0" ]
},
"0.5.0": {
"name": "v0.5.0 (2020-10-10)",
"description": "Initial release",
"tag_name": "0.5.0",
"milestones": [ "0.5.0" ]
}
"0.5.0": {
"name": "v0.5.0 (2020-10-10)",
"description": "Initial release",
"tag_name": "0.5.0",
"milestones": ["0.5.0"]
}
}
}

@@ -76,19 +76,19 @@ ```

A release name must be specified via the CLI to pull the appropriate release information. For example, `--release 1.0.0` would result in the following equivalent `release.json` file.
A release name must be specified via the CLI to pull the appropriate release information. For example, `--release 1.0.0` would result in the following equivalent `release.json` file.
```json
{
"name": "v1.0.0 (2020-10-28)",
"description": "Another release",
"tag_name": "1.0.0",
"assets": {
"links": [
{
"name": "npm",
"url": "https://www.npmjs.com/package/gitlab-releaser",
"type": "package"
}
]
},
"milestones": [ "1.0.0" ]
"name": "v1.0.0 (2020-10-28)",
"description": "Another release",
"tag_name": "1.0.0",
"assets": {
"links": [
{
"name": "npm",
"url": "https://www.npmjs.com/package/gitlab-releaser",
"type": "package"
}
]
},
"milestones": ["1.0.0"]
}

@@ -101,13 +101,13 @@ ```

The release `name` and `description` can optionally be pulled dynamically from the CHANGELOG. This will be done if the value specified in the Release or GitLab Releaser file is "`$$CHANGELOG`", e.g.
The release `name` and `description` can optionally be pulled dynamically from the CHANGELOG. This will be done if the value specified in the Release or GitLab Releaser file is "`$$CHANGELOG`", e.g.
```json
{
"name": "$$CHANGELOG",
"description": "$$CHANGELOG",
"tag_name": "1.0.0"
"name": "$$CHANGELOG",
"description": "$$CHANGELOG",
"tag_name": "1.0.0"
}
```
The [`releaselog`](https://www.npmjs.com/package/releaselog) module is used to pull this data and has details on CHANGELOG formatting requirements. The data is retrieved by the tag specified via the CLI, if specified, otherwise the value of `CI_COMMIT_TAG` is used. Either a release name or the default value must be specified via the CLI if the release uses CHANGELOG data.
The [`releaselog`](https://www.npmjs.com/package/releaselog) module is used to pull this data and has details on CHANGELOG formatting requirements. The data is retrieved by the tag specified via the CLI, if specified, otherwise the value of `CI_COMMIT_TAG` is used. Either a release name or the default value must be specified via the CLI if the release uses CHANGELOG data.

@@ -118,3 +118,3 @@ If either `name` or `description` specifies pulling data from the CHANGELOG, but that data cannot be found in the CHANGELOG, the job will report the error and fail.

By default, release parameters are assumed to be string literal values, and are quoted as such when the shell script is created. Any release properties can include environment variables, but they must be denoted in parameter substitution syntax, e.g. `${CI_COMMIT_TAG}`. Any parameters with variables in this format will be encoded in the generated shell script so that they are expanded. A value with a variable in any other format, e.g. `$CI_COMMIT_TAG`, will be treated as a string literal.
By default, release parameters are assumed to be string literal values, and are quoted as such when the shell script is created. Any release properties can include environment variables, but they must be denoted in parameter substitution syntax, e.g. `${CI_COMMIT_TAG}`. Any parameters with variables in this format will be encoded in the generated shell script so that they are expanded. A value with a variable in any other format, e.g. `$CI_COMMIT_TAG`, will be treated as a string literal.

@@ -125,4 +125,4 @@ For example, the following `release.json` file using both notations:

{
"name": "v${CI_COMMIT_TAG} release",
"description": "Fixed handling of $CI_COMMIT_TAG"
"name": "v${CI_COMMIT_TAG} release",
"description": "Fixed handling of $CI_COMMIT_TAG"
}

@@ -189,3 +189,3 @@ ```

The `prepare_release` job uses a Node.js container image and installs and runs `gitlab-releaser` to generate the shell script to prepare the release, saved as `.gitlab/release.sh`. For the example `release.json` file above, or the `gitlab-releaser.json` for release `1.0.0`, the following shell script will be generated:
The `prepare_release` job uses a Node.js container image and installs and runs `gitlab-releaser` to generate the shell script to prepare the release, saved as `.gitlab/release.sh`. For the example `release.json` file above, or the `gitlab-releaser.json` for release `1.0.0`, the following shell script will be generated:

@@ -192,0 +192,0 @@ ```sh

@@ -44,8 +44,3 @@ {

"description": "The type of the link: other (default), runbook, image, package",
"enum": [
"other",
"runbook",
"image",
"package"
]
"enum": ["other", "runbook", "image", "package"]
},

@@ -58,6 +53,3 @@ "filepath": {

"additionalProperties": false,
"required": [
"name",
"url"
]
"required": ["name", "url"]
},

@@ -70,5 +62,3 @@ "minItems": 1,

"additionalProperties": false,
"required": [
"links"
]
"required": ["links"]
},

@@ -75,0 +65,0 @@ "milestones": {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc