|
|
|
@@ -98,6 +98,25 @@ module.exports = Octokit;
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
@@ -108,11 +127,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
const childProcess = __webpack_require__(129);
|
|
|
|
|
const path = __webpack_require__(622);
|
|
|
|
|
exports.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0;
|
|
|
|
|
const assert_1 = __webpack_require__(357);
|
|
|
|
|
const childProcess = __importStar(__webpack_require__(129));
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
const util_1 = __webpack_require__(669);
|
|
|
|
|
const ioUtil = __webpack_require__(672);
|
|
|
|
|
const ioUtil = __importStar(__webpack_require__(672));
|
|
|
|
|
const exec = util_1.promisify(childProcess.exec);
|
|
|
|
|
const execFile = util_1.promisify(childProcess.execFile);
|
|
|
|
|
/**
|
|
|
|
|
* Copies a file or folder.
|
|
|
|
|
* Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js
|
|
|
|
@@ -123,14 +145,14 @@ const exec = util_1.promisify(childProcess.exec);
|
|
|
|
|
*/
|
|
|
|
|
function cp(source, dest, options = {}) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const { force, recursive } = readCopyOptions(options);
|
|
|
|
|
const { force, recursive, copySourceDirectory } = readCopyOptions(options);
|
|
|
|
|
const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null;
|
|
|
|
|
// Dest is an existing file, but not forcing
|
|
|
|
|
if (destStat && destStat.isFile() && !force) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// If dest is an existing directory, should copy inside.
|
|
|
|
|
const newDest = destStat && destStat.isDirectory()
|
|
|
|
|
const newDest = destStat && destStat.isDirectory() && copySourceDirectory
|
|
|
|
|
? path.join(dest, path.basename(source))
|
|
|
|
|
: dest;
|
|
|
|
|
if (!(yield ioUtil.exists(source))) {
|
|
|
|
@@ -195,12 +217,22 @@ function rmRF(inputPath) {
|
|
|
|
|
if (ioUtil.IS_WINDOWS) {
|
|
|
|
|
// Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another
|
|
|
|
|
// program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del.
|
|
|
|
|
// Check for invalid characters
|
|
|
|
|
// https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
|
|
|
|
|
if (/[*"<>|]/.test(inputPath)) {
|
|
|
|
|
throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
const cmdPath = ioUtil.getCmdPath();
|
|
|
|
|
if (yield ioUtil.isDirectory(inputPath, true)) {
|
|
|
|
|
yield exec(`rd /s /q "${inputPath}"`);
|
|
|
|
|
yield exec(`${cmdPath} /s /c "rd /s /q "%inputPath%""`, {
|
|
|
|
|
env: { inputPath }
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
yield exec(`del /f /a "${inputPath}"`);
|
|
|
|
|
yield exec(`${cmdPath} /s /c "del /f /a "%inputPath%""`, {
|
|
|
|
|
env: { inputPath }
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
@@ -233,7 +265,7 @@ function rmRF(inputPath) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (isDir) {
|
|
|
|
|
yield exec(`rm -rf "${inputPath}"`);
|
|
|
|
|
yield execFile(`rm`, [`-rf`, `${inputPath}`]);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
yield ioUtil.unlink(inputPath);
|
|
|
|
@@ -251,7 +283,8 @@ exports.rmRF = rmRF;
|
|
|
|
|
*/
|
|
|
|
|
function mkdirP(fsPath) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
yield ioUtil.mkdirP(fsPath);
|
|
|
|
|
assert_1.ok(fsPath, 'a path argument must be provided');
|
|
|
|
|
yield ioUtil.mkdir(fsPath, { recursive: true });
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.mkdirP = mkdirP;
|
|
|
|
@@ -279,62 +312,80 @@ function which(tool, check) {
|
|
|
|
|
throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
// build the list of extensions to try
|
|
|
|
|
const extensions = [];
|
|
|
|
|
if (ioUtil.IS_WINDOWS && process.env.PATHEXT) {
|
|
|
|
|
for (const extension of process.env.PATHEXT.split(path.delimiter)) {
|
|
|
|
|
if (extension) {
|
|
|
|
|
extensions.push(extension);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// if it's rooted, return it if exists. otherwise return empty.
|
|
|
|
|
if (ioUtil.isRooted(tool)) {
|
|
|
|
|
const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
|
|
|
|
|
if (filePath) {
|
|
|
|
|
return filePath;
|
|
|
|
|
}
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
// if any path separators, return empty
|
|
|
|
|
if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) {
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
// build the list of directories
|
|
|
|
|
//
|
|
|
|
|
// Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
|
|
|
|
|
// it feels like we should not do this. Checking the current directory seems like more of a use
|
|
|
|
|
// case of a shell, and the which() function exposed by the toolkit should strive for consistency
|
|
|
|
|
// across platforms.
|
|
|
|
|
const directories = [];
|
|
|
|
|
if (process.env.PATH) {
|
|
|
|
|
for (const p of process.env.PATH.split(path.delimiter)) {
|
|
|
|
|
if (p) {
|
|
|
|
|
directories.push(p);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// return the first match
|
|
|
|
|
for (const directory of directories) {
|
|
|
|
|
const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions);
|
|
|
|
|
if (filePath) {
|
|
|
|
|
return filePath;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
throw new Error(`which failed with message ${err.message}`);
|
|
|
|
|
const matches = yield findInPath(tool);
|
|
|
|
|
if (matches && matches.length > 0) {
|
|
|
|
|
return matches[0];
|
|
|
|
|
}
|
|
|
|
|
return '';
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.which = which;
|
|
|
|
|
/**
|
|
|
|
|
* Returns a list of all occurrences of the given tool on the system path.
|
|
|
|
|
*
|
|
|
|
|
* @returns Promise<string[]> the paths of the tool
|
|
|
|
|
*/
|
|
|
|
|
function findInPath(tool) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
if (!tool) {
|
|
|
|
|
throw new Error("parameter 'tool' is required");
|
|
|
|
|
}
|
|
|
|
|
// build the list of extensions to try
|
|
|
|
|
const extensions = [];
|
|
|
|
|
if (ioUtil.IS_WINDOWS && process.env['PATHEXT']) {
|
|
|
|
|
for (const extension of process.env['PATHEXT'].split(path.delimiter)) {
|
|
|
|
|
if (extension) {
|
|
|
|
|
extensions.push(extension);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// if it's rooted, return it if exists. otherwise return empty.
|
|
|
|
|
if (ioUtil.isRooted(tool)) {
|
|
|
|
|
const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions);
|
|
|
|
|
if (filePath) {
|
|
|
|
|
return [filePath];
|
|
|
|
|
}
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
// if any path separators, return empty
|
|
|
|
|
if (tool.includes(path.sep)) {
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
// build the list of directories
|
|
|
|
|
//
|
|
|
|
|
// Note, technically "where" checks the current directory on Windows. From a toolkit perspective,
|
|
|
|
|
// it feels like we should not do this. Checking the current directory seems like more of a use
|
|
|
|
|
// case of a shell, and the which() function exposed by the toolkit should strive for consistency
|
|
|
|
|
// across platforms.
|
|
|
|
|
const directories = [];
|
|
|
|
|
if (process.env.PATH) {
|
|
|
|
|
for (const p of process.env.PATH.split(path.delimiter)) {
|
|
|
|
|
if (p) {
|
|
|
|
|
directories.push(p);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// find all matches
|
|
|
|
|
const matches = [];
|
|
|
|
|
for (const directory of directories) {
|
|
|
|
|
const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions);
|
|
|
|
|
if (filePath) {
|
|
|
|
|
matches.push(filePath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return matches;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.findInPath = findInPath;
|
|
|
|
|
function readCopyOptions(options) {
|
|
|
|
|
const force = options.force == null ? true : options.force;
|
|
|
|
|
const recursive = Boolean(options.recursive);
|
|
|
|
|
return { force, recursive };
|
|
|
|
|
const copySourceDirectory = options.copySourceDirectory == null
|
|
|
|
|
? true
|
|
|
|
|
: Boolean(options.copySourceDirectory);
|
|
|
|
|
return { force, recursive, copySourceDirectory };
|
|
|
|
|
}
|
|
|
|
|
function cpDirRecursive(sourceDir, destDir, currentDepth, force) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
@@ -543,6 +594,21 @@ var eos = function(stream, opts, callback) {
|
|
|
|
|
module.exports = eos;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 4:
|
|
|
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
var _default = '00000000-0000-0000-0000-000000000000';
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 9:
|
|
|
|
@@ -1295,6 +1361,92 @@ module.exports._parse = parse;
|
|
|
|
|
module.exports._enoent = enoent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 25:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "v1", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _v.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "v3", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _v2.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "v4", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _v3.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "v5", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _v4.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "NIL", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _nil.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "version", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _version.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "validate", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _validate.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "stringify", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _stringify.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Object.defineProperty(exports, "parse", {
|
|
|
|
|
enumerable: true,
|
|
|
|
|
get: function () {
|
|
|
|
|
return _parse.default;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var _v = _interopRequireDefault(__webpack_require__(810));
|
|
|
|
|
|
|
|
|
|
var _v2 = _interopRequireDefault(__webpack_require__(572));
|
|
|
|
|
|
|
|
|
|
var _v3 = _interopRequireDefault(__webpack_require__(293));
|
|
|
|
|
|
|
|
|
|
var _v4 = _interopRequireDefault(__webpack_require__(638));
|
|
|
|
|
|
|
|
|
|
var _nil = _interopRequireDefault(__webpack_require__(4));
|
|
|
|
|
|
|
|
|
|
var _version = _interopRequireDefault(__webpack_require__(135));
|
|
|
|
|
|
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(634));
|
|
|
|
|
|
|
|
|
|
var _stringify = _interopRequireDefault(__webpack_require__(960));
|
|
|
|
|
|
|
|
|
|
var _parse = _interopRequireDefault(__webpack_require__(204));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 26:
|
|
|
|
@@ -1784,13 +1936,6 @@ function getLastPage (octokit, link, headers) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 34:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
|
|
|
|
module.exports = require("https");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 39:
|
|
|
|
@@ -1889,6 +2034,63 @@ const windowsRelease = release => {
|
|
|
|
|
module.exports = windowsRelease;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 68:
|
|
|
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
|
|
|
|
|
|
async function auth(token) {
|
|
|
|
|
const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth";
|
|
|
|
|
return {
|
|
|
|
|
type: "token",
|
|
|
|
|
token: token,
|
|
|
|
|
tokenType
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Prefix token for usage in the Authorization header
|
|
|
|
|
*
|
|
|
|
|
* @param token OAuth token or JSON Web Token
|
|
|
|
|
*/
|
|
|
|
|
function withAuthorizationPrefix(token) {
|
|
|
|
|
if (token.split(/\./).length === 3) {
|
|
|
|
|
return `bearer ${token}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return `token ${token}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function hook(token, request, route, parameters) {
|
|
|
|
|
const endpoint = request.endpoint.merge(route, parameters);
|
|
|
|
|
endpoint.headers.authorization = withAuthorizationPrefix(token);
|
|
|
|
|
return request(endpoint);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const createTokenAuth = function createTokenAuth(token) {
|
|
|
|
|
if (!token) {
|
|
|
|
|
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (typeof token !== "string") {
|
|
|
|
|
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
token = token.replace(/^(token|bearer) +/i, "");
|
|
|
|
|
return Object.assign(auth.bind(null, token), {
|
|
|
|
|
hook: hook.bind(null, token)
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
exports.createTokenAuth = createTokenAuth;
|
|
|
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 70:
|
|
|
|
@@ -1935,13 +2137,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.getServerUrl = exports.getFetchUrl = void 0;
|
|
|
|
|
exports.isGhes = exports.getServerApiUrl = exports.getServerUrl = exports.getFetchUrl = void 0;
|
|
|
|
|
const assert = __importStar(__webpack_require__(357));
|
|
|
|
|
const url_1 = __webpack_require__(835);
|
|
|
|
|
function getFetchUrl(settings) {
|
|
|
|
|
assert.ok(settings.repositoryOwner, 'settings.repositoryOwner must be defined');
|
|
|
|
|
assert.ok(settings.repositoryName, 'settings.repositoryName must be defined');
|
|
|
|
|
const serviceUrl = getServerUrl();
|
|
|
|
|
const serviceUrl = getServerUrl(settings.githubServerUrl);
|
|
|
|
|
const encodedOwner = encodeURIComponent(settings.repositoryOwner);
|
|
|
|
|
const encodedName = encodeURIComponent(settings.repositoryName);
|
|
|
|
|
if (settings.sshKey) {
|
|
|
|
@@ -1951,13 +2153,27 @@ function getFetchUrl(settings) {
|
|
|
|
|
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`;
|
|
|
|
|
}
|
|
|
|
|
exports.getFetchUrl = getFetchUrl;
|
|
|
|
|
function getServerUrl() {
|
|
|
|
|
// todo: remove GITHUB_URL after support for GHES Alpha is no longer needed
|
|
|
|
|
return new url_1.URL(process.env['GITHUB_SERVER_URL'] ||
|
|
|
|
|
process.env['GITHUB_URL'] ||
|
|
|
|
|
'https://github.com');
|
|
|
|
|
function getServerUrl(url) {
|
|
|
|
|
let urlValue = url && url.trim().length > 0
|
|
|
|
|
? url
|
|
|
|
|
: process.env['GITHUB_SERVER_URL'] || 'https://github.com';
|
|
|
|
|
return new url_1.URL(urlValue);
|
|
|
|
|
}
|
|
|
|
|
exports.getServerUrl = getServerUrl;
|
|
|
|
|
function getServerApiUrl(url) {
|
|
|
|
|
let apiUrl = 'https://api.github.com';
|
|
|
|
|
if (isGhes(url)) {
|
|
|
|
|
const serverUrl = getServerUrl(url);
|
|
|
|
|
apiUrl = new url_1.URL(`${serverUrl.origin}/api/v3`).toString();
|
|
|
|
|
}
|
|
|
|
|
return apiUrl;
|
|
|
|
|
}
|
|
|
|
|
exports.getServerApiUrl = getServerApiUrl;
|
|
|
|
|
function isGhes(url) {
|
|
|
|
|
const ghUrl = getServerUrl(url);
|
|
|
|
|
return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
|
|
|
|
|
}
|
|
|
|
|
exports.isGhes = isGhes;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
@@ -1970,6 +2186,7 @@ exports.getServerUrl = getServerUrl;
|
|
|
|
|
// We use any as a valid input type
|
|
|
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.toCommandProperties = exports.toCommandValue = void 0;
|
|
|
|
|
/**
|
|
|
|
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
|
|
|
|
* @param input input to sanitize into a string
|
|
|
|
@@ -1984,6 +2201,26 @@ function toCommandValue(input) {
|
|
|
|
|
return JSON.stringify(input);
|
|
|
|
|
}
|
|
|
|
|
exports.toCommandValue = toCommandValue;
|
|
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @param annotationProperties
|
|
|
|
|
* @returns The command properties to send with the actual annotation command
|
|
|
|
|
* See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646
|
|
|
|
|
*/
|
|
|
|
|
function toCommandProperties(annotationProperties) {
|
|
|
|
|
if (!Object.keys(annotationProperties).length) {
|
|
|
|
|
return {};
|
|
|
|
|
}
|
|
|
|
|
return {
|
|
|
|
|
title: annotationProperties.title,
|
|
|
|
|
file: annotationProperties.file,
|
|
|
|
|
line: annotationProperties.startLine,
|
|
|
|
|
endLine: annotationProperties.endLine,
|
|
|
|
|
col: annotationProperties.startColumn,
|
|
|
|
|
endColumn: annotationProperties.endColumn
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
exports.toCommandProperties = toCommandProperties;
|
|
|
|
|
//# sourceMappingURL=utils.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
@@ -1995,26 +2232,108 @@ module.exports = require("os");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 95:
|
|
|
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.checkBypass = exports.getProxyUrl = void 0;
|
|
|
|
|
function getProxyUrl(reqUrl) {
|
|
|
|
|
const usingSsl = reqUrl.protocol === 'https:';
|
|
|
|
|
if (checkBypass(reqUrl)) {
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
const proxyVar = (() => {
|
|
|
|
|
if (usingSsl) {
|
|
|
|
|
return process.env['https_proxy'] || process.env['HTTPS_PROXY'];
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return process.env['http_proxy'] || process.env['HTTP_PROXY'];
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
if (proxyVar) {
|
|
|
|
|
return new URL(proxyVar);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
exports.getProxyUrl = getProxyUrl;
|
|
|
|
|
function checkBypass(reqUrl) {
|
|
|
|
|
if (!reqUrl.hostname) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
|
|
|
|
|
if (!noProxy) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
// Determine the request port
|
|
|
|
|
let reqPort;
|
|
|
|
|
if (reqUrl.port) {
|
|
|
|
|
reqPort = Number(reqUrl.port);
|
|
|
|
|
}
|
|
|
|
|
else if (reqUrl.protocol === 'http:') {
|
|
|
|
|
reqPort = 80;
|
|
|
|
|
}
|
|
|
|
|
else if (reqUrl.protocol === 'https:') {
|
|
|
|
|
reqPort = 443;
|
|
|
|
|
}
|
|
|
|
|
// Format the request hostname and hostname with port
|
|
|
|
|
const upperReqHosts = [reqUrl.hostname.toUpperCase()];
|
|
|
|
|
if (typeof reqPort === 'number') {
|
|
|
|
|
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
|
|
|
|
|
}
|
|
|
|
|
// Compare request host against noproxy
|
|
|
|
|
for (const upperNoProxyItem of noProxy
|
|
|
|
|
.split(',')
|
|
|
|
|
.map(x => x.trim().toUpperCase())
|
|
|
|
|
.filter(x => x)) {
|
|
|
|
|
if (upperReqHosts.some(x => x === upperNoProxyItem)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
exports.checkBypass = checkBypass;
|
|
|
|
|
//# sourceMappingURL=proxy.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 102:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
// For internal use, subject to change.
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
|
|
|
result["default"] = mod;
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.prepareKeyValueMessage = exports.issueFileCommand = void 0;
|
|
|
|
|
// We use any as a valid input type
|
|
|
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
|
|
|
const fs = __importStar(__webpack_require__(747));
|
|
|
|
|
const os = __importStar(__webpack_require__(87));
|
|
|
|
|
const uuid_1 = __webpack_require__(25);
|
|
|
|
|
const utils_1 = __webpack_require__(82);
|
|
|
|
|
function issueCommand(command, message) {
|
|
|
|
|
function issueFileCommand(command, message) {
|
|
|
|
|
const filePath = process.env[`GITHUB_${command}`];
|
|
|
|
|
if (!filePath) {
|
|
|
|
|
throw new Error(`Unable to find environment variable for file command ${command}`);
|
|
|
|
@@ -2026,7 +2345,22 @@ function issueCommand(command, message) {
|
|
|
|
|
encoding: 'utf8'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.issueCommand = issueCommand;
|
|
|
|
|
exports.issueFileCommand = issueFileCommand;
|
|
|
|
|
function prepareKeyValueMessage(key, value) {
|
|
|
|
|
const delimiter = `ghadelimiter_${uuid_1.v4()}`;
|
|
|
|
|
const convertedValue = utils_1.toCommandValue(value);
|
|
|
|
|
// These should realistically never happen, but just in case someone finds a
|
|
|
|
|
// way to exploit uuid generation let's not allow keys or values that contain
|
|
|
|
|
// the delimiter.
|
|
|
|
|
if (key.includes(delimiter)) {
|
|
|
|
|
throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`);
|
|
|
|
|
}
|
|
|
|
|
if (convertedValue.includes(delimiter)) {
|
|
|
|
|
throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`);
|
|
|
|
|
}
|
|
|
|
|
return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`;
|
|
|
|
|
}
|
|
|
|
|
exports.prepareKeyValueMessage = prepareKeyValueMessage;
|
|
|
|
|
//# sourceMappingURL=file-command.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
@@ -2981,6 +3315,119 @@ module.exports = require("child_process");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 135:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(634));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
function version(uuid) {
|
|
|
|
|
if (!(0, _validate.default)(uuid)) {
|
|
|
|
|
throw TypeError('Invalid UUID');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return parseInt(uuid.substr(14, 1), 16);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _default = version;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 136:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
exports.URL = exports.DNS = void 0;
|
|
|
|
|
|
|
|
|
|
var _stringify = _interopRequireDefault(__webpack_require__(960));
|
|
|
|
|
|
|
|
|
|
var _parse = _interopRequireDefault(__webpack_require__(204));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
function stringToBytes(str) {
|
|
|
|
|
str = unescape(encodeURIComponent(str)); // UTF8 escape
|
|
|
|
|
|
|
|
|
|
const bytes = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < str.length; ++i) {
|
|
|
|
|
bytes.push(str.charCodeAt(i));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bytes;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
|
|
|
exports.DNS = DNS;
|
|
|
|
|
const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
|
|
|
|
exports.URL = URL;
|
|
|
|
|
|
|
|
|
|
function _default(name, version, hashfunc) {
|
|
|
|
|
function generateUUID(value, namespace, buf, offset) {
|
|
|
|
|
if (typeof value === 'string') {
|
|
|
|
|
value = stringToBytes(value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (typeof namespace === 'string') {
|
|
|
|
|
namespace = (0, _parse.default)(namespace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (namespace.length !== 16) {
|
|
|
|
|
throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
|
|
|
|
|
} // Compute hash of namespace and value, Per 4.3
|
|
|
|
|
// Future: Use spread syntax when supported on all platforms, e.g. `bytes =
|
|
|
|
|
// hashfunc([...namespace, ... value])`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let bytes = new Uint8Array(16 + value.length);
|
|
|
|
|
bytes.set(namespace);
|
|
|
|
|
bytes.set(value, namespace.length);
|
|
|
|
|
bytes = hashfunc(bytes);
|
|
|
|
|
bytes[6] = bytes[6] & 0x0f | version;
|
|
|
|
|
bytes[8] = bytes[8] & 0x3f | 0x80;
|
|
|
|
|
|
|
|
|
|
if (buf) {
|
|
|
|
|
offset = offset || 0;
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < 16; ++i) {
|
|
|
|
|
buf[offset + i] = bytes[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return buf;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (0, _stringify.default)(bytes);
|
|
|
|
|
} // Function#name is not settable on some platforms (#270)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
generateUUID.name = name; // eslint-disable-next-line no-empty
|
|
|
|
|
} catch (err) {} // For CommonJS default export support
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generateUUID.DNS = DNS;
|
|
|
|
|
generateUUID.URL = URL;
|
|
|
|
|
return generateUUID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 139:
|
|
|
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
@@ -3005,7 +3452,7 @@ module.exports = function nodeRNG() {
|
|
|
|
|
var net = __webpack_require__(631);
|
|
|
|
|
var tls = __webpack_require__(16);
|
|
|
|
|
var http = __webpack_require__(605);
|
|
|
|
|
var https = __webpack_require__(34);
|
|
|
|
|
var https = __webpack_require__(211);
|
|
|
|
|
var events = __webpack_require__(614);
|
|
|
|
|
var assert = __webpack_require__(357);
|
|
|
|
|
var util = __webpack_require__(669);
|
|
|
|
@@ -3592,49 +4039,60 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.setSshKnownHostsPath = exports.setSshKeyPath = exports.setRepositoryPath = exports.SshKnownHostsPath = exports.SshKeyPath = exports.RepositoryPath = exports.IsPost = void 0;
|
|
|
|
|
const coreCommand = __importStar(__webpack_require__(431));
|
|
|
|
|
exports.setSafeDirectory = exports.setSshKnownHostsPath = exports.setSshKeyPath = exports.setRepositoryPath = exports.SshKnownHostsPath = exports.SshKeyPath = exports.PostSetSafeDirectory = exports.RepositoryPath = exports.IsPost = void 0;
|
|
|
|
|
const core = __importStar(__webpack_require__(470));
|
|
|
|
|
/**
|
|
|
|
|
* Indicates whether the POST action is running
|
|
|
|
|
*/
|
|
|
|
|
exports.IsPost = !!process.env['STATE_isPost'];
|
|
|
|
|
exports.IsPost = !!core.getState('isPost');
|
|
|
|
|
/**
|
|
|
|
|
* The repository path for the POST action. The value is empty during the MAIN action.
|
|
|
|
|
*/
|
|
|
|
|
exports.RepositoryPath = process.env['STATE_repositoryPath'] || '';
|
|
|
|
|
exports.RepositoryPath = core.getState('repositoryPath');
|
|
|
|
|
/**
|
|
|
|
|
* The set-safe-directory for the POST action. The value is set if input: 'safe-directory' is set during the MAIN action.
|
|
|
|
|
*/
|
|
|
|
|
exports.PostSetSafeDirectory = core.getState('setSafeDirectory') === 'true';
|
|
|
|
|
/**
|
|
|
|
|
* The SSH key path for the POST action. The value is empty during the MAIN action.
|
|
|
|
|
*/
|
|
|
|
|
exports.SshKeyPath = process.env['STATE_sshKeyPath'] || '';
|
|
|
|
|
exports.SshKeyPath = core.getState('sshKeyPath');
|
|
|
|
|
/**
|
|
|
|
|
* The SSH known hosts path for the POST action. The value is empty during the MAIN action.
|
|
|
|
|
*/
|
|
|
|
|
exports.SshKnownHostsPath = process.env['STATE_sshKnownHostsPath'] || '';
|
|
|
|
|
exports.SshKnownHostsPath = core.getState('sshKnownHostsPath');
|
|
|
|
|
/**
|
|
|
|
|
* Save the repository path so the POST action can retrieve the value.
|
|
|
|
|
*/
|
|
|
|
|
function setRepositoryPath(repositoryPath) {
|
|
|
|
|
coreCommand.issueCommand('save-state', { name: 'repositoryPath' }, repositoryPath);
|
|
|
|
|
core.saveState('repositoryPath', repositoryPath);
|
|
|
|
|
}
|
|
|
|
|
exports.setRepositoryPath = setRepositoryPath;
|
|
|
|
|
/**
|
|
|
|
|
* Save the SSH key path so the POST action can retrieve the value.
|
|
|
|
|
*/
|
|
|
|
|
function setSshKeyPath(sshKeyPath) {
|
|
|
|
|
coreCommand.issueCommand('save-state', { name: 'sshKeyPath' }, sshKeyPath);
|
|
|
|
|
core.saveState('sshKeyPath', sshKeyPath);
|
|
|
|
|
}
|
|
|
|
|
exports.setSshKeyPath = setSshKeyPath;
|
|
|
|
|
/**
|
|
|
|
|
* Save the SSH known hosts path so the POST action can retrieve the value.
|
|
|
|
|
*/
|
|
|
|
|
function setSshKnownHostsPath(sshKnownHostsPath) {
|
|
|
|
|
coreCommand.issueCommand('save-state', { name: 'sshKnownHostsPath' }, sshKnownHostsPath);
|
|
|
|
|
core.saveState('sshKnownHostsPath', sshKnownHostsPath);
|
|
|
|
|
}
|
|
|
|
|
exports.setSshKnownHostsPath = setSshKnownHostsPath;
|
|
|
|
|
/**
|
|
|
|
|
* Save the set-safe-directory input so the POST action can retrieve the value.
|
|
|
|
|
*/
|
|
|
|
|
function setSafeDirectory() {
|
|
|
|
|
core.saveState('setSafeDirectory', 'true');
|
|
|
|
|
}
|
|
|
|
|
exports.setSafeDirectory = setSafeDirectory;
|
|
|
|
|
// Publish a variable so that when the POST action runs, it can determine it should run the cleanup logic.
|
|
|
|
|
// This is necessary since we don't have a separate entry point.
|
|
|
|
|
if (!exports.IsPost) {
|
|
|
|
|
coreCommand.issueCommand('save-state', { name: 'isPost' }, 'true');
|
|
|
|
|
core.saveState('isPost', 'true');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -3711,7 +4169,7 @@ module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);
|
|
|
|
|
var net = __webpack_require__(631);
|
|
|
|
|
var tls = __webpack_require__(16);
|
|
|
|
|
var http = __webpack_require__(605);
|
|
|
|
|
var https = __webpack_require__(34);
|
|
|
|
|
var https = __webpack_require__(211);
|
|
|
|
|
var events = __webpack_require__(614);
|
|
|
|
|
var assert = __webpack_require__(357);
|
|
|
|
|
var util = __webpack_require__(669);
|
|
|
|
@@ -3979,7 +4437,7 @@ exports.debug = debug; // for test
|
|
|
|
|
|
|
|
|
|
module.exports = authenticationPlugin;
|
|
|
|
|
|
|
|
|
|
const { createTokenAuth } = __webpack_require__(813);
|
|
|
|
|
const { createTokenAuth } = __webpack_require__(68);
|
|
|
|
|
const { Deprecation } = __webpack_require__(692);
|
|
|
|
|
const once = __webpack_require__(969);
|
|
|
|
|
|
|
|
|
@@ -4055,6 +4513,51 @@ function authenticationPlugin(octokit, options) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 195:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.getOctokit = exports.Octokit = void 0;
|
|
|
|
|
const github = __importStar(__webpack_require__(469));
|
|
|
|
|
const url_helper_1 = __webpack_require__(81);
|
|
|
|
|
// Centralize all Octokit references by re-exporting
|
|
|
|
|
var rest_1 = __webpack_require__(0);
|
|
|
|
|
Object.defineProperty(exports, "Octokit", { enumerable: true, get: function () { return rest_1.Octokit; } });
|
|
|
|
|
function getOctokit(authToken, opts) {
|
|
|
|
|
const options = {
|
|
|
|
|
baseUrl: (0, url_helper_1.getServerApiUrl)(opts.baseUrl)
|
|
|
|
|
};
|
|
|
|
|
if (opts.userAgent) {
|
|
|
|
|
options.userAgent = opts.userAgent;
|
|
|
|
|
}
|
|
|
|
|
return new github.GitHub(authToken, options);
|
|
|
|
|
}
|
|
|
|
|
exports.getOctokit = getOctokit;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 197:
|
|
|
|
@@ -4141,7 +4644,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
const core = __importStar(__webpack_require__(470));
|
|
|
|
|
const coreCommand = __importStar(__webpack_require__(431));
|
|
|
|
|
const gitSourceProvider = __importStar(__webpack_require__(293));
|
|
|
|
|
const gitSourceProvider = __importStar(__webpack_require__(853));
|
|
|
|
|
const inputHelper = __importStar(__webpack_require__(821));
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
const stateHelper = __importStar(__webpack_require__(153));
|
|
|
|
@@ -4189,33 +4692,62 @@ else {
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 211:
|
|
|
|
|
/***/ 204:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(634));
|
|
|
|
|
|
|
|
|
|
var osName = _interopDefault(__webpack_require__(2));
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
function getUserAgent() {
|
|
|
|
|
try {
|
|
|
|
|
return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
if (/wmic os get Caption/.test(error.message)) {
|
|
|
|
|
return "Windows <version undetectable>";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return "<environment undetectable>";
|
|
|
|
|
function parse(uuid) {
|
|
|
|
|
if (!(0, _validate.default)(uuid)) {
|
|
|
|
|
throw TypeError('Invalid UUID');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let v;
|
|
|
|
|
const arr = new Uint8Array(16); // Parse ########-....-....-....-............
|
|
|
|
|
|
|
|
|
|
arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
|
|
|
|
|
arr[1] = v >>> 16 & 0xff;
|
|
|
|
|
arr[2] = v >>> 8 & 0xff;
|
|
|
|
|
arr[3] = v & 0xff; // Parse ........-####-....-....-............
|
|
|
|
|
|
|
|
|
|
arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
|
|
|
|
|
arr[5] = v & 0xff; // Parse ........-....-####-....-............
|
|
|
|
|
|
|
|
|
|
arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
|
|
|
|
|
arr[7] = v & 0xff; // Parse ........-....-....-####-............
|
|
|
|
|
|
|
|
|
|
arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
|
|
|
|
|
arr[9] = v & 0xff; // Parse ........-....-....-....-############
|
|
|
|
|
// (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
|
|
|
|
|
|
|
|
|
|
arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
|
|
|
|
|
arr[11] = v / 0x100000000 & 0xff;
|
|
|
|
|
arr[12] = v >>> 24 & 0xff;
|
|
|
|
|
arr[13] = v >>> 16 & 0xff;
|
|
|
|
|
arr[14] = v >>> 8 & 0xff;
|
|
|
|
|
arr[15] = v & 0xff;
|
|
|
|
|
return arr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exports.getUserAgent = getUserAgent;
|
|
|
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
var _default = parse;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 211:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
|
|
|
|
module.exports = require("https");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
@@ -4268,9 +4800,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.checkCommitInfo = exports.testRef = exports.getRefSpec = exports.getRefSpecForAllHistory = exports.getCheckoutInfo = exports.tagsRefSpec = void 0;
|
|
|
|
|
const url_1 = __webpack_require__(835);
|
|
|
|
|
const core = __importStar(__webpack_require__(470));
|
|
|
|
|
const github = __importStar(__webpack_require__(469));
|
|
|
|
|
const octokit_provider_1 = __webpack_require__(195);
|
|
|
|
|
const url_helper_1 = __webpack_require__(81);
|
|
|
|
|
exports.tagsRefSpec = '+refs/tags/*:refs/tags/*';
|
|
|
|
|
function getCheckoutInfo(git, ref, commit) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
@@ -4420,12 +4953,12 @@ function testRef(git, ref, commit) {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.testRef = testRef;
|
|
|
|
|
function checkCommitInfo(token, commitInfo, repositoryOwner, repositoryName, ref, commit) {
|
|
|
|
|
function checkCommitInfo(token, commitInfo, repositoryOwner, repositoryName, ref, commit, baseUrl) {
|
|
|
|
|
var _a, _b;
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
try {
|
|
|
|
|
// GHES?
|
|
|
|
|
if (isGhes()) {
|
|
|
|
|
if ((0, url_helper_1.isGhes)(baseUrl)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// Auth token?
|
|
|
|
@@ -4470,7 +5003,8 @@ function checkCommitInfo(token, commitInfo, repositoryOwner, repositoryName, ref
|
|
|
|
|
const actualHeadSha = match[1];
|
|
|
|
|
if (actualHeadSha !== expectedHeadSha) {
|
|
|
|
|
core.debug(`Expected head sha ${expectedHeadSha}; actual head sha ${actualHeadSha}`);
|
|
|
|
|
const octokit = new github.GitHub(token, {
|
|
|
|
|
const octokit = (0, octokit_provider_1.getOctokit)(token, {
|
|
|
|
|
baseUrl: baseUrl,
|
|
|
|
|
userAgent: `actions-checkout-tracepoint/1.0 (code=STALE_MERGE;owner=${repositoryOwner};repo=${repositoryName};pr=${fromPayload('number')};run_id=${process.env['GITHUB_RUN_ID']};expected_head_sha=${expectedHeadSha};actual_head_sha=${actualHeadSha})`
|
|
|
|
|
});
|
|
|
|
|
yield octokit.repos.get({ owner: repositoryOwner, repo: repositoryName });
|
|
|
|
@@ -4496,10 +5030,6 @@ function select(obj, path) {
|
|
|
|
|
const key = path.substr(0, i);
|
|
|
|
|
return select(obj[key], path.substr(i + 1));
|
|
|
|
|
}
|
|
|
|
|
function isGhes() {
|
|
|
|
|
const ghUrl = new url_1.URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
|
|
|
|
|
return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
@@ -6550,7 +7080,7 @@ class GitAuthHelper {
|
|
|
|
|
this.git = gitCommandManager;
|
|
|
|
|
this.settings = gitSourceSettings || {};
|
|
|
|
|
// Token auth header
|
|
|
|
|
const serverUrl = urlHelper.getServerUrl();
|
|
|
|
|
const serverUrl = urlHelper.getServerUrl(this.settings.githubServerUrl);
|
|
|
|
|
this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader`; // "origin" is SCHEME://HOSTNAME[:PORT]
|
|
|
|
|
const basicCredential = Buffer.from(`x-access-token:${this.settings.authToken}`, 'utf8').toString('base64');
|
|
|
|
|
core.setSecret(basicCredential);
|
|
|
|
@@ -6572,9 +7102,13 @@ class GitAuthHelper {
|
|
|
|
|
yield this.configureToken();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
configureGlobalAuth() {
|
|
|
|
|
var _a;
|
|
|
|
|
configureTempGlobalConfig() {
|
|
|
|
|
var _a, _b;
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Already setup global config
|
|
|
|
|
if (((_a = this.temporaryHomePath) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
|
|
|
return path.join(this.temporaryHomePath, '.gitconfig');
|
|
|
|
|
}
|
|
|
|
|
// Create a temp home directory
|
|
|
|
|
const runnerTemp = process.env['RUNNER_TEMP'] || '';
|
|
|
|
|
assert.ok(runnerTemp, 'RUNNER_TEMP is not defined');
|
|
|
|
@@ -6590,7 +7124,7 @@ class GitAuthHelper {
|
|
|
|
|
configExists = true;
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
if (((_a = err) === null || _a === void 0 ? void 0 : _a.code) !== 'ENOENT') {
|
|
|
|
|
if (((_b = err) === null || _b === void 0 ? void 0 : _b.code) !== 'ENOENT') {
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -6601,10 +7135,17 @@ class GitAuthHelper {
|
|
|
|
|
else {
|
|
|
|
|
yield fs.promises.writeFile(newGitConfigPath, '');
|
|
|
|
|
}
|
|
|
|
|
// Override HOME
|
|
|
|
|
core.info(`Temporarily overriding HOME='${this.temporaryHomePath}' before making global git config changes`);
|
|
|
|
|
this.git.setEnvironmentVariable('HOME', this.temporaryHomePath);
|
|
|
|
|
return newGitConfigPath;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
configureGlobalAuth() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// 'configureTempGlobalConfig' noops if already set, just returns the path
|
|
|
|
|
const newGitConfigPath = yield this.configureTempGlobalConfig();
|
|
|
|
|
try {
|
|
|
|
|
// Override HOME
|
|
|
|
|
core.info(`Temporarily overriding HOME='${this.temporaryHomePath}' before making global git config changes`);
|
|
|
|
|
this.git.setEnvironmentVariable('HOME', this.temporaryHomePath);
|
|
|
|
|
// Configure the token
|
|
|
|
|
yield this.configureToken(newGitConfigPath, true);
|
|
|
|
|
// Configure HTTPS instead of SSH
|
|
|
|
@@ -6631,7 +7172,9 @@ class GitAuthHelper {
|
|
|
|
|
// Configure a placeholder value. This approach avoids the credential being captured
|
|
|
|
|
// by process creation audit events, which are commonly logged. For more information,
|
|
|
|
|
// refer to https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/command-line-process-auditing
|
|
|
|
|
const output = yield this.git.submoduleForeach(`git config --local '${this.tokenConfigKey}' '${this.tokenPlaceholderConfigValue}' && git config --local --show-origin --name-only --get-regexp remote.origin.url`, this.settings.nestedSubmodules);
|
|
|
|
|
const output = yield this.git.submoduleForeach(
|
|
|
|
|
// wrap the pipeline in quotes to make sure it's handled properly by submoduleForeach, rather than just the first part of the pipeline
|
|
|
|
|
`sh -c "git config --local '${this.tokenConfigKey}' '${this.tokenPlaceholderConfigValue}' && git config --local --show-origin --name-only --get-regexp remote.origin.url"`, this.settings.nestedSubmodules);
|
|
|
|
|
// Replace the placeholder
|
|
|
|
|
const configPaths = output.match(/(?<=(^|\n)file:)[^\t]+(?=\tremote\.origin\.url)/g) || [];
|
|
|
|
|
for (const configPath of configPaths) {
|
|
|
|
@@ -6657,11 +7200,14 @@ class GitAuthHelper {
|
|
|
|
|
yield this.removeToken();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
removeGlobalAuth() {
|
|
|
|
|
removeGlobalConfig() {
|
|
|
|
|
var _a;
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
core.debug(`Unsetting HOME override`);
|
|
|
|
|
this.git.removeEnvironmentVariable('HOME');
|
|
|
|
|
yield io.rmRF(this.temporaryHomePath);
|
|
|
|
|
if (((_a = this.temporaryHomePath) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
|
|
|
core.debug(`Unsetting HOME override`);
|
|
|
|
|
this.git.removeEnvironmentVariable('HOME');
|
|
|
|
|
yield io.rmRF(this.temporaryHomePath);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
configureSsh() {
|
|
|
|
@@ -6795,7 +7341,9 @@ class GitAuthHelper {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const pattern = regexpHelper.escape(configKey);
|
|
|
|
|
yield this.git.submoduleForeach(`git config --local --name-only --get-regexp '${pattern}' && git config --local --unset-all '${configKey}' || :`, true);
|
|
|
|
|
yield this.git.submoduleForeach(
|
|
|
|
|
// wrap the pipeline in quotes to make sure it's handled properly by submoduleForeach, rather than just the first part of the pipeline
|
|
|
|
|
`sh -c "git config --local --name-only --get-regexp '${pattern}' && git config --local --unset-all '${configKey}' || :"`, true);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -6893,8 +7441,10 @@ class GitCommandManager {
|
|
|
|
|
const result = [];
|
|
|
|
|
// Note, this implementation uses "rev-parse --symbolic-full-name" because the output from
|
|
|
|
|
// "branch --list" is more difficult when in a detached HEAD state.
|
|
|
|
|
// Note, this implementation uses "rev-parse --symbolic-full-name" because there is a bug
|
|
|
|
|
// in Git 2.18 that causes "rev-parse --symbolic" to output symbolic full names.
|
|
|
|
|
// TODO(https://github.com/actions/checkout/issues/786): this implementation uses
|
|
|
|
|
// "rev-parse --symbolic-full-name" because there is a bug
|
|
|
|
|
// in Git 2.18 that causes "rev-parse --symbolic" to output symbolic full names. When
|
|
|
|
|
// 2.18 is no longer supported, we can switch back to --symbolic.
|
|
|
|
|
const args = ['rev-parse', '--symbolic-full-name'];
|
|
|
|
|
if (remote) {
|
|
|
|
|
args.push('--remotes=origin');
|
|
|
|
@@ -6902,18 +7452,42 @@ class GitCommandManager {
|
|
|
|
|
else {
|
|
|
|
|
args.push('--branches');
|
|
|
|
|
}
|
|
|
|
|
const output = yield this.execGit(args);
|
|
|
|
|
for (let branch of output.stdout.trim().split('\n')) {
|
|
|
|
|
branch = branch.trim();
|
|
|
|
|
if (branch) {
|
|
|
|
|
if (branch.startsWith('refs/heads/')) {
|
|
|
|
|
branch = branch.substr('refs/heads/'.length);
|
|
|
|
|
}
|
|
|
|
|
else if (branch.startsWith('refs/remotes/')) {
|
|
|
|
|
branch = branch.substr('refs/remotes/'.length);
|
|
|
|
|
}
|
|
|
|
|
result.push(branch);
|
|
|
|
|
const stderr = [];
|
|
|
|
|
const errline = [];
|
|
|
|
|
const stdout = [];
|
|
|
|
|
const stdline = [];
|
|
|
|
|
const listeners = {
|
|
|
|
|
stderr: (data) => {
|
|
|
|
|
stderr.push(data.toString());
|
|
|
|
|
},
|
|
|
|
|
errline: (data) => {
|
|
|
|
|
errline.push(data.toString());
|
|
|
|
|
},
|
|
|
|
|
stdout: (data) => {
|
|
|
|
|
stdout.push(data.toString());
|
|
|
|
|
},
|
|
|
|
|
stdline: (data) => {
|
|
|
|
|
stdline.push(data.toString());
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
// Suppress the output in order to avoid flooding annotations with innocuous errors.
|
|
|
|
|
yield this.execGit(args, false, true, listeners);
|
|
|
|
|
core.debug(`stderr callback is: ${stderr}`);
|
|
|
|
|
core.debug(`errline callback is: ${errline}`);
|
|
|
|
|
core.debug(`stdout callback is: ${stdout}`);
|
|
|
|
|
core.debug(`stdline callback is: ${stdline}`);
|
|
|
|
|
for (let branch of stdline) {
|
|
|
|
|
branch = branch.trim();
|
|
|
|
|
if (!branch) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (branch.startsWith('refs/heads/')) {
|
|
|
|
|
branch = branch.substring('refs/heads/'.length);
|
|
|
|
|
}
|
|
|
|
|
else if (branch.startsWith('refs/remotes/')) {
|
|
|
|
|
branch = branch.substring('refs/remotes/'.length);
|
|
|
|
|
}
|
|
|
|
|
result.push(branch);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
});
|
|
|
|
@@ -7164,7 +7738,7 @@ class GitCommandManager {
|
|
|
|
|
return result;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
execGit(args, allowAllExitCodes = false, silent = false) {
|
|
|
|
|
execGit(args, allowAllExitCodes = false, silent = false, customListeners = {}) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
fshelper.directoryExistsSync(this.workingDirectory, true);
|
|
|
|
|
const result = new GitOutput();
|
|
|
|
@@ -7175,20 +7749,24 @@ class GitCommandManager {
|
|
|
|
|
for (const key of Object.keys(this.gitEnv)) {
|
|
|
|
|
env[key] = this.gitEnv[key];
|
|
|
|
|
}
|
|
|
|
|
const defaultListener = {
|
|
|
|
|
stdout: (data) => {
|
|
|
|
|
stdout.push(data.toString());
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const mergedListeners = Object.assign(Object.assign({}, defaultListener), customListeners);
|
|
|
|
|
const stdout = [];
|
|
|
|
|
const options = {
|
|
|
|
|
cwd: this.workingDirectory,
|
|
|
|
|
env,
|
|
|
|
|
silent,
|
|
|
|
|
ignoreReturnCode: allowAllExitCodes,
|
|
|
|
|
listeners: {
|
|
|
|
|
stdout: (data) => {
|
|
|
|
|
stdout.push(data.toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
listeners: mergedListeners
|
|
|
|
|
};
|
|
|
|
|
result.exitCode = yield exec.exec(`"${this.gitPath}"`, args, options);
|
|
|
|
|
result.stdout = stdout.join('');
|
|
|
|
|
core.debug(result.exitCode.toString());
|
|
|
|
|
core.debug(result.stdout);
|
|
|
|
|
return result;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@@ -7266,233 +7844,42 @@ class GitOutput {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.cleanup = exports.getSource = void 0;
|
|
|
|
|
const core = __importStar(__webpack_require__(470));
|
|
|
|
|
const fsHelper = __importStar(__webpack_require__(618));
|
|
|
|
|
const gitAuthHelper = __importStar(__webpack_require__(287));
|
|
|
|
|
const gitCommandManager = __importStar(__webpack_require__(289));
|
|
|
|
|
const gitDirectoryHelper = __importStar(__webpack_require__(438));
|
|
|
|
|
const githubApiHelper = __importStar(__webpack_require__(464));
|
|
|
|
|
const io = __importStar(__webpack_require__(1));
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
const refHelper = __importStar(__webpack_require__(227));
|
|
|
|
|
const stateHelper = __importStar(__webpack_require__(153));
|
|
|
|
|
const urlHelper = __importStar(__webpack_require__(81));
|
|
|
|
|
function getSource(settings) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Repository URL
|
|
|
|
|
core.info(`Syncing repository: ${settings.repositoryOwner}/${settings.repositoryName}`);
|
|
|
|
|
const repositoryUrl = urlHelper.getFetchUrl(settings);
|
|
|
|
|
// Remove conflicting file path
|
|
|
|
|
if (fsHelper.fileExistsSync(settings.repositoryPath)) {
|
|
|
|
|
yield io.rmRF(settings.repositoryPath);
|
|
|
|
|
}
|
|
|
|
|
// Create directory
|
|
|
|
|
let isExisting = true;
|
|
|
|
|
if (!fsHelper.directoryExistsSync(settings.repositoryPath)) {
|
|
|
|
|
isExisting = false;
|
|
|
|
|
yield io.mkdirP(settings.repositoryPath);
|
|
|
|
|
}
|
|
|
|
|
// Git command manager
|
|
|
|
|
core.startGroup('Getting Git version info');
|
|
|
|
|
const git = yield getGitCommandManager(settings);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Prepare existing directory, otherwise recreate
|
|
|
|
|
if (isExisting) {
|
|
|
|
|
yield gitDirectoryHelper.prepareExistingDirectory(git, settings.repositoryPath, repositoryUrl, settings.clean, settings.ref);
|
|
|
|
|
}
|
|
|
|
|
if (!git) {
|
|
|
|
|
// Downloading using REST API
|
|
|
|
|
core.info(`The repository will be downloaded using the GitHub REST API`);
|
|
|
|
|
core.info(`To create a local Git repository instead, add Git ${gitCommandManager.MinimumGitVersion} or higher to the PATH`);
|
|
|
|
|
if (settings.submodules) {
|
|
|
|
|
throw new Error(`Input 'submodules' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${gitCommandManager.MinimumGitVersion} or higher to the PATH.`);
|
|
|
|
|
}
|
|
|
|
|
else if (settings.sshKey) {
|
|
|
|
|
throw new Error(`Input 'ssh-key' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${gitCommandManager.MinimumGitVersion} or higher to the PATH.`);
|
|
|
|
|
}
|
|
|
|
|
yield githubApiHelper.downloadRepository(settings.authToken, settings.repositoryOwner, settings.repositoryName, settings.ref, settings.commit, settings.repositoryPath);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// Save state for POST action
|
|
|
|
|
stateHelper.setRepositoryPath(settings.repositoryPath);
|
|
|
|
|
// Initialize the repository
|
|
|
|
|
if (!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))) {
|
|
|
|
|
core.startGroup('Initializing the repository');
|
|
|
|
|
yield git.init();
|
|
|
|
|
yield git.remoteAdd('origin', repositoryUrl);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
// Disable automatic garbage collection
|
|
|
|
|
core.startGroup('Disabling automatic garbage collection');
|
|
|
|
|
if (!(yield git.tryDisableAutomaticGarbageCollection())) {
|
|
|
|
|
core.warning(`Unable to turn off git automatic garbage collection. The git fetch operation may trigger garbage collection and cause a delay.`);
|
|
|
|
|
}
|
|
|
|
|
core.endGroup();
|
|
|
|
|
const authHelper = gitAuthHelper.createAuthHelper(git, settings);
|
|
|
|
|
try {
|
|
|
|
|
// Configure auth
|
|
|
|
|
core.startGroup('Setting up auth');
|
|
|
|
|
yield authHelper.configureAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Determine the default branch
|
|
|
|
|
if (!settings.ref && !settings.commit) {
|
|
|
|
|
core.startGroup('Determining the default branch');
|
|
|
|
|
if (settings.sshKey) {
|
|
|
|
|
settings.ref = yield git.getDefaultBranch(repositoryUrl);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
settings.ref = yield githubApiHelper.getDefaultBranch(settings.authToken, settings.repositoryOwner, settings.repositoryName);
|
|
|
|
|
}
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
// LFS install
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
yield git.lfsInstall();
|
|
|
|
|
}
|
|
|
|
|
// Fetch
|
|
|
|
|
core.startGroup('Fetching the repository');
|
|
|
|
|
if (settings.fetchDepth <= 0) {
|
|
|
|
|
// Fetch all branches and tags
|
|
|
|
|
let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(refSpec);
|
|
|
|
|
// When all history is fetched, the ref we're interested in may have moved to a different
|
|
|
|
|
// commit (push or force push). If so, fetch again with a targeted refspec.
|
|
|
|
|
if (!(yield refHelper.testRef(git, settings.ref, settings.commit))) {
|
|
|
|
|
refSpec = refHelper.getRefSpec(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(refSpec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
const refSpec = refHelper.getRefSpec(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(refSpec, settings.fetchDepth);
|
|
|
|
|
}
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Checkout info
|
|
|
|
|
core.startGroup('Determining the checkout info');
|
|
|
|
|
const checkoutInfo = yield refHelper.getCheckoutInfo(git, settings.ref, settings.commit);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// LFS fetch
|
|
|
|
|
// Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time).
|
|
|
|
|
// Explicit lfs fetch will fetch lfs objects in parallel.
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
core.startGroup('Fetching LFS objects');
|
|
|
|
|
yield git.lfsFetch(checkoutInfo.startPoint || checkoutInfo.ref);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
// Checkout
|
|
|
|
|
core.startGroup('Checking out the ref');
|
|
|
|
|
yield git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Submodules
|
|
|
|
|
if (settings.submodules) {
|
|
|
|
|
try {
|
|
|
|
|
// Temporarily override global config
|
|
|
|
|
core.startGroup('Setting up auth for fetching submodules');
|
|
|
|
|
yield authHelper.configureGlobalAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Checkout submodules
|
|
|
|
|
core.startGroup('Fetching submodules');
|
|
|
|
|
yield git.submoduleSync(settings.nestedSubmodules);
|
|
|
|
|
yield git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
|
|
|
|
|
yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Persist credentials
|
|
|
|
|
if (settings.persistCredentials) {
|
|
|
|
|
core.startGroup('Persisting credentials for submodules');
|
|
|
|
|
yield authHelper.configureSubmoduleAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
// Remove temporary global config override
|
|
|
|
|
yield authHelper.removeGlobalAuth();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Get commit information
|
|
|
|
|
const commitInfo = yield git.log1();
|
|
|
|
|
// Log commit sha
|
|
|
|
|
yield git.log1("--format='%H'");
|
|
|
|
|
// Check for incorrect pull request merge commit
|
|
|
|
|
yield refHelper.checkCommitInfo(settings.authToken, commitInfo, settings.repositoryOwner, settings.repositoryName, settings.ref, settings.commit);
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
// Remove auth
|
|
|
|
|
if (!settings.persistCredentials) {
|
|
|
|
|
core.startGroup('Removing auth');
|
|
|
|
|
yield authHelper.removeAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.getSource = getSource;
|
|
|
|
|
function cleanup(repositoryPath) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Repo exists?
|
|
|
|
|
if (!repositoryPath ||
|
|
|
|
|
!fsHelper.fileExistsSync(path.join(repositoryPath, '.git', 'config'))) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
let git;
|
|
|
|
|
try {
|
|
|
|
|
git = yield gitCommandManager.createCommandManager(repositoryPath, false);
|
|
|
|
|
}
|
|
|
|
|
catch (_a) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// Remove auth
|
|
|
|
|
const authHelper = gitAuthHelper.createAuthHelper(git);
|
|
|
|
|
yield authHelper.removeAuth();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.cleanup = cleanup;
|
|
|
|
|
function getGitCommandManager(settings) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
core.info(`Working directory is '${settings.repositoryPath}'`);
|
|
|
|
|
try {
|
|
|
|
|
return yield gitCommandManager.createCommandManager(settings.repositoryPath, settings.lfs);
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
// Git is required for LFS
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
// Otherwise fallback to REST API
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _rng = _interopRequireDefault(__webpack_require__(506));
|
|
|
|
|
|
|
|
|
|
var _stringify = _interopRequireDefault(__webpack_require__(960));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
function v4(options, buf, offset) {
|
|
|
|
|
options = options || {};
|
|
|
|
|
|
|
|
|
|
const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
|
|
|
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
|
|
|
|
|
|
|
|
|
|
if (buf) {
|
|
|
|
|
offset = offset || 0;
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < 16; ++i) {
|
|
|
|
|
buf[offset + i] = rnds[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return buf;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (0, _stringify.default)(rnds);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _default = v4;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
@@ -7791,6 +8178,36 @@ isStream.transform = function (stream) {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 329:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _crypto = _interopRequireDefault(__webpack_require__(417));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
function sha1(bytes) {
|
|
|
|
|
if (Array.isArray(bytes)) {
|
|
|
|
|
bytes = Buffer.from(bytes);
|
|
|
|
|
} else if (typeof bytes === 'string') {
|
|
|
|
|
bytes = Buffer.from(bytes, 'utf8');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return _crypto.default.createHash('sha1').update(bytes).digest();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _default = sha1;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 330:
|
|
|
|
@@ -8114,37 +8531,90 @@ module.exports = require("assert");
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 363:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
|
|
|
|
|
|
module.exports = register
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
function register (state, name, method, options) {
|
|
|
|
|
if (typeof method !== 'function') {
|
|
|
|
|
throw new Error('method for before hook must be a function')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!options) {
|
|
|
|
|
options = {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Array.isArray(name)) {
|
|
|
|
|
return name.reverse().reduce(function (callback, name) {
|
|
|
|
|
return register.bind(null, state, name, callback, options)
|
|
|
|
|
}, method)()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Promise.resolve()
|
|
|
|
|
.then(function () {
|
|
|
|
|
if (!state.registry[name]) {
|
|
|
|
|
return method(options)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (state.registry[name]).reduce(function (method, registered) {
|
|
|
|
|
return registered.hook.bind(null, method, options)
|
|
|
|
|
}, method)()
|
|
|
|
|
})
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0;
|
|
|
|
|
class BasicCredentialHandler {
|
|
|
|
|
constructor(username, password) {
|
|
|
|
|
this.username = username;
|
|
|
|
|
this.password = password;
|
|
|
|
|
}
|
|
|
|
|
prepareRequest(options) {
|
|
|
|
|
if (!options.headers) {
|
|
|
|
|
throw Error('The request has no headers');
|
|
|
|
|
}
|
|
|
|
|
options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`;
|
|
|
|
|
}
|
|
|
|
|
// This handler cannot handle 401
|
|
|
|
|
canHandleAuthentication() {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
handleAuthentication() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
throw new Error('not implemented');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exports.BasicCredentialHandler = BasicCredentialHandler;
|
|
|
|
|
class BearerCredentialHandler {
|
|
|
|
|
constructor(token) {
|
|
|
|
|
this.token = token;
|
|
|
|
|
}
|
|
|
|
|
// currently implements pre-authorization
|
|
|
|
|
// TODO: support preAuth = false where it hooks on 401
|
|
|
|
|
prepareRequest(options) {
|
|
|
|
|
if (!options.headers) {
|
|
|
|
|
throw Error('The request has no headers');
|
|
|
|
|
}
|
|
|
|
|
options.headers['Authorization'] = `Bearer ${this.token}`;
|
|
|
|
|
}
|
|
|
|
|
// This handler cannot handle 401
|
|
|
|
|
canHandleAuthentication() {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
handleAuthentication() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
throw new Error('not implemented');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
exports.BearerCredentialHandler = BearerCredentialHandler;
|
|
|
|
|
class PersonalAccessTokenCredentialHandler {
|
|
|
|
|
constructor(token) {
|
|
|
|
|
this.token = token;
|
|
|
|
|
}
|
|
|
|
|
// currently implements pre-authorization
|
|
|
|
|
// TODO: support preAuth = false where it hooks on 401
|
|
|
|
|
prepareRequest(options) {
|
|
|
|
|
if (!options.headers) {
|
|
|
|
|
throw Error('The request has no headers');
|
|
|
|
|
}
|
|
|
|
|
options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`;
|
|
|
|
|
}
|
|
|
|
|
// This handler cannot handle 401
|
|
|
|
|
canHandleAuthentication() {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
handleAuthentication() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
throw new Error('not implemented');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler;
|
|
|
|
|
//# sourceMappingURL=auth.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
@@ -8621,6 +9091,36 @@ function readShebang(command) {
|
|
|
|
|
module.exports = readShebang;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 392:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
|
|
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
|
|
|
|
|
|
var osName = _interopDefault(__webpack_require__(2));
|
|
|
|
|
|
|
|
|
|
function getUserAgent() {
|
|
|
|
|
try {
|
|
|
|
|
return `Node.js/${process.version.substr(1)} (${osName()}; ${process.arch})`;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
if (/wmic os get Caption/.test(error.message)) {
|
|
|
|
|
return "Windows <version undetectable>";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return "<environment undetectable>";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exports.getUserAgent = getUserAgent;
|
|
|
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 402:
|
|
|
|
@@ -8660,9 +9160,10 @@ function Octokit(plugins, options) {
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 413:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
module.exports = __webpack_require__(141);
|
|
|
|
|
|
|
|
|
|
module.exports = require("stream");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
@@ -8739,14 +9240,27 @@ function octokitValidate(octokit) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
|
|
|
result["default"] = mod;
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.issue = exports.issueCommand = void 0;
|
|
|
|
|
const os = __importStar(__webpack_require__(87));
|
|
|
|
|
const utils_1 = __webpack_require__(82);
|
|
|
|
|
/**
|
|
|
|
@@ -9057,11 +9571,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
|
|
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
|
|
|
|
|
|
var Stream = _interopDefault(__webpack_require__(413));
|
|
|
|
|
var Stream = _interopDefault(__webpack_require__(794));
|
|
|
|
|
var http = _interopDefault(__webpack_require__(605));
|
|
|
|
|
var Url = _interopDefault(__webpack_require__(835));
|
|
|
|
|
var whatwgUrl = _interopDefault(__webpack_require__(70));
|
|
|
|
|
var https = _interopDefault(__webpack_require__(34));
|
|
|
|
|
var https = _interopDefault(__webpack_require__(211));
|
|
|
|
|
var zlib = _interopDefault(__webpack_require__(761));
|
|
|
|
|
|
|
|
|
|
// Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
|
|
|
|
@@ -10195,7 +10709,7 @@ Object.defineProperty(Response.prototype, Symbol.toStringTag, {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const INTERNALS$2 = Symbol('Request internals');
|
|
|
|
|
const URL = whatwgUrl.URL;
|
|
|
|
|
const URL = Url.URL || whatwgUrl.URL;
|
|
|
|
|
|
|
|
|
|
// fix an issue where "format", "parse" aren't a named export for node <10
|
|
|
|
|
const parse_url = Url.parse;
|
|
|
|
@@ -10458,9 +10972,17 @@ AbortError.prototype = Object.create(Error.prototype);
|
|
|
|
|
AbortError.prototype.constructor = AbortError;
|
|
|
|
|
AbortError.prototype.name = 'AbortError';
|
|
|
|
|
|
|
|
|
|
const URL$1 = Url.URL || whatwgUrl.URL;
|
|
|
|
|
|
|
|
|
|
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
|
|
|
|
|
const PassThrough$1 = Stream.PassThrough;
|
|
|
|
|
const resolve_url = Url.resolve;
|
|
|
|
|
|
|
|
|
|
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
|
|
|
|
|
const orig = new URL$1(original).hostname;
|
|
|
|
|
const dest = new URL$1(destination).hostname;
|
|
|
|
|
|
|
|
|
|
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Fetch function
|
|
|
|
@@ -10548,7 +11070,19 @@ function fetch(url, opts) {
|
|
|
|
|
const location = headers.get('Location');
|
|
|
|
|
|
|
|
|
|
// HTTP fetch step 5.3
|
|
|
|
|
const locationURL = location === null ? null : resolve_url(request.url, location);
|
|
|
|
|
let locationURL = null;
|
|
|
|
|
try {
|
|
|
|
|
locationURL = location === null ? null : new URL$1(location, request.url).toString();
|
|
|
|
|
} catch (err) {
|
|
|
|
|
// error here can only be invalid URL in Location: header
|
|
|
|
|
// do not throw when options.redirect == manual
|
|
|
|
|
// let the user extract the errorneous redirect URL
|
|
|
|
|
if (request.redirect !== 'manual') {
|
|
|
|
|
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
|
|
|
|
|
finalize();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// HTTP fetch step 5.5
|
|
|
|
|
switch (request.redirect) {
|
|
|
|
@@ -10596,6 +11130,12 @@ function fetch(url, opts) {
|
|
|
|
|
size: request.size
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!isDomainOrSubdomain(request.url, locationURL)) {
|
|
|
|
|
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
|
|
|
|
|
requestOpts.headers.delete(name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// HTTP-redirect fetch step 9
|
|
|
|
|
if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
|
|
|
|
|
reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
|
|
|
|
@@ -10883,24 +11423,24 @@ exports.getDefaultBranch = exports.downloadRepository = void 0;
|
|
|
|
|
const assert = __importStar(__webpack_require__(357));
|
|
|
|
|
const core = __importStar(__webpack_require__(470));
|
|
|
|
|
const fs = __importStar(__webpack_require__(747));
|
|
|
|
|
const github = __importStar(__webpack_require__(469));
|
|
|
|
|
const io = __importStar(__webpack_require__(1));
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
const retryHelper = __importStar(__webpack_require__(587));
|
|
|
|
|
const toolCache = __importStar(__webpack_require__(533));
|
|
|
|
|
const v4_1 = __importDefault(__webpack_require__(826));
|
|
|
|
|
const octokit_provider_1 = __webpack_require__(195);
|
|
|
|
|
const IS_WINDOWS = process.platform === 'win32';
|
|
|
|
|
function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) {
|
|
|
|
|
function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath, baseUrl) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Determine the default branch
|
|
|
|
|
if (!ref && !commit) {
|
|
|
|
|
core.info('Determining the default branch');
|
|
|
|
|
ref = yield getDefaultBranch(authToken, owner, repo);
|
|
|
|
|
ref = yield getDefaultBranch(authToken, owner, repo, baseUrl);
|
|
|
|
|
}
|
|
|
|
|
// Download the archive
|
|
|
|
|
let archiveData = yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
core.info('Downloading the archive');
|
|
|
|
|
return yield downloadArchive(authToken, owner, repo, ref, commit);
|
|
|
|
|
return yield downloadArchive(authToken, owner, repo, ref, commit, baseUrl);
|
|
|
|
|
}));
|
|
|
|
|
// Write archive to disk
|
|
|
|
|
core.info('Writing archive to disk');
|
|
|
|
@@ -10944,12 +11484,12 @@ exports.downloadRepository = downloadRepository;
|
|
|
|
|
/**
|
|
|
|
|
* Looks up the default branch name
|
|
|
|
|
*/
|
|
|
|
|
function getDefaultBranch(authToken, owner, repo) {
|
|
|
|
|
function getDefaultBranch(authToken, owner, repo, baseUrl) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
var _a;
|
|
|
|
|
core.info('Retrieving the default branch name');
|
|
|
|
|
const octokit = new github.GitHub(authToken);
|
|
|
|
|
const octokit = (0, octokit_provider_1.getOctokit)(authToken, { baseUrl: baseUrl });
|
|
|
|
|
let result;
|
|
|
|
|
try {
|
|
|
|
|
// Get the default branch from the repo info
|
|
|
|
@@ -10979,9 +11519,9 @@ function getDefaultBranch(authToken, owner, repo) {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.getDefaultBranch = getDefaultBranch;
|
|
|
|
|
function downloadArchive(authToken, owner, repo, ref, commit) {
|
|
|
|
|
function downloadArchive(authToken, owner, repo, ref, commit, baseUrl) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const octokit = new github.GitHub(authToken);
|
|
|
|
|
const octokit = (0, octokit_provider_1.getOctokit)(authToken, { baseUrl: baseUrl });
|
|
|
|
|
const params = {
|
|
|
|
|
owner: owner,
|
|
|
|
|
repo: repo,
|
|
|
|
@@ -11119,6 +11659,25 @@ exports.GitHub = GitHub;
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
@@ -11128,19 +11687,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
|
|
|
result["default"] = mod;
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
|
|
|
|
|
const command_1 = __webpack_require__(431);
|
|
|
|
|
const file_command_1 = __webpack_require__(102);
|
|
|
|
|
const utils_1 = __webpack_require__(82);
|
|
|
|
|
const os = __importStar(__webpack_require__(87));
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
const oidc_utils_1 = __webpack_require__(742);
|
|
|
|
|
/**
|
|
|
|
|
* The code to exit an action
|
|
|
|
|
*/
|
|
|
|
@@ -11169,13 +11723,9 @@ function exportVariable(name, val) {
|
|
|
|
|
process.env[name] = convertedVal;
|
|
|
|
|
const filePath = process.env['GITHUB_ENV'] || '';
|
|
|
|
|
if (filePath) {
|
|
|
|
|
const delimiter = '_GitHubActionsFileCommandDelimeter_';
|
|
|
|
|
const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;
|
|
|
|
|
file_command_1.issueCommand('ENV', commandValue);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
command_1.issueCommand('set-env', { name }, convertedVal);
|
|
|
|
|
return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));
|
|
|
|
|
}
|
|
|
|
|
command_1.issueCommand('set-env', { name }, convertedVal);
|
|
|
|
|
}
|
|
|
|
|
exports.exportVariable = exportVariable;
|
|
|
|
|
/**
|
|
|
|
@@ -11193,7 +11743,7 @@ exports.setSecret = setSecret;
|
|
|
|
|
function addPath(inputPath) {
|
|
|
|
|
const filePath = process.env['GITHUB_PATH'] || '';
|
|
|
|
|
if (filePath) {
|
|
|
|
|
file_command_1.issueCommand('PATH', inputPath);
|
|
|
|
|
file_command_1.issueFileCommand('PATH', inputPath);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
command_1.issueCommand('add-path', {}, inputPath);
|
|
|
|
@@ -11202,7 +11752,9 @@ function addPath(inputPath) {
|
|
|
|
|
}
|
|
|
|
|
exports.addPath = addPath;
|
|
|
|
|
/**
|
|
|
|
|
* Gets the value of an input. The value is also trimmed.
|
|
|
|
|
* Gets the value of an input.
|
|
|
|
|
* Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
|
|
|
|
|
* Returns an empty string if the value is not defined.
|
|
|
|
|
*
|
|
|
|
|
* @param name name of the input to get
|
|
|
|
|
* @param options optional. See InputOptions.
|
|
|
|
@@ -11213,9 +11765,52 @@ function getInput(name, options) {
|
|
|
|
|
if (options && options.required && !val) {
|
|
|
|
|
throw new Error(`Input required and not supplied: ${name}`);
|
|
|
|
|
}
|
|
|
|
|
if (options && options.trimWhitespace === false) {
|
|
|
|
|
return val;
|
|
|
|
|
}
|
|
|
|
|
return val.trim();
|
|
|
|
|
}
|
|
|
|
|
exports.getInput = getInput;
|
|
|
|
|
/**
|
|
|
|
|
* Gets the values of an multiline input. Each value is also trimmed.
|
|
|
|
|
*
|
|
|
|
|
* @param name name of the input to get
|
|
|
|
|
* @param options optional. See InputOptions.
|
|
|
|
|
* @returns string[]
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
function getMultilineInput(name, options) {
|
|
|
|
|
const inputs = getInput(name, options)
|
|
|
|
|
.split('\n')
|
|
|
|
|
.filter(x => x !== '');
|
|
|
|
|
if (options && options.trimWhitespace === false) {
|
|
|
|
|
return inputs;
|
|
|
|
|
}
|
|
|
|
|
return inputs.map(input => input.trim());
|
|
|
|
|
}
|
|
|
|
|
exports.getMultilineInput = getMultilineInput;
|
|
|
|
|
/**
|
|
|
|
|
* Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
|
|
|
|
|
* Support boolean input list: `true | True | TRUE | false | False | FALSE` .
|
|
|
|
|
* The return value is also in boolean type.
|
|
|
|
|
* ref: https://yaml.org/spec/1.2/spec.html#id2804923
|
|
|
|
|
*
|
|
|
|
|
* @param name name of the input to get
|
|
|
|
|
* @param options optional. See InputOptions.
|
|
|
|
|
* @returns boolean
|
|
|
|
|
*/
|
|
|
|
|
function getBooleanInput(name, options) {
|
|
|
|
|
const trueValue = ['true', 'True', 'TRUE'];
|
|
|
|
|
const falseValue = ['false', 'False', 'FALSE'];
|
|
|
|
|
const val = getInput(name, options);
|
|
|
|
|
if (trueValue.includes(val))
|
|
|
|
|
return true;
|
|
|
|
|
if (falseValue.includes(val))
|
|
|
|
|
return false;
|
|
|
|
|
throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` +
|
|
|
|
|
`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
|
|
|
|
|
}
|
|
|
|
|
exports.getBooleanInput = getBooleanInput;
|
|
|
|
|
/**
|
|
|
|
|
* Sets the value of an output.
|
|
|
|
|
*
|
|
|
|
@@ -11224,7 +11819,12 @@ exports.getInput = getInput;
|
|
|
|
|
*/
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
|
|
function setOutput(name, value) {
|
|
|
|
|
command_1.issueCommand('set-output', { name }, value);
|
|
|
|
|
const filePath = process.env['GITHUB_OUTPUT'] || '';
|
|
|
|
|
if (filePath) {
|
|
|
|
|
return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value));
|
|
|
|
|
}
|
|
|
|
|
process.stdout.write(os.EOL);
|
|
|
|
|
command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value));
|
|
|
|
|
}
|
|
|
|
|
exports.setOutput = setOutput;
|
|
|
|
|
/**
|
|
|
|
@@ -11270,19 +11870,30 @@ exports.debug = debug;
|
|
|
|
|
/**
|
|
|
|
|
* Adds an error issue
|
|
|
|
|
* @param message error issue message. Errors will be converted to string via toString()
|
|
|
|
|
* @param properties optional properties to add to the annotation.
|
|
|
|
|
*/
|
|
|
|
|
function error(message) {
|
|
|
|
|
command_1.issue('error', message instanceof Error ? message.toString() : message);
|
|
|
|
|
function error(message, properties = {}) {
|
|
|
|
|
command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
|
|
|
}
|
|
|
|
|
exports.error = error;
|
|
|
|
|
/**
|
|
|
|
|
* Adds an warning issue
|
|
|
|
|
* Adds a warning issue
|
|
|
|
|
* @param message warning issue message. Errors will be converted to string via toString()
|
|
|
|
|
* @param properties optional properties to add to the annotation.
|
|
|
|
|
*/
|
|
|
|
|
function warning(message) {
|
|
|
|
|
command_1.issue('warning', message instanceof Error ? message.toString() : message);
|
|
|
|
|
function warning(message, properties = {}) {
|
|
|
|
|
command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
|
|
|
}
|
|
|
|
|
exports.warning = warning;
|
|
|
|
|
/**
|
|
|
|
|
* Adds a notice issue
|
|
|
|
|
* @param message notice issue message. Errors will be converted to string via toString()
|
|
|
|
|
* @param properties optional properties to add to the annotation.
|
|
|
|
|
*/
|
|
|
|
|
function notice(message, properties = {}) {
|
|
|
|
|
command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
|
|
|
|
}
|
|
|
|
|
exports.notice = notice;
|
|
|
|
|
/**
|
|
|
|
|
* Writes info to log with console.log.
|
|
|
|
|
* @param message info message
|
|
|
|
@@ -11342,7 +11953,11 @@ exports.group = group;
|
|
|
|
|
*/
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
|
|
function saveState(name, value) {
|
|
|
|
|
command_1.issueCommand('save-state', { name }, value);
|
|
|
|
|
const filePath = process.env['GITHUB_STATE'] || '';
|
|
|
|
|
if (filePath) {
|
|
|
|
|
return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value));
|
|
|
|
|
}
|
|
|
|
|
command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value));
|
|
|
|
|
}
|
|
|
|
|
exports.saveState = saveState;
|
|
|
|
|
/**
|
|
|
|
@@ -11355,6 +11970,29 @@ function getState(name) {
|
|
|
|
|
return process.env[`STATE_${name}`] || '';
|
|
|
|
|
}
|
|
|
|
|
exports.getState = getState;
|
|
|
|
|
function getIDToken(aud) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return yield oidc_utils_1.OidcClient.getIDToken(aud);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.getIDToken = getIDToken;
|
|
|
|
|
/**
|
|
|
|
|
* Summary exports
|
|
|
|
|
*/
|
|
|
|
|
var summary_1 = __webpack_require__(665);
|
|
|
|
|
Object.defineProperty(exports, "summary", { enumerable: true, get: function () { return summary_1.summary; } });
|
|
|
|
|
/**
|
|
|
|
|
* @deprecated use core.summary
|
|
|
|
|
*/
|
|
|
|
|
var summary_2 = __webpack_require__(665);
|
|
|
|
|
Object.defineProperty(exports, "markdownSummary", { enumerable: true, get: function () { return summary_2.markdownSummary; } });
|
|
|
|
|
/**
|
|
|
|
|
* Path exports
|
|
|
|
|
*/
|
|
|
|
|
var path_utils_1 = __webpack_require__(573);
|
|
|
|
|
Object.defineProperty(exports, "toPosixPath", { enumerable: true, get: function () { return path_utils_1.toPosixPath; } });
|
|
|
|
|
Object.defineProperty(exports, "toWin32Path", { enumerable: true, get: function () { return path_utils_1.toWin32Path; } });
|
|
|
|
|
Object.defineProperty(exports, "toPlatformPath", { enumerable: true, get: function () { return path_utils_1.toPlatformPath; } });
|
|
|
|
|
//# sourceMappingURL=core.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
@@ -11532,6 +12170,72 @@ exports.RequestError = RequestError;
|
|
|
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 501:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
|
|
|
|
module.exports = register
|
|
|
|
|
|
|
|
|
|
function register (state, name, method, options) {
|
|
|
|
|
if (typeof method !== 'function') {
|
|
|
|
|
throw new Error('method for before hook must be a function')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!options) {
|
|
|
|
|
options = {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Array.isArray(name)) {
|
|
|
|
|
return name.reverse().reduce(function (callback, name) {
|
|
|
|
|
return register.bind(null, state, name, callback, options)
|
|
|
|
|
}, method)()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Promise.resolve()
|
|
|
|
|
.then(function () {
|
|
|
|
|
if (!state.registry[name]) {
|
|
|
|
|
return method(options)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (state.registry[name]).reduce(function (method, registered) {
|
|
|
|
|
return registered.hook.bind(null, method, options)
|
|
|
|
|
}, method)()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 506:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = rng;
|
|
|
|
|
|
|
|
|
|
var _crypto = _interopRequireDefault(__webpack_require__(417));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
|
|
|
|
|
|
|
|
|
|
let poolPtr = rnds8Pool.length;
|
|
|
|
|
|
|
|
|
|
function rng() {
|
|
|
|
|
if (poolPtr > rnds8Pool.length - 16) {
|
|
|
|
|
_crypto.default.randomFillSync(rnds8Pool);
|
|
|
|
|
|
|
|
|
|
poolPtr = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 510:
|
|
|
|
@@ -11590,7 +12294,7 @@ function addHook (state, kind, name, hook) {
|
|
|
|
|
/***/ 523:
|
|
|
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
var register = __webpack_require__(363)
|
|
|
|
|
var register = __webpack_require__(501)
|
|
|
|
|
var addHook = __webpack_require__(510)
|
|
|
|
|
var removeHook = __webpack_require__(763)
|
|
|
|
|
|
|
|
|
@@ -11649,6 +12353,21 @@ module.exports.Singular = Hook.Singular
|
|
|
|
|
module.exports.Collection = Hook.Collection
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 525:
|
|
|
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 528:
|
|
|
|
@@ -12147,7 +12866,7 @@ function hasFirstPage (link) {
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
const url = __webpack_require__(835);
|
|
|
|
|
const http = __webpack_require__(605);
|
|
|
|
|
const https = __webpack_require__(34);
|
|
|
|
|
const https = __webpack_require__(211);
|
|
|
|
|
const pm = __webpack_require__(950);
|
|
|
|
|
let tunnel;
|
|
|
|
|
var HttpCodes;
|
|
|
|
@@ -12963,6 +13682,94 @@ function parse(command, args, options) {
|
|
|
|
|
module.exports = parse;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 572:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _v = _interopRequireDefault(__webpack_require__(136));
|
|
|
|
|
|
|
|
|
|
var _md = _interopRequireDefault(__webpack_require__(659));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
const v3 = (0, _v.default)('v3', 0x30, _md.default);
|
|
|
|
|
var _default = v3;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 573:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0;
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
/**
|
|
|
|
|
* toPosixPath converts the given path to the posix form. On Windows, \\ will be
|
|
|
|
|
* replaced with /.
|
|
|
|
|
*
|
|
|
|
|
* @param pth. Path to transform.
|
|
|
|
|
* @return string Posix path.
|
|
|
|
|
*/
|
|
|
|
|
function toPosixPath(pth) {
|
|
|
|
|
return pth.replace(/[\\]/g, '/');
|
|
|
|
|
}
|
|
|
|
|
exports.toPosixPath = toPosixPath;
|
|
|
|
|
/**
|
|
|
|
|
* toWin32Path converts the given path to the win32 form. On Linux, / will be
|
|
|
|
|
* replaced with \\.
|
|
|
|
|
*
|
|
|
|
|
* @param pth. Path to transform.
|
|
|
|
|
* @return string Win32 path.
|
|
|
|
|
*/
|
|
|
|
|
function toWin32Path(pth) {
|
|
|
|
|
return pth.replace(/[/]/g, '\\');
|
|
|
|
|
}
|
|
|
|
|
exports.toWin32Path = toWin32Path;
|
|
|
|
|
/**
|
|
|
|
|
* toPlatformPath converts the given path to a platform-specific path. It does
|
|
|
|
|
* this by replacing instances of / and \ with the platform-specific path
|
|
|
|
|
* separator.
|
|
|
|
|
*
|
|
|
|
|
* @param pth The path to platformize.
|
|
|
|
|
* @return string The platform-specific path.
|
|
|
|
|
*/
|
|
|
|
|
function toPlatformPath(pth) {
|
|
|
|
|
return pth.replace(/[/\\]/g, path.sep);
|
|
|
|
|
}
|
|
|
|
|
exports.toPlatformPath = toPlatformPath;
|
|
|
|
|
//# sourceMappingURL=path-utils.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 577:
|
|
|
|
@@ -13170,6 +13977,7 @@ var encode = function encode(str, defaultEncoder, charset, kind, format) {
|
|
|
|
|
|
|
|
|
|
i += 1;
|
|
|
|
|
c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
|
|
|
|
|
/* eslint operator-linebreak: [2, "before"] */
|
|
|
|
|
out += hexTable[0xF0 | (c >> 18)]
|
|
|
|
|
+ hexTable[0x80 | ((c >> 12) & 0x3F)]
|
|
|
|
|
+ hexTable[0x80 | ((c >> 6) & 0x3F)]
|
|
|
|
@@ -13532,6 +14340,53 @@ module.exports = require("net");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 634:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _regex = _interopRequireDefault(__webpack_require__(525));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
function validate(uuid) {
|
|
|
|
|
return typeof uuid === 'string' && _regex.default.test(uuid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _default = validate;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 638:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _v = _interopRequireDefault(__webpack_require__(136));
|
|
|
|
|
|
|
|
|
|
var _sha = _interopRequireDefault(__webpack_require__(329));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
const v5 = (0, _v.default)('v5', 0x50, _sha.default);
|
|
|
|
|
var _default = v5;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 642:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
@@ -15292,18 +16147,357 @@ function coerce (version, options) {
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 669:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
/***/ 659:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
module.exports = require("util");
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _crypto = _interopRequireDefault(__webpack_require__(417));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
function md5(bytes) {
|
|
|
|
|
if (Array.isArray(bytes)) {
|
|
|
|
|
bytes = Buffer.from(bytes);
|
|
|
|
|
} else if (typeof bytes === 'string') {
|
|
|
|
|
bytes = Buffer.from(bytes, 'utf8');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return _crypto.default.createHash('md5').update(bytes).digest();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _default = md5;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 672:
|
|
|
|
|
/***/ 665:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0;
|
|
|
|
|
const os_1 = __webpack_require__(87);
|
|
|
|
|
const fs_1 = __webpack_require__(747);
|
|
|
|
|
const { access, appendFile, writeFile } = fs_1.promises;
|
|
|
|
|
exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY';
|
|
|
|
|
exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary';
|
|
|
|
|
class Summary {
|
|
|
|
|
constructor() {
|
|
|
|
|
this._buffer = '';
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Finds the summary file path from the environment, rejects if env var is not found or file does not exist
|
|
|
|
|
* Also checks r/w permissions.
|
|
|
|
|
*
|
|
|
|
|
* @returns step summary file path
|
|
|
|
|
*/
|
|
|
|
|
filePath() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
if (this._filePath) {
|
|
|
|
|
return this._filePath;
|
|
|
|
|
}
|
|
|
|
|
const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR];
|
|
|
|
|
if (!pathFromEnv) {
|
|
|
|
|
throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK);
|
|
|
|
|
}
|
|
|
|
|
catch (_a) {
|
|
|
|
|
throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`);
|
|
|
|
|
}
|
|
|
|
|
this._filePath = pathFromEnv;
|
|
|
|
|
return this._filePath;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Wraps content in an HTML tag, adding any HTML attributes
|
|
|
|
|
*
|
|
|
|
|
* @param {string} tag HTML tag to wrap
|
|
|
|
|
* @param {string | null} content content within the tag
|
|
|
|
|
* @param {[attribute: string]: string} attrs key-value list of HTML attributes to add
|
|
|
|
|
*
|
|
|
|
|
* @returns {string} content wrapped in HTML element
|
|
|
|
|
*/
|
|
|
|
|
wrap(tag, content, attrs = {}) {
|
|
|
|
|
const htmlAttrs = Object.entries(attrs)
|
|
|
|
|
.map(([key, value]) => ` ${key}="${value}"`)
|
|
|
|
|
.join('');
|
|
|
|
|
if (!content) {
|
|
|
|
|
return `<${tag}${htmlAttrs}>`;
|
|
|
|
|
}
|
|
|
|
|
return `<${tag}${htmlAttrs}>${content}</${tag}>`;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Writes text in the buffer to the summary buffer file and empties buffer. Will append by default.
|
|
|
|
|
*
|
|
|
|
|
* @param {SummaryWriteOptions} [options] (optional) options for write operation
|
|
|
|
|
*
|
|
|
|
|
* @returns {Promise<Summary>} summary instance
|
|
|
|
|
*/
|
|
|
|
|
write(options) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite);
|
|
|
|
|
const filePath = yield this.filePath();
|
|
|
|
|
const writeFunc = overwrite ? writeFile : appendFile;
|
|
|
|
|
yield writeFunc(filePath, this._buffer, { encoding: 'utf8' });
|
|
|
|
|
return this.emptyBuffer();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Clears the summary buffer and wipes the summary file
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
clear() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.emptyBuffer().write({ overwrite: true });
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Returns the current summary buffer as a string
|
|
|
|
|
*
|
|
|
|
|
* @returns {string} string of summary buffer
|
|
|
|
|
*/
|
|
|
|
|
stringify() {
|
|
|
|
|
return this._buffer;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* If the summary buffer is empty
|
|
|
|
|
*
|
|
|
|
|
* @returns {boolen} true if the buffer is empty
|
|
|
|
|
*/
|
|
|
|
|
isEmptyBuffer() {
|
|
|
|
|
return this._buffer.length === 0;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Resets the summary buffer without writing to summary file
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
emptyBuffer() {
|
|
|
|
|
this._buffer = '';
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds raw text to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {string} text content to add
|
|
|
|
|
* @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false)
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addRaw(text, addEOL = false) {
|
|
|
|
|
this._buffer += text;
|
|
|
|
|
return addEOL ? this.addEOL() : this;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds the operating system-specific end-of-line marker to the buffer
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addEOL() {
|
|
|
|
|
return this.addRaw(os_1.EOL);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML codeblock to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {string} code content to render within fenced code block
|
|
|
|
|
* @param {string} lang (optional) language to syntax highlight code
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addCodeBlock(code, lang) {
|
|
|
|
|
const attrs = Object.assign({}, (lang && { lang }));
|
|
|
|
|
const element = this.wrap('pre', this.wrap('code', code), attrs);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML list to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {string[]} items list of items to render
|
|
|
|
|
* @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false)
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addList(items, ordered = false) {
|
|
|
|
|
const tag = ordered ? 'ol' : 'ul';
|
|
|
|
|
const listItems = items.map(item => this.wrap('li', item)).join('');
|
|
|
|
|
const element = this.wrap(tag, listItems);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML table to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {SummaryTableCell[]} rows table rows
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addTable(rows) {
|
|
|
|
|
const tableBody = rows
|
|
|
|
|
.map(row => {
|
|
|
|
|
const cells = row
|
|
|
|
|
.map(cell => {
|
|
|
|
|
if (typeof cell === 'string') {
|
|
|
|
|
return this.wrap('td', cell);
|
|
|
|
|
}
|
|
|
|
|
const { header, data, colspan, rowspan } = cell;
|
|
|
|
|
const tag = header ? 'th' : 'td';
|
|
|
|
|
const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan }));
|
|
|
|
|
return this.wrap(tag, data, attrs);
|
|
|
|
|
})
|
|
|
|
|
.join('');
|
|
|
|
|
return this.wrap('tr', cells);
|
|
|
|
|
})
|
|
|
|
|
.join('');
|
|
|
|
|
const element = this.wrap('table', tableBody);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds a collapsable HTML details element to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {string} label text for the closed state
|
|
|
|
|
* @param {string} content collapsable content
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addDetails(label, content) {
|
|
|
|
|
const element = this.wrap('details', this.wrap('summary', label) + content);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML image tag to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {string} src path to the image you to embed
|
|
|
|
|
* @param {string} alt text description of the image
|
|
|
|
|
* @param {SummaryImageOptions} options (optional) addition image attributes
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addImage(src, alt, options) {
|
|
|
|
|
const { width, height } = options || {};
|
|
|
|
|
const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height }));
|
|
|
|
|
const element = this.wrap('img', null, Object.assign({ src, alt }, attrs));
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML section heading element
|
|
|
|
|
*
|
|
|
|
|
* @param {string} text heading text
|
|
|
|
|
* @param {number | string} [level=1] (optional) the heading level, default: 1
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addHeading(text, level) {
|
|
|
|
|
const tag = `h${level}`;
|
|
|
|
|
const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)
|
|
|
|
|
? tag
|
|
|
|
|
: 'h1';
|
|
|
|
|
const element = this.wrap(allowedTag, text);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML thematic break (<hr>) to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addSeparator() {
|
|
|
|
|
const element = this.wrap('hr', null);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML line break (<br>) to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addBreak() {
|
|
|
|
|
const element = this.wrap('br', null);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML blockquote to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {string} text quote text
|
|
|
|
|
* @param {string} cite (optional) citation url
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addQuote(text, cite) {
|
|
|
|
|
const attrs = Object.assign({}, (cite && { cite }));
|
|
|
|
|
const element = this.wrap('blockquote', text, attrs);
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Adds an HTML anchor tag to the summary buffer
|
|
|
|
|
*
|
|
|
|
|
* @param {string} text link text/content
|
|
|
|
|
* @param {string} href hyperlink
|
|
|
|
|
*
|
|
|
|
|
* @returns {Summary} summary instance
|
|
|
|
|
*/
|
|
|
|
|
addLink(text, href) {
|
|
|
|
|
const element = this.wrap('a', text, { href });
|
|
|
|
|
return this.addRaw(element).addEOL();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const _summary = new Summary();
|
|
|
|
|
/**
|
|
|
|
|
* @deprecated use `core.summary`
|
|
|
|
|
*/
|
|
|
|
|
exports.markdownSummary = _summary;
|
|
|
|
|
exports.summary = _summary;
|
|
|
|
|
//# sourceMappingURL=summary.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 669:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
|
|
|
|
module.exports = require("util");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 672:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
@@ -15315,9 +16509,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
|
|
};
|
|
|
|
|
var _a;
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
const assert_1 = __webpack_require__(357);
|
|
|
|
|
const fs = __webpack_require__(747);
|
|
|
|
|
const path = __webpack_require__(622);
|
|
|
|
|
exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rename = exports.readlink = exports.readdir = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0;
|
|
|
|
|
const fs = __importStar(__webpack_require__(747));
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink;
|
|
|
|
|
exports.IS_WINDOWS = process.platform === 'win32';
|
|
|
|
|
function exists(fsPath) {
|
|
|
|
@@ -15358,49 +16552,6 @@ function isRooted(p) {
|
|
|
|
|
return p.startsWith('/');
|
|
|
|
|
}
|
|
|
|
|
exports.isRooted = isRooted;
|
|
|
|
|
/**
|
|
|
|
|
* Recursively create a directory at `fsPath`.
|
|
|
|
|
*
|
|
|
|
|
* This implementation is optimistic, meaning it attempts to create the full
|
|
|
|
|
* path first, and backs up the path stack from there.
|
|
|
|
|
*
|
|
|
|
|
* @param fsPath The path to create
|
|
|
|
|
* @param maxDepth The maximum recursion depth
|
|
|
|
|
* @param depth The current recursion depth
|
|
|
|
|
*/
|
|
|
|
|
function mkdirP(fsPath, maxDepth = 1000, depth = 1) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
assert_1.ok(fsPath, 'a path argument must be provided');
|
|
|
|
|
fsPath = path.resolve(fsPath);
|
|
|
|
|
if (depth >= maxDepth)
|
|
|
|
|
return exports.mkdir(fsPath);
|
|
|
|
|
try {
|
|
|
|
|
yield exports.mkdir(fsPath);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
switch (err.code) {
|
|
|
|
|
case 'ENOENT': {
|
|
|
|
|
yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1);
|
|
|
|
|
yield exports.mkdir(fsPath);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
let stats;
|
|
|
|
|
try {
|
|
|
|
|
stats = yield exports.stat(fsPath);
|
|
|
|
|
}
|
|
|
|
|
catch (err2) {
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
if (!stats.isDirectory())
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.mkdirP = mkdirP;
|
|
|
|
|
/**
|
|
|
|
|
* Best effort attempt to determine whether a file exists and is executable.
|
|
|
|
|
* @param filePath file path to check
|
|
|
|
@@ -15497,6 +16648,12 @@ function isUnixExecutable(stats) {
|
|
|
|
|
((stats.mode & 8) > 0 && stats.gid === process.getgid()) ||
|
|
|
|
|
((stats.mode & 64) > 0 && stats.uid === process.getuid()));
|
|
|
|
|
}
|
|
|
|
|
// Get the path of cmd.exe in windows
|
|
|
|
|
function getCmdPath() {
|
|
|
|
|
var _a;
|
|
|
|
|
return (_a = process.env['COMSPEC']) !== null && _a !== void 0 ? _a : `cmd.exe`;
|
|
|
|
|
}
|
|
|
|
|
exports.getCmdPath = getCmdPath;
|
|
|
|
|
//# sourceMappingURL=io-util.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
@@ -16003,66 +17160,86 @@ module.exports = Function.prototype.bind || implementation;
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 742:
|
|
|
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
var fs = __webpack_require__(747)
|
|
|
|
|
var core
|
|
|
|
|
if (process.platform === 'win32' || global.TESTING_WINDOWS) {
|
|
|
|
|
core = __webpack_require__(818)
|
|
|
|
|
} else {
|
|
|
|
|
core = __webpack_require__(197)
|
|
|
|
|
}
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
module.exports = isexe
|
|
|
|
|
isexe.sync = sync
|
|
|
|
|
|
|
|
|
|
function isexe (path, options, cb) {
|
|
|
|
|
if (typeof options === 'function') {
|
|
|
|
|
cb = options
|
|
|
|
|
options = {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!cb) {
|
|
|
|
|
if (typeof Promise !== 'function') {
|
|
|
|
|
throw new TypeError('callback not provided')
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.OidcClient = void 0;
|
|
|
|
|
const http_client_1 = __webpack_require__(993);
|
|
|
|
|
const auth_1 = __webpack_require__(363);
|
|
|
|
|
const core_1 = __webpack_require__(470);
|
|
|
|
|
class OidcClient {
|
|
|
|
|
static createHttpClient(allowRetry = true, maxRetry = 10) {
|
|
|
|
|
const requestOptions = {
|
|
|
|
|
allowRetries: allowRetry,
|
|
|
|
|
maxRetries: maxRetry
|
|
|
|
|
};
|
|
|
|
|
return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
|
|
isexe(path, options || {}, function (er, is) {
|
|
|
|
|
if (er) {
|
|
|
|
|
reject(er)
|
|
|
|
|
} else {
|
|
|
|
|
resolve(is)
|
|
|
|
|
static getRequestToken() {
|
|
|
|
|
const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN'];
|
|
|
|
|
if (!token) {
|
|
|
|
|
throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable');
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
core(path, options || {}, function (er, is) {
|
|
|
|
|
// ignore EACCES because that just means we aren't allowed to run it
|
|
|
|
|
if (er) {
|
|
|
|
|
if (er.code === 'EACCES' || options && options.ignoreErrors) {
|
|
|
|
|
er = null
|
|
|
|
|
is = false
|
|
|
|
|
}
|
|
|
|
|
return token;
|
|
|
|
|
}
|
|
|
|
|
cb(er, is)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function sync (path, options) {
|
|
|
|
|
// my kingdom for a filtered catch
|
|
|
|
|
try {
|
|
|
|
|
return core.sync(path, options || {})
|
|
|
|
|
} catch (er) {
|
|
|
|
|
if (options && options.ignoreErrors || er.code === 'EACCES') {
|
|
|
|
|
return false
|
|
|
|
|
} else {
|
|
|
|
|
throw er
|
|
|
|
|
static getIDTokenUrl() {
|
|
|
|
|
const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL'];
|
|
|
|
|
if (!runtimeUrl) {
|
|
|
|
|
throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable');
|
|
|
|
|
}
|
|
|
|
|
return runtimeUrl;
|
|
|
|
|
}
|
|
|
|
|
static getCall(id_token_url) {
|
|
|
|
|
var _a;
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const httpclient = OidcClient.createHttpClient();
|
|
|
|
|
const res = yield httpclient
|
|
|
|
|
.getJson(id_token_url)
|
|
|
|
|
.catch(error => {
|
|
|
|
|
throw new Error(`Failed to get ID Token. \n
|
|
|
|
|
Error Code : ${error.statusCode}\n
|
|
|
|
|
Error Message: ${error.result.message}`);
|
|
|
|
|
});
|
|
|
|
|
const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value;
|
|
|
|
|
if (!id_token) {
|
|
|
|
|
throw new Error('Response json body do not have ID Token field');
|
|
|
|
|
}
|
|
|
|
|
return id_token;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
static getIDToken(audience) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
try {
|
|
|
|
|
// New ID Token is requested from action service
|
|
|
|
|
let id_token_url = OidcClient.getIDTokenUrl();
|
|
|
|
|
if (audience) {
|
|
|
|
|
const encodedAudience = encodeURIComponent(audience);
|
|
|
|
|
id_token_url = `${id_token_url}&audience=${encodedAudience}`;
|
|
|
|
|
}
|
|
|
|
|
core_1.debug(`ID token url is ${id_token_url}`);
|
|
|
|
|
const id_token = yield OidcClient.getCall(id_token_url);
|
|
|
|
|
core_1.setSecret(id_token);
|
|
|
|
|
return id_token;
|
|
|
|
|
}
|
|
|
|
|
catch (error) {
|
|
|
|
|
throw new Error(`Error message: ${error.message}`);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exports.OidcClient = OidcClient;
|
|
|
|
|
//# sourceMappingURL=oidc-utils.js.map
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
@@ -16139,7 +17316,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
|
|
|
|
|
|
var endpoint = __webpack_require__(385);
|
|
|
|
|
var universalUserAgent = __webpack_require__(211);
|
|
|
|
|
var universalUserAgent = __webpack_require__(392);
|
|
|
|
|
var isPlainObject = _interopDefault(__webpack_require__(696));
|
|
|
|
|
var nodeFetch = _interopDefault(__webpack_require__(454));
|
|
|
|
|
var requestError = __webpack_require__(463);
|
|
|
|
@@ -16426,7 +17603,7 @@ var parseObject = function (chain, val, options, valuesParsed) {
|
|
|
|
|
) {
|
|
|
|
|
obj = [];
|
|
|
|
|
obj[index] = leaf;
|
|
|
|
|
} else {
|
|
|
|
|
} else if (cleanRoot !== '__proto__') {
|
|
|
|
|
obj[cleanRoot] = leaf;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -16825,6 +18002,13 @@ module.exports = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 794:
|
|
|
|
|
/***/ (function(module) {
|
|
|
|
|
|
|
|
|
|
module.exports = require("stream");
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 796:
|
|
|
|
@@ -16857,59 +18041,180 @@ exports.getUserAgent = getUserAgent;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 813:
|
|
|
|
|
/***/ (function(__unusedmodule, exports) {
|
|
|
|
|
/***/ 810:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
async function auth(token) {
|
|
|
|
|
const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth";
|
|
|
|
|
return {
|
|
|
|
|
type: "token",
|
|
|
|
|
token: token,
|
|
|
|
|
tokenType
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
var _rng = _interopRequireDefault(__webpack_require__(506));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Prefix token for usage in the Authorization header
|
|
|
|
|
*
|
|
|
|
|
* @param token OAuth token or JSON Web Token
|
|
|
|
|
*/
|
|
|
|
|
function withAuthorizationPrefix(token) {
|
|
|
|
|
if (token.split(/\./).length === 3) {
|
|
|
|
|
return `bearer ${token}`;
|
|
|
|
|
var _stringify = _interopRequireDefault(__webpack_require__(960));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
// **`v1()` - Generate time-based UUID**
|
|
|
|
|
//
|
|
|
|
|
// Inspired by https://github.com/LiosK/UUID.js
|
|
|
|
|
// and http://docs.python.org/library/uuid.html
|
|
|
|
|
let _nodeId;
|
|
|
|
|
|
|
|
|
|
let _clockseq; // Previous uuid creation time
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let _lastMSecs = 0;
|
|
|
|
|
let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details
|
|
|
|
|
|
|
|
|
|
function v1(options, buf, offset) {
|
|
|
|
|
let i = buf && offset || 0;
|
|
|
|
|
const b = buf || new Array(16);
|
|
|
|
|
options = options || {};
|
|
|
|
|
let node = options.node || _nodeId;
|
|
|
|
|
let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
|
|
|
|
|
// specified. We do this lazily to minimize issues related to insufficient
|
|
|
|
|
// system entropy. See #189
|
|
|
|
|
|
|
|
|
|
if (node == null || clockseq == null) {
|
|
|
|
|
const seedBytes = options.random || (options.rng || _rng.default)();
|
|
|
|
|
|
|
|
|
|
if (node == null) {
|
|
|
|
|
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
|
|
|
|
|
node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (clockseq == null) {
|
|
|
|
|
// Per 4.2.2, randomize (14 bit) clockseq
|
|
|
|
|
clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
|
|
|
|
|
}
|
|
|
|
|
} // UUID timestamps are 100 nano-second units since the Gregorian epoch,
|
|
|
|
|
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
|
|
|
|
|
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
|
|
|
|
|
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock
|
|
|
|
|
// cycle to simulate higher resolution clock
|
|
|
|
|
|
|
|
|
|
let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
|
|
|
|
|
|
|
|
|
|
const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
|
|
|
|
|
|
|
|
|
|
if (dt < 0 && options.clockseq === undefined) {
|
|
|
|
|
clockseq = clockseq + 1 & 0x3fff;
|
|
|
|
|
} // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
|
|
|
|
|
// time interval
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
|
|
|
|
|
nsecs = 0;
|
|
|
|
|
} // Per 4.2.1.2 Throw error if too many uuids are requested
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (nsecs >= 10000) {
|
|
|
|
|
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return `token ${token}`;
|
|
|
|
|
}
|
|
|
|
|
_lastMSecs = msecs;
|
|
|
|
|
_lastNSecs = nsecs;
|
|
|
|
|
_clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
|
|
|
|
|
|
|
|
|
async function hook(token, request, route, parameters) {
|
|
|
|
|
const endpoint = request.endpoint.merge(route, parameters);
|
|
|
|
|
endpoint.headers.authorization = withAuthorizationPrefix(token);
|
|
|
|
|
return request(endpoint);
|
|
|
|
|
}
|
|
|
|
|
msecs += 12219292800000; // `time_low`
|
|
|
|
|
|
|
|
|
|
const createTokenAuth = function createTokenAuth(token) {
|
|
|
|
|
if (!token) {
|
|
|
|
|
throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
|
|
|
|
|
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
|
|
|
|
|
b[i++] = tl >>> 24 & 0xff;
|
|
|
|
|
b[i++] = tl >>> 16 & 0xff;
|
|
|
|
|
b[i++] = tl >>> 8 & 0xff;
|
|
|
|
|
b[i++] = tl & 0xff; // `time_mid`
|
|
|
|
|
|
|
|
|
|
const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
|
|
|
|
|
b[i++] = tmh >>> 8 & 0xff;
|
|
|
|
|
b[i++] = tmh & 0xff; // `time_high_and_version`
|
|
|
|
|
|
|
|
|
|
b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
|
|
|
|
|
|
|
|
|
|
b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
|
|
|
|
|
|
|
|
|
|
b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`
|
|
|
|
|
|
|
|
|
|
b[i++] = clockseq & 0xff; // `node`
|
|
|
|
|
|
|
|
|
|
for (let n = 0; n < 6; ++n) {
|
|
|
|
|
b[i + n] = node[n];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (typeof token !== "string") {
|
|
|
|
|
throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
|
|
|
|
|
return buf || (0, _stringify.default)(b);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _default = v1;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 813:
|
|
|
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
var fs = __webpack_require__(747)
|
|
|
|
|
var core
|
|
|
|
|
if (process.platform === 'win32' || global.TESTING_WINDOWS) {
|
|
|
|
|
core = __webpack_require__(818)
|
|
|
|
|
} else {
|
|
|
|
|
core = __webpack_require__(197)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = isexe
|
|
|
|
|
isexe.sync = sync
|
|
|
|
|
|
|
|
|
|
function isexe (path, options, cb) {
|
|
|
|
|
if (typeof options === 'function') {
|
|
|
|
|
cb = options
|
|
|
|
|
options = {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
token = token.replace(/^(token|bearer) +/i, "");
|
|
|
|
|
return Object.assign(auth.bind(null, token), {
|
|
|
|
|
hook: hook.bind(null, token)
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
if (!cb) {
|
|
|
|
|
if (typeof Promise !== 'function') {
|
|
|
|
|
throw new TypeError('callback not provided')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exports.createTokenAuth = createTokenAuth;
|
|
|
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
|
|
isexe(path, options || {}, function (er, is) {
|
|
|
|
|
if (er) {
|
|
|
|
|
reject(er)
|
|
|
|
|
} else {
|
|
|
|
|
resolve(is)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
core(path, options || {}, function (er, is) {
|
|
|
|
|
// ignore EACCES because that just means we aren't allowed to run it
|
|
|
|
|
if (er) {
|
|
|
|
|
if (er.code === 'EACCES' || options && options.ignoreErrors) {
|
|
|
|
|
er = null
|
|
|
|
|
is = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
cb(er, is)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function sync (path, options) {
|
|
|
|
|
// my kingdom for a filtered catch
|
|
|
|
|
try {
|
|
|
|
|
return core.sync(path, options || {})
|
|
|
|
|
} catch (er) {
|
|
|
|
|
if (options && options.ignoreErrors || er.code === 'EACCES') {
|
|
|
|
|
return false
|
|
|
|
|
} else {
|
|
|
|
|
throw er
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
@@ -16926,7 +18231,7 @@ var isWindows = process.platform === 'win32' ||
|
|
|
|
|
|
|
|
|
|
var path = __webpack_require__(622)
|
|
|
|
|
var COLON = isWindows ? ';' : ':'
|
|
|
|
|
var isexe = __webpack_require__(742)
|
|
|
|
|
var isexe = __webpack_require__(813)
|
|
|
|
|
|
|
|
|
|
function getNotFoundError (cmd) {
|
|
|
|
|
var er = new Error('not found: ' + cmd)
|
|
|
|
@@ -17244,6 +18549,12 @@ function getInputs() {
|
|
|
|
|
(core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE';
|
|
|
|
|
// Workflow organization ID
|
|
|
|
|
result.workflowOrganizationId = yield workflowContextHelper.getOrganizationId();
|
|
|
|
|
// Set safe.directory in git global config.
|
|
|
|
|
result.setSafeDirectory =
|
|
|
|
|
(core.getInput('set-safe-directory') || 'true').toUpperCase() === 'TRUE';
|
|
|
|
|
// Determine the GitHub URL that the repository is being hosted from
|
|
|
|
|
result.githubServerUrl = core.getInput('github-server-url');
|
|
|
|
|
core.debug(`GitHub Host URL = ${result.githubServerUrl}`);
|
|
|
|
|
return result;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@@ -30516,6 +31827,273 @@ function paginationMethodsPlugin (octokit) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 853:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.cleanup = exports.getSource = void 0;
|
|
|
|
|
const core = __importStar(__webpack_require__(470));
|
|
|
|
|
const fsHelper = __importStar(__webpack_require__(618));
|
|
|
|
|
const gitAuthHelper = __importStar(__webpack_require__(287));
|
|
|
|
|
const gitCommandManager = __importStar(__webpack_require__(289));
|
|
|
|
|
const gitDirectoryHelper = __importStar(__webpack_require__(438));
|
|
|
|
|
const githubApiHelper = __importStar(__webpack_require__(464));
|
|
|
|
|
const io = __importStar(__webpack_require__(1));
|
|
|
|
|
const path = __importStar(__webpack_require__(622));
|
|
|
|
|
const refHelper = __importStar(__webpack_require__(227));
|
|
|
|
|
const stateHelper = __importStar(__webpack_require__(153));
|
|
|
|
|
const urlHelper = __importStar(__webpack_require__(81));
|
|
|
|
|
function getSource(settings) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Repository URL
|
|
|
|
|
core.info(`Syncing repository: ${settings.repositoryOwner}/${settings.repositoryName}`);
|
|
|
|
|
const repositoryUrl = urlHelper.getFetchUrl(settings);
|
|
|
|
|
// Remove conflicting file path
|
|
|
|
|
if (fsHelper.fileExistsSync(settings.repositoryPath)) {
|
|
|
|
|
yield io.rmRF(settings.repositoryPath);
|
|
|
|
|
}
|
|
|
|
|
// Create directory
|
|
|
|
|
let isExisting = true;
|
|
|
|
|
if (!fsHelper.directoryExistsSync(settings.repositoryPath)) {
|
|
|
|
|
isExisting = false;
|
|
|
|
|
yield io.mkdirP(settings.repositoryPath);
|
|
|
|
|
}
|
|
|
|
|
// Git command manager
|
|
|
|
|
core.startGroup('Getting Git version info');
|
|
|
|
|
const git = yield getGitCommandManager(settings);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
let authHelper = null;
|
|
|
|
|
try {
|
|
|
|
|
if (git) {
|
|
|
|
|
authHelper = gitAuthHelper.createAuthHelper(git, settings);
|
|
|
|
|
if (settings.setSafeDirectory) {
|
|
|
|
|
// Setup the repository path as a safe directory, so if we pass this into a container job with a different user it doesn't fail
|
|
|
|
|
// Otherwise all git commands we run in a container fail
|
|
|
|
|
yield authHelper.configureTempGlobalConfig();
|
|
|
|
|
core.info(`Adding repository directory to the temporary git global config as a safe directory`);
|
|
|
|
|
yield git
|
|
|
|
|
.config('safe.directory', settings.repositoryPath, true, true)
|
|
|
|
|
.catch(error => {
|
|
|
|
|
core.info(`Failed to initialize safe directory with error: ${error}`);
|
|
|
|
|
});
|
|
|
|
|
stateHelper.setSafeDirectory();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Prepare existing directory, otherwise recreate
|
|
|
|
|
if (isExisting) {
|
|
|
|
|
yield gitDirectoryHelper.prepareExistingDirectory(git, settings.repositoryPath, repositoryUrl, settings.clean, settings.ref);
|
|
|
|
|
}
|
|
|
|
|
if (!git) {
|
|
|
|
|
// Downloading using REST API
|
|
|
|
|
core.info(`The repository will be downloaded using the GitHub REST API`);
|
|
|
|
|
core.info(`To create a local Git repository instead, add Git ${gitCommandManager.MinimumGitVersion} or higher to the PATH`);
|
|
|
|
|
if (settings.submodules) {
|
|
|
|
|
throw new Error(`Input 'submodules' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${gitCommandManager.MinimumGitVersion} or higher to the PATH.`);
|
|
|
|
|
}
|
|
|
|
|
else if (settings.sshKey) {
|
|
|
|
|
throw new Error(`Input 'ssh-key' not supported when falling back to download using the GitHub REST API. To create a local Git repository instead, add Git ${gitCommandManager.MinimumGitVersion} or higher to the PATH.`);
|
|
|
|
|
}
|
|
|
|
|
yield githubApiHelper.downloadRepository(settings.authToken, settings.repositoryOwner, settings.repositoryName, settings.ref, settings.commit, settings.repositoryPath, settings.githubServerUrl);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// Save state for POST action
|
|
|
|
|
stateHelper.setRepositoryPath(settings.repositoryPath);
|
|
|
|
|
// Initialize the repository
|
|
|
|
|
if (!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))) {
|
|
|
|
|
core.startGroup('Initializing the repository');
|
|
|
|
|
yield git.init();
|
|
|
|
|
yield git.remoteAdd('origin', repositoryUrl);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
// Disable automatic garbage collection
|
|
|
|
|
core.startGroup('Disabling automatic garbage collection');
|
|
|
|
|
if (!(yield git.tryDisableAutomaticGarbageCollection())) {
|
|
|
|
|
core.warning(`Unable to turn off git automatic garbage collection. The git fetch operation may trigger garbage collection and cause a delay.`);
|
|
|
|
|
}
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// If we didn't initialize it above, do it now
|
|
|
|
|
if (!authHelper) {
|
|
|
|
|
authHelper = gitAuthHelper.createAuthHelper(git, settings);
|
|
|
|
|
}
|
|
|
|
|
// Configure auth
|
|
|
|
|
core.startGroup('Setting up auth');
|
|
|
|
|
yield authHelper.configureAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Determine the default branch
|
|
|
|
|
if (!settings.ref && !settings.commit) {
|
|
|
|
|
core.startGroup('Determining the default branch');
|
|
|
|
|
if (settings.sshKey) {
|
|
|
|
|
settings.ref = yield git.getDefaultBranch(repositoryUrl);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
settings.ref = yield githubApiHelper.getDefaultBranch(settings.authToken, settings.repositoryOwner, settings.repositoryName, settings.githubServerUrl);
|
|
|
|
|
}
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
// LFS install
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
yield git.lfsInstall();
|
|
|
|
|
}
|
|
|
|
|
// Fetch
|
|
|
|
|
core.startGroup('Fetching the repository');
|
|
|
|
|
if (settings.fetchDepth <= 0) {
|
|
|
|
|
// Fetch all branches and tags
|
|
|
|
|
let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(refSpec);
|
|
|
|
|
// When all history is fetched, the ref we're interested in may have moved to a different
|
|
|
|
|
// commit (push or force push). If so, fetch again with a targeted refspec.
|
|
|
|
|
if (!(yield refHelper.testRef(git, settings.ref, settings.commit))) {
|
|
|
|
|
refSpec = refHelper.getRefSpec(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(refSpec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
const refSpec = refHelper.getRefSpec(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(refSpec, settings.fetchDepth);
|
|
|
|
|
}
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Checkout info
|
|
|
|
|
core.startGroup('Determining the checkout info');
|
|
|
|
|
const checkoutInfo = yield refHelper.getCheckoutInfo(git, settings.ref, settings.commit);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// LFS fetch
|
|
|
|
|
// Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time).
|
|
|
|
|
// Explicit lfs fetch will fetch lfs objects in parallel.
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
core.startGroup('Fetching LFS objects');
|
|
|
|
|
yield git.lfsFetch(checkoutInfo.startPoint || checkoutInfo.ref);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
// Checkout
|
|
|
|
|
core.startGroup('Checking out the ref');
|
|
|
|
|
yield git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Submodules
|
|
|
|
|
if (settings.submodules) {
|
|
|
|
|
// Temporarily override global config
|
|
|
|
|
core.startGroup('Setting up auth for fetching submodules');
|
|
|
|
|
yield authHelper.configureGlobalAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Checkout submodules
|
|
|
|
|
core.startGroup('Fetching submodules');
|
|
|
|
|
yield git.submoduleSync(settings.nestedSubmodules);
|
|
|
|
|
yield git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
|
|
|
|
|
yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
|
|
|
|
|
core.endGroup();
|
|
|
|
|
// Persist credentials
|
|
|
|
|
if (settings.persistCredentials) {
|
|
|
|
|
core.startGroup('Persisting credentials for submodules');
|
|
|
|
|
yield authHelper.configureSubmoduleAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Get commit information
|
|
|
|
|
const commitInfo = yield git.log1();
|
|
|
|
|
// Log commit sha
|
|
|
|
|
yield git.log1("--format='%H'");
|
|
|
|
|
// Check for incorrect pull request merge commit
|
|
|
|
|
yield refHelper.checkCommitInfo(settings.authToken, commitInfo, settings.repositoryOwner, settings.repositoryName, settings.ref, settings.commit, settings.githubServerUrl);
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
// Remove auth
|
|
|
|
|
if (authHelper) {
|
|
|
|
|
if (!settings.persistCredentials) {
|
|
|
|
|
core.startGroup('Removing auth');
|
|
|
|
|
yield authHelper.removeAuth();
|
|
|
|
|
core.endGroup();
|
|
|
|
|
}
|
|
|
|
|
authHelper.removeGlobalConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.getSource = getSource;
|
|
|
|
|
function cleanup(repositoryPath) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Repo exists?
|
|
|
|
|
if (!repositoryPath ||
|
|
|
|
|
!fsHelper.fileExistsSync(path.join(repositoryPath, '.git', 'config'))) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
let git;
|
|
|
|
|
try {
|
|
|
|
|
git = yield gitCommandManager.createCommandManager(repositoryPath, false);
|
|
|
|
|
}
|
|
|
|
|
catch (_a) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// Remove auth
|
|
|
|
|
const authHelper = gitAuthHelper.createAuthHelper(git);
|
|
|
|
|
try {
|
|
|
|
|
if (stateHelper.PostSetSafeDirectory) {
|
|
|
|
|
// Setup the repository path as a safe directory, so if we pass this into a container job with a different user it doesn't fail
|
|
|
|
|
// Otherwise all git commands we run in a container fail
|
|
|
|
|
yield authHelper.configureTempGlobalConfig();
|
|
|
|
|
core.info(`Adding repository directory to the temporary git global config as a safe directory`);
|
|
|
|
|
yield git
|
|
|
|
|
.config('safe.directory', repositoryPath, true, true)
|
|
|
|
|
.catch(error => {
|
|
|
|
|
core.info(`Failed to initialize safe directory with error: ${error}`);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
yield authHelper.removeAuth();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
yield authHelper.removeGlobalConfig();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.cleanup = cleanup;
|
|
|
|
|
function getGitCommandManager(settings) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
core.info(`Working directory is '${settings.repositoryPath}'`);
|
|
|
|
|
try {
|
|
|
|
|
return yield gitCommandManager.createCommandManager(settings.repositoryPath, settings.lfs);
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
// Git is required for LFS
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
throw err;
|
|
|
|
|
}
|
|
|
|
|
// Otherwise fallback to REST API
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 854:
|
|
|
|
@@ -31470,14 +33048,6 @@ function registerPlugin(plugins, pluginFunction) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 856:
|
|
|
|
|
/***/ (function(module, __unusedexports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
module.exports = __webpack_require__(141);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 863:
|
|
|
|
@@ -31585,7 +33155,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
const url = __webpack_require__(835);
|
|
|
|
|
const http = __webpack_require__(605);
|
|
|
|
|
const https = __webpack_require__(34);
|
|
|
|
|
const https = __webpack_require__(211);
|
|
|
|
|
const util = __webpack_require__(729);
|
|
|
|
|
let fs;
|
|
|
|
|
let tunnel;
|
|
|
|
@@ -31980,7 +33550,7 @@ class HttpClient {
|
|
|
|
|
if (useProxy) {
|
|
|
|
|
// If using proxy, need tunnel
|
|
|
|
|
if (!tunnel) {
|
|
|
|
|
tunnel = __webpack_require__(856);
|
|
|
|
|
tunnel = __webpack_require__(413);
|
|
|
|
|
}
|
|
|
|
|
const agentOptions = {
|
|
|
|
|
maxSockets: maxSockets,
|
|
|
|
@@ -33165,6 +34735,7 @@ var arrayPrefixGenerators = {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var isArray = Array.isArray;
|
|
|
|
|
var split = String.prototype.split;
|
|
|
|
|
var push = Array.prototype.push;
|
|
|
|
|
var pushToArray = function (arr, valueOrArray) {
|
|
|
|
|
push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);
|
|
|
|
@@ -33201,10 +34772,13 @@ var isNonNullishPrimitive = function isNonNullishPrimitive(v) {
|
|
|
|
|
|| typeof v === 'bigint';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var sentinel = {};
|
|
|
|
|
|
|
|
|
|
var stringify = function stringify(
|
|
|
|
|
object,
|
|
|
|
|
prefix,
|
|
|
|
|
generateArrayPrefix,
|
|
|
|
|
commaRoundTrip,
|
|
|
|
|
strictNullHandling,
|
|
|
|
|
skipNulls,
|
|
|
|
|
encoder,
|
|
|
|
@@ -33220,8 +34794,23 @@ var stringify = function stringify(
|
|
|
|
|
) {
|
|
|
|
|
var obj = object;
|
|
|
|
|
|
|
|
|
|
if (sideChannel.has(object)) {
|
|
|
|
|
throw new RangeError('Cyclic object value');
|
|
|
|
|
var tmpSc = sideChannel;
|
|
|
|
|
var step = 0;
|
|
|
|
|
var findFlag = false;
|
|
|
|
|
while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {
|
|
|
|
|
// Where object last appeared in the ref tree
|
|
|
|
|
var pos = tmpSc.get(object);
|
|
|
|
|
step += 1;
|
|
|
|
|
if (typeof pos !== 'undefined') {
|
|
|
|
|
if (pos === step) {
|
|
|
|
|
throw new RangeError('Cyclic object value');
|
|
|
|
|
} else {
|
|
|
|
|
findFlag = true; // Break while
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (typeof tmpSc.get(sentinel) === 'undefined') {
|
|
|
|
|
step = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (typeof filter === 'function') {
|
|
|
|
@@ -33248,6 +34837,14 @@ var stringify = function stringify(
|
|
|
|
|
if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {
|
|
|
|
|
if (encoder) {
|
|
|
|
|
var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);
|
|
|
|
|
if (generateArrayPrefix === 'comma' && encodeValuesOnly) {
|
|
|
|
|
var valuesArray = split.call(String(obj), ',');
|
|
|
|
|
var valuesJoined = '';
|
|
|
|
|
for (var i = 0; i < valuesArray.length; ++i) {
|
|
|
|
|
valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format));
|
|
|
|
|
}
|
|
|
|
|
return [formatter(keyValue) + (commaRoundTrip && isArray(obj) && valuesArray.length === 1 ? '[]' : '') + '=' + valuesJoined];
|
|
|
|
|
}
|
|
|
|
|
return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];
|
|
|
|
|
}
|
|
|
|
|
return [formatter(prefix) + '=' + formatter(String(obj))];
|
|
|
|
@@ -33262,7 +34859,7 @@ var stringify = function stringify(
|
|
|
|
|
var objKeys;
|
|
|
|
|
if (generateArrayPrefix === 'comma' && isArray(obj)) {
|
|
|
|
|
// we need to join elements in
|
|
|
|
|
objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : undefined }];
|
|
|
|
|
objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];
|
|
|
|
|
} else if (isArray(filter)) {
|
|
|
|
|
objKeys = filter;
|
|
|
|
|
} else {
|
|
|
|
@@ -33270,24 +34867,28 @@ var stringify = function stringify(
|
|
|
|
|
objKeys = sort ? keys.sort(sort) : keys;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < objKeys.length; ++i) {
|
|
|
|
|
var key = objKeys[i];
|
|
|
|
|
var value = typeof key === 'object' && key.value !== undefined ? key.value : obj[key];
|
|
|
|
|
var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;
|
|
|
|
|
|
|
|
|
|
for (var j = 0; j < objKeys.length; ++j) {
|
|
|
|
|
var key = objKeys[j];
|
|
|
|
|
var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];
|
|
|
|
|
|
|
|
|
|
if (skipNulls && value === null) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var keyPrefix = isArray(obj)
|
|
|
|
|
? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix
|
|
|
|
|
: prefix + (allowDots ? '.' + key : '[' + key + ']');
|
|
|
|
|
? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix
|
|
|
|
|
: adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');
|
|
|
|
|
|
|
|
|
|
sideChannel.set(object, true);
|
|
|
|
|
sideChannel.set(object, step);
|
|
|
|
|
var valueSideChannel = getSideChannel();
|
|
|
|
|
valueSideChannel.set(sentinel, sideChannel);
|
|
|
|
|
pushToArray(values, stringify(
|
|
|
|
|
value,
|
|
|
|
|
keyPrefix,
|
|
|
|
|
generateArrayPrefix,
|
|
|
|
|
commaRoundTrip,
|
|
|
|
|
strictNullHandling,
|
|
|
|
|
skipNulls,
|
|
|
|
|
encoder,
|
|
|
|
@@ -33311,7 +34912,7 @@ var normalizeStringifyOptions = function normalizeStringifyOptions(opts) {
|
|
|
|
|
return defaults;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (opts.encoder !== null && opts.encoder !== undefined && typeof opts.encoder !== 'function') {
|
|
|
|
|
if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {
|
|
|
|
|
throw new TypeError('Encoder has to be a function.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -33384,6 +34985,10 @@ module.exports = function (object, opts) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];
|
|
|
|
|
if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {
|
|
|
|
|
throw new TypeError('`commaRoundTrip` must be a boolean, or absent');
|
|
|
|
|
}
|
|
|
|
|
var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;
|
|
|
|
|
|
|
|
|
|
if (!objKeys) {
|
|
|
|
|
objKeys = Object.keys(obj);
|
|
|
|
@@ -33404,6 +35009,7 @@ module.exports = function (object, opts) {
|
|
|
|
|
obj[key],
|
|
|
|
|
key,
|
|
|
|
|
generateArrayPrefix,
|
|
|
|
|
commaRoundTrip,
|
|
|
|
|
options.strictNullHandling,
|
|
|
|
|
options.skipNulls,
|
|
|
|
|
options.encode ? options.encoder : null,
|
|
|
|
@@ -35758,6 +37364,52 @@ module.exports.sync = (cmd, args, opts) => {
|
|
|
|
|
module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 960:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
|
value: true
|
|
|
|
|
});
|
|
|
|
|
exports.default = void 0;
|
|
|
|
|
|
|
|
|
|
var _validate = _interopRequireDefault(__webpack_require__(634));
|
|
|
|
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Convert array of 16 byte values to UUID string format of the form:
|
|
|
|
|
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
|
|
|
*/
|
|
|
|
|
const byteToHex = [];
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < 256; ++i) {
|
|
|
|
|
byteToHex.push((i + 0x100).toString(16).substr(1));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function stringify(arr, offset = 0) {
|
|
|
|
|
// Note: Be careful editing this code! It's been tuned for performance
|
|
|
|
|
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
|
|
|
const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
|
|
|
|
|
// of the following:
|
|
|
|
|
// - One or more input array values don't map to a hex octet (leading to
|
|
|
|
|
// "undefined" in the uuid)
|
|
|
|
|
// - Invalid input values for the RFC `version` or `variant` fields
|
|
|
|
|
|
|
|
|
|
if (!(0, _validate.default)(uuid)) {
|
|
|
|
|
throw TypeError('Stringified UUID is invalid');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return uuid;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _default = stringify;
|
|
|
|
|
exports.default = _default;
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 966:
|
|
|
|
@@ -35765,7 +37417,7 @@ module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd,
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
const {PassThrough} = __webpack_require__(413);
|
|
|
|
|
const {PassThrough} = __webpack_require__(794);
|
|
|
|
|
|
|
|
|
|
module.exports = options => {
|
|
|
|
|
options = Object.assign({}, options);
|
|
|
|
@@ -36179,6 +37831,618 @@ function authenticationRequestError(state, error, options) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
|
|
/***/ 993:
|
|
|
|
|
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
|
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
|
|
|
}) : (function(o, m, k, k2) {
|
|
|
|
|
if (k2 === undefined) k2 = k;
|
|
|
|
|
o[k2] = m[k];
|
|
|
|
|
}));
|
|
|
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
|
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
|
|
|
}) : function(o, v) {
|
|
|
|
|
o["default"] = v;
|
|
|
|
|
});
|
|
|
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
|
|
if (mod && mod.__esModule) return mod;
|
|
|
|
|
var result = {};
|
|
|
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
|
|
|
__setModuleDefault(result, mod);
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0;
|
|
|
|
|
const http = __importStar(__webpack_require__(605));
|
|
|
|
|
const https = __importStar(__webpack_require__(211));
|
|
|
|
|
const pm = __importStar(__webpack_require__(95));
|
|
|
|
|
const tunnel = __importStar(__webpack_require__(413));
|
|
|
|
|
var HttpCodes;
|
|
|
|
|
(function (HttpCodes) {
|
|
|
|
|
HttpCodes[HttpCodes["OK"] = 200] = "OK";
|
|
|
|
|
HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
|
|
|
|
|
HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
|
|
|
|
|
HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
|
|
|
|
|
HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
|
|
|
|
|
HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
|
|
|
|
|
HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
|
|
|
|
|
HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
|
|
|
|
|
HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
|
|
|
|
|
HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
|
|
|
|
|
HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
|
|
|
|
|
HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
|
|
|
|
|
HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
|
|
|
|
|
HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
|
|
|
|
|
HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
|
|
|
|
|
HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
|
|
|
|
|
HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
|
|
|
|
|
HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
|
|
|
|
|
HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
|
|
|
|
|
HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
|
|
|
|
|
HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
|
|
|
|
|
HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
|
|
|
|
|
HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
|
|
|
|
|
HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
|
|
|
|
|
HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
|
|
|
|
|
HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
|
|
|
|
|
HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
|
|
|
|
|
})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
|
|
|
|
|
var Headers;
|
|
|
|
|
(function (Headers) {
|
|
|
|
|
Headers["Accept"] = "accept";
|
|
|
|
|
Headers["ContentType"] = "content-type";
|
|
|
|
|
})(Headers = exports.Headers || (exports.Headers = {}));
|
|
|
|
|
var MediaTypes;
|
|
|
|
|
(function (MediaTypes) {
|
|
|
|
|
MediaTypes["ApplicationJson"] = "application/json";
|
|
|
|
|
})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
|
|
|
|
|
/**
|
|
|
|
|
* Returns the proxy URL, depending upon the supplied url and proxy environment variables.
|
|
|
|
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
|
|
|
|
*/
|
|
|
|
|
function getProxyUrl(serverUrl) {
|
|
|
|
|
const proxyUrl = pm.getProxyUrl(new URL(serverUrl));
|
|
|
|
|
return proxyUrl ? proxyUrl.href : '';
|
|
|
|
|
}
|
|
|
|
|
exports.getProxyUrl = getProxyUrl;
|
|
|
|
|
const HttpRedirectCodes = [
|
|
|
|
|
HttpCodes.MovedPermanently,
|
|
|
|
|
HttpCodes.ResourceMoved,
|
|
|
|
|
HttpCodes.SeeOther,
|
|
|
|
|
HttpCodes.TemporaryRedirect,
|
|
|
|
|
HttpCodes.PermanentRedirect
|
|
|
|
|
];
|
|
|
|
|
const HttpResponseRetryCodes = [
|
|
|
|
|
HttpCodes.BadGateway,
|
|
|
|
|
HttpCodes.ServiceUnavailable,
|
|
|
|
|
HttpCodes.GatewayTimeout
|
|
|
|
|
];
|
|
|
|
|
const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
|
|
|
|
|
const ExponentialBackoffCeiling = 10;
|
|
|
|
|
const ExponentialBackoffTimeSlice = 5;
|
|
|
|
|
class HttpClientError extends Error {
|
|
|
|
|
constructor(message, statusCode) {
|
|
|
|
|
super(message);
|
|
|
|
|
this.name = 'HttpClientError';
|
|
|
|
|
this.statusCode = statusCode;
|
|
|
|
|
Object.setPrototypeOf(this, HttpClientError.prototype);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
exports.HttpClientError = HttpClientError;
|
|
|
|
|
class HttpClientResponse {
|
|
|
|
|
constructor(message) {
|
|
|
|
|
this.message = message;
|
|
|
|
|
}
|
|
|
|
|
readBody() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
let output = Buffer.alloc(0);
|
|
|
|
|
this.message.on('data', (chunk) => {
|
|
|
|
|
output = Buffer.concat([output, chunk]);
|
|
|
|
|
});
|
|
|
|
|
this.message.on('end', () => {
|
|
|
|
|
resolve(output.toString());
|
|
|
|
|
});
|
|
|
|
|
}));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
exports.HttpClientResponse = HttpClientResponse;
|
|
|
|
|
function isHttps(requestUrl) {
|
|
|
|
|
const parsedUrl = new URL(requestUrl);
|
|
|
|
|
return parsedUrl.protocol === 'https:';
|
|
|
|
|
}
|
|
|
|
|
exports.isHttps = isHttps;
|
|
|
|
|
class HttpClient {
|
|
|
|
|
constructor(userAgent, handlers, requestOptions) {
|
|
|
|
|
this._ignoreSslError = false;
|
|
|
|
|
this._allowRedirects = true;
|
|
|
|
|
this._allowRedirectDowngrade = false;
|
|
|
|
|
this._maxRedirects = 50;
|
|
|
|
|
this._allowRetries = false;
|
|
|
|
|
this._maxRetries = 1;
|
|
|
|
|
this._keepAlive = false;
|
|
|
|
|
this._disposed = false;
|
|
|
|
|
this.userAgent = userAgent;
|
|
|
|
|
this.handlers = handlers || [];
|
|
|
|
|
this.requestOptions = requestOptions;
|
|
|
|
|
if (requestOptions) {
|
|
|
|
|
if (requestOptions.ignoreSslError != null) {
|
|
|
|
|
this._ignoreSslError = requestOptions.ignoreSslError;
|
|
|
|
|
}
|
|
|
|
|
this._socketTimeout = requestOptions.socketTimeout;
|
|
|
|
|
if (requestOptions.allowRedirects != null) {
|
|
|
|
|
this._allowRedirects = requestOptions.allowRedirects;
|
|
|
|
|
}
|
|
|
|
|
if (requestOptions.allowRedirectDowngrade != null) {
|
|
|
|
|
this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
|
|
|
|
|
}
|
|
|
|
|
if (requestOptions.maxRedirects != null) {
|
|
|
|
|
this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
|
|
|
|
|
}
|
|
|
|
|
if (requestOptions.keepAlive != null) {
|
|
|
|
|
this._keepAlive = requestOptions.keepAlive;
|
|
|
|
|
}
|
|
|
|
|
if (requestOptions.allowRetries != null) {
|
|
|
|
|
this._allowRetries = requestOptions.allowRetries;
|
|
|
|
|
}
|
|
|
|
|
if (requestOptions.maxRetries != null) {
|
|
|
|
|
this._maxRetries = requestOptions.maxRetries;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
options(requestUrl, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
get(requestUrl, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request('GET', requestUrl, null, additionalHeaders || {});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
del(requestUrl, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request('DELETE', requestUrl, null, additionalHeaders || {});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
post(requestUrl, data, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request('POST', requestUrl, data, additionalHeaders || {});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
patch(requestUrl, data, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request('PATCH', requestUrl, data, additionalHeaders || {});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
put(requestUrl, data, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request('PUT', requestUrl, data, additionalHeaders || {});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
head(requestUrl, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request('HEAD', requestUrl, null, additionalHeaders || {});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
sendStream(verb, requestUrl, stream, additionalHeaders) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return this.request(verb, requestUrl, stream, additionalHeaders);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Gets a typed object from an endpoint
|
|
|
|
|
* Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise
|
|
|
|
|
*/
|
|
|
|
|
getJson(requestUrl, additionalHeaders = {}) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
|
|
|
const res = yield this.get(requestUrl, additionalHeaders);
|
|
|
|
|
return this._processResponse(res, this.requestOptions);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
postJson(requestUrl, obj, additionalHeaders = {}) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const data = JSON.stringify(obj, null, 2);
|
|
|
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
|
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
|
|
|
const res = yield this.post(requestUrl, data, additionalHeaders);
|
|
|
|
|
return this._processResponse(res, this.requestOptions);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
putJson(requestUrl, obj, additionalHeaders = {}) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const data = JSON.stringify(obj, null, 2);
|
|
|
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
|
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
|
|
|
const res = yield this.put(requestUrl, data, additionalHeaders);
|
|
|
|
|
return this._processResponse(res, this.requestOptions);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
patchJson(requestUrl, obj, additionalHeaders = {}) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const data = JSON.stringify(obj, null, 2);
|
|
|
|
|
additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
|
|
|
|
|
additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
|
|
|
|
|
const res = yield this.patch(requestUrl, data, additionalHeaders);
|
|
|
|
|
return this._processResponse(res, this.requestOptions);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Makes a raw http request.
|
|
|
|
|
* All other methods such as get, post, patch, and request ultimately call this.
|
|
|
|
|
* Prefer get, del, post and patch
|
|
|
|
|
*/
|
|
|
|
|
request(verb, requestUrl, data, headers) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
if (this._disposed) {
|
|
|
|
|
throw new Error('Client has already been disposed.');
|
|
|
|
|
}
|
|
|
|
|
const parsedUrl = new URL(requestUrl);
|
|
|
|
|
let info = this._prepareRequest(verb, parsedUrl, headers);
|
|
|
|
|
// Only perform retries on reads since writes may not be idempotent.
|
|
|
|
|
const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb)
|
|
|
|
|
? this._maxRetries + 1
|
|
|
|
|
: 1;
|
|
|
|
|
let numTries = 0;
|
|
|
|
|
let response;
|
|
|
|
|
do {
|
|
|
|
|
response = yield this.requestRaw(info, data);
|
|
|
|
|
// Check if it's an authentication challenge
|
|
|
|
|
if (response &&
|
|
|
|
|
response.message &&
|
|
|
|
|
response.message.statusCode === HttpCodes.Unauthorized) {
|
|
|
|
|
let authenticationHandler;
|
|
|
|
|
for (const handler of this.handlers) {
|
|
|
|
|
if (handler.canHandleAuthentication(response)) {
|
|
|
|
|
authenticationHandler = handler;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (authenticationHandler) {
|
|
|
|
|
return authenticationHandler.handleAuthentication(this, info, data);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// We have received an unauthorized response but have no handlers to handle it.
|
|
|
|
|
// Let the response return to the caller.
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
let redirectsRemaining = this._maxRedirects;
|
|
|
|
|
while (response.message.statusCode &&
|
|
|
|
|
HttpRedirectCodes.includes(response.message.statusCode) &&
|
|
|
|
|
this._allowRedirects &&
|
|
|
|
|
redirectsRemaining > 0) {
|
|
|
|
|
const redirectUrl = response.message.headers['location'];
|
|
|
|
|
if (!redirectUrl) {
|
|
|
|
|
// if there's no location to redirect to, we won't
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
const parsedRedirectUrl = new URL(redirectUrl);
|
|
|
|
|
if (parsedUrl.protocol === 'https:' &&
|
|
|
|
|
parsedUrl.protocol !== parsedRedirectUrl.protocol &&
|
|
|
|
|
!this._allowRedirectDowngrade) {
|
|
|
|
|
throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
|
|
|
|
|
}
|
|
|
|
|
// we need to finish reading the response before reassigning response
|
|
|
|
|
// which will leak the open socket.
|
|
|
|
|
yield response.readBody();
|
|
|
|
|
// strip authorization header if redirected to a different hostname
|
|
|
|
|
if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
|
|
|
|
|
for (const header in headers) {
|
|
|
|
|
// header names are case insensitive
|
|
|
|
|
if (header.toLowerCase() === 'authorization') {
|
|
|
|
|
delete headers[header];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// let's make the request with the new redirectUrl
|
|
|
|
|
info = this._prepareRequest(verb, parsedRedirectUrl, headers);
|
|
|
|
|
response = yield this.requestRaw(info, data);
|
|
|
|
|
redirectsRemaining--;
|
|
|
|
|
}
|
|
|
|
|
if (!response.message.statusCode ||
|
|
|
|
|
!HttpResponseRetryCodes.includes(response.message.statusCode)) {
|
|
|
|
|
// If not a retry code, return immediately instead of retrying
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
numTries += 1;
|
|
|
|
|
if (numTries < maxTries) {
|
|
|
|
|
yield response.readBody();
|
|
|
|
|
yield this._performExponentialBackoff(numTries);
|
|
|
|
|
}
|
|
|
|
|
} while (numTries < maxTries);
|
|
|
|
|
return response;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Needs to be called if keepAlive is set to true in request options.
|
|
|
|
|
*/
|
|
|
|
|
dispose() {
|
|
|
|
|
if (this._agent) {
|
|
|
|
|
this._agent.destroy();
|
|
|
|
|
}
|
|
|
|
|
this._disposed = true;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Raw request.
|
|
|
|
|
* @param info
|
|
|
|
|
* @param data
|
|
|
|
|
*/
|
|
|
|
|
requestRaw(info, data) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
function callbackForResult(err, res) {
|
|
|
|
|
if (err) {
|
|
|
|
|
reject(err);
|
|
|
|
|
}
|
|
|
|
|
else if (!res) {
|
|
|
|
|
// If `err` is not passed, then `res` must be passed.
|
|
|
|
|
reject(new Error('Unknown error'));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
resolve(res);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.requestRawWithCallback(info, data, callbackForResult);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Raw request with callback.
|
|
|
|
|
* @param info
|
|
|
|
|
* @param data
|
|
|
|
|
* @param onResult
|
|
|
|
|
*/
|
|
|
|
|
requestRawWithCallback(info, data, onResult) {
|
|
|
|
|
if (typeof data === 'string') {
|
|
|
|
|
if (!info.options.headers) {
|
|
|
|
|
info.options.headers = {};
|
|
|
|
|
}
|
|
|
|
|
info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
|
|
|
|
|
}
|
|
|
|
|
let callbackCalled = false;
|
|
|
|
|
function handleResult(err, res) {
|
|
|
|
|
if (!callbackCalled) {
|
|
|
|
|
callbackCalled = true;
|
|
|
|
|
onResult(err, res);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const req = info.httpModule.request(info.options, (msg) => {
|
|
|
|
|
const res = new HttpClientResponse(msg);
|
|
|
|
|
handleResult(undefined, res);
|
|
|
|
|
});
|
|
|
|
|
let socket;
|
|
|
|
|
req.on('socket', sock => {
|
|
|
|
|
socket = sock;
|
|
|
|
|
});
|
|
|
|
|
// If we ever get disconnected, we want the socket to timeout eventually
|
|
|
|
|
req.setTimeout(this._socketTimeout || 3 * 60000, () => {
|
|
|
|
|
if (socket) {
|
|
|
|
|
socket.end();
|
|
|
|
|
}
|
|
|
|
|
handleResult(new Error(`Request timeout: ${info.options.path}`));
|
|
|
|
|
});
|
|
|
|
|
req.on('error', function (err) {
|
|
|
|
|
// err has statusCode property
|
|
|
|
|
// res should have headers
|
|
|
|
|
handleResult(err);
|
|
|
|
|
});
|
|
|
|
|
if (data && typeof data === 'string') {
|
|
|
|
|
req.write(data, 'utf8');
|
|
|
|
|
}
|
|
|
|
|
if (data && typeof data !== 'string') {
|
|
|
|
|
data.on('close', function () {
|
|
|
|
|
req.end();
|
|
|
|
|
});
|
|
|
|
|
data.pipe(req);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
req.end();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Gets an http agent. This function is useful when you need an http agent that handles
|
|
|
|
|
* routing through a proxy server - depending upon the url and proxy environment variables.
|
|
|
|
|
* @param serverUrl The server URL where the request will be sent. For example, https://api.github.com
|
|
|
|
|
*/
|
|
|
|
|
getAgent(serverUrl) {
|
|
|
|
|
const parsedUrl = new URL(serverUrl);
|
|
|
|
|
return this._getAgent(parsedUrl);
|
|
|
|
|
}
|
|
|
|
|
_prepareRequest(method, requestUrl, headers) {
|
|
|
|
|
const info = {};
|
|
|
|
|
info.parsedUrl = requestUrl;
|
|
|
|
|
const usingSsl = info.parsedUrl.protocol === 'https:';
|
|
|
|
|
info.httpModule = usingSsl ? https : http;
|
|
|
|
|
const defaultPort = usingSsl ? 443 : 80;
|
|
|
|
|
info.options = {};
|
|
|
|
|
info.options.host = info.parsedUrl.hostname;
|
|
|
|
|
info.options.port = info.parsedUrl.port
|
|
|
|
|
? parseInt(info.parsedUrl.port)
|
|
|
|
|
: defaultPort;
|
|
|
|
|
info.options.path =
|
|
|
|
|
(info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
|
|
|
|
|
info.options.method = method;
|
|
|
|
|
info.options.headers = this._mergeHeaders(headers);
|
|
|
|
|
if (this.userAgent != null) {
|
|
|
|
|
info.options.headers['user-agent'] = this.userAgent;
|
|
|
|
|
}
|
|
|
|
|
info.options.agent = this._getAgent(info.parsedUrl);
|
|
|
|
|
// gives handlers an opportunity to participate
|
|
|
|
|
if (this.handlers) {
|
|
|
|
|
for (const handler of this.handlers) {
|
|
|
|
|
handler.prepareRequest(info.options);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return info;
|
|
|
|
|
}
|
|
|
|
|
_mergeHeaders(headers) {
|
|
|
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
|
|
|
return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {}));
|
|
|
|
|
}
|
|
|
|
|
return lowercaseKeys(headers || {});
|
|
|
|
|
}
|
|
|
|
|
_getExistingOrDefaultHeader(additionalHeaders, header, _default) {
|
|
|
|
|
let clientHeader;
|
|
|
|
|
if (this.requestOptions && this.requestOptions.headers) {
|
|
|
|
|
clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
|
|
|
|
|
}
|
|
|
|
|
return additionalHeaders[header] || clientHeader || _default;
|
|
|
|
|
}
|
|
|
|
|
_getAgent(parsedUrl) {
|
|
|
|
|
let agent;
|
|
|
|
|
const proxyUrl = pm.getProxyUrl(parsedUrl);
|
|
|
|
|
const useProxy = proxyUrl && proxyUrl.hostname;
|
|
|
|
|
if (this._keepAlive && useProxy) {
|
|
|
|
|
agent = this._proxyAgent;
|
|
|
|
|
}
|
|
|
|
|
if (this._keepAlive && !useProxy) {
|
|
|
|
|
agent = this._agent;
|
|
|
|
|
}
|
|
|
|
|
// if agent is already assigned use that agent.
|
|
|
|
|
if (agent) {
|
|
|
|
|
return agent;
|
|
|
|
|
}
|
|
|
|
|
const usingSsl = parsedUrl.protocol === 'https:';
|
|
|
|
|
let maxSockets = 100;
|
|
|
|
|
if (this.requestOptions) {
|
|
|
|
|
maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
|
|
|
|
|
}
|
|
|
|
|
// This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis.
|
|
|
|
|
if (proxyUrl && proxyUrl.hostname) {
|
|
|
|
|
const agentOptions = {
|
|
|
|
|
maxSockets,
|
|
|
|
|
keepAlive: this._keepAlive,
|
|
|
|
|
proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && {
|
|
|
|
|
proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
|
|
|
|
|
})), { host: proxyUrl.hostname, port: proxyUrl.port })
|
|
|
|
|
};
|
|
|
|
|
let tunnelAgent;
|
|
|
|
|
const overHttps = proxyUrl.protocol === 'https:';
|
|
|
|
|
if (usingSsl) {
|
|
|
|
|
tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
|
|
|
|
|
}
|
|
|
|
|
agent = tunnelAgent(agentOptions);
|
|
|
|
|
this._proxyAgent = agent;
|
|
|
|
|
}
|
|
|
|
|
// if reusing agent across request and tunneling agent isn't assigned create a new agent
|
|
|
|
|
if (this._keepAlive && !agent) {
|
|
|
|
|
const options = { keepAlive: this._keepAlive, maxSockets };
|
|
|
|
|
agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
|
|
|
|
|
this._agent = agent;
|
|
|
|
|
}
|
|
|
|
|
// if not using private agent and tunnel agent isn't setup then use global agent
|
|
|
|
|
if (!agent) {
|
|
|
|
|
agent = usingSsl ? https.globalAgent : http.globalAgent;
|
|
|
|
|
}
|
|
|
|
|
if (usingSsl && this._ignoreSslError) {
|
|
|
|
|
// we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
|
|
|
|
|
// http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
|
|
|
|
|
// we have to cast it to any and change it directly
|
|
|
|
|
agent.options = Object.assign(agent.options || {}, {
|
|
|
|
|
rejectUnauthorized: false
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return agent;
|
|
|
|
|
}
|
|
|
|
|
_performExponentialBackoff(retryNumber) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
|
|
|
|
|
const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
|
|
|
|
|
return new Promise(resolve => setTimeout(() => resolve(), ms));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
_processResponse(res, options) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const statusCode = res.message.statusCode || 0;
|
|
|
|
|
const response = {
|
|
|
|
|
statusCode,
|
|
|
|
|
result: null,
|
|
|
|
|
headers: {}
|
|
|
|
|
};
|
|
|
|
|
// not found leads to null obj returned
|
|
|
|
|
if (statusCode === HttpCodes.NotFound) {
|
|
|
|
|
resolve(response);
|
|
|
|
|
}
|
|
|
|
|
// get the result from the body
|
|
|
|
|
function dateTimeDeserializer(key, value) {
|
|
|
|
|
if (typeof value === 'string') {
|
|
|
|
|
const a = new Date(value);
|
|
|
|
|
if (!isNaN(a.valueOf())) {
|
|
|
|
|
return a;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
let obj;
|
|
|
|
|
let contents;
|
|
|
|
|
try {
|
|
|
|
|
contents = yield res.readBody();
|
|
|
|
|
if (contents && contents.length > 0) {
|
|
|
|
|
if (options && options.deserializeDates) {
|
|
|
|
|
obj = JSON.parse(contents, dateTimeDeserializer);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
obj = JSON.parse(contents);
|
|
|
|
|
}
|
|
|
|
|
response.result = obj;
|
|
|
|
|
}
|
|
|
|
|
response.headers = res.message.headers;
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
// Invalid resource (contents not json); leaving result obj null
|
|
|
|
|
}
|
|
|
|
|
// note that 3xx redirects are handled by the http layer.
|
|
|
|
|
if (statusCode > 299) {
|
|
|
|
|
let msg;
|
|
|
|
|
// if exception/error in body, attempt to get better error
|
|
|
|
|
if (obj && obj.message) {
|
|
|
|
|
msg = obj.message;
|
|
|
|
|
}
|
|
|
|
|
else if (contents && contents.length > 0) {
|
|
|
|
|
// it may be the case that the exception is in the body message as string
|
|
|
|
|
msg = contents;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
msg = `Failed request: (${statusCode})`;
|
|
|
|
|
}
|
|
|
|
|
const err = new HttpClientError(msg, statusCode);
|
|
|
|
|
err.result = response.result;
|
|
|
|
|
reject(err);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
resolve(response);
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
exports.HttpClient = HttpClient;
|
|
|
|
|
const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
|
|
|
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
|
|
|
|
/***/ })
|
|
|
|
|
|
|
|
|
|
/******/ });
|