mirror of
https://github.com/PaulHatch/semantic-version.git
synced 2025-12-27 13:08:17 +00:00
Merge 28e15333e0 into 7b71828c01
This commit is contained in:
commit
c57aec01fa
23 changed files with 1792 additions and 1113 deletions
231
dist/index.js
vendored
231
dist/index.js
vendored
|
|
@ -48,15 +48,19 @@ const cmd = (command, ...args) => __awaiter(void 0, void 0, void 0, function* ()
|
||||||
if (debugManager.isReplayMode()) {
|
if (debugManager.isReplayMode()) {
|
||||||
return debugManager.replayCommand(command, args);
|
return debugManager.replayCommand(command, args);
|
||||||
}
|
}
|
||||||
let output = '', errors = '';
|
let output = "", errors = "";
|
||||||
const options = {
|
const options = {
|
||||||
silent: true,
|
silent: true,
|
||||||
listeners: {
|
listeners: {
|
||||||
stdout: (data) => { output += data.toString(); },
|
stdout: (data) => {
|
||||||
stderr: (data) => { errors += data.toString(); },
|
output += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data) => {
|
||||||
|
errors += data.toString();
|
||||||
|
},
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
let caughtError = null;
|
let caughtError = null;
|
||||||
try {
|
try {
|
||||||
|
|
@ -81,7 +85,7 @@ exports.cmd = cmd;
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.ConfigurationProvider = void 0;
|
exports.ConfigurationProvider = void 0;
|
||||||
const CsvUserFormatter_1 = __nccwpck_require__(9105);
|
const CsvUserFormatter_1 = __nccwpck_require__(9105);
|
||||||
const BranchVersioningTagFormatter_1 = __nccwpck_require__(807);
|
const BranchVersioningTagFormatter_1 = __nccwpck_require__(9894);
|
||||||
const DefaultTagFormatter_1 = __nccwpck_require__(4808);
|
const DefaultTagFormatter_1 = __nccwpck_require__(4808);
|
||||||
const DefaultVersionFormatter_1 = __nccwpck_require__(8524);
|
const DefaultVersionFormatter_1 = __nccwpck_require__(8524);
|
||||||
const JsonUserFormatter_1 = __nccwpck_require__(7892);
|
const JsonUserFormatter_1 = __nccwpck_require__(7892);
|
||||||
|
|
@ -96,16 +100,24 @@ class ConfigurationProvider {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
DebugManager_1.DebugManager.getInstance().initializeConfig(config);
|
DebugManager_1.DebugManager.getInstance().initializeConfig(config);
|
||||||
}
|
}
|
||||||
GetCurrentCommitResolver() { return new DefaultCurrentCommitResolver_1.DefaultCurrentCommitResolver(this.config); }
|
GetCurrentCommitResolver() {
|
||||||
GetLastReleaseResolver() { return new DefaultLastReleaseResolver_1.DefaultLastReleaseResolver(this.config); }
|
return new DefaultCurrentCommitResolver_1.DefaultCurrentCommitResolver(this.config);
|
||||||
GetCommitsProvider() { return new DefaultCommitsProvider_1.DefaultCommitsProvider(this.config); }
|
}
|
||||||
|
GetLastReleaseResolver() {
|
||||||
|
return new DefaultLastReleaseResolver_1.DefaultLastReleaseResolver(this.config);
|
||||||
|
}
|
||||||
|
GetCommitsProvider() {
|
||||||
|
return new DefaultCommitsProvider_1.DefaultCommitsProvider(this.config);
|
||||||
|
}
|
||||||
GetVersionClassifier() {
|
GetVersionClassifier() {
|
||||||
if (this.config.bumpEachCommit) {
|
if (this.config.bumpEachCommit) {
|
||||||
return new BumpAlwaysVersionClassifier_1.BumpAlwaysVersionClassifier(this.config);
|
return new BumpAlwaysVersionClassifier_1.BumpAlwaysVersionClassifier(this.config);
|
||||||
}
|
}
|
||||||
return new DefaultVersionClassifier_1.DefaultVersionClassifier(this.config);
|
return new DefaultVersionClassifier_1.DefaultVersionClassifier(this.config);
|
||||||
}
|
}
|
||||||
GetVersionFormatter() { return new DefaultVersionFormatter_1.DefaultVersionFormatter(this.config); }
|
GetVersionFormatter() {
|
||||||
|
return new DefaultVersionFormatter_1.DefaultVersionFormatter(this.config);
|
||||||
|
}
|
||||||
GetTagFormatter(branchName) {
|
GetTagFormatter(branchName) {
|
||||||
if (this.config.versionFromBranch) {
|
if (this.config.versionFromBranch) {
|
||||||
return new BranchVersioningTagFormatter_1.BranchVersioningTagFormatter(this.config, branchName);
|
return new BranchVersioningTagFormatter_1.BranchVersioningTagFormatter(this.config, branchName);
|
||||||
|
|
@ -114,8 +126,10 @@ class ConfigurationProvider {
|
||||||
}
|
}
|
||||||
GetUserFormatter() {
|
GetUserFormatter() {
|
||||||
switch (this.config.userFormatType) {
|
switch (this.config.userFormatType) {
|
||||||
case 'json': return new JsonUserFormatter_1.JsonUserFormatter(this.config);
|
case "json":
|
||||||
case 'csv': return new CsvUserFormatter_1.CsvUserFormatter(this.config);
|
return new JsonUserFormatter_1.JsonUserFormatter(this.config);
|
||||||
|
case "csv":
|
||||||
|
return new CsvUserFormatter_1.CsvUserFormatter(this.config);
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unknown user format type: ${this.config.userFormatType}, supported types: json, csv`);
|
throw new Error(`Unknown user format type: ${this.config.userFormatType}, supported types: json, csv`);
|
||||||
}
|
}
|
||||||
|
|
@ -173,7 +187,6 @@ class DebugManager {
|
||||||
this.replayMode = false;
|
this.replayMode = false;
|
||||||
this.diagnosticInfo = new DiagnosticInfo();
|
this.diagnosticInfo = new DiagnosticInfo();
|
||||||
}
|
}
|
||||||
;
|
|
||||||
/** Enables replay mode and loads the diagnostic information from the specified string */
|
/** Enables replay mode and loads the diagnostic information from the specified string */
|
||||||
replayFromDiagnostics(diagnostics) {
|
replayFromDiagnostics(diagnostics) {
|
||||||
this.debugEnabled = false;
|
this.debugEnabled = false;
|
||||||
|
|
@ -182,7 +195,7 @@ class DebugManager {
|
||||||
}
|
}
|
||||||
/** Returns a JSON string containing the diagnostic information for this run */
|
/** Returns a JSON string containing the diagnostic information for this run */
|
||||||
getDebugOutput(emptyRepo = false) {
|
getDebugOutput(emptyRepo = false) {
|
||||||
return this.isDebugEnabled() ? JSON.stringify(this.diagnosticInfo) : '';
|
return this.isDebugEnabled() ? JSON.stringify(this.diagnosticInfo) : "";
|
||||||
}
|
}
|
||||||
/** Records a command and its output for diagnostic purposes */
|
/** Records a command and its output for diagnostic purposes */
|
||||||
recordCommand(command, args, output, stderr, error) {
|
recordCommand(command, args, output, stderr, error) {
|
||||||
|
|
@ -194,9 +207,10 @@ class DebugManager {
|
||||||
/** Replays the specified command and returns the output */
|
/** Replays the specified command and returns the output */
|
||||||
replayCommand(command, args) {
|
replayCommand(command, args) {
|
||||||
if (this.diagnosticInfo === null) {
|
if (this.diagnosticInfo === null) {
|
||||||
throw new Error('No diagnostic information available for replay');
|
throw new Error("No diagnostic information available for replay");
|
||||||
}
|
}
|
||||||
const commandResult = this.diagnosticInfo.commands.find(c => c.command === command && JSON.stringify(c.args) === JSON.stringify(args));
|
const commandResult = this.diagnosticInfo.commands.find((c) => c.command === command &&
|
||||||
|
JSON.stringify(c.args) === JSON.stringify(args));
|
||||||
if (!commandResult) {
|
if (!commandResult) {
|
||||||
throw new Error(`No result found in diagnostic for command "${command}"`);
|
throw new Error(`No result found in diagnostic for command "${command}"`);
|
||||||
}
|
}
|
||||||
|
|
@ -287,6 +301,29 @@ exports.VersionResult = VersionResult;
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
|
@ -303,8 +340,10 @@ const VersionType_1 = __nccwpck_require__(895);
|
||||||
const UserInfo_1 = __nccwpck_require__(5907);
|
const UserInfo_1 = __nccwpck_require__(5907);
|
||||||
const VersionInformation_1 = __nccwpck_require__(5686);
|
const VersionInformation_1 = __nccwpck_require__(5686);
|
||||||
const DebugManager_1 = __nccwpck_require__(1823);
|
const DebugManager_1 = __nccwpck_require__(1823);
|
||||||
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
function runAction(configurationProvider) {
|
function runAction(configurationProvider) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
core.info("VAGO STARTING runAction");
|
||||||
const currentCommitResolver = configurationProvider.GetCurrentCommitResolver();
|
const currentCommitResolver = configurationProvider.GetCurrentCommitResolver();
|
||||||
const lastReleaseResolver = configurationProvider.GetLastReleaseResolver();
|
const lastReleaseResolver = configurationProvider.GetLastReleaseResolver();
|
||||||
const commitsProvider = configurationProvider.GetCommitsProvider();
|
const commitsProvider = configurationProvider.GetCommitsProvider();
|
||||||
|
|
@ -314,21 +353,34 @@ function runAction(configurationProvider) {
|
||||||
const userFormatter = configurationProvider.GetUserFormatter();
|
const userFormatter = configurationProvider.GetUserFormatter();
|
||||||
const debugManager = DebugManager_1.DebugManager.getInstance();
|
const debugManager = DebugManager_1.DebugManager.getInstance();
|
||||||
if (yield currentCommitResolver.IsEmptyRepoAsync()) {
|
if (yield currentCommitResolver.IsEmptyRepoAsync()) {
|
||||||
|
core.info("VAGO REPO WAS EMPTY, returning default version information");
|
||||||
const versionInfo = new VersionInformation_1.VersionInformation(0, 0, 0, 0, VersionType_1.VersionType.None, [], false, false);
|
const versionInfo = new VersionInformation_1.VersionInformation(0, 0, 0, 0, VersionType_1.VersionType.None, [], false, false);
|
||||||
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format('author', []), '', '', tagFormatter.Parse(tagFormatter.Format(versionInfo)).join('.'), debugManager.getDebugOutput(true));
|
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format("author", []), "", "", tagFormatter.Parse(tagFormatter.Format(versionInfo)).join("."), debugManager.getDebugOutput(true));
|
||||||
}
|
}
|
||||||
|
core.info("VAGO REPO IS NOT EMPTY, continuing with versioning");
|
||||||
const currentCommit = yield currentCommitResolver.ResolveAsync();
|
const currentCommit = yield currentCommitResolver.ResolveAsync();
|
||||||
|
core.info("VAGO CURRENT COMMIT: " + currentCommit);
|
||||||
const lastRelease = yield lastReleaseResolver.ResolveAsync(currentCommit, tagFormatter);
|
const lastRelease = yield lastReleaseResolver.ResolveAsync(currentCommit, tagFormatter);
|
||||||
|
core.info("VAGO LAST RELEASE: " +
|
||||||
|
lastRelease.hash +
|
||||||
|
" " +
|
||||||
|
lastRelease.major +
|
||||||
|
"." +
|
||||||
|
lastRelease.minor +
|
||||||
|
"." +
|
||||||
|
lastRelease.patch);
|
||||||
const commitSet = yield commitsProvider.GetCommitsAsync(lastRelease.hash, currentCommit);
|
const commitSet = yield commitsProvider.GetCommitsAsync(lastRelease.hash, currentCommit);
|
||||||
|
core.info("VAGO commit set le:" + commitSet.commits.length);
|
||||||
|
core.info("VAGO commit set changed: " + commitSet.changed.toString());
|
||||||
const classification = yield versionClassifier.ClassifyAsync(lastRelease, commitSet);
|
const classification = yield versionClassifier.ClassifyAsync(lastRelease, commitSet);
|
||||||
|
core.info("VAGO classification: " + JSON.stringify(classification));
|
||||||
const { isTagged } = lastRelease;
|
const { isTagged } = lastRelease;
|
||||||
const { major, minor, patch, increment, type, changed } = classification;
|
const { major, minor, patch, increment, type, changed } = classification;
|
||||||
// At this point all necessary data has been pulled from the database, create
|
// At this point all necessary data has been pulled from the database, create
|
||||||
// version information to be used by the formatters
|
// version information to be used by the formatters
|
||||||
let versionInfo = new VersionInformation_1.VersionInformation(major, minor, patch, increment, type, commitSet.commits, changed, isTagged);
|
let versionInfo = new VersionInformation_1.VersionInformation(major, minor, patch, increment, type, commitSet.commits, changed, isTagged);
|
||||||
// Group all the authors together, count the number of commits per author
|
// Group all the authors together, count the number of commits per author
|
||||||
const allAuthors = versionInfo.commits
|
const allAuthors = versionInfo.commits.reduce((acc, commit) => {
|
||||||
.reduce((acc, commit) => {
|
|
||||||
const key = `${commit.author} <${commit.authorEmail}>`;
|
const key = `${commit.author} <${commit.authorEmail}>`;
|
||||||
acc[key] = acc[key] || { n: commit.author, e: commit.authorEmail, c: 0 };
|
acc[key] = acc[key] || { n: commit.author, e: commit.authorEmail, c: 0 };
|
||||||
acc[key].c++;
|
acc[key].c++;
|
||||||
|
|
@ -337,7 +389,7 @@ function runAction(configurationProvider) {
|
||||||
const authors = Object.values(allAuthors)
|
const authors = Object.values(allAuthors)
|
||||||
.map((u) => new UserInfo_1.UserInfo(u.n, u.e, u.c))
|
.map((u) => new UserInfo_1.UserInfo(u.n, u.e, u.c))
|
||||||
.sort((a, b) => b.commits - a.commits);
|
.sort((a, b) => b.commits - a.commits);
|
||||||
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format('author', authors), currentCommit, lastRelease.hash, `${lastRelease.major}.${lastRelease.minor}.${lastRelease.patch}`, debugManager.getDebugOutput());
|
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format("author", authors), currentCommit, lastRelease.hash, `${lastRelease.major}.${lastRelease.minor}.${lastRelease.patch}`, debugManager.getDebugOutput());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.runAction = runAction;
|
exports.runAction = runAction;
|
||||||
|
|
@ -345,7 +397,7 @@ exports.runAction = runAction;
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 807:
|
/***/ 9894:
|
||||||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
@ -616,14 +668,15 @@ const ConfigurationProvider_1 = __nccwpck_require__(2614);
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
const VersionType_1 = __nccwpck_require__(895);
|
const VersionType_1 = __nccwpck_require__(895);
|
||||||
function setOutput(versionResult) {
|
function setOutput(versionResult) {
|
||||||
const { major, minor, patch, increment, versionType, formattedVersion, versionTag, changed, isTagged, authors, currentCommit, previousCommit, previousVersion, debugOutput } = versionResult;
|
const { major, minor, patch, increment, versionType, formattedVersion, versionTag, changed, isTagged, authors, currentCommit, previousCommit, previousVersion, debugOutput, } = versionResult;
|
||||||
const repository = process.env.GITHUB_REPOSITORY;
|
const repository = process.env.GITHUB_REPOSITORY;
|
||||||
if (!changed) {
|
if (!changed) {
|
||||||
core.info('No changes detected for this commit');
|
core.info("VAGOOO1");
|
||||||
|
core.info("No changes detected for this commit");
|
||||||
}
|
}
|
||||||
core.info(`Version is ${formattedVersion}`);
|
core.info(`Version is ${formattedVersion}`);
|
||||||
if (repository !== undefined) {
|
if (repository !== undefined) {
|
||||||
core.info(`To create a release for this version, go to https://github.com/${repository}/releases/new?tag=${versionTag}&target=${currentCommit.split('/').slice(-1)[0]}`);
|
core.info(`To create a release for this version, go to https://github.com/${repository}/releases/new?tag=${versionTag}&target=${currentCommit.split("/").slice(-1)[0]}`);
|
||||||
}
|
}
|
||||||
core.setOutput("version", formattedVersion);
|
core.setOutput("version", formattedVersion);
|
||||||
core.setOutput("major", major.toString());
|
core.setOutput("major", major.toString());
|
||||||
|
|
@ -642,56 +695,59 @@ function setOutput(versionResult) {
|
||||||
}
|
}
|
||||||
function run() {
|
function run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
core.info("VAGO Starting run action...");
|
||||||
function toBool(value) {
|
function toBool(value) {
|
||||||
if (!value || value.toLowerCase() === 'false') {
|
if (!value || value.toLowerCase() === "false") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (value.toLowerCase() === 'true') {
|
else if (value.toLowerCase() === "true") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
function toStringOrBool(value) {
|
function toStringOrBool(value) {
|
||||||
if (!value || value === 'false') {
|
if (!value || value === "false") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (value === 'true') {
|
if (value === "true") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
const config = {
|
const config = {
|
||||||
branch: core.getInput('branch'),
|
branch: core.getInput("branch"),
|
||||||
tagPrefix: core.getInput('tag_prefix'),
|
tagPrefix: core.getInput("tag_prefix"),
|
||||||
useBranches: toBool(core.getInput('use_branches')),
|
useBranches: toBool(core.getInput("use_branches")),
|
||||||
versionFromBranch: toStringOrBool(core.getInput('version_from_branch')),
|
versionFromBranch: toStringOrBool(core.getInput("version_from_branch")),
|
||||||
majorPattern: core.getInput('major_pattern'),
|
majorPattern: core.getInput("major_pattern"),
|
||||||
minorPattern: core.getInput('minor_pattern'),
|
minorPattern: core.getInput("minor_pattern"),
|
||||||
majorFlags: core.getInput('major_regexp_flags'),
|
majorFlags: core.getInput("major_regexp_flags"),
|
||||||
minorFlags: core.getInput('minor_regexp_flags'),
|
minorFlags: core.getInput("minor_regexp_flags"),
|
||||||
versionFormat: core.getInput('version_format'),
|
versionFormat: core.getInput("version_format"),
|
||||||
changePath: core.getInput('change_path'),
|
changePath: core.getInput("change_path"),
|
||||||
namespace: core.getInput('namespace'),
|
namespace: core.getInput("namespace"),
|
||||||
bumpEachCommit: toBool(core.getInput('bump_each_commit')),
|
bumpEachCommit: toBool(core.getInput("bump_each_commit")),
|
||||||
searchCommitBody: toBool(core.getInput('search_commit_body')),
|
searchCommitBody: toBool(core.getInput("search_commit_body")),
|
||||||
userFormatType: core.getInput('user_format_type'),
|
userFormatType: core.getInput("user_format_type"),
|
||||||
enablePrereleaseMode: toBool(core.getInput('enable_prerelease_mode')),
|
enablePrereleaseMode: toBool(core.getInput("enable_prerelease_mode")),
|
||||||
bumpEachCommitPatchPattern: core.getInput('bump_each_commit_patch_pattern'),
|
bumpEachCommitPatchPattern: core.getInput("bump_each_commit_patch_pattern"),
|
||||||
debug: toBool(core.getInput('debug')),
|
debug: toBool(core.getInput("debug")),
|
||||||
replay: ''
|
replay: "",
|
||||||
};
|
};
|
||||||
if (config.useBranches) {
|
if (config.useBranches) {
|
||||||
core.warning(`The 'use_branches' input option is deprecated, please see the documentation for more information on how to use branches`);
|
core.warning(`The 'use_branches' input option is deprecated, please see the documentation for more information on how to use branches`);
|
||||||
}
|
}
|
||||||
if (config.versionFormat === '' && core.getInput('format') !== '') {
|
if (config.versionFormat === "" && core.getInput("format") !== "") {
|
||||||
core.warning(`The 'format' input is deprecated, use 'versionFormat' instead`);
|
core.warning(`The 'format' input is deprecated, use 'versionFormat' instead`);
|
||||||
config.versionFormat = core.getInput('format');
|
config.versionFormat = core.getInput("format");
|
||||||
}
|
}
|
||||||
if (core.getInput('short_tags') !== '') {
|
if (core.getInput("short_tags") !== "") {
|
||||||
core.warning(`The 'short_tags' input option is no longer supported`);
|
core.warning(`The 'short_tags' input option is no longer supported`);
|
||||||
}
|
}
|
||||||
const configurationProvider = new ConfigurationProvider_1.ConfigurationProvider(config);
|
const configurationProvider = new ConfigurationProvider_1.ConfigurationProvider(config);
|
||||||
|
core.info("VAGO start await runAction(configurationProvider)");
|
||||||
const result = yield (0, action_1.runAction)(configurationProvider);
|
const result = yield (0, action_1.runAction)(configurationProvider);
|
||||||
|
core.info("VAGO before setOutput(result)");
|
||||||
setOutput(result);
|
setOutput(result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -865,6 +921,29 @@ exports.CommitInfoSet = CommitInfoSet;
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
|
@ -879,6 +958,7 @@ exports.DefaultCommitsProvider = void 0;
|
||||||
const CommandRunner_1 = __nccwpck_require__(949);
|
const CommandRunner_1 = __nccwpck_require__(949);
|
||||||
const CommitInfo_1 = __nccwpck_require__(2142);
|
const CommitInfo_1 = __nccwpck_require__(2142);
|
||||||
const CommitInfoSet_1 = __nccwpck_require__(6859);
|
const CommitInfoSet_1 = __nccwpck_require__(6859);
|
||||||
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
class DefaultCommitsProvider {
|
class DefaultCommitsProvider {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
this.changePath = config.changePath;
|
this.changePath = config.changePath;
|
||||||
|
|
@ -903,7 +983,9 @@ class DefaultCommitsProvider {
|
||||||
.join('%n');
|
.join('%n');
|
||||||
var logCommand = `git log --pretty="${pretty}" --author-date-order ${(startHash === '' ? endHash : `${startHash}..${endHash}`)}`;
|
var logCommand = `git log --pretty="${pretty}" --author-date-order ${(startHash === '' ? endHash : `${startHash}..${endHash}`)}`;
|
||||||
if (this.changePath !== '') {
|
if (this.changePath !== '') {
|
||||||
|
core.info("VAGO Changepath was there: " + this.changePath);
|
||||||
logCommand += ` -- ${this.changePath}`;
|
logCommand += ` -- ${this.changePath}`;
|
||||||
|
core.info("VAGO logCommand: " + logCommand);
|
||||||
}
|
}
|
||||||
const log = yield (0, CommandRunner_1.cmd)(logCommand);
|
const log = yield (0, CommandRunner_1.cmd)(logCommand);
|
||||||
const entries = log
|
const entries = log
|
||||||
|
|
@ -934,8 +1016,10 @@ class DefaultCommitsProvider {
|
||||||
changed = changedFiles.length > 0;
|
changed = changedFiles.length > 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
core.info("VAGO diffing: " + logCommand);
|
||||||
const changedFiles = yield (0, CommandRunner_1.cmd)(`git diff --name-only ${startHash}..${endHash} -- ${this.changePath}`);
|
const changedFiles = yield (0, CommandRunner_1.cmd)(`git diff --name-only ${startHash}..${endHash} -- ${this.changePath}`);
|
||||||
changed = changedFiles.length > 0;
|
changed = changedFiles.length > 0;
|
||||||
|
core.info("VAGO changedFiles le: " + changedFiles.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new CommitInfoSet_1.CommitInfoSet(changed, commits);
|
return new CommitInfoSet_1.CommitInfoSet(changed, commits);
|
||||||
|
|
@ -1048,6 +1132,7 @@ class DefaultLastReleaseResolver {
|
||||||
currentTag = tagFormatter.IsValid(currentTag) ? currentTag : '';
|
currentTag = tagFormatter.IsValid(currentTag) ? currentTag : '';
|
||||||
const isTagged = currentTag !== '';
|
const isTagged = currentTag !== '';
|
||||||
const [currentMajor, currentMinor, currentPatch] = !!currentTag ? tagFormatter.Parse(currentTag) : [null, null, null];
|
const [currentMajor, currentMinor, currentPatch] = !!currentTag ? tagFormatter.Parse(currentTag) : [null, null, null];
|
||||||
|
core.info("VAGO DefaultLastReleaseResolver.ResolveAsync: currentTag: " + currentTag + ", currentMajor: " + currentMajor + ", currentMinor: " + currentMinor + ", currentPatch: " + currentPatch);
|
||||||
let tagsCount = 0;
|
let tagsCount = 0;
|
||||||
let tag = '';
|
let tag = '';
|
||||||
try {
|
try {
|
||||||
|
|
@ -1086,11 +1171,13 @@ class DefaultLastReleaseResolver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const [major, minor, patch] = tagFormatter.Parse('');
|
const [major, minor, patch] = tagFormatter.Parse('');
|
||||||
|
core.info("VAGO tag was empty: " + major + ", " + minor + ", " + patch);
|
||||||
// no release tags yet, use the initial commit as the root
|
// no release tags yet, use the initial commit as the root
|
||||||
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, '', currentMajor, currentMinor, currentPatch, isTagged);
|
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, '', currentMajor, currentMinor, currentPatch, isTagged);
|
||||||
}
|
}
|
||||||
// parse the version tag
|
// parse the version tag
|
||||||
const [major, minor, patch] = tagFormatter.Parse(tag);
|
const [major, minor, patch] = tagFormatter.Parse(tag);
|
||||||
|
core.info("VAGO tag was not empty: " + tag + ", " + major + ", " + minor + ", " + patch);
|
||||||
const root = yield (0, CommandRunner_1.cmd)('git', `merge-base`, tag, current);
|
const root = yield (0, CommandRunner_1.cmd)('git', `merge-base`, tag, current);
|
||||||
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, root.trim(), currentMajor, currentMinor, currentPatch, isTagged);
|
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, root.trim(), currentMajor, currentMinor, currentPatch, isTagged);
|
||||||
});
|
});
|
||||||
|
|
@ -1106,6 +1193,29 @@ exports.DefaultLastReleaseResolver = DefaultLastReleaseResolver;
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
|
@ -1119,6 +1229,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.DefaultVersionClassifier = void 0;
|
exports.DefaultVersionClassifier = void 0;
|
||||||
const VersionClassification_1 = __nccwpck_require__(7457);
|
const VersionClassification_1 = __nccwpck_require__(7457);
|
||||||
const VersionType_1 = __nccwpck_require__(895);
|
const VersionType_1 = __nccwpck_require__(895);
|
||||||
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
class DefaultVersionClassifier {
|
class DefaultVersionClassifier {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
const searchBody = config.searchCommitBody;
|
const searchBody = config.searchCommitBody;
|
||||||
|
|
@ -1192,9 +1303,13 @@ class DefaultVersionClassifier {
|
||||||
}
|
}
|
||||||
ClassifyAsync(lastRelease, commitSet) {
|
ClassifyAsync(lastRelease, commitSet) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync called");
|
||||||
const { type, increment, changed } = this.resolveCommitType(commitSet);
|
const { type, increment, changed } = this.resolveCommitType(commitSet);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: type: " + VersionType_1.VersionType[type] + ", increment: " + increment + ", changed: " + changed);
|
||||||
const { major, minor, patch } = this.getNextVersion(lastRelease, type);
|
const { major, minor, patch } = this.getNextVersion(lastRelease, type);
|
||||||
|
core.info("VAGOO DefaultVersionClassifier.ClassifyAsync: major: " + major + ", minor: " + minor + ", patch: " + patch);
|
||||||
if (lastRelease.currentPatch !== null) {
|
if (lastRelease.currentPatch !== null) {
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentPatch is not null, using it to determine version classification");
|
||||||
// If the current commit is tagged, we must use that version. Here we check if the version we have resolved from the
|
// If the current commit is tagged, we must use that version. Here we check if the version we have resolved from the
|
||||||
// previous commits is the same as the current version. If it is, we will use the increment value, otherwise we reset
|
// previous commits is the same as the current version. If it is, we will use the increment value, otherwise we reset
|
||||||
// to zero. For example:
|
// to zero. For example:
|
||||||
|
|
@ -1204,6 +1319,10 @@ class DefaultVersionClassifier {
|
||||||
// - commit 4 - v2.0.1+0
|
// - commit 4 - v2.0.1+0
|
||||||
const versionsMatch = lastRelease.currentMajor === major && lastRelease.currentMinor === minor && lastRelease.currentPatch === patch;
|
const versionsMatch = lastRelease.currentMajor === major && lastRelease.currentMinor === minor && lastRelease.currentPatch === patch;
|
||||||
const currentIncrement = versionsMatch ? increment : 0;
|
const currentIncrement = versionsMatch ? increment : 0;
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: versionsMatch: " + versionsMatch + ", currentIncrement: " + currentIncrement);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentMajor: " + lastRelease.currentMajor);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentMinor: " + lastRelease.currentMinor);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentPatch: " + lastRelease.currentPatch);
|
||||||
return new VersionClassification_1.VersionClassification(VersionType_1.VersionType.None, currentIncrement, false, lastRelease.currentMajor, lastRelease.currentMinor, lastRelease.currentPatch);
|
return new VersionClassification_1.VersionClassification(VersionType_1.VersionType.None, currentIncrement, false, lastRelease.currentMajor, lastRelease.currentMinor, lastRelease.currentPatch);
|
||||||
}
|
}
|
||||||
return new VersionClassification_1.VersionClassification(type, increment, changed, major, minor, patch);
|
return new VersionClassification_1.VersionClassification(type, increment, changed, major, minor, patch);
|
||||||
|
|
@ -1371,7 +1490,7 @@ var VersionType;
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 5241:
|
/***/ 7351:
|
||||||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
@ -1505,7 +1624,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
|
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
|
||||||
const command_1 = __nccwpck_require__(5241);
|
const command_1 = __nccwpck_require__(7351);
|
||||||
const file_command_1 = __nccwpck_require__(717);
|
const file_command_1 = __nccwpck_require__(717);
|
||||||
const utils_1 = __nccwpck_require__(5278);
|
const utils_1 = __nccwpck_require__(5278);
|
||||||
const os = __importStar(__nccwpck_require__(2037));
|
const os = __importStar(__nccwpck_require__(2037));
|
||||||
|
|
@ -2513,7 +2632,7 @@ const os = __importStar(__nccwpck_require__(2037));
|
||||||
const events = __importStar(__nccwpck_require__(2361));
|
const events = __importStar(__nccwpck_require__(2361));
|
||||||
const child = __importStar(__nccwpck_require__(2081));
|
const child = __importStar(__nccwpck_require__(2081));
|
||||||
const path = __importStar(__nccwpck_require__(1017));
|
const path = __importStar(__nccwpck_require__(1017));
|
||||||
const io = __importStar(__nccwpck_require__(7351));
|
const io = __importStar(__nccwpck_require__(7436));
|
||||||
const ioUtil = __importStar(__nccwpck_require__(1962));
|
const ioUtil = __importStar(__nccwpck_require__(1962));
|
||||||
const timers_1 = __nccwpck_require__(9512);
|
const timers_1 = __nccwpck_require__(9512);
|
||||||
/* eslint-disable @typescript-eslint/unbound-method */
|
/* eslint-disable @typescript-eslint/unbound-method */
|
||||||
|
|
@ -4091,7 +4210,7 @@ exports.getCmdPath = getCmdPath;
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 7351:
|
/***/ 7436:
|
||||||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
@ -4875,7 +4994,7 @@ exports["default"] = _default;
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 8292:
|
/***/ 807:
|
||||||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
@ -4993,7 +5112,7 @@ Object.defineProperty(exports, "__esModule", ({
|
||||||
}));
|
}));
|
||||||
exports["default"] = void 0;
|
exports["default"] = void 0;
|
||||||
|
|
||||||
var _rng = _interopRequireDefault(__nccwpck_require__(8292));
|
var _rng = _interopRequireDefault(__nccwpck_require__(807));
|
||||||
|
|
||||||
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
||||||
|
|
||||||
|
|
@ -5215,7 +5334,7 @@ Object.defineProperty(exports, "__esModule", ({
|
||||||
}));
|
}));
|
||||||
exports["default"] = void 0;
|
exports["default"] = void 0;
|
||||||
|
|
||||||
var _rng = _interopRequireDefault(__nccwpck_require__(8292));
|
var _rng = _interopRequireDefault(__nccwpck_require__(807));
|
||||||
|
|
||||||
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
var _stringify = _interopRequireDefault(__nccwpck_require__(8950));
|
||||||
|
|
||||||
|
|
|
||||||
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
|
|
@ -21,9 +21,9 @@ class ActionConfig {
|
||||||
/** A string which indicates the flags used by the `minorPattern` regular expression. */
|
/** A string which indicates the flags used by the `minorPattern` regular expression. */
|
||||||
this.minorFlags = "";
|
this.minorFlags = "";
|
||||||
/** Pattern to use when formatting output version */
|
/** Pattern to use when formatting output version */
|
||||||
this.versionFormat = '${major}.${minor}.${patch}';
|
this.versionFormat = "${major}.${minor}.${patch}";
|
||||||
/** Path to check for changes. If any changes are detected in the path the 'changed' output will true. Enter multiple paths separated by spaces. */
|
/** Path to check for changes. If any changes are detected in the path the 'changed' output will true. Enter multiple paths separated by spaces. */
|
||||||
this.changePath = '';
|
this.changePath = "";
|
||||||
/** Use to create a named sub-version. This value will be appended to tags created for this version. */
|
/** Use to create a named sub-version. This value will be appended to tags created for this version. */
|
||||||
this.namespace = "";
|
this.namespace = "";
|
||||||
/** If true, every commit will be treated as a bump to the version. */
|
/** If true, every commit will be treated as a bump to the version. */
|
||||||
|
|
@ -39,7 +39,7 @@ class ActionConfig {
|
||||||
/** If enabled, diagnostic information will be added to the action output. */
|
/** If enabled, diagnostic information will be added to the action output. */
|
||||||
this.debug = false;
|
this.debug = false;
|
||||||
/** Diagnostics to replay */
|
/** Diagnostics to replay */
|
||||||
this.replay = '';
|
this.replay = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.ActionConfig = ActionConfig;
|
exports.ActionConfig = ActionConfig;
|
||||||
|
|
|
||||||
|
|
@ -41,15 +41,19 @@ const cmd = (command, ...args) => __awaiter(void 0, void 0, void 0, function* ()
|
||||||
if (debugManager.isReplayMode()) {
|
if (debugManager.isReplayMode()) {
|
||||||
return debugManager.replayCommand(command, args);
|
return debugManager.replayCommand(command, args);
|
||||||
}
|
}
|
||||||
let output = '', errors = '';
|
let output = "", errors = "";
|
||||||
const options = {
|
const options = {
|
||||||
silent: true,
|
silent: true,
|
||||||
listeners: {
|
listeners: {
|
||||||
stdout: (data) => { output += data.toString(); },
|
stdout: (data) => {
|
||||||
stderr: (data) => { errors += data.toString(); },
|
output += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data) => {
|
||||||
|
errors += data.toString();
|
||||||
|
},
|
||||||
ignoreReturnCode: true,
|
ignoreReturnCode: true,
|
||||||
silent: true
|
silent: true,
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
let caughtError = null;
|
let caughtError = null;
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -17,16 +17,24 @@ class ConfigurationProvider {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
DebugManager_1.DebugManager.getInstance().initializeConfig(config);
|
DebugManager_1.DebugManager.getInstance().initializeConfig(config);
|
||||||
}
|
}
|
||||||
GetCurrentCommitResolver() { return new DefaultCurrentCommitResolver_1.DefaultCurrentCommitResolver(this.config); }
|
GetCurrentCommitResolver() {
|
||||||
GetLastReleaseResolver() { return new DefaultLastReleaseResolver_1.DefaultLastReleaseResolver(this.config); }
|
return new DefaultCurrentCommitResolver_1.DefaultCurrentCommitResolver(this.config);
|
||||||
GetCommitsProvider() { return new DefaultCommitsProvider_1.DefaultCommitsProvider(this.config); }
|
}
|
||||||
|
GetLastReleaseResolver() {
|
||||||
|
return new DefaultLastReleaseResolver_1.DefaultLastReleaseResolver(this.config);
|
||||||
|
}
|
||||||
|
GetCommitsProvider() {
|
||||||
|
return new DefaultCommitsProvider_1.DefaultCommitsProvider(this.config);
|
||||||
|
}
|
||||||
GetVersionClassifier() {
|
GetVersionClassifier() {
|
||||||
if (this.config.bumpEachCommit) {
|
if (this.config.bumpEachCommit) {
|
||||||
return new BumpAlwaysVersionClassifier_1.BumpAlwaysVersionClassifier(this.config);
|
return new BumpAlwaysVersionClassifier_1.BumpAlwaysVersionClassifier(this.config);
|
||||||
}
|
}
|
||||||
return new DefaultVersionClassifier_1.DefaultVersionClassifier(this.config);
|
return new DefaultVersionClassifier_1.DefaultVersionClassifier(this.config);
|
||||||
}
|
}
|
||||||
GetVersionFormatter() { return new DefaultVersionFormatter_1.DefaultVersionFormatter(this.config); }
|
GetVersionFormatter() {
|
||||||
|
return new DefaultVersionFormatter_1.DefaultVersionFormatter(this.config);
|
||||||
|
}
|
||||||
GetTagFormatter(branchName) {
|
GetTagFormatter(branchName) {
|
||||||
if (this.config.versionFromBranch) {
|
if (this.config.versionFromBranch) {
|
||||||
return new BranchVersioningTagFormatter_1.BranchVersioningTagFormatter(this.config, branchName);
|
return new BranchVersioningTagFormatter_1.BranchVersioningTagFormatter(this.config, branchName);
|
||||||
|
|
@ -35,8 +43,10 @@ class ConfigurationProvider {
|
||||||
}
|
}
|
||||||
GetUserFormatter() {
|
GetUserFormatter() {
|
||||||
switch (this.config.userFormatType) {
|
switch (this.config.userFormatType) {
|
||||||
case 'json': return new JsonUserFormatter_1.JsonUserFormatter(this.config);
|
case "json":
|
||||||
case 'csv': return new CsvUserFormatter_1.CsvUserFormatter(this.config);
|
return new JsonUserFormatter_1.JsonUserFormatter(this.config);
|
||||||
|
case "csv":
|
||||||
|
return new CsvUserFormatter_1.CsvUserFormatter(this.config);
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unknown user format type: ${this.config.userFormatType}, supported types: json, csv`);
|
throw new Error(`Unknown user format type: ${this.config.userFormatType}, supported types: json, csv`);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,6 @@ class DebugManager {
|
||||||
this.replayMode = false;
|
this.replayMode = false;
|
||||||
this.diagnosticInfo = new DiagnosticInfo();
|
this.diagnosticInfo = new DiagnosticInfo();
|
||||||
}
|
}
|
||||||
;
|
|
||||||
/** Enables replay mode and loads the diagnostic information from the specified string */
|
/** Enables replay mode and loads the diagnostic information from the specified string */
|
||||||
replayFromDiagnostics(diagnostics) {
|
replayFromDiagnostics(diagnostics) {
|
||||||
this.debugEnabled = false;
|
this.debugEnabled = false;
|
||||||
|
|
@ -50,7 +49,7 @@ class DebugManager {
|
||||||
}
|
}
|
||||||
/** Returns a JSON string containing the diagnostic information for this run */
|
/** Returns a JSON string containing the diagnostic information for this run */
|
||||||
getDebugOutput(emptyRepo = false) {
|
getDebugOutput(emptyRepo = false) {
|
||||||
return this.isDebugEnabled() ? JSON.stringify(this.diagnosticInfo) : '';
|
return this.isDebugEnabled() ? JSON.stringify(this.diagnosticInfo) : "";
|
||||||
}
|
}
|
||||||
/** Records a command and its output for diagnostic purposes */
|
/** Records a command and its output for diagnostic purposes */
|
||||||
recordCommand(command, args, output, stderr, error) {
|
recordCommand(command, args, output, stderr, error) {
|
||||||
|
|
@ -62,9 +61,10 @@ class DebugManager {
|
||||||
/** Replays the specified command and returns the output */
|
/** Replays the specified command and returns the output */
|
||||||
replayCommand(command, args) {
|
replayCommand(command, args) {
|
||||||
if (this.diagnosticInfo === null) {
|
if (this.diagnosticInfo === null) {
|
||||||
throw new Error('No diagnostic information available for replay');
|
throw new Error("No diagnostic information available for replay");
|
||||||
}
|
}
|
||||||
const commandResult = this.diagnosticInfo.commands.find(c => c.command === command && JSON.stringify(c.args) === JSON.stringify(args));
|
const commandResult = this.diagnosticInfo.commands.find((c) => c.command === command &&
|
||||||
|
JSON.stringify(c.args) === JSON.stringify(args));
|
||||||
if (!commandResult) {
|
if (!commandResult) {
|
||||||
throw new Error(`No result found in diagnostic for command "${command}"`);
|
throw new Error(`No result found in diagnostic for command "${command}"`);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,27 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
|
@ -15,8 +38,10 @@ const VersionType_1 = require("./providers/VersionType");
|
||||||
const UserInfo_1 = require("./providers/UserInfo");
|
const UserInfo_1 = require("./providers/UserInfo");
|
||||||
const VersionInformation_1 = require("./providers/VersionInformation");
|
const VersionInformation_1 = require("./providers/VersionInformation");
|
||||||
const DebugManager_1 = require("./DebugManager");
|
const DebugManager_1 = require("./DebugManager");
|
||||||
|
const core = __importStar(require("@actions/core"));
|
||||||
function runAction(configurationProvider) {
|
function runAction(configurationProvider) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
core.info("VAGO STARTING runAction");
|
||||||
const currentCommitResolver = configurationProvider.GetCurrentCommitResolver();
|
const currentCommitResolver = configurationProvider.GetCurrentCommitResolver();
|
||||||
const lastReleaseResolver = configurationProvider.GetLastReleaseResolver();
|
const lastReleaseResolver = configurationProvider.GetLastReleaseResolver();
|
||||||
const commitsProvider = configurationProvider.GetCommitsProvider();
|
const commitsProvider = configurationProvider.GetCommitsProvider();
|
||||||
|
|
@ -26,21 +51,34 @@ function runAction(configurationProvider) {
|
||||||
const userFormatter = configurationProvider.GetUserFormatter();
|
const userFormatter = configurationProvider.GetUserFormatter();
|
||||||
const debugManager = DebugManager_1.DebugManager.getInstance();
|
const debugManager = DebugManager_1.DebugManager.getInstance();
|
||||||
if (yield currentCommitResolver.IsEmptyRepoAsync()) {
|
if (yield currentCommitResolver.IsEmptyRepoAsync()) {
|
||||||
|
core.info("VAGO REPO WAS EMPTY, returning default version information");
|
||||||
const versionInfo = new VersionInformation_1.VersionInformation(0, 0, 0, 0, VersionType_1.VersionType.None, [], false, false);
|
const versionInfo = new VersionInformation_1.VersionInformation(0, 0, 0, 0, VersionType_1.VersionType.None, [], false, false);
|
||||||
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format('author', []), '', '', tagFormatter.Parse(tagFormatter.Format(versionInfo)).join('.'), debugManager.getDebugOutput(true));
|
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format("author", []), "", "", tagFormatter.Parse(tagFormatter.Format(versionInfo)).join("."), debugManager.getDebugOutput(true));
|
||||||
}
|
}
|
||||||
|
core.info("VAGO REPO IS NOT EMPTY, continuing with versioning");
|
||||||
const currentCommit = yield currentCommitResolver.ResolveAsync();
|
const currentCommit = yield currentCommitResolver.ResolveAsync();
|
||||||
|
core.info("VAGO CURRENT COMMIT: " + currentCommit);
|
||||||
const lastRelease = yield lastReleaseResolver.ResolveAsync(currentCommit, tagFormatter);
|
const lastRelease = yield lastReleaseResolver.ResolveAsync(currentCommit, tagFormatter);
|
||||||
|
core.info("VAGO LAST RELEASE: " +
|
||||||
|
lastRelease.hash +
|
||||||
|
" " +
|
||||||
|
lastRelease.major +
|
||||||
|
"." +
|
||||||
|
lastRelease.minor +
|
||||||
|
"." +
|
||||||
|
lastRelease.patch);
|
||||||
const commitSet = yield commitsProvider.GetCommitsAsync(lastRelease.hash, currentCommit);
|
const commitSet = yield commitsProvider.GetCommitsAsync(lastRelease.hash, currentCommit);
|
||||||
|
core.info("VAGO commit set le:" + commitSet.commits.length);
|
||||||
|
core.info("VAGO commit set changed: " + commitSet.changed.toString());
|
||||||
const classification = yield versionClassifier.ClassifyAsync(lastRelease, commitSet);
|
const classification = yield versionClassifier.ClassifyAsync(lastRelease, commitSet);
|
||||||
|
core.info("VAGO classification: " + JSON.stringify(classification));
|
||||||
const { isTagged } = lastRelease;
|
const { isTagged } = lastRelease;
|
||||||
const { major, minor, patch, increment, type, changed } = classification;
|
const { major, minor, patch, increment, type, changed } = classification;
|
||||||
// At this point all necessary data has been pulled from the database, create
|
// At this point all necessary data has been pulled from the database, create
|
||||||
// version information to be used by the formatters
|
// version information to be used by the formatters
|
||||||
let versionInfo = new VersionInformation_1.VersionInformation(major, minor, patch, increment, type, commitSet.commits, changed, isTagged);
|
let versionInfo = new VersionInformation_1.VersionInformation(major, minor, patch, increment, type, commitSet.commits, changed, isTagged);
|
||||||
// Group all the authors together, count the number of commits per author
|
// Group all the authors together, count the number of commits per author
|
||||||
const allAuthors = versionInfo.commits
|
const allAuthors = versionInfo.commits.reduce((acc, commit) => {
|
||||||
.reduce((acc, commit) => {
|
|
||||||
const key = `${commit.author} <${commit.authorEmail}>`;
|
const key = `${commit.author} <${commit.authorEmail}>`;
|
||||||
acc[key] = acc[key] || { n: commit.author, e: commit.authorEmail, c: 0 };
|
acc[key] = acc[key] || { n: commit.author, e: commit.authorEmail, c: 0 };
|
||||||
acc[key].c++;
|
acc[key].c++;
|
||||||
|
|
@ -49,7 +87,7 @@ function runAction(configurationProvider) {
|
||||||
const authors = Object.values(allAuthors)
|
const authors = Object.values(allAuthors)
|
||||||
.map((u) => new UserInfo_1.UserInfo(u.n, u.e, u.c))
|
.map((u) => new UserInfo_1.UserInfo(u.n, u.e, u.c))
|
||||||
.sort((a, b) => b.commits - a.commits);
|
.sort((a, b) => b.commits - a.commits);
|
||||||
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format('author', authors), currentCommit, lastRelease.hash, `${lastRelease.major}.${lastRelease.minor}.${lastRelease.patch}`, debugManager.getDebugOutput());
|
return new VersionResult_1.VersionResult(versionInfo.major, versionInfo.minor, versionInfo.patch, versionInfo.increment, versionInfo.type, versionFormatter.Format(versionInfo), tagFormatter.Format(versionInfo), versionInfo.changed, versionInfo.isTagged, userFormatter.Format("author", authors), currentCommit, lastRelease.hash, `${lastRelease.major}.${lastRelease.minor}.${lastRelease.patch}`, debugManager.getDebugOutput());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.runAction = runAction;
|
exports.runAction = runAction;
|
||||||
|
|
|
||||||
60
lib/main.js
60
lib/main.js
|
|
@ -38,14 +38,15 @@ const ConfigurationProvider_1 = require("./ConfigurationProvider");
|
||||||
const core = __importStar(require("@actions/core"));
|
const core = __importStar(require("@actions/core"));
|
||||||
const VersionType_1 = require("./providers/VersionType");
|
const VersionType_1 = require("./providers/VersionType");
|
||||||
function setOutput(versionResult) {
|
function setOutput(versionResult) {
|
||||||
const { major, minor, patch, increment, versionType, formattedVersion, versionTag, changed, isTagged, authors, currentCommit, previousCommit, previousVersion, debugOutput } = versionResult;
|
const { major, minor, patch, increment, versionType, formattedVersion, versionTag, changed, isTagged, authors, currentCommit, previousCommit, previousVersion, debugOutput, } = versionResult;
|
||||||
const repository = process.env.GITHUB_REPOSITORY;
|
const repository = process.env.GITHUB_REPOSITORY;
|
||||||
if (!changed) {
|
if (!changed) {
|
||||||
core.info('No changes detected for this commit');
|
core.info("VAGOOO1");
|
||||||
|
core.info("No changes detected for this commit");
|
||||||
}
|
}
|
||||||
core.info(`Version is ${formattedVersion}`);
|
core.info(`Version is ${formattedVersion}`);
|
||||||
if (repository !== undefined) {
|
if (repository !== undefined) {
|
||||||
core.info(`To create a release for this version, go to https://github.com/${repository}/releases/new?tag=${versionTag}&target=${currentCommit.split('/').slice(-1)[0]}`);
|
core.info(`To create a release for this version, go to https://github.com/${repository}/releases/new?tag=${versionTag}&target=${currentCommit.split("/").slice(-1)[0]}`);
|
||||||
}
|
}
|
||||||
core.setOutput("version", formattedVersion);
|
core.setOutput("version", formattedVersion);
|
||||||
core.setOutput("major", major.toString());
|
core.setOutput("major", major.toString());
|
||||||
|
|
@ -64,56 +65,59 @@ function setOutput(versionResult) {
|
||||||
}
|
}
|
||||||
function run() {
|
function run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
core.info("VAGO Starting run action...");
|
||||||
function toBool(value) {
|
function toBool(value) {
|
||||||
if (!value || value.toLowerCase() === 'false') {
|
if (!value || value.toLowerCase() === "false") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (value.toLowerCase() === 'true') {
|
else if (value.toLowerCase() === "true") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
function toStringOrBool(value) {
|
function toStringOrBool(value) {
|
||||||
if (!value || value === 'false') {
|
if (!value || value === "false") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (value === 'true') {
|
if (value === "true") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
const config = {
|
const config = {
|
||||||
branch: core.getInput('branch'),
|
branch: core.getInput("branch"),
|
||||||
tagPrefix: core.getInput('tag_prefix'),
|
tagPrefix: core.getInput("tag_prefix"),
|
||||||
useBranches: toBool(core.getInput('use_branches')),
|
useBranches: toBool(core.getInput("use_branches")),
|
||||||
versionFromBranch: toStringOrBool(core.getInput('version_from_branch')),
|
versionFromBranch: toStringOrBool(core.getInput("version_from_branch")),
|
||||||
majorPattern: core.getInput('major_pattern'),
|
majorPattern: core.getInput("major_pattern"),
|
||||||
minorPattern: core.getInput('minor_pattern'),
|
minorPattern: core.getInput("minor_pattern"),
|
||||||
majorFlags: core.getInput('major_regexp_flags'),
|
majorFlags: core.getInput("major_regexp_flags"),
|
||||||
minorFlags: core.getInput('minor_regexp_flags'),
|
minorFlags: core.getInput("minor_regexp_flags"),
|
||||||
versionFormat: core.getInput('version_format'),
|
versionFormat: core.getInput("version_format"),
|
||||||
changePath: core.getInput('change_path'),
|
changePath: core.getInput("change_path"),
|
||||||
namespace: core.getInput('namespace'),
|
namespace: core.getInput("namespace"),
|
||||||
bumpEachCommit: toBool(core.getInput('bump_each_commit')),
|
bumpEachCommit: toBool(core.getInput("bump_each_commit")),
|
||||||
searchCommitBody: toBool(core.getInput('search_commit_body')),
|
searchCommitBody: toBool(core.getInput("search_commit_body")),
|
||||||
userFormatType: core.getInput('user_format_type'),
|
userFormatType: core.getInput("user_format_type"),
|
||||||
enablePrereleaseMode: toBool(core.getInput('enable_prerelease_mode')),
|
enablePrereleaseMode: toBool(core.getInput("enable_prerelease_mode")),
|
||||||
bumpEachCommitPatchPattern: core.getInput('bump_each_commit_patch_pattern'),
|
bumpEachCommitPatchPattern: core.getInput("bump_each_commit_patch_pattern"),
|
||||||
debug: toBool(core.getInput('debug')),
|
debug: toBool(core.getInput("debug")),
|
||||||
replay: ''
|
replay: "",
|
||||||
};
|
};
|
||||||
if (config.useBranches) {
|
if (config.useBranches) {
|
||||||
core.warning(`The 'use_branches' input option is deprecated, please see the documentation for more information on how to use branches`);
|
core.warning(`The 'use_branches' input option is deprecated, please see the documentation for more information on how to use branches`);
|
||||||
}
|
}
|
||||||
if (config.versionFormat === '' && core.getInput('format') !== '') {
|
if (config.versionFormat === "" && core.getInput("format") !== "") {
|
||||||
core.warning(`The 'format' input is deprecated, use 'versionFormat' instead`);
|
core.warning(`The 'format' input is deprecated, use 'versionFormat' instead`);
|
||||||
config.versionFormat = core.getInput('format');
|
config.versionFormat = core.getInput("format");
|
||||||
}
|
}
|
||||||
if (core.getInput('short_tags') !== '') {
|
if (core.getInput("short_tags") !== "") {
|
||||||
core.warning(`The 'short_tags' input option is no longer supported`);
|
core.warning(`The 'short_tags' input option is no longer supported`);
|
||||||
}
|
}
|
||||||
const configurationProvider = new ConfigurationProvider_1.ConfigurationProvider(config);
|
const configurationProvider = new ConfigurationProvider_1.ConfigurationProvider(config);
|
||||||
|
core.info("VAGO start await runAction(configurationProvider)");
|
||||||
const result = yield (0, action_1.runAction)(configurationProvider);
|
const result = yield (0, action_1.runAction)(configurationProvider);
|
||||||
|
core.info("VAGO before setOutput(result)");
|
||||||
setOutput(result);
|
setOutput(result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,27 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
|
@ -13,6 +36,7 @@ exports.DefaultCommitsProvider = void 0;
|
||||||
const CommandRunner_1 = require("../CommandRunner");
|
const CommandRunner_1 = require("../CommandRunner");
|
||||||
const CommitInfo_1 = require("./CommitInfo");
|
const CommitInfo_1 = require("./CommitInfo");
|
||||||
const CommitInfoSet_1 = require("./CommitInfoSet");
|
const CommitInfoSet_1 = require("./CommitInfoSet");
|
||||||
|
const core = __importStar(require("@actions/core"));
|
||||||
class DefaultCommitsProvider {
|
class DefaultCommitsProvider {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
this.changePath = config.changePath;
|
this.changePath = config.changePath;
|
||||||
|
|
@ -37,7 +61,9 @@ class DefaultCommitsProvider {
|
||||||
.join('%n');
|
.join('%n');
|
||||||
var logCommand = `git log --pretty="${pretty}" --author-date-order ${(startHash === '' ? endHash : `${startHash}..${endHash}`)}`;
|
var logCommand = `git log --pretty="${pretty}" --author-date-order ${(startHash === '' ? endHash : `${startHash}..${endHash}`)}`;
|
||||||
if (this.changePath !== '') {
|
if (this.changePath !== '') {
|
||||||
|
core.info("VAGO Changepath was there: " + this.changePath);
|
||||||
logCommand += ` -- ${this.changePath}`;
|
logCommand += ` -- ${this.changePath}`;
|
||||||
|
core.info("VAGO logCommand: " + logCommand);
|
||||||
}
|
}
|
||||||
const log = yield (0, CommandRunner_1.cmd)(logCommand);
|
const log = yield (0, CommandRunner_1.cmd)(logCommand);
|
||||||
const entries = log
|
const entries = log
|
||||||
|
|
@ -68,8 +94,10 @@ class DefaultCommitsProvider {
|
||||||
changed = changedFiles.length > 0;
|
changed = changedFiles.length > 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
core.info("VAGO diffing: " + logCommand);
|
||||||
const changedFiles = yield (0, CommandRunner_1.cmd)(`git diff --name-only ${startHash}..${endHash} -- ${this.changePath}`);
|
const changedFiles = yield (0, CommandRunner_1.cmd)(`git diff --name-only ${startHash}..${endHash} -- ${this.changePath}`);
|
||||||
changed = changedFiles.length > 0;
|
changed = changedFiles.length > 0;
|
||||||
|
core.info("VAGO changedFiles le: " + changedFiles.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new CommitInfoSet_1.CommitInfoSet(changed, commits);
|
return new CommitInfoSet_1.CommitInfoSet(changed, commits);
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ class DefaultLastReleaseResolver {
|
||||||
currentTag = tagFormatter.IsValid(currentTag) ? currentTag : '';
|
currentTag = tagFormatter.IsValid(currentTag) ? currentTag : '';
|
||||||
const isTagged = currentTag !== '';
|
const isTagged = currentTag !== '';
|
||||||
const [currentMajor, currentMinor, currentPatch] = !!currentTag ? tagFormatter.Parse(currentTag) : [null, null, null];
|
const [currentMajor, currentMinor, currentPatch] = !!currentTag ? tagFormatter.Parse(currentTag) : [null, null, null];
|
||||||
|
core.info("VAGO DefaultLastReleaseResolver.ResolveAsync: currentTag: " + currentTag + ", currentMajor: " + currentMajor + ", currentMinor: " + currentMinor + ", currentPatch: " + currentPatch);
|
||||||
let tagsCount = 0;
|
let tagsCount = 0;
|
||||||
let tag = '';
|
let tag = '';
|
||||||
try {
|
try {
|
||||||
|
|
@ -86,11 +87,13 @@ class DefaultLastReleaseResolver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const [major, minor, patch] = tagFormatter.Parse('');
|
const [major, minor, patch] = tagFormatter.Parse('');
|
||||||
|
core.info("VAGO tag was empty: " + major + ", " + minor + ", " + patch);
|
||||||
// no release tags yet, use the initial commit as the root
|
// no release tags yet, use the initial commit as the root
|
||||||
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, '', currentMajor, currentMinor, currentPatch, isTagged);
|
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, '', currentMajor, currentMinor, currentPatch, isTagged);
|
||||||
}
|
}
|
||||||
// parse the version tag
|
// parse the version tag
|
||||||
const [major, minor, patch] = tagFormatter.Parse(tag);
|
const [major, minor, patch] = tagFormatter.Parse(tag);
|
||||||
|
core.info("VAGO tag was not empty: " + tag + ", " + major + ", " + minor + ", " + patch);
|
||||||
const root = yield (0, CommandRunner_1.cmd)('git', `merge-base`, tag, current);
|
const root = yield (0, CommandRunner_1.cmd)('git', `merge-base`, tag, current);
|
||||||
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, root.trim(), currentMajor, currentMinor, currentPatch, isTagged);
|
return new ReleaseInformation_1.ReleaseInformation(major, minor, patch, root.trim(), currentMajor, currentMinor, currentPatch, isTagged);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,27 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
|
@ -12,6 +35,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.DefaultVersionClassifier = void 0;
|
exports.DefaultVersionClassifier = void 0;
|
||||||
const VersionClassification_1 = require("./VersionClassification");
|
const VersionClassification_1 = require("./VersionClassification");
|
||||||
const VersionType_1 = require("./VersionType");
|
const VersionType_1 = require("./VersionType");
|
||||||
|
const core = __importStar(require("@actions/core"));
|
||||||
class DefaultVersionClassifier {
|
class DefaultVersionClassifier {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
const searchBody = config.searchCommitBody;
|
const searchBody = config.searchCommitBody;
|
||||||
|
|
@ -85,9 +109,13 @@ class DefaultVersionClassifier {
|
||||||
}
|
}
|
||||||
ClassifyAsync(lastRelease, commitSet) {
|
ClassifyAsync(lastRelease, commitSet) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync called");
|
||||||
const { type, increment, changed } = this.resolveCommitType(commitSet);
|
const { type, increment, changed } = this.resolveCommitType(commitSet);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: type: " + VersionType_1.VersionType[type] + ", increment: " + increment + ", changed: " + changed);
|
||||||
const { major, minor, patch } = this.getNextVersion(lastRelease, type);
|
const { major, minor, patch } = this.getNextVersion(lastRelease, type);
|
||||||
|
core.info("VAGOO DefaultVersionClassifier.ClassifyAsync: major: " + major + ", minor: " + minor + ", patch: " + patch);
|
||||||
if (lastRelease.currentPatch !== null) {
|
if (lastRelease.currentPatch !== null) {
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentPatch is not null, using it to determine version classification");
|
||||||
// If the current commit is tagged, we must use that version. Here we check if the version we have resolved from the
|
// If the current commit is tagged, we must use that version. Here we check if the version we have resolved from the
|
||||||
// previous commits is the same as the current version. If it is, we will use the increment value, otherwise we reset
|
// previous commits is the same as the current version. If it is, we will use the increment value, otherwise we reset
|
||||||
// to zero. For example:
|
// to zero. For example:
|
||||||
|
|
@ -97,6 +125,10 @@ class DefaultVersionClassifier {
|
||||||
// - commit 4 - v2.0.1+0
|
// - commit 4 - v2.0.1+0
|
||||||
const versionsMatch = lastRelease.currentMajor === major && lastRelease.currentMinor === minor && lastRelease.currentPatch === patch;
|
const versionsMatch = lastRelease.currentMajor === major && lastRelease.currentMinor === minor && lastRelease.currentPatch === patch;
|
||||||
const currentIncrement = versionsMatch ? increment : 0;
|
const currentIncrement = versionsMatch ? increment : 0;
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: versionsMatch: " + versionsMatch + ", currentIncrement: " + currentIncrement);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentMajor: " + lastRelease.currentMajor);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentMinor: " + lastRelease.currentMinor);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentPatch: " + lastRelease.currentPatch);
|
||||||
return new VersionClassification_1.VersionClassification(VersionType_1.VersionType.None, currentIncrement, false, lastRelease.currentMajor, lastRelease.currentMinor, lastRelease.currentPatch);
|
return new VersionClassification_1.VersionClassification(VersionType_1.VersionType.None, currentIncrement, false, lastRelease.currentMajor, lastRelease.currentMinor, lastRelease.currentPatch);
|
||||||
}
|
}
|
||||||
return new VersionClassification_1.VersionClassification(type, increment, changed, major, minor, patch);
|
return new VersionClassification_1.VersionClassification(type, increment, changed, major, minor, patch);
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,39 @@
|
||||||
/** Represents the input configuration for the semantic-version action */
|
/** Represents the input configuration for the semantic-version action */
|
||||||
export class ActionConfig {
|
export class ActionConfig {
|
||||||
/** Set to specify a specific branch, default is the current HEAD */
|
/** Set to specify a specific branch, default is the current HEAD */
|
||||||
public branch: string = "HEAD";
|
public branch: string = "HEAD";
|
||||||
/** The prefix to use to identify tags */
|
/** The prefix to use to identify tags */
|
||||||
public tagPrefix: string = "v";
|
public tagPrefix: string = "v";
|
||||||
/** (Deprecated) Use branches instead of tags */
|
/** (Deprecated) Use branches instead of tags */
|
||||||
public useBranches: boolean = false;
|
public useBranches: boolean = false;
|
||||||
/** If true, the branch will be used to select the maximum version. */
|
/** If true, the branch will be used to select the maximum version. */
|
||||||
public versionFromBranch: string | boolean = false;
|
public versionFromBranch: string | boolean = false;
|
||||||
/** A string which, if present in a git commit, indicates that a change represents a major (breaking) change. Wrap with '/' to match using a regular expression. */
|
/** A string which, if present in a git commit, indicates that a change represents a major (breaking) change. Wrap with '/' to match using a regular expression. */
|
||||||
public majorPattern: string = "(MAJOR)";
|
public majorPattern: string = "(MAJOR)";
|
||||||
/** A string which indicates the flags used by the `majorPattern` regular expression. */
|
/** A string which indicates the flags used by the `majorPattern` regular expression. */
|
||||||
public majorFlags: string = "";
|
public majorFlags: string = "";
|
||||||
/** A string which, if present in a git commit, indicates that a change represents a minor (feature) change. Wrap with '/' to match using a regular expression. */
|
/** A string which, if present in a git commit, indicates that a change represents a minor (feature) change. Wrap with '/' to match using a regular expression. */
|
||||||
public minorPattern: string = "(MINOR)";
|
public minorPattern: string = "(MINOR)";
|
||||||
/** A string which indicates the flags used by the `minorPattern` regular expression. */
|
/** A string which indicates the flags used by the `minorPattern` regular expression. */
|
||||||
public minorFlags: string = "";
|
public minorFlags: string = "";
|
||||||
/** Pattern to use when formatting output version */
|
/** Pattern to use when formatting output version */
|
||||||
public versionFormat: string = '${major}.${minor}.${patch}';
|
public versionFormat: string = "${major}.${minor}.${patch}";
|
||||||
/** Path to check for changes. If any changes are detected in the path the 'changed' output will true. Enter multiple paths separated by spaces. */
|
/** Path to check for changes. If any changes are detected in the path the 'changed' output will true. Enter multiple paths separated by spaces. */
|
||||||
public changePath: string = '';
|
public changePath: string = "";
|
||||||
/** Use to create a named sub-version. This value will be appended to tags created for this version. */
|
/** Use to create a named sub-version. This value will be appended to tags created for this version. */
|
||||||
public namespace: string = "";
|
public namespace: string = "";
|
||||||
/** If true, every commit will be treated as a bump to the version. */
|
/** If true, every commit will be treated as a bump to the version. */
|
||||||
public bumpEachCommit: boolean = false;
|
public bumpEachCommit: boolean = false;
|
||||||
/** If true, the body of commits will also be searched for major/minor patterns to determine the version type */
|
/** If true, the body of commits will also be searched for major/minor patterns to determine the version type */
|
||||||
public searchCommitBody: boolean = false;
|
public searchCommitBody: boolean = false;
|
||||||
/** The output method used to generate list of users, 'csv' or 'json'. Default is 'csv'. */
|
/** The output method used to generate list of users, 'csv' or 'json'. Default is 'csv'. */
|
||||||
public userFormatType: string = "csv";
|
public userFormatType: string = "csv";
|
||||||
/** Prevents pre-v1.0.0 version from automatically incrementing the major version. If enabled, when the major version is 0, major releases will be treated as minor and minor as patch. Note that the versionType output is unchanged. */
|
/** Prevents pre-v1.0.0 version from automatically incrementing the major version. If enabled, when the major version is 0, major releases will be treated as minor and minor as patch. Note that the versionType output is unchanged. */
|
||||||
public enablePrereleaseMode: boolean = false;
|
public enablePrereleaseMode: boolean = false;
|
||||||
/** If bump_each_commit is also set to true, setting this value will cause the version to increment only if the pattern specified is matched. */
|
/** If bump_each_commit is also set to true, setting this value will cause the version to increment only if the pattern specified is matched. */
|
||||||
public bumpEachCommitPatchPattern: string = "";
|
public bumpEachCommitPatchPattern: string = "";
|
||||||
/** If enabled, diagnostic information will be added to the action output. */
|
/** If enabled, diagnostic information will be added to the action output. */
|
||||||
public debug: boolean = false;
|
public debug: boolean = false;
|
||||||
/** Diagnostics to replay */
|
/** Diagnostics to replay */
|
||||||
public replay: string = '';
|
public replay: string = "";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,38 @@
|
||||||
// Using require instead of import to support integration testing
|
// Using require instead of import to support integration testing
|
||||||
import * as exec from '@actions/exec';
|
import * as exec from "@actions/exec";
|
||||||
import { DebugManager } from './DebugManager';
|
import { DebugManager } from "./DebugManager";
|
||||||
|
|
||||||
export const cmd = async (command: string, ...args: any): Promise<string> => {
|
export const cmd = async (command: string, ...args: any): Promise<string> => {
|
||||||
|
const debugManager = DebugManager.getInstance();
|
||||||
|
|
||||||
const debugManager = DebugManager.getInstance();
|
if (debugManager.isReplayMode()) {
|
||||||
|
return debugManager.replayCommand(command, args);
|
||||||
|
}
|
||||||
|
|
||||||
if (debugManager.isReplayMode()) {
|
let output = "",
|
||||||
return debugManager.replayCommand(command, args);
|
errors = "";
|
||||||
}
|
const options = {
|
||||||
|
silent: true,
|
||||||
|
listeners: {
|
||||||
|
stdout: (data: any) => {
|
||||||
|
output += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data: any) => {
|
||||||
|
errors += data.toString();
|
||||||
|
},
|
||||||
|
ignoreReturnCode: true,
|
||||||
|
silent: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
let output = '', errors = '';
|
let caughtError: any = null;
|
||||||
const options = {
|
try {
|
||||||
silent: true,
|
await exec.exec(command, args, options);
|
||||||
listeners: {
|
} catch (err) {
|
||||||
stdout: (data: any) => { output += data.toString(); },
|
caughtError = err;
|
||||||
stderr: (data: any) => { errors += data.toString(); },
|
}
|
||||||
ignoreReturnCode: true,
|
|
||||||
silent: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let caughtError: any = null;
|
debugManager.recordCommand(command, args, output, errors, caughtError);
|
||||||
try {
|
|
||||||
await exec.exec(command, args, options);
|
|
||||||
} catch (err) {
|
|
||||||
caughtError = err;
|
|
||||||
}
|
|
||||||
|
|
||||||
debugManager.recordCommand(command, args, output, errors, caughtError);
|
return output;
|
||||||
|
};
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,24 @@
|
||||||
import { CsvUserFormatter } from './formatting/CsvUserFormatter'
|
import { CsvUserFormatter } from "./formatting/CsvUserFormatter";
|
||||||
import { BranchVersioningTagFormatter } from './formatting/BranchVersioningTagFormatter'
|
import { BranchVersioningTagFormatter } from "./formatting/BranchVersioningTagFormatter";
|
||||||
import { DefaultTagFormatter } from './formatting/DefaultTagFormatter'
|
import { DefaultTagFormatter } from "./formatting/DefaultTagFormatter";
|
||||||
import { DefaultVersionFormatter } from './formatting/DefaultVersionFormatter'
|
import { DefaultVersionFormatter } from "./formatting/DefaultVersionFormatter";
|
||||||
import { JsonUserFormatter } from './formatting/JsonUserFormatter'
|
import { JsonUserFormatter } from "./formatting/JsonUserFormatter";
|
||||||
import { TagFormatter } from './formatting/TagFormatter'
|
import { TagFormatter } from "./formatting/TagFormatter";
|
||||||
import { UserFormatter } from './formatting/UserFormatter'
|
import { UserFormatter } from "./formatting/UserFormatter";
|
||||||
import { VersionFormatter } from './formatting/VersionFormatter'
|
import { VersionFormatter } from "./formatting/VersionFormatter";
|
||||||
import { CommitsProvider } from './providers/CommitsProvider'
|
import { CommitsProvider } from "./providers/CommitsProvider";
|
||||||
import { CurrentCommitResolver } from './providers/CurrentCommitResolver'
|
import { CurrentCommitResolver } from "./providers/CurrentCommitResolver";
|
||||||
import { DefaultCommitsProvider } from './providers/DefaultCommitsProvider'
|
import { DefaultCommitsProvider } from "./providers/DefaultCommitsProvider";
|
||||||
import { DefaultCurrentCommitResolver } from './providers/DefaultCurrentCommitResolver'
|
import { DefaultCurrentCommitResolver } from "./providers/DefaultCurrentCommitResolver";
|
||||||
import { DefaultVersionClassifier } from './providers/DefaultVersionClassifier'
|
import { DefaultVersionClassifier } from "./providers/DefaultVersionClassifier";
|
||||||
import { LastReleaseResolver } from './providers/LastReleaseResolver'
|
import { LastReleaseResolver } from "./providers/LastReleaseResolver";
|
||||||
import { DefaultLastReleaseResolver } from './providers/DefaultLastReleaseResolver'
|
import { DefaultLastReleaseResolver } from "./providers/DefaultLastReleaseResolver";
|
||||||
import { VersionClassifier } from './providers/VersionClassifier'
|
import { VersionClassifier } from "./providers/VersionClassifier";
|
||||||
import { BumpAlwaysVersionClassifier } from './providers/BumpAlwaysVersionClassifier'
|
import { BumpAlwaysVersionClassifier } from "./providers/BumpAlwaysVersionClassifier";
|
||||||
import { ActionConfig } from './ActionConfig';
|
import { ActionConfig } from "./ActionConfig";
|
||||||
import { DebugManager } from './DebugManager';
|
import { DebugManager } from "./DebugManager";
|
||||||
|
|
||||||
export class ConfigurationProvider {
|
export class ConfigurationProvider {
|
||||||
|
|
||||||
constructor(config: ActionConfig) {
|
constructor(config: ActionConfig) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
DebugManager.getInstance().initializeConfig(config);
|
DebugManager.getInstance().initializeConfig(config);
|
||||||
|
|
@ -27,11 +26,17 @@ export class ConfigurationProvider {
|
||||||
|
|
||||||
private config: ActionConfig;
|
private config: ActionConfig;
|
||||||
|
|
||||||
public GetCurrentCommitResolver(): CurrentCommitResolver { return new DefaultCurrentCommitResolver(this.config); }
|
public GetCurrentCommitResolver(): CurrentCommitResolver {
|
||||||
|
return new DefaultCurrentCommitResolver(this.config);
|
||||||
|
}
|
||||||
|
|
||||||
public GetLastReleaseResolver(): LastReleaseResolver { return new DefaultLastReleaseResolver(this.config); }
|
public GetLastReleaseResolver(): LastReleaseResolver {
|
||||||
|
return new DefaultLastReleaseResolver(this.config);
|
||||||
|
}
|
||||||
|
|
||||||
public GetCommitsProvider(): CommitsProvider { return new DefaultCommitsProvider(this.config); }
|
public GetCommitsProvider(): CommitsProvider {
|
||||||
|
return new DefaultCommitsProvider(this.config);
|
||||||
|
}
|
||||||
|
|
||||||
public GetVersionClassifier(): VersionClassifier {
|
public GetVersionClassifier(): VersionClassifier {
|
||||||
if (this.config.bumpEachCommit) {
|
if (this.config.bumpEachCommit) {
|
||||||
|
|
@ -40,7 +45,9 @@ export class ConfigurationProvider {
|
||||||
return new DefaultVersionClassifier(this.config);
|
return new DefaultVersionClassifier(this.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GetVersionFormatter(): VersionFormatter { return new DefaultVersionFormatter(this.config); }
|
public GetVersionFormatter(): VersionFormatter {
|
||||||
|
return new DefaultVersionFormatter(this.config);
|
||||||
|
}
|
||||||
|
|
||||||
public GetTagFormatter(branchName: string): TagFormatter {
|
public GetTagFormatter(branchName: string): TagFormatter {
|
||||||
if (this.config.versionFromBranch) {
|
if (this.config.versionFromBranch) {
|
||||||
|
|
@ -51,10 +58,14 @@ export class ConfigurationProvider {
|
||||||
|
|
||||||
public GetUserFormatter(): UserFormatter {
|
public GetUserFormatter(): UserFormatter {
|
||||||
switch (this.config.userFormatType) {
|
switch (this.config.userFormatType) {
|
||||||
case 'json': return new JsonUserFormatter(this.config);
|
case "json":
|
||||||
case 'csv': return new CsvUserFormatter(this.config);
|
return new JsonUserFormatter(this.config);
|
||||||
|
case "csv":
|
||||||
|
return new CsvUserFormatter(this.config);
|
||||||
default:
|
default:
|
||||||
throw new Error(`Unknown user format type: ${this.config.userFormatType}, supported types: json, csv`);
|
throw new Error(
|
||||||
|
`Unknown user format type: ${this.config.userFormatType}, supported types: json, csv`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,115 +1,134 @@
|
||||||
import { ActionConfig } from "./ActionConfig";
|
import { ActionConfig } from "./ActionConfig";
|
||||||
|
|
||||||
|
|
||||||
/** Utility class for managing debug mode and diagnostic information */
|
/** Utility class for managing debug mode and diagnostic information */
|
||||||
export class DebugManager {
|
export class DebugManager {
|
||||||
private constructor() { }
|
private constructor() {}
|
||||||
|
|
||||||
private static instance: DebugManager;
|
private static instance: DebugManager;
|
||||||
/** Returns the singleton instance of the DebugManager */
|
/** Returns the singleton instance of the DebugManager */
|
||||||
public static getInstance(): DebugManager {
|
public static getInstance(): DebugManager {
|
||||||
if (!DebugManager.instance) {
|
if (!DebugManager.instance) {
|
||||||
DebugManager.instance = new DebugManager();
|
DebugManager.instance = new DebugManager();
|
||||||
}
|
}
|
||||||
return DebugManager.instance;
|
return DebugManager.instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Clears the singleton instance of the DebugManager (used for testing) */
|
||||||
|
public static clearState() {
|
||||||
|
DebugManager.instance = new DebugManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
private debugEnabled: boolean = false;
|
||||||
|
private replayMode: boolean = false;
|
||||||
|
private diagnosticInfo: DiagnosticInfo | null = null;
|
||||||
|
|
||||||
|
/** Returns true if debug mode is enabled */
|
||||||
|
public isDebugEnabled(): boolean {
|
||||||
|
return this.debugEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns true if replay mode is enabled */
|
||||||
|
public isReplayMode(): boolean {
|
||||||
|
return this.replayMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeConfig(config: ActionConfig) {
|
||||||
|
if (config.debug) {
|
||||||
|
this.setDebugEnabled(true);
|
||||||
|
} else if (config.replay.length > 0) {
|
||||||
|
this.replayFromDiagnostics(config.replay);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enables or disables debug mode, also clears any existing diagnostics info */
|
||||||
|
public setDebugEnabled(enableDebug: boolean = true): void {
|
||||||
|
this.debugEnabled = enableDebug;
|
||||||
|
this.replayMode = false;
|
||||||
|
this.diagnosticInfo = new DiagnosticInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enables replay mode and loads the diagnostic information from the specified string */
|
||||||
|
public replayFromDiagnostics(diagnostics: string): void {
|
||||||
|
this.debugEnabled = false;
|
||||||
|
this.replayMode = true;
|
||||||
|
this.diagnosticInfo = JSON.parse(diagnostics);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns a JSON string containing the diagnostic information for this run */
|
||||||
|
public getDebugOutput(emptyRepo: boolean = false): string {
|
||||||
|
return this.isDebugEnabled() ? JSON.stringify(this.diagnosticInfo) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Records a command and its output for diagnostic purposes */
|
||||||
|
public recordCommand(
|
||||||
|
command: string,
|
||||||
|
args: any[],
|
||||||
|
output: string,
|
||||||
|
stderr: string,
|
||||||
|
error: any,
|
||||||
|
): void {
|
||||||
|
if (this.isDebugEnabled()) {
|
||||||
|
this.diagnosticInfo?.recordCommand(command, args, output, stderr, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Replays the specified command and returns the output */
|
||||||
|
public replayCommand(command: string, args: any[]): string {
|
||||||
|
if (this.diagnosticInfo === null) {
|
||||||
|
throw new Error("No diagnostic information available for replay");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Clears the singleton instance of the DebugManager (used for testing) */
|
const commandResult = this.diagnosticInfo.commands.find(
|
||||||
public static clearState() {
|
(c) =>
|
||||||
DebugManager.instance = new DebugManager();
|
c.command === command &&
|
||||||
|
JSON.stringify(c.args) === JSON.stringify(args),
|
||||||
|
);
|
||||||
|
if (!commandResult) {
|
||||||
|
throw new Error(`No result found in diagnostic for command "${command}"`);
|
||||||
}
|
}
|
||||||
|
if (commandResult.error) {
|
||||||
|
throw commandResult.error;
|
||||||
private debugEnabled: boolean = false;
|
|
||||||
private replayMode: boolean = false;
|
|
||||||
private diagnosticInfo: DiagnosticInfo | null = null;
|
|
||||||
|
|
||||||
/** Returns true if debug mode is enabled */
|
|
||||||
public isDebugEnabled(): boolean {
|
|
||||||
return this.debugEnabled;
|
|
||||||
}
|
}
|
||||||
|
if (commandResult.stderr) {
|
||||||
/** Returns true if replay mode is enabled */
|
console.error(commandResult.stderr);
|
||||||
public isReplayMode(): boolean {
|
|
||||||
return this.replayMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
initializeConfig(config: ActionConfig) {
|
|
||||||
if (config.debug) {
|
|
||||||
this.setDebugEnabled(true);
|
|
||||||
} else if (config.replay.length > 0) {
|
|
||||||
this.replayFromDiagnostics(config.replay);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Enables or disables debug mode, also clears any existing diagnostics info */
|
|
||||||
public setDebugEnabled(enableDebug: boolean = true): void {
|
|
||||||
this.debugEnabled = enableDebug;
|
|
||||||
this.replayMode = false;
|
|
||||||
this.diagnosticInfo = new DiagnosticInfo();
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Enables replay mode and loads the diagnostic information from the specified string */
|
|
||||||
public replayFromDiagnostics(diagnostics: string): void {
|
|
||||||
this.debugEnabled = false
|
|
||||||
this.replayMode = true;
|
|
||||||
this.diagnosticInfo = JSON.parse(diagnostics);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns a JSON string containing the diagnostic information for this run */
|
|
||||||
public getDebugOutput(emptyRepo: boolean = false): string {
|
|
||||||
return this.isDebugEnabled() ? JSON.stringify(this.diagnosticInfo) : '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Records a command and its output for diagnostic purposes */
|
|
||||||
public recordCommand(command: string, args: any[], output: string, stderr: string, error: any): void {
|
|
||||||
if (this.isDebugEnabled()) {
|
|
||||||
this.diagnosticInfo?.recordCommand(command, args, output, stderr, error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Replays the specified command and returns the output */
|
|
||||||
public replayCommand(command: string, args: any[]): string {
|
|
||||||
if (this.diagnosticInfo === null) {
|
|
||||||
throw new Error('No diagnostic information available for replay');
|
|
||||||
}
|
|
||||||
|
|
||||||
const commandResult = this.diagnosticInfo.commands.find(c => c.command === command && JSON.stringify(c.args) === JSON.stringify(args));
|
|
||||||
if (!commandResult) {
|
|
||||||
throw new Error(`No result found in diagnostic for command "${command}"`);
|
|
||||||
}
|
|
||||||
if (commandResult.error) {
|
|
||||||
throw commandResult.error;
|
|
||||||
}
|
|
||||||
if (commandResult.stderr) {
|
|
||||||
console.error(commandResult.stderr);
|
|
||||||
}
|
|
||||||
return commandResult.output;
|
|
||||||
}
|
}
|
||||||
|
return commandResult.output;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Represents a CLI command result */
|
/** Represents a CLI command result */
|
||||||
class CommandResult {
|
class CommandResult {
|
||||||
public command: string;
|
public command: string;
|
||||||
public args: any[];
|
public args: any[];
|
||||||
public output: string;
|
public output: string;
|
||||||
public stderr: string;
|
public stderr: string;
|
||||||
public error: any;
|
public error: any;
|
||||||
public constructor(command: string, args: any[], output: string, stderr: string, error: any) {
|
public constructor(
|
||||||
this.command = command;
|
command: string,
|
||||||
this.args = args;
|
args: any[],
|
||||||
this.output = output;
|
output: string,
|
||||||
this.stderr = stderr;
|
stderr: string,
|
||||||
this.error = error;
|
error: any,
|
||||||
}
|
) {
|
||||||
|
this.command = command;
|
||||||
|
this.args = args;
|
||||||
|
this.output = output;
|
||||||
|
this.stderr = stderr;
|
||||||
|
this.error = error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Represents the result of the commands executed for a run */
|
/** Represents the result of the commands executed for a run */
|
||||||
class DiagnosticInfo {
|
class DiagnosticInfo {
|
||||||
public commands: CommandResult[] = [];
|
public commands: CommandResult[] = [];
|
||||||
public empty: boolean = false;
|
public empty: boolean = false;
|
||||||
public recordCommand(command: string, args: any[], output: string, stderr: string, error: any): void {
|
public recordCommand(
|
||||||
this.commands.push(new CommandResult(command, args, output, stderr, error));
|
command: string,
|
||||||
}
|
args: any[],
|
||||||
}
|
output: string,
|
||||||
|
stderr: string,
|
||||||
|
error: any,
|
||||||
|
): void {
|
||||||
|
this.commands.push(new CommandResult(command, args, output, stderr, error));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ export class VersionResult {
|
||||||
* @param changed - True if the version was changed, otherwise false
|
* @param changed - True if the version was changed, otherwise false
|
||||||
* @param isTagged - True if the commit had a tag that matched the `versionTag` format
|
* @param isTagged - True if the commit had a tag that matched the `versionTag` format
|
||||||
* @param authors - Authors formatted according to the format mode (e.g. JSON, CSV, YAML, etc.)
|
* @param authors - Authors formatted according to the format mode (e.g. JSON, CSV, YAML, etc.)
|
||||||
* @param currentCommit - The current commit hash
|
* @param currentCommit - The current commit hash
|
||||||
* @param previousCommit - The previous commit hash
|
* @param previousCommit - The previous commit hash
|
||||||
* @param previousVersion - The previous version
|
* @param previousVersion - The previous version
|
||||||
* @param debugOutput - Diagnostic information, if debug is enabled
|
* @param debugOutput - Diagnostic information, if debug is enabled
|
||||||
|
|
@ -34,5 +34,6 @@ export class VersionResult {
|
||||||
public currentCommit: string,
|
public currentCommit: string,
|
||||||
public previousCommit: string,
|
public previousCommit: string,
|
||||||
public previousVersion: string,
|
public previousVersion: string,
|
||||||
public debugOutput: string) { }
|
public debugOutput: string,
|
||||||
|
) {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
108
src/action.ts
108
src/action.ts
|
|
@ -1,25 +1,39 @@
|
||||||
import { ConfigurationProvider } from './ConfigurationProvider';
|
import { ConfigurationProvider } from "./ConfigurationProvider";
|
||||||
import { VersionResult } from './VersionResult';
|
import { VersionResult } from "./VersionResult";
|
||||||
import { VersionType } from './providers/VersionType';
|
import { VersionType } from "./providers/VersionType";
|
||||||
import { UserInfo } from './providers/UserInfo';
|
import { UserInfo } from "./providers/UserInfo";
|
||||||
import { VersionInformation } from './providers/VersionInformation';
|
import { VersionInformation } from "./providers/VersionInformation";
|
||||||
import { DebugManager } from './DebugManager';
|
import { DebugManager } from "./DebugManager";
|
||||||
|
import * as core from "@actions/core";
|
||||||
export async function runAction(configurationProvider: ConfigurationProvider): Promise<VersionResult> {
|
export async function runAction(
|
||||||
|
configurationProvider: ConfigurationProvider,
|
||||||
const currentCommitResolver = configurationProvider.GetCurrentCommitResolver();
|
): Promise<VersionResult> {
|
||||||
|
core.info("VAGO STARTING runAction");
|
||||||
|
const currentCommitResolver =
|
||||||
|
configurationProvider.GetCurrentCommitResolver();
|
||||||
const lastReleaseResolver = configurationProvider.GetLastReleaseResolver();
|
const lastReleaseResolver = configurationProvider.GetLastReleaseResolver();
|
||||||
const commitsProvider = configurationProvider.GetCommitsProvider();
|
const commitsProvider = configurationProvider.GetCommitsProvider();
|
||||||
const versionClassifier = configurationProvider.GetVersionClassifier();
|
const versionClassifier = configurationProvider.GetVersionClassifier();
|
||||||
const versionFormatter = configurationProvider.GetVersionFormatter();
|
const versionFormatter = configurationProvider.GetVersionFormatter();
|
||||||
const tagFormatter = configurationProvider.GetTagFormatter(await currentCommitResolver.ResolveBranchNameAsync());
|
const tagFormatter = configurationProvider.GetTagFormatter(
|
||||||
|
await currentCommitResolver.ResolveBranchNameAsync(),
|
||||||
|
);
|
||||||
const userFormatter = configurationProvider.GetUserFormatter();
|
const userFormatter = configurationProvider.GetUserFormatter();
|
||||||
|
|
||||||
const debugManager = DebugManager.getInstance();
|
const debugManager = DebugManager.getInstance();
|
||||||
|
|
||||||
if (await currentCommitResolver.IsEmptyRepoAsync()) {
|
if (await currentCommitResolver.IsEmptyRepoAsync()) {
|
||||||
|
core.info("VAGO REPO WAS EMPTY, returning default version information");
|
||||||
const versionInfo = new VersionInformation(0, 0, 0, 0, VersionType.None, [], false, false);
|
const versionInfo = new VersionInformation(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
VersionType.None,
|
||||||
|
[],
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
);
|
||||||
return new VersionResult(
|
return new VersionResult(
|
||||||
versionInfo.major,
|
versionInfo.major,
|
||||||
versionInfo.minor,
|
versionInfo.minor,
|
||||||
|
|
@ -30,34 +44,66 @@ export async function runAction(configurationProvider: ConfigurationProvider): P
|
||||||
tagFormatter.Format(versionInfo),
|
tagFormatter.Format(versionInfo),
|
||||||
versionInfo.changed,
|
versionInfo.changed,
|
||||||
versionInfo.isTagged,
|
versionInfo.isTagged,
|
||||||
userFormatter.Format('author', []),
|
userFormatter.Format("author", []),
|
||||||
'',
|
"",
|
||||||
'',
|
"",
|
||||||
tagFormatter.Parse(tagFormatter.Format(versionInfo)).join('.'),
|
tagFormatter.Parse(tagFormatter.Format(versionInfo)).join("."),
|
||||||
debugManager.getDebugOutput(true)
|
debugManager.getDebugOutput(true),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
core.info("VAGO REPO IS NOT EMPTY, continuing with versioning");
|
||||||
const currentCommit = await currentCommitResolver.ResolveAsync();
|
const currentCommit = await currentCommitResolver.ResolveAsync();
|
||||||
const lastRelease = await lastReleaseResolver.ResolveAsync(currentCommit, tagFormatter);
|
core.info("VAGO CURRENT COMMIT: " + currentCommit);
|
||||||
const commitSet = await commitsProvider.GetCommitsAsync(lastRelease.hash, currentCommit);
|
const lastRelease = await lastReleaseResolver.ResolveAsync(
|
||||||
const classification = await versionClassifier.ClassifyAsync(lastRelease, commitSet);
|
currentCommit,
|
||||||
|
tagFormatter,
|
||||||
|
);
|
||||||
|
core.info(
|
||||||
|
"VAGO LAST RELEASE: " +
|
||||||
|
lastRelease.hash +
|
||||||
|
" " +
|
||||||
|
lastRelease.major +
|
||||||
|
"." +
|
||||||
|
lastRelease.minor +
|
||||||
|
"." +
|
||||||
|
lastRelease.patch,
|
||||||
|
);
|
||||||
|
const commitSet = await commitsProvider.GetCommitsAsync(
|
||||||
|
lastRelease.hash,
|
||||||
|
currentCommit,
|
||||||
|
);
|
||||||
|
core.info("VAGO commit set le:" + commitSet.commits.length);
|
||||||
|
core.info("VAGO commit set changed: " + commitSet.changed.toString());
|
||||||
|
const classification = await versionClassifier.ClassifyAsync(
|
||||||
|
lastRelease,
|
||||||
|
commitSet,
|
||||||
|
);
|
||||||
|
core.info("VAGO classification: " + JSON.stringify(classification));
|
||||||
|
|
||||||
const { isTagged } = lastRelease;
|
const { isTagged } = lastRelease;
|
||||||
const { major, minor, patch, increment, type, changed } = classification;
|
const { major, minor, patch, increment, type, changed } = classification;
|
||||||
|
|
||||||
// At this point all necessary data has been pulled from the database, create
|
// At this point all necessary data has been pulled from the database, create
|
||||||
// version information to be used by the formatters
|
// version information to be used by the formatters
|
||||||
let versionInfo = new VersionInformation(major, minor, patch, increment, type, commitSet.commits, changed, isTagged);
|
let versionInfo = new VersionInformation(
|
||||||
|
major,
|
||||||
|
minor,
|
||||||
|
patch,
|
||||||
|
increment,
|
||||||
|
type,
|
||||||
|
commitSet.commits,
|
||||||
|
changed,
|
||||||
|
isTagged,
|
||||||
|
);
|
||||||
|
|
||||||
// Group all the authors together, count the number of commits per author
|
// Group all the authors together, count the number of commits per author
|
||||||
const allAuthors = versionInfo.commits
|
const allAuthors = versionInfo.commits.reduce((acc: any, commit) => {
|
||||||
.reduce((acc: any, commit) => {
|
const key = `${commit.author} <${commit.authorEmail}>`;
|
||||||
const key = `${commit.author} <${commit.authorEmail}>`;
|
acc[key] = acc[key] || { n: commit.author, e: commit.authorEmail, c: 0 };
|
||||||
acc[key] = acc[key] || { n: commit.author, e: commit.authorEmail, c: 0 };
|
acc[key].c++;
|
||||||
acc[key].c++;
|
return acc;
|
||||||
return acc;
|
}, {});
|
||||||
}, {});
|
|
||||||
|
|
||||||
const authors = Object.values(allAuthors)
|
const authors = Object.values(allAuthors)
|
||||||
.map((u: any) => new UserInfo(u.n, u.e, u.c))
|
.map((u: any) => new UserInfo(u.n, u.e, u.c))
|
||||||
|
|
@ -73,10 +119,10 @@ export async function runAction(configurationProvider: ConfigurationProvider): P
|
||||||
tagFormatter.Format(versionInfo),
|
tagFormatter.Format(versionInfo),
|
||||||
versionInfo.changed,
|
versionInfo.changed,
|
||||||
versionInfo.isTagged,
|
versionInfo.isTagged,
|
||||||
userFormatter.Format('author', authors),
|
userFormatter.Format("author", authors),
|
||||||
currentCommit,
|
currentCommit,
|
||||||
lastRelease.hash,
|
lastRelease.hash,
|
||||||
`${lastRelease.major}.${lastRelease.minor}.${lastRelease.patch}`,
|
`${lastRelease.major}.${lastRelease.minor}.${lastRelease.patch}`,
|
||||||
debugManager.getDebugOutput()
|
debugManager.getDebugOutput(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ export class DefaultTagFormatter implements TagFormatter {
|
||||||
const namespace = regexEscape(this.namespace);
|
const namespace = regexEscape(this.namespace);
|
||||||
|
|
||||||
if (!!this.namespace) {
|
if (!!this.namespace) {
|
||||||
return new RegExp(`^${tagPrefix}[0-9]+\.[0-9]+\.[0-9]+${namespaceSeperator}${namespace}$`).test(tag);
|
new RegExp(`^${tagPrefix}[0-9]+\.[0-9]+\.[0-9]+${namespaceSeperator}${namespace}$`).test(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new RegExp(`^${tagPrefix}[0-9]+\.[0-9]+\.[0-9]+$`).test(tag);
|
return new RegExp(`^${tagPrefix}[0-9]+\.[0-9]+\.[0-9]+$`).test(tag);
|
||||||
|
|
|
||||||
1807
src/main.test.ts
1807
src/main.test.ts
File diff suppressed because it is too large
Load diff
104
src/main.ts
104
src/main.ts
|
|
@ -1,22 +1,40 @@
|
||||||
import { runAction } from './action';
|
import { runAction } from "./action";
|
||||||
import { ActionConfig } from './ActionConfig';
|
import { ActionConfig } from "./ActionConfig";
|
||||||
import { ConfigurationProvider } from './ConfigurationProvider';
|
import { ConfigurationProvider } from "./ConfigurationProvider";
|
||||||
import { VersionResult } from './VersionResult';
|
import { VersionResult } from "./VersionResult";
|
||||||
import * as core from '@actions/core';
|
import * as core from "@actions/core";
|
||||||
import { VersionType } from './providers/VersionType';
|
import { VersionType } from "./providers/VersionType";
|
||||||
|
|
||||||
function setOutput(versionResult: VersionResult) {
|
function setOutput(versionResult: VersionResult) {
|
||||||
const { major, minor, patch, increment, versionType, formattedVersion, versionTag, changed, isTagged, authors, currentCommit, previousCommit, previousVersion, debugOutput } = versionResult;
|
const {
|
||||||
|
major,
|
||||||
|
minor,
|
||||||
|
patch,
|
||||||
|
increment,
|
||||||
|
versionType,
|
||||||
|
formattedVersion,
|
||||||
|
versionTag,
|
||||||
|
changed,
|
||||||
|
isTagged,
|
||||||
|
authors,
|
||||||
|
currentCommit,
|
||||||
|
previousCommit,
|
||||||
|
previousVersion,
|
||||||
|
debugOutput,
|
||||||
|
} = versionResult;
|
||||||
|
|
||||||
const repository = process.env.GITHUB_REPOSITORY;
|
const repository = process.env.GITHUB_REPOSITORY;
|
||||||
|
|
||||||
if (!changed) {
|
if (!changed) {
|
||||||
core.info('No changes detected for this commit');
|
core.info("VAGOOO1");
|
||||||
|
core.info("No changes detected for this commit");
|
||||||
}
|
}
|
||||||
|
|
||||||
core.info(`Version is ${formattedVersion}`);
|
core.info(`Version is ${formattedVersion}`);
|
||||||
if (repository !== undefined) {
|
if (repository !== undefined) {
|
||||||
core.info(`To create a release for this version, go to https://github.com/${repository}/releases/new?tag=${versionTag}&target=${currentCommit.split('/').slice(-1)[0]}`);
|
core.info(
|
||||||
|
`To create a release for this version, go to https://github.com/${repository}/releases/new?tag=${versionTag}&target=${currentCommit.split("/").slice(-1)[0]}`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
core.setOutput("version", formattedVersion);
|
core.setOutput("version", formattedVersion);
|
||||||
|
|
@ -36,62 +54,68 @@ function setOutput(versionResult: VersionResult) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function run() {
|
export async function run() {
|
||||||
|
core.info("VAGO Starting run action...");
|
||||||
function toBool(value: string): boolean {
|
function toBool(value: string): boolean {
|
||||||
if (!value || value.toLowerCase() === 'false') {
|
if (!value || value.toLowerCase() === "false") {
|
||||||
return false;
|
return false;
|
||||||
} else if (value.toLowerCase() === 'true') {
|
} else if (value.toLowerCase() === "true") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function toStringOrBool(value: string): string | boolean {
|
function toStringOrBool(value: string): string | boolean {
|
||||||
if (!value || value === 'false') {
|
if (!value || value === "false") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (value === 'true') {
|
if (value === "true") {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const config: ActionConfig = {
|
const config: ActionConfig = {
|
||||||
branch: core.getInput('branch'),
|
branch: core.getInput("branch"),
|
||||||
tagPrefix: core.getInput('tag_prefix'),
|
tagPrefix: core.getInput("tag_prefix"),
|
||||||
useBranches: toBool(core.getInput('use_branches')),
|
useBranches: toBool(core.getInput("use_branches")),
|
||||||
versionFromBranch: toStringOrBool(core.getInput('version_from_branch')),
|
versionFromBranch: toStringOrBool(core.getInput("version_from_branch")),
|
||||||
majorPattern: core.getInput('major_pattern'),
|
majorPattern: core.getInput("major_pattern"),
|
||||||
minorPattern: core.getInput('minor_pattern'),
|
minorPattern: core.getInput("minor_pattern"),
|
||||||
majorFlags: core.getInput('major_regexp_flags'),
|
majorFlags: core.getInput("major_regexp_flags"),
|
||||||
minorFlags: core.getInput('minor_regexp_flags'),
|
minorFlags: core.getInput("minor_regexp_flags"),
|
||||||
versionFormat: core.getInput('version_format'),
|
versionFormat: core.getInput("version_format"),
|
||||||
changePath: core.getInput('change_path'),
|
changePath: core.getInput("change_path"),
|
||||||
namespace: core.getInput('namespace'),
|
namespace: core.getInput("namespace"),
|
||||||
bumpEachCommit: toBool(core.getInput('bump_each_commit')),
|
bumpEachCommit: toBool(core.getInput("bump_each_commit")),
|
||||||
searchCommitBody: toBool(core.getInput('search_commit_body')),
|
searchCommitBody: toBool(core.getInput("search_commit_body")),
|
||||||
userFormatType: core.getInput('user_format_type'),
|
userFormatType: core.getInput("user_format_type"),
|
||||||
enablePrereleaseMode: toBool(core.getInput('enable_prerelease_mode')),
|
enablePrereleaseMode: toBool(core.getInput("enable_prerelease_mode")),
|
||||||
bumpEachCommitPatchPattern: core.getInput('bump_each_commit_patch_pattern'),
|
bumpEachCommitPatchPattern: core.getInput("bump_each_commit_patch_pattern"),
|
||||||
debug: toBool(core.getInput('debug')),
|
debug: toBool(core.getInput("debug")),
|
||||||
replay: ''
|
replay: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
if (config.useBranches) {
|
if (config.useBranches) {
|
||||||
core.warning(`The 'use_branches' input option is deprecated, please see the documentation for more information on how to use branches`);
|
core.warning(
|
||||||
|
`The 'use_branches' input option is deprecated, please see the documentation for more information on how to use branches`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.versionFormat === '' && core.getInput('format') !== '') {
|
if (config.versionFormat === "" && core.getInput("format") !== "") {
|
||||||
core.warning(`The 'format' input is deprecated, use 'versionFormat' instead`);
|
core.warning(
|
||||||
config.versionFormat = core.getInput('format');
|
`The 'format' input is deprecated, use 'versionFormat' instead`,
|
||||||
|
);
|
||||||
|
config.versionFormat = core.getInput("format");
|
||||||
}
|
}
|
||||||
if (core.getInput('short_tags') !== '') {
|
if (core.getInput("short_tags") !== "") {
|
||||||
core.warning(`The 'short_tags' input option is no longer supported`);
|
core.warning(`The 'short_tags' input option is no longer supported`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const configurationProvider = new ConfigurationProvider(config);
|
const configurationProvider = new ConfigurationProvider(config);
|
||||||
|
core.info("VAGO start await runAction(configurationProvider)");
|
||||||
const result = await runAction(configurationProvider);
|
const result = await runAction(configurationProvider);
|
||||||
|
core.info("VAGO before setOutput(result)");
|
||||||
setOutput(result);
|
setOutput(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
run();
|
run();
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { cmd } from "../CommandRunner";
|
||||||
import { CommitInfo } from "./CommitInfo";
|
import { CommitInfo } from "./CommitInfo";
|
||||||
import { CommitInfoSet } from "./CommitInfoSet";
|
import { CommitInfoSet } from "./CommitInfoSet";
|
||||||
import { CommitsProvider } from "./CommitsProvider";
|
import { CommitsProvider } from "./CommitsProvider";
|
||||||
|
import * as core from "@actions/core";
|
||||||
|
|
||||||
export class DefaultCommitsProvider implements CommitsProvider {
|
export class DefaultCommitsProvider implements CommitsProvider {
|
||||||
|
|
||||||
|
|
@ -35,7 +36,9 @@ export class DefaultCommitsProvider implements CommitsProvider {
|
||||||
var logCommand = `git log --pretty="${pretty}" --author-date-order ${(startHash === '' ? endHash : `${startHash}..${endHash}`)}`;
|
var logCommand = `git log --pretty="${pretty}" --author-date-order ${(startHash === '' ? endHash : `${startHash}..${endHash}`)}`;
|
||||||
|
|
||||||
if (this.changePath !== '') {
|
if (this.changePath !== '') {
|
||||||
|
core.info("VAGO Changepath was there: " + this.changePath);
|
||||||
logCommand += ` -- ${this.changePath}`;
|
logCommand += ` -- ${this.changePath}`;
|
||||||
|
core.info("VAGO logCommand: " + logCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
const log = await cmd(logCommand);
|
const log = await cmd(logCommand);
|
||||||
|
|
@ -83,8 +86,10 @@ export class DefaultCommitsProvider implements CommitsProvider {
|
||||||
const changedFiles = await cmd(`git log --name-only --oneline ${endHash} -- ${this.changePath}`);
|
const changedFiles = await cmd(`git log --name-only --oneline ${endHash} -- ${this.changePath}`);
|
||||||
changed = changedFiles.length > 0;
|
changed = changedFiles.length > 0;
|
||||||
} else {
|
} else {
|
||||||
|
core.info("VAGO diffing: " + logCommand);
|
||||||
const changedFiles = await cmd(`git diff --name-only ${startHash}..${endHash} -- ${this.changePath}`);
|
const changedFiles = await cmd(`git diff --name-only ${startHash}..${endHash} -- ${this.changePath}`);
|
||||||
changed = changedFiles.length > 0;
|
changed = changedFiles.length > 0;
|
||||||
|
core.info("VAGO changedFiles le: " + changedFiles.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,11 @@ export class DefaultLastReleaseResolver implements LastReleaseResolver {
|
||||||
)).trim();
|
)).trim();
|
||||||
|
|
||||||
currentTag = tagFormatter.IsValid(currentTag) ? currentTag : '';
|
currentTag = tagFormatter.IsValid(currentTag) ? currentTag : '';
|
||||||
|
core.info("VAGO check whether current tag is valid: " + currentTag);
|
||||||
const isTagged = currentTag !== '';
|
const isTagged = currentTag !== '';
|
||||||
|
|
||||||
const [currentMajor, currentMinor, currentPatch] = !!currentTag ? tagFormatter.Parse(currentTag) : [null, null, null];
|
const [currentMajor, currentMinor, currentPatch] = !!currentTag ? tagFormatter.Parse(currentTag) : [null, null, null];
|
||||||
|
core.info("VAGO DefaultLastReleaseResolver.ResolveAsync: currentTag: " + currentTag + ", currentMajor: " + currentMajor + ", currentMinor: " + currentMinor + ", currentPatch: " + currentPatch);
|
||||||
|
|
||||||
let tagsCount = 0;
|
let tagsCount = 0;
|
||||||
|
|
||||||
|
|
@ -69,12 +71,14 @@ export class DefaultLastReleaseResolver implements LastReleaseResolver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const [major, minor, patch] = tagFormatter.Parse('');
|
const [major, minor, patch] = tagFormatter.Parse('');
|
||||||
|
core.info("VAGO tag was empty: " + major + ", " + minor + ", " + patch);
|
||||||
// no release tags yet, use the initial commit as the root
|
// no release tags yet, use the initial commit as the root
|
||||||
return new ReleaseInformation(major, minor, patch, '', currentMajor, currentMinor, currentPatch, isTagged);
|
return new ReleaseInformation(major, minor, patch, '', currentMajor, currentMinor, currentPatch, isTagged);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse the version tag
|
// parse the version tag
|
||||||
const [major, minor, patch] = tagFormatter.Parse(tag);
|
const [major, minor, patch] = tagFormatter.Parse(tag);
|
||||||
|
core.info("VAGO tag was not empty: "+ tag + ", " + major + ", " + minor + ", " + patch);
|
||||||
const root = await cmd('git', `merge-base`, tag, current);
|
const root = await cmd('git', `merge-base`, tag, current);
|
||||||
return new ReleaseInformation(major, minor, patch, root.trim(), currentMajor, currentMinor, currentPatch, isTagged);
|
return new ReleaseInformation(major, minor, patch, root.trim(), currentMajor, currentMinor, currentPatch, isTagged);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import { ReleaseInformation } from "./ReleaseInformation";
|
||||||
import { VersionClassification } from "./VersionClassification";
|
import { VersionClassification } from "./VersionClassification";
|
||||||
import { VersionClassifier } from "./VersionClassifier";
|
import { VersionClassifier } from "./VersionClassifier";
|
||||||
import { VersionType } from "./VersionType";
|
import { VersionType } from "./VersionType";
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
export class DefaultVersionClassifier implements VersionClassifier {
|
export class DefaultVersionClassifier implements VersionClassifier {
|
||||||
|
|
||||||
|
|
@ -91,12 +92,15 @@ export class DefaultVersionClassifier implements VersionClassifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
public async ClassifyAsync(lastRelease: ReleaseInformation, commitSet: CommitInfoSet): Promise<VersionClassification> {
|
public async ClassifyAsync(lastRelease: ReleaseInformation, commitSet: CommitInfoSet): Promise<VersionClassification> {
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync called");
|
||||||
const { type, increment, changed } = this.resolveCommitType(commitSet);
|
const { type, increment, changed } = this.resolveCommitType(commitSet);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: type: " + VersionType[type] + ", increment: " + increment + ", changed: " + changed);
|
||||||
|
|
||||||
const { major, minor, patch } = this.getNextVersion(lastRelease, type);
|
const { major, minor, patch } = this.getNextVersion(lastRelease, type);
|
||||||
|
core.info("VAGOO DefaultVersionClassifier.ClassifyAsync: major: " + major + ", minor: " + minor + ", patch: " + patch);
|
||||||
|
|
||||||
if (lastRelease.currentPatch !== null) {
|
if (lastRelease.currentPatch !== null) {
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentPatch is not null, using it to determine version classification");
|
||||||
// If the current commit is tagged, we must use that version. Here we check if the version we have resolved from the
|
// If the current commit is tagged, we must use that version. Here we check if the version we have resolved from the
|
||||||
// previous commits is the same as the current version. If it is, we will use the increment value, otherwise we reset
|
// previous commits is the same as the current version. If it is, we will use the increment value, otherwise we reset
|
||||||
// to zero. For example:
|
// to zero. For example:
|
||||||
|
|
@ -108,6 +112,10 @@ export class DefaultVersionClassifier implements VersionClassifier {
|
||||||
|
|
||||||
const versionsMatch = lastRelease.currentMajor === major && lastRelease.currentMinor === minor && lastRelease.currentPatch === patch;
|
const versionsMatch = lastRelease.currentMajor === major && lastRelease.currentMinor === minor && lastRelease.currentPatch === patch;
|
||||||
const currentIncrement = versionsMatch ? increment : 0;
|
const currentIncrement = versionsMatch ? increment : 0;
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: versionsMatch: " + versionsMatch + ", currentIncrement: " + currentIncrement);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentMajor: " + <number>lastRelease.currentMajor);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentMinor: " + <number>lastRelease.currentMinor);
|
||||||
|
core.info("VAGO DefaultVersionClassifier.ClassifyAsync: lastRelease.currentPatch: " + <number>lastRelease.currentPatch);
|
||||||
return new VersionClassification(VersionType.None, currentIncrement, false, <number>lastRelease.currentMajor, <number>lastRelease.currentMinor, <number>lastRelease.currentPatch);
|
return new VersionClassification(VersionType.None, currentIncrement, false, <number>lastRelease.currentMajor, <number>lastRelease.currentMinor, <number>lastRelease.currentPatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue