diff --git a/action.yml b/action.yml index 2cbd286..cb105ee 100644 --- a/action.yml +++ b/action.yml @@ -19,6 +19,8 @@ inputs: required: true overwrite: description: 'Overwrite the release in case it already exists' + file_glob: + description: 'if true the file can be a glob pattern, asset_name is ignored if this is true' runs: using: 'node12' main: 'lib/main.js' diff --git a/lib/main.js b/lib/main.js index 04fa1c0..445cdd8 100644 --- a/lib/main.js +++ b/lib/main.js @@ -18,6 +18,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const fs = __importStar(require("fs")); const core = __importStar(require("@actions/core")); const github = __importStar(require("@actions/github")); +const path = __importStar(require("path")); +const glob = require("glob"); function get_release_by_tag(tag, octokit, context) { return __awaiter(this, void 0, void 0, function* () { try { @@ -38,7 +40,12 @@ function get_release_by_tag(tag, octokit, context) { } function upload_to_release(release, file, asset_name, tag, overwrite, octokit, context) { return __awaiter(this, void 0, void 0, function* () { - const file_size = fs.statSync(file).size; + const stat = fs.statSync(file); + if (!stat.isFile()) { + core.debug(`Skipping ${file}, since its not a file`); + return; + } + const file_size = stat.size; const file_bytes = fs.readFileSync(file); // Check for duplicates. const assets = yield octokit.repos.listAssetsForRelease(Object.assign({}, context.repo, { release_id: release.data.id })); @@ -73,16 +80,29 @@ function run() { try { const token = core.getInput('repo_token', { required: true }); const file = core.getInput('file', { required: true }); - const asset_name = core.getInput('asset_name', { required: true }); + const file_glob = core.getInput('file_glob'); const tag = core.getInput('tag', { required: true }).replace("refs/tags/", ""); const overwrite = core.getInput('overwrite'); - if (!fs.existsSync(file)) { - core.setFailed(`File ${file} wasn't found.`); - } const octokit = new github.GitHub(token); const context = github.context; const release = yield get_release_by_tag(tag, octokit, context); - yield upload_to_release(release, file, asset_name, tag, overwrite, octokit, context); + if (file_glob === "true") { + const files = glob.sync(file); + if (files.length > 0) { + for (let i = 0; i < files.length; i += 1) { + const file = files[i]; + const asset_name = path.basename(file); + yield upload_to_release(release, file, asset_name, tag, overwrite, octokit, context); + } + } + else { + core.setFailed("No files matching the glob pattern found."); + } + } + else { + const asset_name = core.getInput('asset_name', { required: true }); + yield upload_to_release(release, file, asset_name, tag, overwrite, octokit, context); + } } catch (error) { core.setFailed(error.message); diff --git a/package-lock.json b/package-lock.json index 4fe16a8..70e22d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -852,8 +852,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -934,7 +933,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1194,9 +1192,9 @@ } }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", "dev": true, "optional": true }, @@ -1209,8 +1207,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "convert-source-map": { "version": "1.6.0", @@ -1788,8 +1785,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.2.9", @@ -2378,7 +2374,6 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2407,9 +2402,9 @@ "dev": true }, "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.2.tgz", + "integrity": "sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -2561,7 +2556,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2570,8 +2564,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "invariant": { "version": "2.2.4", @@ -3681,7 +3674,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4128,8 +4120,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", diff --git a/package.json b/package.json index fb2f5e4..d683018 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "license": "MIT", "dependencies": { "@actions/core": "^1.0.0", - "@actions/github": "^1.0.0" + "@actions/github": "^1.0.0", + "glob": "^7.1.4" }, "devDependencies": { "@types/jest": "^24.0.13", diff --git a/src/main.ts b/src/main.ts index 359316e..40f65e5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,6 +1,9 @@ import * as fs from 'fs'; import * as core from '@actions/core'; import * as github from '@actions/github'; +import * as path from 'path'; + +const glob = require("glob") async function get_release_by_tag(tag: string, octokit: any, context: any): Promise { try { @@ -24,7 +27,12 @@ async function get_release_by_tag(tag: string, octokit: any, context: any): Prom } async function upload_to_release(release: any, file: string, asset_name: string, tag: string, overwrite: string, octokit: any, context: any) { - const file_size = fs.statSync(file).size; + const stat = fs.statSync(file); + if (!stat.isFile()) { + core.debug(`Skipping ${file}, since its not a file`); + return; + } + const file_size = stat.size; const file_bytes = fs.readFileSync(file); // Check for duplicates. @@ -64,19 +72,31 @@ async function run() { try { const token = core.getInput('repo_token', { required: true }); const file = core.getInput('file', { required: true }); - const asset_name = core.getInput('asset_name', { required: true }); + const file_glob = core.getInput('file_glob'); const tag = core.getInput('tag', { required: true }).replace("refs/tags/", ""); const overwrite = core.getInput('overwrite'); - if (!fs.existsSync(file)) { - core.setFailed(`File ${file} wasn't found.`); - } - const octokit = new github.GitHub(token); const context = github.context; - const release = await get_release_by_tag(tag, octokit, context); - await upload_to_release(release, file, asset_name, tag, overwrite, octokit, context); + + if (file_glob === "true") { + const files = glob.sync(file); + if (files.length > 0) { + for (let i = 0; i < files.length; i += 1) { + const file = files[i]; + const asset_name = path.basename(file); + await upload_to_release(release, file, asset_name, tag, overwrite, octokit, context); + } + } + else { + core.setFailed("No files matching the glob pattern found."); + } + } + else { + const asset_name = core.getInput('asset_name', { required: true }); + await upload_to_release(release, file, asset_name, tag, overwrite, octokit, context); + } } catch (error) { core.setFailed(error.message); }