From 3109c48d6ef4a804bf3a82d30a2c77699fc4efd5 Mon Sep 17 00:00:00 2001 From: David Hiendl Date: Sat, 2 Dec 2023 17:26:57 +0100 Subject: [PATCH] test --- gather.js | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 gather.js diff --git a/gather.js b/gather.js new file mode 100644 index 0000000..0d3ed17 --- /dev/null +++ b/gather.js @@ -0,0 +1,112 @@ +import * as core from '@actions/core'; +import * as github from '@actions/github'; +import * as process from 'process'; +import * as semverParser from 'semver-parser'; + + +export function result_to_output(results) { + + for (const key in results) { + if (!results.hasOwnProperty(key)) { + continue; + } + const value = results[key]; + if (typeof value !== 'string') { + core.setOutput(key, JSON.stringify(value)); // TODO support nested objects with key chaining + } else { + core.setOutput(key, value) + } + } + +} + +export function gather_information(debug = false, output = false) { + + const r = { + git_is_branch: false, + git_is_tag: false, + git_is_pull_request: false, + git_current_branch: false, + git_ref_branch: false, + git_is_default_branch: false, + git_tag: false, + semver_valid: false, + semver_major: false, + semver_minor: false, + semver_patch: false, + semver_build: false, + semver_pre: false, + }; + + try { + const stripTagPrefix = core.getInput('strip_tag_prefix'); + + if (debug) console.log(JSON.stringify(github.context)) + if (debug) console.log("github.context.ref=" + github.context.ref) + + r.git_is_tag = github.context.ref.startsWith("refs/tags/") + r.git_default_branch = github.context.payload?.repository?.defaultBranch + r.git_is_pull_request = github.context.payload.pull_request != null + + if (git_is_pull_request) { + const baseRef = github.context.baseRef || process.env.BODY_REF + const headRef = github.context.payload?.pull_request?.head?.ref || process.env.HEAD_REF + if (debug) console.log("baseRef=" + baseRef) + if (debug) console.log("headRef=" + headRef) + // TODO support PR data + + } else if (!git_is_tag) { // regular branches + r.git_is_branch = true; + } + + // gather regular branch info, also applies to tags + if(git_is_tag || git_is_branch) { + if (!github.context.ref.startsWith("refs/heads/")) { + throw new Error("Failed to determine branch for non-PR and non-Tag action") + } + r.git_current_branch = github.context.ref.slice("refs/heads/".length) + r.git_ref_branch = r.git_current_branch; // same as current branch for non-PR, non-Tag + r.git_is_default_branch = r.git_current_branch == r.git_default_branch; + } + + // parse semver for tags + if (git_is_tag) { + r.git_tag = github.context.ref.slice("refs/tags/".length) + + const parsed = semverParser.parseSemVer(r.git_tag) + if (debug) console.log("semver=" + JSON.stringify(parsed)) + + if(parsed.matches) { + r.semver_valid = parsed.matches; + r.semver_major = parsed.major; + r.semver_minor = parsed.minor; + r.semver_patch = parsed.patch; + r.semver_build = parsed.build; + r.semver_pre = parsed.pre; + } + } else if(git_is_branch) { + const parsed = semverParser.parseSemVer(r.git_current_branch) + if (debug) console.log("semver=" + JSON.stringify(parsed)) + + if(parsed.matches) { + r.semver_valid = parsed.matches; + r.semver_major = parsed.major; + r.semver_minor = parsed.minor; + r.semver_patch = parsed.patch; + r.semver_build = parsed.build; + r.semver_pre = parsed.pre; + } + } + + if (debug) console.log("results for output:", JSON.stringify(r, null, 2)) + if (output) result_to_output(r); + + return r; + + } catch (error) { + console.log("partial results before error: ", JSON.stringify(r, null, 2)) + core.setFailed(error.message); + process.exit(1) + } + +} \ No newline at end of file