Release filter by pattern, show outputs, fail if not found
This commit is contained in:
@@ -10,7 +10,6 @@ trim_trailing_whitespace = true
|
||||
|
||||
[*.{js, ts}]
|
||||
indent_size = 4
|
||||
quote_type = single
|
||||
ij_javascript_use_double_quotes = false
|
||||
ij_typescript_use_double_quotes = false
|
||||
ij_javascript_import_sort_members = true
|
||||
|
||||
+11
-5
@@ -11,13 +11,19 @@ inputs:
|
||||
required: false
|
||||
default: 'false'
|
||||
prerelease:
|
||||
description: Find the latest release including pre-releases
|
||||
# This input will be ignored if `latest = false`
|
||||
description: Find the latest release including the pre-releases
|
||||
required: false
|
||||
default: 'false' # Default: ignore pre-releases when finding the latest release
|
||||
draft:
|
||||
description: Find the latest release including draft releases
|
||||
pattern:
|
||||
description: A pattern string to filter the releases by tag_name
|
||||
required: false
|
||||
|
||||
debug:
|
||||
description: Show ouputs
|
||||
required: false
|
||||
throwing:
|
||||
description: Fail when no release was found
|
||||
required: false
|
||||
default: 'false' # Default: ignore draft releases when finding the latest release
|
||||
runs:
|
||||
using: node12
|
||||
main: action/index.js
|
||||
|
||||
+33
-13
@@ -5900,8 +5900,10 @@ var Inputs;
|
||||
(function (Inputs) {
|
||||
Inputs["TagName"] = "tag_name";
|
||||
Inputs["Latest"] = "latest";
|
||||
Inputs["Draft"] = "draft";
|
||||
Inputs["Pattern"] = "pattern";
|
||||
Inputs["PreRelease"] = "prerelease";
|
||||
Inputs["Debug"] = "debug";
|
||||
Inputs["Throwing"] = "throwing";
|
||||
})(Inputs = exports.Inputs || (exports.Inputs = {}));
|
||||
var Outputs;
|
||||
(function (Outputs) {
|
||||
@@ -5958,7 +5960,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.findLatestRelease = exports.isSuccessStatusCode = void 0;
|
||||
exports.notFoundRelease = exports.findLatestRelease = exports.isSuccessStatusCode = void 0;
|
||||
const core = __importStar(__nccwpck_require__(832));
|
||||
const github_1 = __nccwpck_require__(572);
|
||||
const io_helper_1 = __nccwpck_require__(923);
|
||||
@@ -5980,6 +5982,13 @@ function findLatestRelease(releases) {
|
||||
return result;
|
||||
}
|
||||
exports.findLatestRelease = findLatestRelease;
|
||||
function notFoundRelease(message, throwing) {
|
||||
if (throwing)
|
||||
throw new Error(message);
|
||||
else
|
||||
core.warning(message);
|
||||
}
|
||||
exports.notFoundRelease = notFoundRelease;
|
||||
(function run() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
@@ -5990,26 +5999,25 @@ exports.findLatestRelease = findLatestRelease;
|
||||
const releaseResponse = yield github.repos
|
||||
.getReleaseByTag({ owner, repo, tag: inputs.tag });
|
||||
if (isSuccessStatusCode(releaseResponse.status))
|
||||
io_helper_1.setOutputs(releaseResponse.data);
|
||||
else {
|
||||
io_helper_1.setOutputs(releaseResponse.data, inputs.debug);
|
||||
else
|
||||
throw new Error(`Unexpected http ${releaseResponse.status} during get release`);
|
||||
}
|
||||
}
|
||||
else {
|
||||
const listResponse = yield github.repos.listReleases({ owner, repo });
|
||||
if (isSuccessStatusCode(listResponse.status)) {
|
||||
const releaseList = listResponse.data
|
||||
.filter(release => (!release.prerelease || inputs.prerelease) &&
|
||||
(!release.draft || inputs.draft));
|
||||
.filter(release => !release.draft &&
|
||||
(!release.prerelease || inputs.prerelease) &&
|
||||
(!inputs.pattern || inputs.pattern.test(release.tag_name)));
|
||||
const latestRelease = findLatestRelease(releaseList);
|
||||
if (latestRelease != null)
|
||||
io_helper_1.setOutputs(latestRelease);
|
||||
io_helper_1.setOutputs(latestRelease, inputs.debug);
|
||||
else
|
||||
core.info('The latest release was not found');
|
||||
notFoundRelease('The latest release was not found', inputs.throwing);
|
||||
}
|
||||
else {
|
||||
else
|
||||
throw new Error(`Unexpected http ${listResponse.status} during get release list`);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
@@ -6069,15 +6077,27 @@ function getInputs() {
|
||||
result.tag = github_1.context.ref.replace('refs/tags/', '');
|
||||
result.latest = getBooleanInput(constants_1.Inputs.Latest, { required: false });
|
||||
if (result.latest) {
|
||||
result.draft = getBooleanInput(constants_1.Inputs.Draft, { required: false });
|
||||
const pattern = core.getInput(constants_1.Inputs.Pattern, { required: false });
|
||||
if (typeof pattern === 'string') {
|
||||
try {
|
||||
result.pattern = new RegExp(pattern);
|
||||
}
|
||||
catch (e) {
|
||||
delete result.pattern;
|
||||
}
|
||||
}
|
||||
result.prerelease = getBooleanInput(constants_1.Inputs.PreRelease, { required: false });
|
||||
}
|
||||
}
|
||||
result.debug = getBooleanInput(constants_1.Inputs.Debug, { required: false });
|
||||
result.throwing = getBooleanInput(constants_1.Inputs.Throwing, { required: false });
|
||||
return result;
|
||||
}
|
||||
exports.getInputs = getInputs;
|
||||
function setOutputs(outputs) {
|
||||
function setOutputs(outputs, log) {
|
||||
const { id, node_id, url, html_url, upload_url, assets_url, name, tag_name, body, draft, prerelease, target_commitish, created_at, published_at } = outputs;
|
||||
if (log)
|
||||
core.debug(JSON.stringify(outputs));
|
||||
core.setOutput(constants_1.Outputs.Id, id.toString());
|
||||
core.setOutput(constants_1.Outputs.NodeId, node_id);
|
||||
core.setOutput(constants_1.Outputs.Url, url);
|
||||
|
||||
+4
-2
@@ -1,8 +1,10 @@
|
||||
export enum Inputs {
|
||||
TagName = 'tag_name',
|
||||
Latest = 'latest',
|
||||
Draft = 'draft',
|
||||
PreRelease = 'prerelease'
|
||||
Pattern = 'pattern',
|
||||
PreRelease = 'prerelease',
|
||||
Debug = 'debug',
|
||||
Throwing = 'throwing'
|
||||
}
|
||||
|
||||
export enum Outputs {
|
||||
|
||||
+14
-10
@@ -10,6 +10,7 @@ export function isSuccessStatusCode(statusCode?: number): boolean {
|
||||
export function findLatestRelease(releases: any[]): any {
|
||||
let result: any, latest: number = 0;
|
||||
|
||||
// Find the latest release by `published_at`
|
||||
releases.forEach(release => {
|
||||
const publishedDate: number = release.published_at ? Date.parse(release.published_at) : 0;
|
||||
if (result == null || latest < publishedDate) {
|
||||
@@ -21,6 +22,12 @@ export function findLatestRelease(releases: any[]): any {
|
||||
return result;
|
||||
}
|
||||
|
||||
export function notFoundRelease(message: string, throwing: boolean) {
|
||||
if (throwing)
|
||||
throw new Error(message);
|
||||
else core.warning(message);
|
||||
}
|
||||
|
||||
(async function run() {
|
||||
try {
|
||||
const inputs: ReleaseInputs = getInputs();
|
||||
@@ -34,27 +41,24 @@ export function findLatestRelease(releases: any[]): any {
|
||||
.getReleaseByTag({owner, repo, tag: inputs.tag});
|
||||
|
||||
if (isSuccessStatusCode(releaseResponse.status))
|
||||
setOutputs(releaseResponse.data);
|
||||
else {
|
||||
setOutputs(releaseResponse.data, inputs.debug);
|
||||
else
|
||||
throw new Error(`Unexpected http ${releaseResponse.status} during get release`);
|
||||
}
|
||||
} else {
|
||||
const listResponse = await github.repos.listReleases({owner, repo});
|
||||
|
||||
if (isSuccessStatusCode(listResponse.status)) {
|
||||
const releaseList = listResponse.data
|
||||
.filter(release =>
|
||||
.filter(release => !release.draft &&
|
||||
(!release.prerelease || inputs.prerelease) &&
|
||||
(!release.draft || inputs.draft));
|
||||
(!inputs.pattern || inputs.pattern.test(release.tag_name)));
|
||||
|
||||
// Find the latest release by `published_at`
|
||||
const latestRelease: any = findLatestRelease(releaseList);
|
||||
if (latestRelease != null)
|
||||
setOutputs(latestRelease);
|
||||
else core.info('The latest release was not found');
|
||||
} else {
|
||||
setOutputs(latestRelease, inputs.debug);
|
||||
else notFoundRelease('The latest release was not found', inputs.throwing);
|
||||
} else
|
||||
throw new Error(`Unexpected http ${listResponse.status} during get release list`);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
core.setFailed(err.message);
|
||||
|
||||
+20
-4
@@ -1,5 +1,5 @@
|
||||
import {InputOptions} from '@actions/core';
|
||||
import * as core from '@actions/core';
|
||||
import {InputOptions} from '@actions/core';
|
||||
import {context} from '@actions/github';
|
||||
import {Inputs, Outputs} from './constants';
|
||||
|
||||
@@ -7,8 +7,11 @@ export interface ReleaseInputs {
|
||||
tag: string;
|
||||
|
||||
latest: boolean;
|
||||
draft: boolean;
|
||||
pattern: RegExp;
|
||||
prerelease: boolean;
|
||||
|
||||
debug: boolean;
|
||||
throwing: boolean;
|
||||
}
|
||||
|
||||
export function getBooleanInput(name: string, options?: InputOptions): boolean {
|
||||
@@ -36,15 +39,25 @@ export function getInputs(): ReleaseInputs {
|
||||
|
||||
result.latest = getBooleanInput(Inputs.Latest, {required: false});
|
||||
if (result.latest) {
|
||||
result.draft = getBooleanInput(Inputs.Draft, {required: false});
|
||||
const pattern = core.getInput(Inputs.Pattern, {required: false});
|
||||
if (typeof pattern === 'string') {
|
||||
try {
|
||||
result.pattern = new RegExp(pattern);
|
||||
} catch (e) {
|
||||
delete result.pattern;
|
||||
}
|
||||
}
|
||||
result.prerelease = getBooleanInput(Inputs.PreRelease, {required: false});
|
||||
}
|
||||
}
|
||||
|
||||
result.debug = getBooleanInput(Inputs.Debug, {required: false});
|
||||
result.throwing = getBooleanInput(Inputs.Throwing, {required: false});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export function setOutputs(outputs: any) {
|
||||
export function setOutputs(outputs: any, log?: boolean) {
|
||||
// Get the outputs for the created release from the response
|
||||
const {
|
||||
id,
|
||||
@@ -63,6 +76,9 @@ export function setOutputs(outputs: any) {
|
||||
published_at
|
||||
} = outputs;
|
||||
|
||||
if (log)
|
||||
core.debug(JSON.stringify(outputs));
|
||||
|
||||
core.setOutput(Outputs.Id, id.toString());
|
||||
core.setOutput(Outputs.NodeId, node_id);
|
||||
core.setOutput(Outputs.Url, url);
|
||||
|
||||
Reference in New Issue
Block a user