Unset and restore extraheader config option
This commit is contained in:
parent
c7b64af0a4
commit
d5c5ea3e20
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"commonjs": true,
|
||||||
|
"es6": true,
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"extends": "eslint:recommended",
|
||||||
|
"globals": {
|
||||||
|
"Atomics": "readonly",
|
||||||
|
"SharedArrayBuffer": "readonly"
|
||||||
|
},
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 2018
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,7 +34,7 @@ module.exports =
|
||||||
/******/ // the startup function
|
/******/ // the startup function
|
||||||
/******/ function startup() {
|
/******/ function startup() {
|
||||||
/******/ // Load entry module and return exports
|
/******/ // Load entry module and return exports
|
||||||
/******/ return __webpack_require__(104);
|
/******/ return __webpack_require__(676);
|
||||||
/******/ };
|
/******/ };
|
||||||
/******/
|
/******/
|
||||||
/******/ // run startup
|
/******/ // run startup
|
||||||
|
@ -973,21 +973,6 @@ module.exports = util.assign(
|
||||||
|
|
||||||
module.exports = require("tls");
|
module.exports = require("tls");
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 58:
|
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
||||||
|
|
||||||
// Unique ID creation requires a high quality random # generator. In node.js
|
|
||||||
// this is pretty straight-forward - we use the crypto API.
|
|
||||||
|
|
||||||
var crypto = __webpack_require__(417);
|
|
||||||
|
|
||||||
module.exports = function nodeRNG() {
|
|
||||||
return crypto.randomBytes(16);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 87:
|
/***/ 87:
|
||||||
|
@ -998,109 +983,6 @@ module.exports = require("os");
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 104:
|
/***/ 104:
|
||||||
/***/ (function(__unusedmodule, __unusedexports, __webpack_require__) {
|
|
||||||
|
|
||||||
const { inspect } = __webpack_require__(669);
|
|
||||||
const isDocker = __webpack_require__(160);
|
|
||||||
const core = __webpack_require__(470);
|
|
||||||
const exec = __webpack_require__(986);
|
|
||||||
const setupPython = __webpack_require__(139);
|
|
||||||
|
|
||||||
async function run() {
|
|
||||||
try {
|
|
||||||
// Allows ncc to find assets to be included in the distribution
|
|
||||||
const src = __webpack_require__.ab + "src";
|
|
||||||
core.debug(`src: ${src}`);
|
|
||||||
|
|
||||||
// Determine how to access python and pip
|
|
||||||
const { pip, python } = (function() {
|
|
||||||
if (isDocker()) {
|
|
||||||
core.info("Running inside a Docker container");
|
|
||||||
// Python 3 assumed to be installed and on the PATH
|
|
||||||
return {
|
|
||||||
pip: "pip3",
|
|
||||||
python: "python3"
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
// Setup Python from the tool cache
|
|
||||||
setupPython("3.x", "x64");
|
|
||||||
return {
|
|
||||||
pip: "pip",
|
|
||||||
python: "python"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
|
|
||||||
// Install requirements
|
|
||||||
await exec.exec(pip, [
|
|
||||||
"install",
|
|
||||||
"--requirement",
|
|
||||||
`${src}/requirements.txt`,
|
|
||||||
"--no-index",
|
|
||||||
`--find-links=${__dirname}/vendor`
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Fetch action inputs
|
|
||||||
const inputs = {
|
|
||||||
token: core.getInput("token"),
|
|
||||||
path: core.getInput("path"),
|
|
||||||
commitMessage: core.getInput("commit-message"),
|
|
||||||
committer: core.getInput("committer"),
|
|
||||||
author: core.getInput("author"),
|
|
||||||
title: core.getInput("title"),
|
|
||||||
body: core.getInput("body"),
|
|
||||||
labels: core.getInput("labels"),
|
|
||||||
assignees: core.getInput("assignees"),
|
|
||||||
reviewers: core.getInput("reviewers"),
|
|
||||||
teamReviewers: core.getInput("team-reviewers"),
|
|
||||||
milestone: core.getInput("milestone"),
|
|
||||||
project: core.getInput("project"),
|
|
||||||
projectColumn: core.getInput("project-column"),
|
|
||||||
branch: core.getInput("branch"),
|
|
||||||
base: core.getInput("base"),
|
|
||||||
branchSuffix: core.getInput("branch-suffix")
|
|
||||||
};
|
|
||||||
core.debug(`Inputs: ${inspect(inputs)}`);
|
|
||||||
|
|
||||||
// Set environment variables from inputs.
|
|
||||||
if (inputs.token) process.env.GITHUB_TOKEN = inputs.token;
|
|
||||||
if (inputs.path) process.env.CPR_PATH = inputs.path;
|
|
||||||
if (inputs.commitMessage) process.env.CPR_COMMIT_MESSAGE = inputs.commitMessage;
|
|
||||||
if (inputs.committer) process.env.CPR_COMMITTER = inputs.committer;
|
|
||||||
if (inputs.author) process.env.CPR_AUTHOR = inputs.author;
|
|
||||||
if (inputs.title) process.env.CPR_TITLE = inputs.title;
|
|
||||||
if (inputs.body) process.env.CPR_BODY = inputs.body;
|
|
||||||
if (inputs.labels) process.env.CPR_LABELS = inputs.labels;
|
|
||||||
if (inputs.assignees) process.env.CPR_ASSIGNEES = inputs.assignees;
|
|
||||||
if (inputs.reviewers) process.env.CPR_REVIEWERS = inputs.reviewers;
|
|
||||||
if (inputs.teamReviewers) process.env.CPR_TEAM_REVIEWERS = inputs.teamReviewers;
|
|
||||||
if (inputs.milestone) process.env.CPR_MILESTONE = inputs.milestone;
|
|
||||||
if (inputs.project) process.env.CPR_PROJECT_NAME = inputs.project;
|
|
||||||
if (inputs.projectColumn) process.env.CPR_PROJECT_COLUMN_NAME = inputs.projectColumn;
|
|
||||||
if (inputs.branch) process.env.CPR_BRANCH = inputs.branch;
|
|
||||||
if (inputs.base) process.env.CPR_BASE = inputs.base;
|
|
||||||
if (inputs.branchSuffix) process.env.CPR_BRANCH_SUFFIX = inputs.branchSuffix;
|
|
||||||
|
|
||||||
// Execute python script
|
|
||||||
await exec.exec(python, [`${src}/create_pull_request.py`]);
|
|
||||||
} catch (error) {
|
|
||||||
core.setFailed(error.message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
run();
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 129:
|
|
||||||
/***/ (function(module) {
|
|
||||||
|
|
||||||
module.exports = require("child_process");
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 139:
|
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||||
|
|
||||||
const core = __webpack_require__(470);
|
const core = __webpack_require__(470);
|
||||||
|
@ -1157,6 +1039,28 @@ let setupPython = function(versionSpec, arch) {
|
||||||
module.exports = setupPython;
|
module.exports = setupPython;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 129:
|
||||||
|
/***/ (function(module) {
|
||||||
|
|
||||||
|
module.exports = require("child_process");
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 139:
|
||||||
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||||
|
|
||||||
|
// Unique ID creation requires a high quality random # generator. In node.js
|
||||||
|
// this is pretty straight-forward - we use the crypto API.
|
||||||
|
|
||||||
|
var crypto = __webpack_require__(417);
|
||||||
|
|
||||||
|
module.exports = function nodeRNG() {
|
||||||
|
return crypto.randomBytes(16);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 141:
|
/***/ 141:
|
||||||
|
@ -4301,6 +4205,229 @@ function isUnixExecutable(stats) {
|
||||||
}
|
}
|
||||||
//# sourceMappingURL=io-util.js.map
|
//# sourceMappingURL=io-util.js.map
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 676:
|
||||||
|
/***/ (function(__unusedmodule, __unusedexports, __webpack_require__) {
|
||||||
|
|
||||||
|
const { inspect } = __webpack_require__(669);
|
||||||
|
const isDocker = __webpack_require__(160);
|
||||||
|
const core = __webpack_require__(470);
|
||||||
|
const exec = __webpack_require__(986);
|
||||||
|
const setupPython = __webpack_require__(104);
|
||||||
|
const {
|
||||||
|
getRepoPath,
|
||||||
|
getAndUnsetConfigOption,
|
||||||
|
addConfigOption
|
||||||
|
} = __webpack_require__(718);
|
||||||
|
|
||||||
|
const EXTRAHEADER_OPTION = "http.https://github.com/.extraheader";
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
try {
|
||||||
|
// Allows ncc to find assets to be included in the distribution
|
||||||
|
const cpr = __webpack_require__.ab + "cpr";
|
||||||
|
core.debug(`cpr: ${cpr}`);
|
||||||
|
|
||||||
|
// Determine how to access python and pip
|
||||||
|
const { pip, python } = (function() {
|
||||||
|
if (isDocker()) {
|
||||||
|
core.info("Running inside a Docker container");
|
||||||
|
// Python 3 assumed to be installed and on the PATH
|
||||||
|
return {
|
||||||
|
pip: "pip3",
|
||||||
|
python: "python3"
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
// Setup Python from the tool cache
|
||||||
|
setupPython("3.x", "x64");
|
||||||
|
return {
|
||||||
|
pip: "pip",
|
||||||
|
python: "python"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
// Install requirements
|
||||||
|
await exec.exec(pip, [
|
||||||
|
"install",
|
||||||
|
"--requirement",
|
||||||
|
`${cpr}/requirements.txt`,
|
||||||
|
"--no-index",
|
||||||
|
`--find-links=${__dirname}/vendor`
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Fetch action inputs
|
||||||
|
const inputs = {
|
||||||
|
token: core.getInput("token"),
|
||||||
|
path: core.getInput("path"),
|
||||||
|
commitMessage: core.getInput("commit-message"),
|
||||||
|
committer: core.getInput("committer"),
|
||||||
|
author: core.getInput("author"),
|
||||||
|
title: core.getInput("title"),
|
||||||
|
body: core.getInput("body"),
|
||||||
|
labels: core.getInput("labels"),
|
||||||
|
assignees: core.getInput("assignees"),
|
||||||
|
reviewers: core.getInput("reviewers"),
|
||||||
|
teamReviewers: core.getInput("team-reviewers"),
|
||||||
|
milestone: core.getInput("milestone"),
|
||||||
|
project: core.getInput("project"),
|
||||||
|
projectColumn: core.getInput("project-column"),
|
||||||
|
branch: core.getInput("branch"),
|
||||||
|
base: core.getInput("base"),
|
||||||
|
branchSuffix: core.getInput("branch-suffix")
|
||||||
|
};
|
||||||
|
core.debug(`Inputs: ${inspect(inputs)}`);
|
||||||
|
|
||||||
|
// Set environment variables from inputs.
|
||||||
|
if (inputs.token) process.env.GITHUB_TOKEN = inputs.token;
|
||||||
|
if (inputs.path) process.env.CPR_PATH = inputs.path;
|
||||||
|
if (inputs.commitMessage) process.env.CPR_COMMIT_MESSAGE = inputs.commitMessage;
|
||||||
|
if (inputs.committer) process.env.CPR_COMMITTER = inputs.committer;
|
||||||
|
if (inputs.author) process.env.CPR_AUTHOR = inputs.author;
|
||||||
|
if (inputs.title) process.env.CPR_TITLE = inputs.title;
|
||||||
|
if (inputs.body) process.env.CPR_BODY = inputs.body;
|
||||||
|
if (inputs.labels) process.env.CPR_LABELS = inputs.labels;
|
||||||
|
if (inputs.assignees) process.env.CPR_ASSIGNEES = inputs.assignees;
|
||||||
|
if (inputs.reviewers) process.env.CPR_REVIEWERS = inputs.reviewers;
|
||||||
|
if (inputs.teamReviewers) process.env.CPR_TEAM_REVIEWERS = inputs.teamReviewers;
|
||||||
|
if (inputs.milestone) process.env.CPR_MILESTONE = inputs.milestone;
|
||||||
|
if (inputs.project) process.env.CPR_PROJECT_NAME = inputs.project;
|
||||||
|
if (inputs.projectColumn) process.env.CPR_PROJECT_COLUMN_NAME = inputs.projectColumn;
|
||||||
|
if (inputs.branch) process.env.CPR_BRANCH = inputs.branch;
|
||||||
|
if (inputs.base) process.env.CPR_BASE = inputs.base;
|
||||||
|
if (inputs.branchSuffix) process.env.CPR_BRANCH_SUFFIX = inputs.branchSuffix;
|
||||||
|
|
||||||
|
// Get the repository path
|
||||||
|
var repoPath = getRepoPath(inputs.path);
|
||||||
|
// Get the extraheader config option if it exists
|
||||||
|
var extraHeaderOptionValue = await getAndUnsetConfigOption(
|
||||||
|
repoPath,
|
||||||
|
EXTRAHEADER_OPTION
|
||||||
|
);
|
||||||
|
|
||||||
|
// Execute create pull request
|
||||||
|
await exec.exec(python, [`${cpr}/create_pull_request.py`]);
|
||||||
|
} catch (error) {
|
||||||
|
core.setFailed(error.message);
|
||||||
|
} finally {
|
||||||
|
// Restore the extraheader config option
|
||||||
|
if (extraHeaderOptionValue) {
|
||||||
|
if (
|
||||||
|
await addConfigOption(
|
||||||
|
repoPath,
|
||||||
|
EXTRAHEADER_OPTION,
|
||||||
|
extraHeaderOptionValue
|
||||||
|
)
|
||||||
|
)
|
||||||
|
core.debug(`Restored config option '${EXTRAHEADER_OPTION}'`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
run();
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 718:
|
||||||
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||||
|
|
||||||
|
const core = __webpack_require__(470);
|
||||||
|
const exec = __webpack_require__(986);
|
||||||
|
const path = __webpack_require__(622);
|
||||||
|
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 722:
|
/***/ 722:
|
||||||
|
@ -4733,7 +4860,7 @@ module.exports = require("zlib");
|
||||||
/***/ 826:
|
/***/ 826:
|
||||||
/***/ (function(module, __unusedexports, __webpack_require__) {
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
||||||
|
|
||||||
var rng = __webpack_require__(58);
|
var rng = __webpack_require__(139);
|
||||||
var bytesToUuid = __webpack_require__(722);
|
var bytesToUuid = __webpack_require__(722);
|
||||||
|
|
||||||
function v4(options, buf, offset) {
|
function v4(options, buf, offset) {
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
const core = require("@actions/core");
|
|
||||||
const tc = require("@actions/tool-cache");
|
|
||||||
const path = require("path");
|
|
||||||
const semver = require("semver");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setup for Python from the GitHub Actions tool cache
|
|
||||||
* Converted from https://github.com/actions/setup-python
|
|
||||||
*
|
|
||||||
* @param {string} versionSpec version of Python
|
|
||||||
* @param {string} arch architecture (x64|x32)
|
|
||||||
*/
|
|
||||||
let setupPython = function(versionSpec, arch) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const IS_WINDOWS = process.platform === "win32";
|
|
||||||
|
|
||||||
// Find the version of Python we want in the tool cache
|
|
||||||
const installDir = tc.find("Python", versionSpec, arch);
|
|
||||||
core.debug(`installDir: ${installDir}`);
|
|
||||||
|
|
||||||
// Set paths
|
|
||||||
core.exportVariable("pythonLocation", installDir);
|
|
||||||
core.addPath(installDir);
|
|
||||||
if (IS_WINDOWS) {
|
|
||||||
core.addPath(path.join(installDir, "Scripts"));
|
|
||||||
} else {
|
|
||||||
core.addPath(path.join(installDir, "bin"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_WINDOWS) {
|
|
||||||
// Add --user directory
|
|
||||||
// `installDir` from tool cache should look like $AGENT_TOOLSDIRECTORY/Python/<semantic version>/x64/
|
|
||||||
// So if `findLocalTool` succeeded above, we must have a conformant `installDir`
|
|
||||||
const version = path.basename(path.dirname(installDir));
|
|
||||||
const major = semver.major(version);
|
|
||||||
const minor = semver.minor(version);
|
|
||||||
|
|
||||||
const userScriptsDir = path.join(
|
|
||||||
process.env["APPDATA"] || "",
|
|
||||||
"Python",
|
|
||||||
`Python${major}${minor}`,
|
|
||||||
"Scripts"
|
|
||||||
);
|
|
||||||
core.addPath(userScriptsDir);
|
|
||||||
}
|
|
||||||
// On Linux and macOS, pip will create the --user directory and add it to PATH as needed.
|
|
||||||
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = setupPython;
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,3 @@
|
||||||
|
process.env = Object.assign(process.env, {
|
||||||
|
GITHUB_WORKSPACE: __dirname
|
||||||
|
});
|
File diff suppressed because it is too large
Load Diff
10
package.json
10
package.json
|
@ -5,8 +5,10 @@
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"clean": "rm -rf dist",
|
"clean": "rm -rf dist",
|
||||||
"build": "ncc build index.js -o dist",
|
"lint": "eslint src/index.js",
|
||||||
"vendor-deps": "pip download -r src/requirements.txt --no-binary=:all: -d dist/vendor",
|
"test": "eslint src/index.js && jest",
|
||||||
|
"build": "ncc build src/index.js -o dist",
|
||||||
|
"vendor-deps": "pip download -r src/cpr/requirements.txt --no-binary=:all: -d dist/vendor",
|
||||||
"package": "npm run build && npm run vendor-deps"
|
"package": "npm run build && npm run vendor-deps"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -27,6 +29,8 @@
|
||||||
"is-docker": "^2.0.0"
|
"is-docker": "^2.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@zeit/ncc": "0.21.1"
|
"@zeit/ncc": "0.21.1",
|
||||||
|
"eslint": "6.8.0",
|
||||||
|
"jest": "25.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
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
|
||||||
|
};
|
|
@ -0,0 +1,72 @@
|
||||||
|
const path = require("path");
|
||||||
|
const {
|
||||||
|
getRepoPath,
|
||||||
|
execGit,
|
||||||
|
addConfigOption,
|
||||||
|
unsetConfigOption,
|
||||||
|
configOptionExists,
|
||||||
|
getConfigOption,
|
||||||
|
getAndUnsetConfigOption
|
||||||
|
} = require("./git");
|
||||||
|
|
||||||
|
test("getRepoPath", async () => {
|
||||||
|
expect(getRepoPath()).toEqual(process.env["GITHUB_WORKSPACE"]);
|
||||||
|
expect(getRepoPath("foo")).toEqual(
|
||||||
|
path.resolve(process.env["GITHUB_WORKSPACE"], "foo")
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("execGit", async () => {
|
||||||
|
const repoPath = getRepoPath();
|
||||||
|
const result = await execGit(
|
||||||
|
repoPath,
|
||||||
|
["config", "--local", "--name-only", "--get-regexp", "remote.origin.url"],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
expect(result.exitCode).toEqual(0);
|
||||||
|
expect(result.stdout.trim()).toEqual("remote.origin.url");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("add and unset config option", async () => {
|
||||||
|
const repoPath = getRepoPath();
|
||||||
|
const add = await addConfigOption(repoPath, "test.add.and.unset.config.option", "true");
|
||||||
|
expect(add).toBeTruthy();
|
||||||
|
const unset = await unsetConfigOption(repoPath, "test.add.and.unset.config.option");
|
||||||
|
expect(unset).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("configOptionExists returns true", async () => {
|
||||||
|
const repoPath = getRepoPath();
|
||||||
|
const result = await configOptionExists(repoPath, "remote.origin.url");
|
||||||
|
expect(result).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("configOptionExists returns false", async () => {
|
||||||
|
const repoPath = getRepoPath();
|
||||||
|
const result = await configOptionExists(repoPath, "this.key.does.not.exist");
|
||||||
|
expect(result).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("get config option", async () => {
|
||||||
|
const repoPath = getRepoPath();
|
||||||
|
const add = await addConfigOption(repoPath, "test.get.config.option", "foo");
|
||||||
|
expect(add).toBeTruthy();
|
||||||
|
const get = await getConfigOption(repoPath, "test.get.config.option");
|
||||||
|
expect(get).toEqual("foo");
|
||||||
|
const unset = await unsetConfigOption(repoPath, "test.get.config.option");
|
||||||
|
expect(unset).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("get and unset config option is successful", async () => {
|
||||||
|
const repoPath = getRepoPath();
|
||||||
|
const add = await addConfigOption(repoPath, "test.get.and.unset.config.option", "foo");
|
||||||
|
expect(add).toBeTruthy();
|
||||||
|
const getAndUnset = await getAndUnsetConfigOption(repoPath, "test.get.and.unset.config.option");
|
||||||
|
expect(getAndUnset).toEqual("foo");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("get and unset config option is unsuccessful", async () => {
|
||||||
|
const repoPath = getRepoPath();
|
||||||
|
const getAndUnset = await getAndUnsetConfigOption(repoPath, "this.key.does.not.exist");
|
||||||
|
expect(getAndUnset).toBeNull();
|
||||||
|
});
|
|
@ -2,13 +2,20 @@ const { inspect } = require("util");
|
||||||
const isDocker = require("is-docker");
|
const isDocker = require("is-docker");
|
||||||
const core = require("@actions/core");
|
const core = require("@actions/core");
|
||||||
const exec = require("@actions/exec");
|
const exec = require("@actions/exec");
|
||||||
const setupPython = require("./src/setup-python");
|
const setupPython = require("./setup-python");
|
||||||
|
const {
|
||||||
|
getRepoPath,
|
||||||
|
getAndUnsetConfigOption,
|
||||||
|
addConfigOption
|
||||||
|
} = require("./git");
|
||||||
|
|
||||||
|
const EXTRAHEADER_OPTION = "http.https://github.com/.extraheader";
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
try {
|
try {
|
||||||
// Allows ncc to find assets to be included in the distribution
|
// Allows ncc to find assets to be included in the distribution
|
||||||
const src = __dirname + "/src";
|
const cpr = __dirname + "/cpr";
|
||||||
core.debug(`src: ${src}`);
|
core.debug(`cpr: ${cpr}`);
|
||||||
|
|
||||||
// Determine how to access python and pip
|
// Determine how to access python and pip
|
||||||
const { pip, python } = (function() {
|
const { pip, python } = (function() {
|
||||||
|
@ -33,7 +40,7 @@ async function run() {
|
||||||
await exec.exec(pip, [
|
await exec.exec(pip, [
|
||||||
"install",
|
"install",
|
||||||
"--requirement",
|
"--requirement",
|
||||||
`${src}/requirements.txt`,
|
`${cpr}/requirements.txt`,
|
||||||
"--no-index",
|
"--no-index",
|
||||||
`--find-links=${__dirname}/vendor`
|
`--find-links=${__dirname}/vendor`
|
||||||
]);
|
]);
|
||||||
|
@ -79,10 +86,30 @@ async function run() {
|
||||||
if (inputs.base) process.env.CPR_BASE = inputs.base;
|
if (inputs.base) process.env.CPR_BASE = inputs.base;
|
||||||
if (inputs.branchSuffix) process.env.CPR_BRANCH_SUFFIX = inputs.branchSuffix;
|
if (inputs.branchSuffix) process.env.CPR_BRANCH_SUFFIX = inputs.branchSuffix;
|
||||||
|
|
||||||
// Execute python script
|
// Get the repository path
|
||||||
await exec.exec(python, [`${src}/create_pull_request.py`]);
|
var repoPath = getRepoPath(inputs.path);
|
||||||
|
// Get the extraheader config option if it exists
|
||||||
|
var extraHeaderOptionValue = await getAndUnsetConfigOption(
|
||||||
|
repoPath,
|
||||||
|
EXTRAHEADER_OPTION
|
||||||
|
);
|
||||||
|
|
||||||
|
// Execute create pull request
|
||||||
|
await exec.exec(python, [`${cpr}/create_pull_request.py`]);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(error.message);
|
core.setFailed(error.message);
|
||||||
|
} finally {
|
||||||
|
// Restore the extraheader config option
|
||||||
|
if (extraHeaderOptionValue) {
|
||||||
|
if (
|
||||||
|
await addConfigOption(
|
||||||
|
repoPath,
|
||||||
|
EXTRAHEADER_OPTION,
|
||||||
|
extraHeaderOptionValue
|
||||||
|
)
|
||||||
|
)
|
||||||
|
core.debug(`Restored config option '${EXTRAHEADER_OPTION}'`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue