94 lines
2.2 KiB
JavaScript
94 lines
2.2 KiB
JavaScript
|
const core = require("@actions/core");
|
||
|
const exec = require("@actions/exec");
|
||
|
const path = require("path");
|
||
|
|
||
|
function getRepoPath(relativePath) {
|
||
|
let githubWorkspacePath = process.env["GITHUB_WORKSPACE"];
|
||
|
if (!githubWorkspacePath) {
|
||
|
throw new Error("GITHUB_WORKSPACE not defined");
|
||
|
}
|
||
|
githubWorkspacePath = path.resolve(githubWorkspacePath);
|
||
|
core.debug(`githubWorkspacePath: ${githubWorkspacePath}`);
|
||
|
|
||
|
repoPath = githubWorkspacePath;
|
||
|
if (relativePath) repoPath = path.resolve(repoPath, relativePath);
|
||
|
|
||
|
core.debug(`repoPath: ${repoPath}`);
|
||
|
return repoPath;
|
||
|
}
|
||
|
|
||
|
async function execGit(repoPath, args, ignoreReturnCode = false) {
|
||
|
const stdout = [];
|
||
|
const options = {
|
||
|
cwd: repoPath,
|
||
|
ignoreReturnCode: ignoreReturnCode,
|
||
|
listeners: {
|
||
|
stdout: data => {
|
||
|
stdout.push(data.toString());
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var result = {};
|
||
|
result.exitCode = await exec.exec("git", args, options);
|
||
|
result.stdout = stdout.join("");
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
async function addConfigOption(repoPath, name, value) {
|
||
|
const result = await execGit(
|
||
|
repoPath,
|
||
|
["config", "--local", "--add", name, value],
|
||
|
true
|
||
|
);
|
||
|
return result.exitCode === 0;
|
||
|
}
|
||
|
|
||
|
async function unsetConfigOption(repoPath, name) {
|
||
|
const result = await execGit(
|
||
|
repoPath,
|
||
|
["config", "--local", "--unset", name],
|
||
|
true
|
||
|
);
|
||
|
return result.exitCode === 0;
|
||
|
}
|
||
|
|
||
|
async function configOptionExists(repoPath, name) {
|
||
|
const result = await execGit(
|
||
|
repoPath,
|
||
|
["config", "--local", "--name-only", "--get-regexp", name],
|
||
|
true
|
||
|
);
|
||
|
return result.exitCode === 0;
|
||
|
}
|
||
|
|
||
|
async function getConfigOption(repoPath, name) {
|
||
|
const result = await execGit(
|
||
|
repoPath,
|
||
|
["config", "--local", name],
|
||
|
true
|
||
|
);
|
||
|
return result.stdout.trim();
|
||
|
}
|
||
|
|
||
|
async function getAndUnsetConfigOption(repoPath, name) {
|
||
|
if (await configOptionExists(repoPath, name)) {
|
||
|
const extraHeaderOptionValue = await getConfigOption(repoPath, name);
|
||
|
if (await unsetConfigOption(repoPath, name)) {
|
||
|
core.debug(`Unset config option '${name}'`);
|
||
|
return extraHeaderOptionValue;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
module.exports = {
|
||
|
getRepoPath,
|
||
|
execGit,
|
||
|
addConfigOption,
|
||
|
unsetConfigOption,
|
||
|
configOptionExists,
|
||
|
getConfigOption,
|
||
|
getAndUnsetConfigOption
|
||
|
};
|