mirror of
https://github.com/actions/checkout.git
synced 2026-06-14 08:23:11 +07:00
38190 lines
1.3 MiB
38190 lines
1.3 MiB
/******/ (() => { // webpackBootstrap
|
||
/******/ var __webpack_modules__ = ({
|
||
|
||
/***/ 7219:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.directoryExistsSync = directoryExistsSync;
|
||
exports.existsSync = existsSync;
|
||
exports.fileExistsSync = fileExistsSync;
|
||
const fs = __importStar(__nccwpck_require__(7147));
|
||
function directoryExistsSync(path, required) {
|
||
var _a;
|
||
if (!path) {
|
||
throw new Error("Arg 'path' must not be empty");
|
||
}
|
||
let stats;
|
||
try {
|
||
stats = fs.statSync(path);
|
||
}
|
||
catch (error) {
|
||
if ((error === null || error === void 0 ? void 0 : error.code) === 'ENOENT') {
|
||
if (!required) {
|
||
return false;
|
||
}
|
||
throw new Error(`Directory '${path}' does not exist`);
|
||
}
|
||
throw new Error(`Encountered an error when checking whether path '${path}' exists: ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
|
||
}
|
||
if (stats.isDirectory()) {
|
||
return true;
|
||
}
|
||
else if (!required) {
|
||
return false;
|
||
}
|
||
throw new Error(`Directory '${path}' does not exist`);
|
||
}
|
||
function existsSync(path) {
|
||
var _a;
|
||
if (!path) {
|
||
throw new Error("Arg 'path' must not be empty");
|
||
}
|
||
try {
|
||
fs.statSync(path);
|
||
}
|
||
catch (error) {
|
||
if ((error === null || error === void 0 ? void 0 : error.code) === 'ENOENT') {
|
||
return false;
|
||
}
|
||
throw new Error(`Encountered an error when checking whether path '${path}' exists: ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
|
||
}
|
||
return true;
|
||
}
|
||
function fileExistsSync(path) {
|
||
var _a;
|
||
if (!path) {
|
||
throw new Error("Arg 'path' must not be empty");
|
||
}
|
||
let stats;
|
||
try {
|
||
stats = fs.statSync(path);
|
||
}
|
||
catch (error) {
|
||
if ((error === null || error === void 0 ? void 0 : error.code) === 'ENOENT') {
|
||
return false;
|
||
}
|
||
throw new Error(`Encountered an error when checking whether path '${path}' exists: ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
|
||
}
|
||
if (!stats.isDirectory()) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2565:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.createAuthHelper = createAuthHelper;
|
||
const assert = __importStar(__nccwpck_require__(9491));
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const exec = __importStar(__nccwpck_require__(1514));
|
||
const fs = __importStar(__nccwpck_require__(7147));
|
||
const io = __importStar(__nccwpck_require__(7436));
|
||
const os = __importStar(__nccwpck_require__(2037));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const regexpHelper = __importStar(__nccwpck_require__(3120));
|
||
const stateHelper = __importStar(__nccwpck_require__(4866));
|
||
const urlHelper = __importStar(__nccwpck_require__(9437));
|
||
const uuid_1 = __nccwpck_require__(5840);
|
||
const IS_WINDOWS = process.platform === 'win32';
|
||
const SSH_COMMAND_KEY = 'core.sshCommand';
|
||
function createAuthHelper(git, settings) {
|
||
return new GitAuthHelper(git, settings);
|
||
}
|
||
class GitAuthHelper {
|
||
constructor(gitCommandManager, gitSourceSettings) {
|
||
this.insteadOfValues = [];
|
||
this.sshCommand = '';
|
||
this.sshKeyPath = '';
|
||
this.sshKnownHostsPath = '';
|
||
this.temporaryHomePath = '';
|
||
this.git = gitCommandManager;
|
||
this.settings = gitSourceSettings || {};
|
||
// Token auth header
|
||
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);
|
||
this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`;
|
||
this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`;
|
||
// Instead of SSH URL
|
||
this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf`; // "origin" is SCHEME://HOSTNAME[:PORT]
|
||
this.insteadOfValues.push(`git@${serverUrl.hostname}:`);
|
||
if (this.settings.workflowOrganizationId) {
|
||
this.insteadOfValues.push(`org-${this.settings.workflowOrganizationId}@github.com:`);
|
||
}
|
||
}
|
||
configureAuth() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
// Remove possible previous values
|
||
yield this.removeAuth();
|
||
// Configure new values
|
||
yield this.configureSsh();
|
||
yield this.configureToken();
|
||
});
|
||
}
|
||
configureTempGlobalConfig() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a;
|
||
// 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');
|
||
const uniqueId = (0, uuid_1.v4)();
|
||
this.temporaryHomePath = path.join(runnerTemp, uniqueId);
|
||
yield fs.promises.mkdir(this.temporaryHomePath, { recursive: true });
|
||
// Copy the global git config
|
||
const gitConfigPath = path.join(process.env['HOME'] || os.homedir(), '.gitconfig');
|
||
const newGitConfigPath = path.join(this.temporaryHomePath, '.gitconfig');
|
||
let configExists = false;
|
||
try {
|
||
yield fs.promises.stat(gitConfigPath);
|
||
configExists = true;
|
||
}
|
||
catch (err) {
|
||
if ((err === null || err === void 0 ? void 0 : err.code) !== 'ENOENT') {
|
||
throw err;
|
||
}
|
||
}
|
||
if (configExists) {
|
||
core.info(`Copying '${gitConfigPath}' to '${newGitConfigPath}'`);
|
||
yield io.cp(gitConfigPath, newGitConfigPath);
|
||
}
|
||
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 {
|
||
// Configure the token
|
||
yield this.configureToken(newGitConfigPath, true);
|
||
// Configure HTTPS instead of SSH
|
||
yield this.git.tryConfigUnset(this.insteadOfKey, true);
|
||
if (!this.settings.sshKey) {
|
||
for (const insteadOfValue of this.insteadOfValues) {
|
||
yield this.git.config(this.insteadOfKey, insteadOfValue, true, true);
|
||
}
|
||
}
|
||
}
|
||
catch (err) {
|
||
// Unset in case somehow written to the real global config
|
||
core.info('Encountered an error when attempting to configure token. Attempting unconfigure.');
|
||
yield this.git.tryConfigUnset(this.tokenConfigKey, true);
|
||
throw err;
|
||
}
|
||
});
|
||
}
|
||
configureSubmoduleAuth() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
// Remove possible previous HTTPS instead of SSH
|
||
yield this.removeGitConfig(this.insteadOfKey, true);
|
||
if (this.settings.persistCredentials) {
|
||
// 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(
|
||
// 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) {
|
||
core.debug(`Replacing token placeholder in '${configPath}'`);
|
||
yield this.replaceTokenPlaceholder(configPath);
|
||
}
|
||
if (this.settings.sshKey) {
|
||
// Configure core.sshCommand
|
||
yield this.git.submoduleForeach(`git config --local '${SSH_COMMAND_KEY}' '${this.sshCommand}'`, this.settings.nestedSubmodules);
|
||
}
|
||
else {
|
||
// Configure HTTPS instead of SSH
|
||
for (const insteadOfValue of this.insteadOfValues) {
|
||
yield this.git.submoduleForeach(`git config --local --add '${this.insteadOfKey}' '${insteadOfValue}'`, this.settings.nestedSubmodules);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
removeAuth() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
yield this.removeSsh();
|
||
yield this.removeToken();
|
||
});
|
||
}
|
||
removeGlobalConfig() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a;
|
||
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() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
if (!this.settings.sshKey) {
|
||
return;
|
||
}
|
||
// Write key
|
||
const runnerTemp = process.env['RUNNER_TEMP'] || '';
|
||
assert.ok(runnerTemp, 'RUNNER_TEMP is not defined');
|
||
const uniqueId = (0, uuid_1.v4)();
|
||
this.sshKeyPath = path.join(runnerTemp, uniqueId);
|
||
stateHelper.setSshKeyPath(this.sshKeyPath);
|
||
yield fs.promises.mkdir(runnerTemp, { recursive: true });
|
||
yield fs.promises.writeFile(this.sshKeyPath, this.settings.sshKey.trim() + '\n', { mode: 0o600 });
|
||
// Remove inherited permissions on Windows
|
||
if (IS_WINDOWS) {
|
||
const icacls = yield io.which('icacls.exe');
|
||
yield exec.exec(`"${icacls}" "${this.sshKeyPath}" /grant:r "${process.env['USERDOMAIN']}\\${process.env['USERNAME']}:F"`);
|
||
yield exec.exec(`"${icacls}" "${this.sshKeyPath}" /inheritance:r`);
|
||
}
|
||
// Write known hosts
|
||
const userKnownHostsPath = path.join(os.homedir(), '.ssh', 'known_hosts');
|
||
let userKnownHosts = '';
|
||
try {
|
||
userKnownHosts = (yield fs.promises.readFile(userKnownHostsPath)).toString();
|
||
}
|
||
catch (err) {
|
||
if ((err === null || err === void 0 ? void 0 : err.code) !== 'ENOENT') {
|
||
throw err;
|
||
}
|
||
}
|
||
let knownHosts = '';
|
||
if (userKnownHosts) {
|
||
knownHosts += `# Begin from ${userKnownHostsPath}\n${userKnownHosts}\n# End from ${userKnownHostsPath}\n`;
|
||
}
|
||
if (this.settings.sshKnownHosts) {
|
||
knownHosts += `# Begin from input known hosts\n${this.settings.sshKnownHosts}\n# end from input known hosts\n`;
|
||
}
|
||
knownHosts += `# Begin implicitly added github.com\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=\n# End implicitly added github.com\n`;
|
||
this.sshKnownHostsPath = path.join(runnerTemp, `${uniqueId}_known_hosts`);
|
||
stateHelper.setSshKnownHostsPath(this.sshKnownHostsPath);
|
||
yield fs.promises.writeFile(this.sshKnownHostsPath, knownHosts);
|
||
// Configure GIT_SSH_COMMAND
|
||
const sshPath = yield io.which('ssh', true);
|
||
this.sshCommand = `"${sshPath}" -i "$RUNNER_TEMP/${path.basename(this.sshKeyPath)}"`;
|
||
if (this.settings.sshStrict) {
|
||
this.sshCommand += ' -o StrictHostKeyChecking=yes -o CheckHostIP=no';
|
||
}
|
||
this.sshCommand += ` -o "UserKnownHostsFile=$RUNNER_TEMP/${path.basename(this.sshKnownHostsPath)}"`;
|
||
core.info(`Temporarily overriding GIT_SSH_COMMAND=${this.sshCommand}`);
|
||
this.git.setEnvironmentVariable('GIT_SSH_COMMAND', this.sshCommand);
|
||
// Configure core.sshCommand
|
||
if (this.settings.persistCredentials) {
|
||
yield this.git.config(SSH_COMMAND_KEY, this.sshCommand);
|
||
}
|
||
});
|
||
}
|
||
configureToken(configPath, globalConfig) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
// Validate args
|
||
assert.ok((configPath && globalConfig) || (!configPath && !globalConfig), 'Unexpected configureToken parameter combinations');
|
||
// Default config path
|
||
if (!configPath && !globalConfig) {
|
||
configPath = path.join(this.git.getWorkingDirectory(), '.git', 'config');
|
||
}
|
||
// 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
|
||
yield this.git.config(this.tokenConfigKey, this.tokenPlaceholderConfigValue, globalConfig);
|
||
// Replace the placeholder
|
||
yield this.replaceTokenPlaceholder(configPath || '');
|
||
});
|
||
}
|
||
replaceTokenPlaceholder(configPath) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
assert.ok(configPath, 'configPath is not defined');
|
||
let content = (yield fs.promises.readFile(configPath)).toString();
|
||
const placeholderIndex = content.indexOf(this.tokenPlaceholderConfigValue);
|
||
if (placeholderIndex < 0 ||
|
||
placeholderIndex != content.lastIndexOf(this.tokenPlaceholderConfigValue)) {
|
||
throw new Error(`Unable to replace auth placeholder in ${configPath}`);
|
||
}
|
||
assert.ok(this.tokenConfigValue, 'tokenConfigValue is not defined');
|
||
content = content.replace(this.tokenPlaceholderConfigValue, this.tokenConfigValue);
|
||
yield fs.promises.writeFile(configPath, content);
|
||
});
|
||
}
|
||
removeSsh() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a;
|
||
// SSH key
|
||
const keyPath = this.sshKeyPath || stateHelper.SshKeyPath;
|
||
if (keyPath) {
|
||
try {
|
||
yield io.rmRF(keyPath);
|
||
}
|
||
catch (err) {
|
||
core.debug(`${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
|
||
core.warning(`Failed to remove SSH key '${keyPath}'`);
|
||
}
|
||
}
|
||
// SSH known hosts
|
||
const knownHostsPath = this.sshKnownHostsPath || stateHelper.SshKnownHostsPath;
|
||
if (knownHostsPath) {
|
||
try {
|
||
yield io.rmRF(knownHostsPath);
|
||
}
|
||
catch (_b) {
|
||
// Intentionally empty
|
||
}
|
||
}
|
||
// SSH command
|
||
yield this.removeGitConfig(SSH_COMMAND_KEY);
|
||
});
|
||
}
|
||
removeToken() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
// HTTP extra header
|
||
yield this.removeGitConfig(this.tokenConfigKey);
|
||
});
|
||
}
|
||
removeGitConfig(configKey_1) {
|
||
return __awaiter(this, arguments, void 0, function* (configKey, submoduleOnly = false) {
|
||
if (!submoduleOnly) {
|
||
if ((yield this.git.configExists(configKey)) &&
|
||
!(yield this.git.tryConfigUnset(configKey))) {
|
||
// Load the config contents
|
||
core.warning(`Failed to remove '${configKey}' from the git config`);
|
||
}
|
||
}
|
||
const pattern = regexpHelper.escape(configKey);
|
||
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);
|
||
});
|
||
}
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 738:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.MinimumGitSparseCheckoutVersion = exports.MinimumGitVersion = void 0;
|
||
exports.createCommandManager = createCommandManager;
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const exec = __importStar(__nccwpck_require__(1514));
|
||
const fs = __importStar(__nccwpck_require__(7147));
|
||
const fshelper = __importStar(__nccwpck_require__(7219));
|
||
const io = __importStar(__nccwpck_require__(7436));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const refHelper = __importStar(__nccwpck_require__(8601));
|
||
const regexpHelper = __importStar(__nccwpck_require__(3120));
|
||
const retryHelper = __importStar(__nccwpck_require__(2155));
|
||
const git_version_1 = __nccwpck_require__(3142);
|
||
// Auth header not supported before 2.9
|
||
// Wire protocol v2 not supported before 2.18
|
||
// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386)
|
||
exports.MinimumGitVersion = new git_version_1.GitVersion('2.18');
|
||
exports.MinimumGitSparseCheckoutVersion = new git_version_1.GitVersion('2.28');
|
||
function createCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
return yield GitCommandManager.createCommandManager(workingDirectory, lfs, doSparseCheckout);
|
||
});
|
||
}
|
||
class GitCommandManager {
|
||
// Private constructor; use createCommandManager()
|
||
constructor() {
|
||
this.gitEnv = {
|
||
GIT_TERMINAL_PROMPT: '0', // Disable git prompt
|
||
GCM_INTERACTIVE: 'Never' // Disable prompting for git credential manager
|
||
};
|
||
this.gitPath = '';
|
||
this.lfs = false;
|
||
this.doSparseCheckout = false;
|
||
this.workingDirectory = '';
|
||
this.gitVersion = new git_version_1.GitVersion();
|
||
}
|
||
branchDelete(remote, branch) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['branch', '--delete', '--force'];
|
||
if (remote) {
|
||
args.push('--remote');
|
||
}
|
||
args.push(branch);
|
||
yield this.execGit(args);
|
||
});
|
||
}
|
||
branchExists(remote, pattern) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['branch', '--list'];
|
||
if (remote) {
|
||
args.push('--remote');
|
||
}
|
||
args.push(pattern);
|
||
const output = yield this.execGit(args);
|
||
return !!output.stdout.trim();
|
||
});
|
||
}
|
||
branchList(remote) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
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.
|
||
// 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');
|
||
}
|
||
else {
|
||
args.push('--branches');
|
||
}
|
||
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;
|
||
});
|
||
}
|
||
disableSparseCheckout() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
yield this.execGit(['sparse-checkout', 'disable']);
|
||
// Disabling 'sparse-checkout` leaves behind an undesirable side-effect in config (even in a pristine environment).
|
||
yield this.tryConfigUnset('extensions.worktreeConfig', false);
|
||
});
|
||
}
|
||
sparseCheckout(sparseCheckout) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
yield this.execGit(['sparse-checkout', 'set', ...sparseCheckout]);
|
||
});
|
||
}
|
||
sparseCheckoutNonConeMode(sparseCheckout) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
yield this.execGit(['config', 'core.sparseCheckout', 'true']);
|
||
const output = yield this.execGit([
|
||
'rev-parse',
|
||
'--git-path',
|
||
'info/sparse-checkout'
|
||
]);
|
||
const sparseCheckoutPath = path.join(this.workingDirectory, output.stdout.trimRight());
|
||
yield fs.promises.appendFile(sparseCheckoutPath, `\n${sparseCheckout.join('\n')}\n`);
|
||
});
|
||
}
|
||
checkout(ref, startPoint) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['checkout', '--progress', '--force'];
|
||
if (startPoint) {
|
||
args.push('-B', ref, startPoint);
|
||
}
|
||
else {
|
||
args.push(ref);
|
||
}
|
||
yield this.execGit(args);
|
||
});
|
||
}
|
||
checkoutDetach() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['checkout', '--detach'];
|
||
yield this.execGit(args);
|
||
});
|
||
}
|
||
config(configKey, configValue, globalConfig, add) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['config', globalConfig ? '--global' : '--local'];
|
||
if (add) {
|
||
args.push('--add');
|
||
}
|
||
args.push(...[configKey, configValue]);
|
||
yield this.execGit(args);
|
||
});
|
||
}
|
||
configExists(configKey, globalConfig) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const pattern = regexpHelper.escape(configKey);
|
||
const output = yield this.execGit([
|
||
'config',
|
||
globalConfig ? '--global' : '--local',
|
||
'--name-only',
|
||
'--get-regexp',
|
||
pattern
|
||
], true);
|
||
return output.exitCode === 0;
|
||
});
|
||
}
|
||
fetch(refSpec, options) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['-c', 'protocol.version=2', 'fetch'];
|
||
if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !options.fetchTags) {
|
||
args.push('--no-tags');
|
||
}
|
||
args.push('--prune', '--no-recurse-submodules');
|
||
if (options.showProgress) {
|
||
args.push('--progress');
|
||
}
|
||
if (options.filter) {
|
||
args.push(`--filter=${options.filter}`);
|
||
}
|
||
if (options.fetchDepth && options.fetchDepth > 0) {
|
||
args.push(`--depth=${options.fetchDepth}`);
|
||
}
|
||
else if (fshelper.fileExistsSync(path.join(this.workingDirectory, '.git', 'shallow'))) {
|
||
args.push('--unshallow');
|
||
}
|
||
args.push('origin');
|
||
for (const arg of refSpec) {
|
||
args.push(arg);
|
||
}
|
||
const that = this;
|
||
yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
|
||
yield that.execGit(args);
|
||
}));
|
||
});
|
||
}
|
||
getDefaultBranch(repositoryUrl) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
let output;
|
||
yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
|
||
output = yield this.execGit([
|
||
'ls-remote',
|
||
'--quiet',
|
||
'--exit-code',
|
||
'--symref',
|
||
repositoryUrl,
|
||
'HEAD'
|
||
]);
|
||
}));
|
||
if (output) {
|
||
// Satisfy compiler, will always be set
|
||
for (let line of output.stdout.trim().split('\n')) {
|
||
line = line.trim();
|
||
if (line.startsWith('ref:') || line.endsWith('HEAD')) {
|
||
return line
|
||
.substr('ref:'.length, line.length - 'ref:'.length - 'HEAD'.length)
|
||
.trim();
|
||
}
|
||
}
|
||
}
|
||
throw new Error('Unexpected output when retrieving default branch');
|
||
});
|
||
}
|
||
getWorkingDirectory() {
|
||
return this.workingDirectory;
|
||
}
|
||
init() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
yield this.execGit(['init', this.workingDirectory]);
|
||
});
|
||
}
|
||
isDetached() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
// Note, "branch --show-current" would be simpler but isn't available until Git 2.22
|
||
const output = yield this.execGit(['rev-parse', '--symbolic-full-name', '--verify', '--quiet', 'HEAD'], true);
|
||
return !output.stdout.trim().startsWith('refs/heads/');
|
||
});
|
||
}
|
||
lfsFetch(ref) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['lfs', 'fetch', 'origin', ref];
|
||
const that = this;
|
||
yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
|
||
yield that.execGit(args);
|
||
}));
|
||
});
|
||
}
|
||
lfsInstall() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
yield this.execGit(['lfs', 'install', '--local']);
|
||
});
|
||
}
|
||
log1(format) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = format ? ['log', '-1', format] : ['log', '-1'];
|
||
const silent = format ? false : true;
|
||
const output = yield this.execGit(args, false, silent);
|
||
return output.stdout;
|
||
});
|
||
}
|
||
remoteAdd(remoteName, remoteUrl) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
yield this.execGit(['remote', 'add', remoteName, remoteUrl]);
|
||
});
|
||
}
|
||
removeEnvironmentVariable(name) {
|
||
delete this.gitEnv[name];
|
||
}
|
||
/**
|
||
* Resolves a ref to a SHA. For a branch or lightweight tag, the commit SHA is returned.
|
||
* For an annotated tag, the tag SHA is returned.
|
||
* @param {string} ref For example: 'refs/heads/main' or '/refs/tags/v1'
|
||
* @returns {Promise<string>}
|
||
*/
|
||
revParse(ref) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit(['rev-parse', ref]);
|
||
return output.stdout.trim();
|
||
});
|
||
}
|
||
setEnvironmentVariable(name, value) {
|
||
this.gitEnv[name] = value;
|
||
}
|
||
shaExists(sha) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['rev-parse', '--verify', '--quiet', `${sha}^{object}`];
|
||
const output = yield this.execGit(args, true);
|
||
return output.exitCode === 0;
|
||
});
|
||
}
|
||
submoduleForeach(command, recursive) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['submodule', 'foreach'];
|
||
if (recursive) {
|
||
args.push('--recursive');
|
||
}
|
||
args.push(command);
|
||
const output = yield this.execGit(args);
|
||
return output.stdout;
|
||
});
|
||
}
|
||
submoduleSync(recursive) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['submodule', 'sync'];
|
||
if (recursive) {
|
||
args.push('--recursive');
|
||
}
|
||
yield this.execGit(args);
|
||
});
|
||
}
|
||
submoduleUpdate(fetchDepth, recursive) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const args = ['-c', 'protocol.version=2'];
|
||
args.push('submodule', 'update', '--init', '--force');
|
||
if (fetchDepth > 0) {
|
||
args.push(`--depth=${fetchDepth}`);
|
||
}
|
||
if (recursive) {
|
||
args.push('--recursive');
|
||
}
|
||
yield this.execGit(args);
|
||
});
|
||
}
|
||
submoduleStatus() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit(['submodule', 'status'], true);
|
||
core.debug(output.stdout);
|
||
return output.exitCode === 0;
|
||
});
|
||
}
|
||
tagExists(pattern) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit(['tag', '--list', pattern]);
|
||
return !!output.stdout.trim();
|
||
});
|
||
}
|
||
tryClean() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit(['clean', '-ffdx'], true);
|
||
return output.exitCode === 0;
|
||
});
|
||
}
|
||
tryConfigUnset(configKey, globalConfig) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit([
|
||
'config',
|
||
globalConfig ? '--global' : '--local',
|
||
'--unset-all',
|
||
configKey
|
||
], true);
|
||
return output.exitCode === 0;
|
||
});
|
||
}
|
||
tryDisableAutomaticGarbageCollection() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit(['config', '--local', 'gc.auto', '0'], true);
|
||
return output.exitCode === 0;
|
||
});
|
||
}
|
||
tryGetFetchUrl() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit(['config', '--local', '--get', 'remote.origin.url'], true);
|
||
if (output.exitCode !== 0) {
|
||
return '';
|
||
}
|
||
const stdout = output.stdout.trim();
|
||
if (stdout.includes('\n')) {
|
||
return '';
|
||
}
|
||
return stdout;
|
||
});
|
||
}
|
||
tryReset() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const output = yield this.execGit(['reset', '--hard', 'HEAD'], true);
|
||
return output.exitCode === 0;
|
||
});
|
||
}
|
||
version() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
return this.gitVersion;
|
||
});
|
||
}
|
||
static createCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const result = new GitCommandManager();
|
||
yield result.initializeCommandManager(workingDirectory, lfs, doSparseCheckout);
|
||
return result;
|
||
});
|
||
}
|
||
execGit(args_1) {
|
||
return __awaiter(this, arguments, void 0, function* (args, allowAllExitCodes = false, silent = false, customListeners = {}) {
|
||
fshelper.directoryExistsSync(this.workingDirectory, true);
|
||
const result = new GitOutput();
|
||
const env = {};
|
||
for (const key of Object.keys(process.env)) {
|
||
env[key] = process.env[key];
|
||
}
|
||
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: 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;
|
||
});
|
||
}
|
||
initializeCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
this.workingDirectory = workingDirectory;
|
||
// Git-lfs will try to pull down assets if any of the local/user/system setting exist.
|
||
// If the user didn't enable `LFS` in their pipeline definition, disable LFS fetch/checkout.
|
||
this.lfs = lfs;
|
||
if (!this.lfs) {
|
||
this.gitEnv['GIT_LFS_SKIP_SMUDGE'] = '1';
|
||
}
|
||
this.gitPath = yield io.which('git', true);
|
||
// Git version
|
||
core.debug('Getting git version');
|
||
this.gitVersion = new git_version_1.GitVersion();
|
||
let gitOutput = yield this.execGit(['version']);
|
||
let stdout = gitOutput.stdout.trim();
|
||
if (!stdout.includes('\n')) {
|
||
const match = stdout.match(/\d+\.\d+(\.\d+)?/);
|
||
if (match) {
|
||
this.gitVersion = new git_version_1.GitVersion(match[0]);
|
||
}
|
||
}
|
||
if (!this.gitVersion.isValid()) {
|
||
throw new Error('Unable to determine git version');
|
||
}
|
||
// Minimum git version
|
||
if (!this.gitVersion.checkMinimum(exports.MinimumGitVersion)) {
|
||
throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
|
||
}
|
||
if (this.lfs) {
|
||
// Git-lfs version
|
||
core.debug('Getting git-lfs version');
|
||
let gitLfsVersion = new git_version_1.GitVersion();
|
||
const gitLfsPath = yield io.which('git-lfs', true);
|
||
gitOutput = yield this.execGit(['lfs', 'version']);
|
||
stdout = gitOutput.stdout.trim();
|
||
if (!stdout.includes('\n')) {
|
||
const match = stdout.match(/\d+\.\d+(\.\d+)?/);
|
||
if (match) {
|
||
gitLfsVersion = new git_version_1.GitVersion(match[0]);
|
||
}
|
||
}
|
||
if (!gitLfsVersion.isValid()) {
|
||
throw new Error('Unable to determine git-lfs version');
|
||
}
|
||
// Minimum git-lfs version
|
||
// Note:
|
||
// - Auth header not supported before 2.1
|
||
const minimumGitLfsVersion = new git_version_1.GitVersion('2.1');
|
||
if (!gitLfsVersion.checkMinimum(minimumGitLfsVersion)) {
|
||
throw new Error(`Minimum required git-lfs version is ${minimumGitLfsVersion}. Your git-lfs ('${gitLfsPath}') is ${gitLfsVersion}`);
|
||
}
|
||
}
|
||
this.doSparseCheckout = doSparseCheckout;
|
||
if (this.doSparseCheckout) {
|
||
if (!this.gitVersion.checkMinimum(exports.MinimumGitSparseCheckoutVersion)) {
|
||
throw new Error(`Minimum Git version required for sparse checkout is ${exports.MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
|
||
}
|
||
}
|
||
// Set the user agent
|
||
const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
|
||
core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
|
||
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent;
|
||
});
|
||
}
|
||
}
|
||
class GitOutput {
|
||
constructor() {
|
||
this.stdout = '';
|
||
this.exitCode = 0;
|
||
}
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 8609:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.prepareExistingDirectory = prepareExistingDirectory;
|
||
const assert = __importStar(__nccwpck_require__(9491));
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const fs = __importStar(__nccwpck_require__(7147));
|
||
const fsHelper = __importStar(__nccwpck_require__(7219));
|
||
const io = __importStar(__nccwpck_require__(7436));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
function prepareExistingDirectory(git, repositoryPath, repositoryUrl, clean, ref) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a;
|
||
assert.ok(repositoryPath, 'Expected repositoryPath to be defined');
|
||
assert.ok(repositoryUrl, 'Expected repositoryUrl to be defined');
|
||
// Indicates whether to delete the directory contents
|
||
let remove = false;
|
||
// Check whether using git or REST API
|
||
if (!git) {
|
||
remove = true;
|
||
}
|
||
// Fetch URL does not match
|
||
else if (!fsHelper.directoryExistsSync(path.join(repositoryPath, '.git')) ||
|
||
repositoryUrl !== (yield git.tryGetFetchUrl())) {
|
||
remove = true;
|
||
}
|
||
else {
|
||
// Delete any index.lock and shallow.lock left by a previously canceled run or crashed git process
|
||
const lockPaths = [
|
||
path.join(repositoryPath, '.git', 'index.lock'),
|
||
path.join(repositoryPath, '.git', 'shallow.lock')
|
||
];
|
||
for (const lockPath of lockPaths) {
|
||
try {
|
||
yield io.rmRF(lockPath);
|
||
}
|
||
catch (error) {
|
||
core.debug(`Unable to delete '${lockPath}'. ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
|
||
}
|
||
}
|
||
try {
|
||
core.startGroup('Removing previously created refs, to avoid conflicts');
|
||
// Checkout detached HEAD
|
||
if (!(yield git.isDetached())) {
|
||
yield git.checkoutDetach();
|
||
}
|
||
// Remove all refs/heads/*
|
||
let branches = yield git.branchList(false);
|
||
for (const branch of branches) {
|
||
yield git.branchDelete(false, branch);
|
||
}
|
||
// Remove any conflicting refs/remotes/origin/*
|
||
// Example 1: Consider ref is refs/heads/foo and previously fetched refs/remotes/origin/foo/bar
|
||
// Example 2: Consider ref is refs/heads/foo/bar and previously fetched refs/remotes/origin/foo
|
||
if (ref) {
|
||
ref = ref.startsWith('refs/') ? ref : `refs/heads/${ref}`;
|
||
if (ref.startsWith('refs/heads/')) {
|
||
const upperName1 = ref.toUpperCase().substr('REFS/HEADS/'.length);
|
||
const upperName1Slash = `${upperName1}/`;
|
||
branches = yield git.branchList(true);
|
||
for (const branch of branches) {
|
||
const upperName2 = branch.substr('origin/'.length).toUpperCase();
|
||
const upperName2Slash = `${upperName2}/`;
|
||
if (upperName1.startsWith(upperName2Slash) ||
|
||
upperName2.startsWith(upperName1Slash)) {
|
||
yield git.branchDelete(true, branch);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
core.endGroup();
|
||
// Check for submodules and delete any existing files if submodules are present
|
||
if (!(yield git.submoduleStatus())) {
|
||
remove = true;
|
||
core.info('Bad Submodules found, removing existing files');
|
||
}
|
||
// Clean
|
||
if (clean) {
|
||
core.startGroup('Cleaning the repository');
|
||
if (!(yield git.tryClean())) {
|
||
core.debug(`The clean command failed. This might be caused by: 1) path too long, 2) permission issue, or 3) file in use. For further investigation, manually run 'git clean -ffdx' on the directory '${repositoryPath}'.`);
|
||
remove = true;
|
||
}
|
||
else if (!(yield git.tryReset())) {
|
||
remove = true;
|
||
}
|
||
core.endGroup();
|
||
if (remove) {
|
||
core.warning(`Unable to clean or reset the repository. The repository will be recreated instead.`);
|
||
}
|
||
}
|
||
}
|
||
catch (error) {
|
||
core.warning(`Unable to prepare the existing repository. The repository will be recreated instead.`);
|
||
remove = true;
|
||
}
|
||
}
|
||
if (remove) {
|
||
// Delete the contents of the directory. Don't delete the directory itself
|
||
// since it might be the current working directory.
|
||
core.info(`Deleting the contents of '${repositoryPath}'`);
|
||
for (const file of yield fs.promises.readdir(repositoryPath)) {
|
||
yield io.rmRF(path.join(repositoryPath, file));
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 9210:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.getSource = getSource;
|
||
exports.cleanup = cleanup;
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const fsHelper = __importStar(__nccwpck_require__(7219));
|
||
const gitAuthHelper = __importStar(__nccwpck_require__(2565));
|
||
const gitCommandManager = __importStar(__nccwpck_require__(738));
|
||
const gitDirectoryHelper = __importStar(__nccwpck_require__(8609));
|
||
const githubApiHelper = __importStar(__nccwpck_require__(138));
|
||
const io = __importStar(__nccwpck_require__(7436));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const refHelper = __importStar(__nccwpck_require__(8601));
|
||
const stateHelper = __importStar(__nccwpck_require__(4866));
|
||
const urlHelper = __importStar(__nccwpck_require__(9437));
|
||
const git_command_manager_1 = __nccwpck_require__(738);
|
||
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');
|
||
const fetchOptions = {};
|
||
if (settings.filter) {
|
||
fetchOptions.filter = settings.filter;
|
||
}
|
||
else if (settings.sparseCheckout) {
|
||
fetchOptions.filter = 'blob:none';
|
||
}
|
||
if (settings.fetchDepth <= 0) {
|
||
// Fetch all branches and tags
|
||
let refSpec = refHelper.getRefSpecForAllHistory(settings.ref, settings.commit);
|
||
yield git.fetch(refSpec, fetchOptions);
|
||
// 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, fetchOptions);
|
||
}
|
||
}
|
||
else {
|
||
fetchOptions.fetchDepth = settings.fetchDepth;
|
||
fetchOptions.fetchTags = settings.fetchTags;
|
||
const refSpec = refHelper.getRefSpec(settings.ref, settings.commit);
|
||
yield git.fetch(refSpec, fetchOptions);
|
||
}
|
||
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.
|
||
// For sparse checkouts, let `checkout` fetch the needed objects lazily.
|
||
if (settings.lfs && !settings.sparseCheckout) {
|
||
core.startGroup('Fetching LFS objects');
|
||
yield git.lfsFetch(checkoutInfo.startPoint || checkoutInfo.ref);
|
||
core.endGroup();
|
||
}
|
||
// Sparse checkout
|
||
if (!settings.sparseCheckout) {
|
||
let gitVersion = yield git.version();
|
||
// no need to disable sparse-checkout if the installed git runtime doesn't even support it.
|
||
if (gitVersion.checkMinimum(git_command_manager_1.MinimumGitSparseCheckoutVersion)) {
|
||
yield git.disableSparseCheckout();
|
||
}
|
||
}
|
||
else {
|
||
core.startGroup('Setting up sparse checkout');
|
||
if (settings.sparseCheckoutConeMode) {
|
||
yield git.sparseCheckout(settings.sparseCheckout);
|
||
}
|
||
else {
|
||
yield git.sparseCheckoutNonConeMode(settings.sparseCheckout);
|
||
}
|
||
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
|
||
const commitSHA = yield git.log1('--format=%H');
|
||
core.setOutput('commit', commitSHA.trim());
|
||
// 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();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
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, 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();
|
||
}
|
||
});
|
||
}
|
||
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, settings.sparseCheckout != null);
|
||
}
|
||
catch (err) {
|
||
// Git is required for LFS
|
||
if (settings.lfs) {
|
||
throw err;
|
||
}
|
||
// Otherwise fallback to REST API
|
||
return undefined;
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 3142:
|
||
/***/ ((__unused_webpack_module, exports) => {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||
exports.GitVersion = void 0;
|
||
class GitVersion {
|
||
/**
|
||
* Used for comparing the version of git and git-lfs against the minimum required version
|
||
* @param version the version string, e.g. 1.2 or 1.2.3
|
||
*/
|
||
constructor(version) {
|
||
this.major = NaN;
|
||
this.minor = NaN;
|
||
this.patch = NaN;
|
||
if (version) {
|
||
const match = version.match(/^(\d+)\.(\d+)(\.(\d+))?$/);
|
||
if (match) {
|
||
this.major = Number(match[1]);
|
||
this.minor = Number(match[2]);
|
||
if (match[4]) {
|
||
this.patch = Number(match[4]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Compares the instance against a minimum required version
|
||
* @param minimum Minimum version
|
||
*/
|
||
checkMinimum(minimum) {
|
||
if (!minimum.isValid()) {
|
||
throw new Error('Arg minimum is not a valid version');
|
||
}
|
||
// Major is insufficient
|
||
if (this.major < minimum.major) {
|
||
return false;
|
||
}
|
||
// Major is equal
|
||
if (this.major === minimum.major) {
|
||
// Minor is insufficient
|
||
if (this.minor < minimum.minor) {
|
||
return false;
|
||
}
|
||
// Minor is equal
|
||
if (this.minor === minimum.minor) {
|
||
// Patch is insufficient
|
||
if (this.patch && this.patch < (minimum.patch || 0)) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
/**
|
||
* Indicates whether the instance was constructed from a valid version string
|
||
*/
|
||
isValid() {
|
||
return !isNaN(this.major);
|
||
}
|
||
/**
|
||
* Returns the version as a string, e.g. 1.2 or 1.2.3
|
||
*/
|
||
toString() {
|
||
let result = '';
|
||
if (this.isValid()) {
|
||
result = `${this.major}.${this.minor}`;
|
||
if (!isNaN(this.patch)) {
|
||
result += `.${this.patch}`;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
}
|
||
exports.GitVersion = GitVersion;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 138:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.downloadRepository = downloadRepository;
|
||
exports.getDefaultBranch = getDefaultBranch;
|
||
const assert = __importStar(__nccwpck_require__(9491));
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const fs = __importStar(__nccwpck_require__(7147));
|
||
const github = __importStar(__nccwpck_require__(5438));
|
||
const io = __importStar(__nccwpck_require__(7436));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const retryHelper = __importStar(__nccwpck_require__(2155));
|
||
const toolCache = __importStar(__nccwpck_require__(7784));
|
||
const uuid_1 = __nccwpck_require__(5840);
|
||
const url_helper_1 = __nccwpck_require__(9437);
|
||
const IS_WINDOWS = process.platform === 'win32';
|
||
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, 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, baseUrl);
|
||
}));
|
||
// Write archive to disk
|
||
core.info('Writing archive to disk');
|
||
const uniqueId = (0, uuid_1.v4)();
|
||
const archivePath = IS_WINDOWS
|
||
? path.join(repositoryPath, `${uniqueId}.zip`)
|
||
: path.join(repositoryPath, `${uniqueId}.tar.gz`);
|
||
yield fs.promises.writeFile(archivePath, archiveData);
|
||
archiveData = Buffer.from(''); // Free memory
|
||
// Extract archive
|
||
core.info('Extracting the archive');
|
||
const extractPath = path.join(repositoryPath, uniqueId);
|
||
yield io.mkdirP(extractPath);
|
||
if (IS_WINDOWS) {
|
||
yield toolCache.extractZip(archivePath, extractPath);
|
||
}
|
||
else {
|
||
yield toolCache.extractTar(archivePath, extractPath);
|
||
}
|
||
yield io.rmRF(archivePath);
|
||
// Determine the path of the repository content. The archive contains
|
||
// a top-level folder and the repository content is inside.
|
||
const archiveFileNames = yield fs.promises.readdir(extractPath);
|
||
assert.ok(archiveFileNames.length == 1, 'Expected exactly one directory inside archive');
|
||
const archiveVersion = archiveFileNames[0]; // The top-level folder name includes the short SHA
|
||
core.info(`Resolved version ${archiveVersion}`);
|
||
const tempRepositoryPath = path.join(extractPath, archiveVersion);
|
||
// Move the files
|
||
for (const fileName of yield fs.promises.readdir(tempRepositoryPath)) {
|
||
const sourcePath = path.join(tempRepositoryPath, fileName);
|
||
const targetPath = path.join(repositoryPath, fileName);
|
||
if (IS_WINDOWS) {
|
||
yield io.cp(sourcePath, targetPath, { recursive: true }); // Copy on Windows (Windows Defender may have a lock)
|
||
}
|
||
else {
|
||
yield io.mv(sourcePath, targetPath);
|
||
}
|
||
}
|
||
yield io.rmRF(extractPath);
|
||
});
|
||
}
|
||
/**
|
||
* Looks up the default branch name
|
||
*/
|
||
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* () {
|
||
core.info('Retrieving the default branch name');
|
||
const octokit = github.getOctokit(authToken, {
|
||
baseUrl: (0, url_helper_1.getServerApiUrl)(baseUrl)
|
||
});
|
||
let result;
|
||
try {
|
||
// Get the default branch from the repo info
|
||
const response = yield octokit.rest.repos.get({ owner, repo });
|
||
result = response.data.default_branch;
|
||
assert.ok(result, 'default_branch cannot be empty');
|
||
}
|
||
catch (err) {
|
||
// Handle .wiki repo
|
||
if ((err === null || err === void 0 ? void 0 : err.status) === 404 &&
|
||
repo.toUpperCase().endsWith('.WIKI')) {
|
||
result = 'master';
|
||
}
|
||
// Otherwise error
|
||
else {
|
||
throw err;
|
||
}
|
||
}
|
||
// Print the default branch
|
||
core.info(`Default branch '${result}'`);
|
||
// Prefix with 'refs/heads'
|
||
if (!result.startsWith('refs/')) {
|
||
result = `refs/heads/${result}`;
|
||
}
|
||
return result;
|
||
}));
|
||
});
|
||
}
|
||
function downloadArchive(authToken, owner, repo, ref, commit, baseUrl) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const octokit = github.getOctokit(authToken, {
|
||
baseUrl: (0, url_helper_1.getServerApiUrl)(baseUrl)
|
||
});
|
||
const download = IS_WINDOWS
|
||
? octokit.rest.repos.downloadZipballArchive
|
||
: octokit.rest.repos.downloadTarballArchive;
|
||
const response = yield download({
|
||
owner: owner,
|
||
repo: repo,
|
||
ref: commit || ref
|
||
});
|
||
return Buffer.from(response.data); // response.data is ArrayBuffer
|
||
});
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 5480:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.getInputs = getInputs;
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const fsHelper = __importStar(__nccwpck_require__(7219));
|
||
const github = __importStar(__nccwpck_require__(5438));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const workflowContextHelper = __importStar(__nccwpck_require__(9568));
|
||
function getInputs() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const result = {};
|
||
// GitHub workspace
|
||
let githubWorkspacePath = process.env['GITHUB_WORKSPACE'];
|
||
if (!githubWorkspacePath) {
|
||
throw new Error('GITHUB_WORKSPACE not defined');
|
||
}
|
||
githubWorkspacePath = path.resolve(githubWorkspacePath);
|
||
core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`);
|
||
fsHelper.directoryExistsSync(githubWorkspacePath, true);
|
||
// Qualified repository
|
||
const qualifiedRepository = core.getInput('repository') ||
|
||
`${github.context.repo.owner}/${github.context.repo.repo}`;
|
||
core.debug(`qualified repository = '${qualifiedRepository}'`);
|
||
const splitRepository = qualifiedRepository.split('/');
|
||
if (splitRepository.length !== 2 ||
|
||
!splitRepository[0] ||
|
||
!splitRepository[1]) {
|
||
throw new Error(`Invalid repository '${qualifiedRepository}'. Expected format {owner}/{repo}.`);
|
||
}
|
||
result.repositoryOwner = splitRepository[0];
|
||
result.repositoryName = splitRepository[1];
|
||
// Repository path
|
||
result.repositoryPath = core.getInput('path') || '.';
|
||
result.repositoryPath = path.resolve(githubWorkspacePath, result.repositoryPath);
|
||
if (!(result.repositoryPath + path.sep).startsWith(githubWorkspacePath + path.sep)) {
|
||
throw new Error(`Repository path '${result.repositoryPath}' is not under '${githubWorkspacePath}'`);
|
||
}
|
||
// Workflow repository?
|
||
const isWorkflowRepository = qualifiedRepository.toUpperCase() ===
|
||
`${github.context.repo.owner}/${github.context.repo.repo}`.toUpperCase();
|
||
// Source branch, source version
|
||
result.ref = core.getInput('ref');
|
||
if (!result.ref) {
|
||
if (isWorkflowRepository) {
|
||
result.ref = github.context.ref;
|
||
result.commit = github.context.sha;
|
||
// Some events have an unqualifed ref. For example when a PR is merged (pull_request closed event),
|
||
// the ref is unqualifed like "main" instead of "refs/heads/main".
|
||
if (result.commit && result.ref && !result.ref.startsWith('refs/')) {
|
||
result.ref = `refs/heads/${result.ref}`;
|
||
}
|
||
}
|
||
}
|
||
// SHA?
|
||
else if (result.ref.match(/^[0-9a-fA-F]{40}$/)) {
|
||
result.commit = result.ref;
|
||
result.ref = '';
|
||
}
|
||
core.debug(`ref = '${result.ref}'`);
|
||
core.debug(`commit = '${result.commit}'`);
|
||
// Clean
|
||
result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE';
|
||
core.debug(`clean = ${result.clean}`);
|
||
// Filter
|
||
const filter = core.getInput('filter');
|
||
if (filter) {
|
||
result.filter = filter;
|
||
}
|
||
core.debug(`filter = ${result.filter}`);
|
||
// Sparse checkout
|
||
const sparseCheckout = core.getMultilineInput('sparse-checkout');
|
||
if (sparseCheckout.length) {
|
||
result.sparseCheckout = sparseCheckout;
|
||
core.debug(`sparse checkout = ${result.sparseCheckout}`);
|
||
}
|
||
result.sparseCheckoutConeMode =
|
||
(core.getInput('sparse-checkout-cone-mode') || 'true').toUpperCase() ===
|
||
'TRUE';
|
||
// Fetch depth
|
||
result.fetchDepth = Math.floor(Number(core.getInput('fetch-depth') || '1'));
|
||
if (isNaN(result.fetchDepth) || result.fetchDepth < 0) {
|
||
result.fetchDepth = 0;
|
||
}
|
||
core.debug(`fetch depth = ${result.fetchDepth}`);
|
||
// Fetch tags
|
||
result.fetchTags =
|
||
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE';
|
||
core.debug(`fetch tags = ${result.fetchTags}`);
|
||
// Show fetch progress
|
||
result.showProgress =
|
||
(core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE';
|
||
core.debug(`show progress = ${result.showProgress}`);
|
||
// LFS
|
||
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE';
|
||
core.debug(`lfs = ${result.lfs}`);
|
||
// Submodules
|
||
result.submodules = false;
|
||
result.nestedSubmodules = false;
|
||
const submodulesString = (core.getInput('submodules') || '').toUpperCase();
|
||
if (submodulesString == 'RECURSIVE') {
|
||
result.submodules = true;
|
||
result.nestedSubmodules = true;
|
||
}
|
||
else if (submodulesString == 'TRUE') {
|
||
result.submodules = true;
|
||
}
|
||
core.debug(`submodules = ${result.submodules}`);
|
||
core.debug(`recursive submodules = ${result.nestedSubmodules}`);
|
||
// Auth token
|
||
result.authToken = core.getInput('token', { required: true });
|
||
// SSH
|
||
result.sshKey = core.getInput('ssh-key');
|
||
result.sshKnownHosts = core.getInput('ssh-known-hosts');
|
||
result.sshStrict =
|
||
(core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE';
|
||
result.sshUser = core.getInput('ssh-user');
|
||
// Persist credentials
|
||
result.persistCredentials =
|
||
(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;
|
||
});
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 3109:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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 }));
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const coreCommand = __importStar(__nccwpck_require__(7351));
|
||
const gitSourceProvider = __importStar(__nccwpck_require__(9210));
|
||
const inputHelper = __importStar(__nccwpck_require__(5480));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const stateHelper = __importStar(__nccwpck_require__(4866));
|
||
function run() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a;
|
||
try {
|
||
const sourceSettings = yield inputHelper.getInputs();
|
||
try {
|
||
// Register problem matcher
|
||
coreCommand.issueCommand('add-matcher', {}, path.join(__dirname, 'problem-matcher.json'));
|
||
// Get sources
|
||
yield gitSourceProvider.getSource(sourceSettings);
|
||
core.setOutput('ref', sourceSettings.ref);
|
||
}
|
||
finally {
|
||
// Unregister problem matcher
|
||
coreCommand.issueCommand('remove-matcher', { owner: 'checkout-git' }, '');
|
||
}
|
||
}
|
||
catch (error) {
|
||
core.setFailed(`${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
|
||
}
|
||
});
|
||
}
|
||
function cleanup() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a;
|
||
try {
|
||
yield gitSourceProvider.cleanup(stateHelper.RepositoryPath);
|
||
}
|
||
catch (error) {
|
||
core.warning(`${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
|
||
}
|
||
});
|
||
}
|
||
// Main
|
||
if (!stateHelper.IsPost) {
|
||
run();
|
||
}
|
||
// Post
|
||
else {
|
||
cleanup();
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 8601:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.tagsRefSpec = void 0;
|
||
exports.getCheckoutInfo = getCheckoutInfo;
|
||
exports.getRefSpecForAllHistory = getRefSpecForAllHistory;
|
||
exports.getRefSpec = getRefSpec;
|
||
exports.testRef = testRef;
|
||
exports.checkCommitInfo = checkCommitInfo;
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const github = __importStar(__nccwpck_require__(5438));
|
||
const url_helper_1 = __nccwpck_require__(9437);
|
||
exports.tagsRefSpec = '+refs/tags/*:refs/tags/*';
|
||
function getCheckoutInfo(git, ref, commit) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
if (!git) {
|
||
throw new Error('Arg git cannot be empty');
|
||
}
|
||
if (!ref && !commit) {
|
||
throw new Error('Args ref and commit cannot both be empty');
|
||
}
|
||
const result = {};
|
||
const upperRef = (ref || '').toUpperCase();
|
||
// SHA only
|
||
if (!ref) {
|
||
result.ref = commit;
|
||
}
|
||
// refs/heads/
|
||
else if (upperRef.startsWith('REFS/HEADS/')) {
|
||
const branch = ref.substring('refs/heads/'.length);
|
||
result.ref = branch;
|
||
result.startPoint = `refs/remotes/origin/${branch}`;
|
||
}
|
||
// refs/pull/
|
||
else if (upperRef.startsWith('REFS/PULL/')) {
|
||
const branch = ref.substring('refs/pull/'.length);
|
||
result.ref = `refs/remotes/pull/${branch}`;
|
||
}
|
||
// refs/tags/
|
||
else if (upperRef.startsWith('REFS/TAGS/')) {
|
||
result.ref = ref;
|
||
}
|
||
// refs/
|
||
else if (upperRef.startsWith('REFS/')) {
|
||
result.ref = commit ? commit : ref;
|
||
}
|
||
// Unqualified ref, check for a matching branch or tag
|
||
else {
|
||
if (yield git.branchExists(true, `origin/${ref}`)) {
|
||
result.ref = ref;
|
||
result.startPoint = `refs/remotes/origin/${ref}`;
|
||
}
|
||
else if (yield git.tagExists(`${ref}`)) {
|
||
result.ref = `refs/tags/${ref}`;
|
||
}
|
||
else {
|
||
throw new Error(`A branch or tag with the name '${ref}' could not be found`);
|
||
}
|
||
}
|
||
return result;
|
||
});
|
||
}
|
||
function getRefSpecForAllHistory(ref, commit) {
|
||
const result = ['+refs/heads/*:refs/remotes/origin/*', exports.tagsRefSpec];
|
||
if (ref && ref.toUpperCase().startsWith('REFS/PULL/')) {
|
||
const branch = ref.substring('refs/pull/'.length);
|
||
result.push(`+${commit || ref}:refs/remotes/pull/${branch}`);
|
||
}
|
||
return result;
|
||
}
|
||
function getRefSpec(ref, commit) {
|
||
if (!ref && !commit) {
|
||
throw new Error('Args ref and commit cannot both be empty');
|
||
}
|
||
const upperRef = (ref || '').toUpperCase();
|
||
// SHA
|
||
if (commit) {
|
||
// refs/heads
|
||
if (upperRef.startsWith('REFS/HEADS/')) {
|
||
const branch = ref.substring('refs/heads/'.length);
|
||
return [`+${commit}:refs/remotes/origin/${branch}`];
|
||
}
|
||
// refs/pull/
|
||
else if (upperRef.startsWith('REFS/PULL/')) {
|
||
const branch = ref.substring('refs/pull/'.length);
|
||
return [`+${commit}:refs/remotes/pull/${branch}`];
|
||
}
|
||
// refs/tags/
|
||
else if (upperRef.startsWith('REFS/TAGS/')) {
|
||
return [`+${commit}:${ref}`];
|
||
}
|
||
// Otherwise no destination ref
|
||
else {
|
||
return [commit];
|
||
}
|
||
}
|
||
// Unqualified ref, check for a matching branch or tag
|
||
else if (!upperRef.startsWith('REFS/')) {
|
||
return [
|
||
`+refs/heads/${ref}*:refs/remotes/origin/${ref}*`,
|
||
`+refs/tags/${ref}*:refs/tags/${ref}*`
|
||
];
|
||
}
|
||
// refs/heads/
|
||
else if (upperRef.startsWith('REFS/HEADS/')) {
|
||
const branch = ref.substring('refs/heads/'.length);
|
||
return [`+${ref}:refs/remotes/origin/${branch}`];
|
||
}
|
||
// refs/pull/
|
||
else if (upperRef.startsWith('REFS/PULL/')) {
|
||
const branch = ref.substring('refs/pull/'.length);
|
||
return [`+${ref}:refs/remotes/pull/${branch}`];
|
||
}
|
||
// refs/tags/
|
||
else {
|
||
return [`+${ref}:${ref}`];
|
||
}
|
||
}
|
||
/**
|
||
* Tests whether the initial fetch created the ref at the expected commit
|
||
*/
|
||
function testRef(git, ref, commit) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
if (!git) {
|
||
throw new Error('Arg git cannot be empty');
|
||
}
|
||
if (!ref && !commit) {
|
||
throw new Error('Args ref and commit cannot both be empty');
|
||
}
|
||
// No SHA? Nothing to test
|
||
if (!commit) {
|
||
return true;
|
||
}
|
||
// SHA only?
|
||
else if (!ref) {
|
||
return yield git.shaExists(commit);
|
||
}
|
||
const upperRef = ref.toUpperCase();
|
||
// refs/heads/
|
||
if (upperRef.startsWith('REFS/HEADS/')) {
|
||
const branch = ref.substring('refs/heads/'.length);
|
||
return ((yield git.branchExists(true, `origin/${branch}`)) &&
|
||
commit === (yield git.revParse(`refs/remotes/origin/${branch}`)));
|
||
}
|
||
// refs/pull/
|
||
else if (upperRef.startsWith('REFS/PULL/')) {
|
||
// Assume matches because fetched using the commit
|
||
return true;
|
||
}
|
||
// refs/tags/
|
||
else if (upperRef.startsWith('REFS/TAGS/')) {
|
||
const tagName = ref.substring('refs/tags/'.length);
|
||
return ((yield git.tagExists(tagName)) && commit === (yield git.revParse(ref)));
|
||
}
|
||
// Unexpected
|
||
else {
|
||
core.debug(`Unexpected ref format '${ref}' when testing ref info`);
|
||
return true;
|
||
}
|
||
});
|
||
}
|
||
function checkCommitInfo(token, commitInfo, repositoryOwner, repositoryName, ref, commit, baseUrl) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a;
|
||
try {
|
||
// GHES?
|
||
if ((0, url_helper_1.isGhes)(baseUrl)) {
|
||
return;
|
||
}
|
||
// Auth token?
|
||
if (!token) {
|
||
return;
|
||
}
|
||
// Public PR synchronize, for workflow repo?
|
||
if (fromPayload('repository.private') !== false ||
|
||
github.context.eventName !== 'pull_request' ||
|
||
fromPayload('action') !== 'synchronize' ||
|
||
repositoryOwner !== github.context.repo.owner ||
|
||
repositoryName !== github.context.repo.repo ||
|
||
ref !== github.context.ref ||
|
||
!ref.startsWith('refs/pull/') ||
|
||
commit !== github.context.sha) {
|
||
return;
|
||
}
|
||
// Head SHA
|
||
const expectedHeadSha = fromPayload('after');
|
||
if (!expectedHeadSha) {
|
||
core.debug('Unable to determine head sha');
|
||
return;
|
||
}
|
||
// Base SHA
|
||
const expectedBaseSha = fromPayload('pull_request.base.sha');
|
||
if (!expectedBaseSha) {
|
||
core.debug('Unable to determine base sha');
|
||
return;
|
||
}
|
||
// Expected message?
|
||
const expectedMessage = `Merge ${expectedHeadSha} into ${expectedBaseSha}`;
|
||
if (commitInfo.indexOf(expectedMessage) >= 0) {
|
||
return;
|
||
}
|
||
// Extract details from message
|
||
const match = commitInfo.match(/Merge ([0-9a-f]{40}) into ([0-9a-f]{40})/);
|
||
if (!match) {
|
||
core.debug('Unexpected message format');
|
||
return;
|
||
}
|
||
// Post telemetry
|
||
const actualHeadSha = match[1];
|
||
if (actualHeadSha !== expectedHeadSha) {
|
||
core.debug(`Expected head sha ${expectedHeadSha}; actual head sha ${actualHeadSha}`);
|
||
const octokit = github.getOctokit(token, {
|
||
baseUrl: (0, url_helper_1.getServerApiUrl)(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.rest.repos.get({
|
||
owner: repositoryOwner,
|
||
repo: repositoryName
|
||
});
|
||
}
|
||
}
|
||
catch (err) {
|
||
core.debug(`Error when validating commit info: ${(_a = err === null || err === void 0 ? void 0 : err.stack) !== null && _a !== void 0 ? _a : err}`);
|
||
}
|
||
});
|
||
}
|
||
function fromPayload(path) {
|
||
return select(github.context.payload, path);
|
||
}
|
||
function select(obj, path) {
|
||
if (!obj) {
|
||
return undefined;
|
||
}
|
||
const i = path.indexOf('.');
|
||
if (i < 0) {
|
||
return obj[path];
|
||
}
|
||
const key = path.substr(0, i);
|
||
return select(obj[key], path.substr(i + 1));
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 3120:
|
||
/***/ ((__unused_webpack_module, exports) => {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||
exports.escape = escape;
|
||
function escape(value) {
|
||
return value.replace(/[^a-zA-Z0-9_]/g, x => {
|
||
return `\\${x}`;
|
||
});
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2155:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.RetryHelper = void 0;
|
||
exports.execute = execute;
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const defaultMaxAttempts = 3;
|
||
const defaultMinSeconds = 10;
|
||
const defaultMaxSeconds = 20;
|
||
class RetryHelper {
|
||
constructor(maxAttempts = defaultMaxAttempts, minSeconds = defaultMinSeconds, maxSeconds = defaultMaxSeconds) {
|
||
this.maxAttempts = maxAttempts;
|
||
this.minSeconds = Math.floor(minSeconds);
|
||
this.maxSeconds = Math.floor(maxSeconds);
|
||
if (this.minSeconds > this.maxSeconds) {
|
||
throw new Error('min seconds should be less than or equal to max seconds');
|
||
}
|
||
}
|
||
execute(action) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
let attempt = 1;
|
||
while (attempt < this.maxAttempts) {
|
||
// Try
|
||
try {
|
||
return yield action();
|
||
}
|
||
catch (err) {
|
||
core.info(err === null || err === void 0 ? void 0 : err.message);
|
||
}
|
||
// Sleep
|
||
const seconds = this.getSleepAmount();
|
||
core.info(`Waiting ${seconds} seconds before trying again`);
|
||
yield this.sleep(seconds);
|
||
attempt++;
|
||
}
|
||
// Last attempt
|
||
return yield action();
|
||
});
|
||
}
|
||
getSleepAmount() {
|
||
return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) +
|
||
this.minSeconds);
|
||
}
|
||
sleep(seconds) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
return new Promise(resolve => setTimeout(resolve, seconds * 1000));
|
||
});
|
||
}
|
||
}
|
||
exports.RetryHelper = RetryHelper;
|
||
function execute(action) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const retryHelper = new RetryHelper();
|
||
return yield retryHelper.execute(action);
|
||
});
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 4866:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.SshKnownHostsPath = exports.SshKeyPath = exports.PostSetSafeDirectory = exports.RepositoryPath = exports.IsPost = void 0;
|
||
exports.setRepositoryPath = setRepositoryPath;
|
||
exports.setSshKeyPath = setSshKeyPath;
|
||
exports.setSshKnownHostsPath = setSshKnownHostsPath;
|
||
exports.setSafeDirectory = setSafeDirectory;
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
/**
|
||
* Indicates whether the POST action is running
|
||
*/
|
||
exports.IsPost = !!core.getState('isPost');
|
||
/**
|
||
* The repository path for the POST action. The value is empty during the MAIN action.
|
||
*/
|
||
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 = core.getState('sshKeyPath');
|
||
/**
|
||
* The SSH known hosts path for the POST action. The value is empty during the MAIN action.
|
||
*/
|
||
exports.SshKnownHostsPath = core.getState('sshKnownHostsPath');
|
||
/**
|
||
* Save the repository path so the POST action can retrieve the value.
|
||
*/
|
||
function setRepositoryPath(repositoryPath) {
|
||
core.saveState('repositoryPath', repositoryPath);
|
||
}
|
||
/**
|
||
* Save the SSH key path so the POST action can retrieve the value.
|
||
*/
|
||
function setSshKeyPath(sshKeyPath) {
|
||
core.saveState('sshKeyPath', sshKeyPath);
|
||
}
|
||
/**
|
||
* Save the SSH known hosts path so the POST action can retrieve the value.
|
||
*/
|
||
function setSshKnownHostsPath(sshKnownHostsPath) {
|
||
core.saveState('sshKnownHostsPath', sshKnownHostsPath);
|
||
}
|
||
/**
|
||
* Save the set-safe-directory input so the POST action can retrieve the value.
|
||
*/
|
||
function setSafeDirectory() {
|
||
core.saveState('setSafeDirectory', 'true');
|
||
}
|
||
// 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) {
|
||
core.saveState('isPost', 'true');
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 9437:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.getFetchUrl = getFetchUrl;
|
||
exports.getServerUrl = getServerUrl;
|
||
exports.getServerApiUrl = getServerApiUrl;
|
||
exports.isGhes = isGhes;
|
||
const assert = __importStar(__nccwpck_require__(9491));
|
||
const url_1 = __nccwpck_require__(7310);
|
||
function getFetchUrl(settings) {
|
||
assert.ok(settings.repositoryOwner, 'settings.repositoryOwner must be defined');
|
||
assert.ok(settings.repositoryName, 'settings.repositoryName must be defined');
|
||
const serviceUrl = getServerUrl(settings.githubServerUrl);
|
||
const encodedOwner = encodeURIComponent(settings.repositoryOwner);
|
||
const encodedName = encodeURIComponent(settings.repositoryName);
|
||
if (settings.sshKey) {
|
||
const user = settings.sshUser.length > 0 ? settings.sshUser : 'git';
|
||
return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`;
|
||
}
|
||
// "origin" is SCHEME://HOSTNAME[:PORT]
|
||
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`;
|
||
}
|
||
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);
|
||
}
|
||
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;
|
||
}
|
||
function isGhes(url) {
|
||
const ghUrl = getServerUrl(url);
|
||
return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 9568:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (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.getOrganizationId = getOrganizationId;
|
||
const core = __importStar(__nccwpck_require__(2186));
|
||
const fs = __importStar(__nccwpck_require__(7147));
|
||
/**
|
||
* Gets the organization ID of the running workflow or undefined if the value cannot be loaded from the GITHUB_EVENT_PATH
|
||
*/
|
||
function getOrganizationId() {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
var _a, _b;
|
||
try {
|
||
const eventPath = process.env.GITHUB_EVENT_PATH;
|
||
if (!eventPath) {
|
||
core.debug(`GITHUB_EVENT_PATH is not defined`);
|
||
return;
|
||
}
|
||
const content = yield fs.promises.readFile(eventPath, { encoding: 'utf8' });
|
||
const event = JSON.parse(content);
|
||
const id = (_b = (_a = event === null || event === void 0 ? void 0 : event.repository) === null || _a === void 0 ? void 0 : _a.owner) === null || _b === void 0 ? void 0 : _b.id;
|
||
if (typeof id !== 'number') {
|
||
core.debug('Repository owner ID not found within GITHUB event info');
|
||
return;
|
||
}
|
||
return id;
|
||
}
|
||
catch (err) {
|
||
core.debug(`Unable to load organization ID from GITHUB_EVENT_PATH: ${err.message || err}`);
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 7351:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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.issue = exports.issueCommand = void 0;
|
||
const os = __importStar(__nccwpck_require__(2037));
|
||
const utils_1 = __nccwpck_require__(5278);
|
||
/**
|
||
* Commands
|
||
*
|
||
* Command Format:
|
||
* ::name key=value,key=value::message
|
||
*
|
||
* Examples:
|
||
* ::warning::This is the message
|
||
* ::set-env name=MY_VAR::some value
|
||
*/
|
||
function issueCommand(command, properties, message) {
|
||
const cmd = new Command(command, properties, message);
|
||
process.stdout.write(cmd.toString() + os.EOL);
|
||
}
|
||
exports.issueCommand = issueCommand;
|
||
function issue(name, message = '') {
|
||
issueCommand(name, {}, message);
|
||
}
|
||
exports.issue = issue;
|
||
const CMD_STRING = '::';
|
||
class Command {
|
||
constructor(command, properties, message) {
|
||
if (!command) {
|
||
command = 'missing.command';
|
||
}
|
||
this.command = command;
|
||
this.properties = properties;
|
||
this.message = message;
|
||
}
|
||
toString() {
|
||
let cmdStr = CMD_STRING + this.command;
|
||
if (this.properties && Object.keys(this.properties).length > 0) {
|
||
cmdStr += ' ';
|
||
let first = true;
|
||
for (const key in this.properties) {
|
||
if (this.properties.hasOwnProperty(key)) {
|
||
const val = this.properties[key];
|
||
if (val) {
|
||
if (first) {
|
||
first = false;
|
||
}
|
||
else {
|
||
cmdStr += ',';
|
||
}
|
||
cmdStr += `${key}=${escapeProperty(val)}`;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
|
||
return cmdStr;
|
||
}
|
||
}
|
||
function escapeData(s) {
|
||
return utils_1.toCommandValue(s)
|
||
.replace(/%/g, '%25')
|
||
.replace(/\r/g, '%0D')
|
||
.replace(/\n/g, '%0A');
|
||
}
|
||
function escapeProperty(s) {
|
||
return utils_1.toCommandValue(s)
|
||
.replace(/%/g, '%25')
|
||
.replace(/\r/g, '%0D')
|
||
.replace(/\n/g, '%0A')
|
||
.replace(/:/g, '%3A')
|
||
.replace(/,/g, '%2C');
|
||
}
|
||
//# sourceMappingURL=command.js.map
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2186:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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) {
|
||
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.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 = __nccwpck_require__(7351);
|
||
const file_command_1 = __nccwpck_require__(717);
|
||
const utils_1 = __nccwpck_require__(5278);
|
||
const os = __importStar(__nccwpck_require__(2037));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const oidc_utils_1 = __nccwpck_require__(8041);
|
||
/**
|
||
* The code to exit an action
|
||
*/
|
||
var ExitCode;
|
||
(function (ExitCode) {
|
||
/**
|
||
* A code indicating that the action was successful
|
||
*/
|
||
ExitCode[ExitCode["Success"] = 0] = "Success";
|
||
/**
|
||
* A code indicating that the action was a failure
|
||
*/
|
||
ExitCode[ExitCode["Failure"] = 1] = "Failure";
|
||
})(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
|
||
//-----------------------------------------------------------------------
|
||
// Variables
|
||
//-----------------------------------------------------------------------
|
||
/**
|
||
* Sets env variable for this action and future actions in the job
|
||
* @param name the name of the variable to set
|
||
* @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
function exportVariable(name, val) {
|
||
const convertedVal = utils_1.toCommandValue(val);
|
||
process.env[name] = convertedVal;
|
||
const filePath = process.env['GITHUB_ENV'] || '';
|
||
if (filePath) {
|
||
return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val));
|
||
}
|
||
command_1.issueCommand('set-env', { name }, convertedVal);
|
||
}
|
||
exports.exportVariable = exportVariable;
|
||
/**
|
||
* Registers a secret which will get masked from logs
|
||
* @param secret value of the secret
|
||
*/
|
||
function setSecret(secret) {
|
||
command_1.issueCommand('add-mask', {}, secret);
|
||
}
|
||
exports.setSecret = setSecret;
|
||
/**
|
||
* Prepends inputPath to the PATH (for this action and future actions)
|
||
* @param inputPath
|
||
*/
|
||
function addPath(inputPath) {
|
||
const filePath = process.env['GITHUB_PATH'] || '';
|
||
if (filePath) {
|
||
file_command_1.issueFileCommand('PATH', inputPath);
|
||
}
|
||
else {
|
||
command_1.issueCommand('add-path', {}, inputPath);
|
||
}
|
||
process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
|
||
}
|
||
exports.addPath = addPath;
|
||
/**
|
||
* 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.
|
||
* @returns string
|
||
*/
|
||
function getInput(name, options) {
|
||
const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
||
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.
|
||
*
|
||
* @param name name of the output to set
|
||
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
function setOutput(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;
|
||
/**
|
||
* Enables or disables the echoing of commands into stdout for the rest of the step.
|
||
* Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
|
||
*
|
||
*/
|
||
function setCommandEcho(enabled) {
|
||
command_1.issue('echo', enabled ? 'on' : 'off');
|
||
}
|
||
exports.setCommandEcho = setCommandEcho;
|
||
//-----------------------------------------------------------------------
|
||
// Results
|
||
//-----------------------------------------------------------------------
|
||
/**
|
||
* Sets the action status to failed.
|
||
* When the action exits it will be with an exit code of 1
|
||
* @param message add error issue message
|
||
*/
|
||
function setFailed(message) {
|
||
process.exitCode = ExitCode.Failure;
|
||
error(message);
|
||
}
|
||
exports.setFailed = setFailed;
|
||
//-----------------------------------------------------------------------
|
||
// Logging Commands
|
||
//-----------------------------------------------------------------------
|
||
/**
|
||
* Gets whether Actions Step Debug is on or not
|
||
*/
|
||
function isDebug() {
|
||
return process.env['RUNNER_DEBUG'] === '1';
|
||
}
|
||
exports.isDebug = isDebug;
|
||
/**
|
||
* Writes debug message to user log
|
||
* @param message debug message
|
||
*/
|
||
function debug(message) {
|
||
command_1.issueCommand('debug', {}, message);
|
||
}
|
||
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, properties = {}) {
|
||
command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message);
|
||
}
|
||
exports.error = error;
|
||
/**
|
||
* 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, 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
|
||
*/
|
||
function info(message) {
|
||
process.stdout.write(message + os.EOL);
|
||
}
|
||
exports.info = info;
|
||
/**
|
||
* Begin an output group.
|
||
*
|
||
* Output until the next `groupEnd` will be foldable in this group
|
||
*
|
||
* @param name The name of the output group
|
||
*/
|
||
function startGroup(name) {
|
||
command_1.issue('group', name);
|
||
}
|
||
exports.startGroup = startGroup;
|
||
/**
|
||
* End an output group.
|
||
*/
|
||
function endGroup() {
|
||
command_1.issue('endgroup');
|
||
}
|
||
exports.endGroup = endGroup;
|
||
/**
|
||
* Wrap an asynchronous function call in a group.
|
||
*
|
||
* Returns the same type as the function itself.
|
||
*
|
||
* @param name The name of the group
|
||
* @param fn The function to wrap in the group
|
||
*/
|
||
function group(name, fn) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
startGroup(name);
|
||
let result;
|
||
try {
|
||
result = yield fn();
|
||
}
|
||
finally {
|
||
endGroup();
|
||
}
|
||
return result;
|
||
});
|
||
}
|
||
exports.group = group;
|
||
//-----------------------------------------------------------------------
|
||
// Wrapper action state
|
||
//-----------------------------------------------------------------------
|
||
/**
|
||
* Saves state for current action, the state can only be retrieved by this action's post job execution.
|
||
*
|
||
* @param name name of the state to store
|
||
* @param value value to store. Non-string values will be converted to a string via JSON.stringify
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
function saveState(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;
|
||
/**
|
||
* Gets the value of an state set by this action's main execution.
|
||
*
|
||
* @param name name of the state to get
|
||
* @returns string
|
||
*/
|
||
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 = __nccwpck_require__(1327);
|
||
Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } }));
|
||
/**
|
||
* @deprecated use core.summary
|
||
*/
|
||
var summary_2 = __nccwpck_require__(1327);
|
||
Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } }));
|
||
/**
|
||
* Path exports
|
||
*/
|
||
var path_utils_1 = __nccwpck_require__(2981);
|
||
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
|
||
|
||
/***/ }),
|
||
|
||
/***/ 717:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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 (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(__nccwpck_require__(7147));
|
||
const os = __importStar(__nccwpck_require__(2037));
|
||
const uuid_1 = __nccwpck_require__(8974);
|
||
const utils_1 = __nccwpck_require__(5278);
|
||
function issueFileCommand(command, message) {
|
||
const filePath = process.env[`GITHUB_${command}`];
|
||
if (!filePath) {
|
||
throw new Error(`Unable to find environment variable for file command ${command}`);
|
||
}
|
||
if (!fs.existsSync(filePath)) {
|
||
throw new Error(`Missing file at path: ${filePath}`);
|
||
}
|
||
fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
|
||
encoding: 'utf8'
|
||
});
|
||
}
|
||
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
|
||
|
||
/***/ }),
|
||
|
||
/***/ 8041:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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.OidcClient = void 0;
|
||
const http_client_1 = __nccwpck_require__(6255);
|
||
const auth_1 = __nccwpck_require__(5526);
|
||
const core_1 = __nccwpck_require__(2186);
|
||
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);
|
||
}
|
||
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');
|
||
}
|
||
return token;
|
||
}
|
||
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.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
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2981:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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(__nccwpck_require__(1017));
|
||
/**
|
||
* 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
|
||
|
||
/***/ }),
|
||
|
||
/***/ 1327:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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 = __nccwpck_require__(2037);
|
||
const fs_1 = __nccwpck_require__(7147);
|
||
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
|
||
|
||
/***/ }),
|
||
|
||
/***/ 5278:
|
||
/***/ ((__unused_webpack_module, exports) => {
|
||
|
||
"use strict";
|
||
|
||
// 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
|
||
*/
|
||
function toCommandValue(input) {
|
||
if (input === null || input === undefined) {
|
||
return '';
|
||
}
|
||
else if (typeof input === 'string' || input instanceof String) {
|
||
return 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
|
||
|
||
/***/ }),
|
||
|
||
/***/ 8974:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_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(__nccwpck_require__(1595));
|
||
|
||
var _v2 = _interopRequireDefault(__nccwpck_require__(6993));
|
||
|
||
var _v3 = _interopRequireDefault(__nccwpck_require__(1472));
|
||
|
||
var _v4 = _interopRequireDefault(__nccwpck_require__(6217));
|
||
|
||
var _nil = _interopRequireDefault(__nccwpck_require__(2381));
|
||
|
||
var _version = _interopRequireDefault(__nccwpck_require__(427));
|
||
|
||
var _validate = _interopRequireDefault(__nccwpck_require__(2609));
|
||
|
||
var _stringify = _interopRequireDefault(__nccwpck_require__(1458));
|
||
|
||
var _parse = _interopRequireDefault(__nccwpck_require__(6385));
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
/***/ }),
|
||
|
||
/***/ 5842:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2381:
|
||
/***/ ((__unused_webpack_module, exports) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
var _default = '00000000-0000-0000-0000-000000000000';
|
||
exports["default"] = _default;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 6385:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _validate = _interopRequireDefault(__nccwpck_require__(2609));
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
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;
|
||
}
|
||
|
||
var _default = parse;
|
||
exports["default"] = _default;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 6230:
|
||
/***/ ((__unused_webpack_module, 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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 9784:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = rng;
|
||
|
||
var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
|
||
|
||
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);
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 8844:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _crypto = _interopRequireDefault(__nccwpck_require__(6113));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 1458:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _validate = _interopRequireDefault(__nccwpck_require__(2609));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 1595:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _rng = _interopRequireDefault(__nccwpck_require__(9784));
|
||
|
||
var _stringify = _interopRequireDefault(__nccwpck_require__(1458));
|
||
|
||
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");
|
||
}
|
||
|
||
_lastMSecs = msecs;
|
||
_lastNSecs = nsecs;
|
||
_clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
|
||
|
||
msecs += 12219292800000; // `time_low`
|
||
|
||
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];
|
||
}
|
||
|
||
return buf || (0, _stringify.default)(b);
|
||
}
|
||
|
||
var _default = v1;
|
||
exports["default"] = _default;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 6993:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _v = _interopRequireDefault(__nccwpck_require__(5920));
|
||
|
||
var _md = _interopRequireDefault(__nccwpck_require__(5842));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 5920:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = _default;
|
||
exports.URL = exports.DNS = void 0;
|
||
|
||
var _stringify = _interopRequireDefault(__nccwpck_require__(1458));
|
||
|
||
var _parse = _interopRequireDefault(__nccwpck_require__(6385));
|
||
|
||
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;
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ 1472:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _rng = _interopRequireDefault(__nccwpck_require__(9784));
|
||
|
||
var _stringify = _interopRequireDefault(__nccwpck_require__(1458));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 6217:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _v = _interopRequireDefault(__nccwpck_require__(5920));
|
||
|
||
var _sha = _interopRequireDefault(__nccwpck_require__(8844));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2609:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _regex = _interopRequireDefault(__nccwpck_require__(6230));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 427:
|
||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", ({
|
||
value: true
|
||
}));
|
||
exports["default"] = void 0;
|
||
|
||
var _validate = _interopRequireDefault(__nccwpck_require__(2609));
|
||
|
||
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;
|
||
|
||
/***/ }),
|
||
|
||
/***/ 1514:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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) {
|
||
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.getExecOutput = exports.exec = void 0;
|
||
const string_decoder_1 = __nccwpck_require__(1576);
|
||
const tr = __importStar(__nccwpck_require__(8159));
|
||
/**
|
||
* Exec a command.
|
||
* Output will be streamed to the live console.
|
||
* Returns promise with return code
|
||
*
|
||
* @param commandLine command to execute (can include additional args). Must be correctly escaped.
|
||
* @param args optional arguments for tool. Escaping is handled by the lib.
|
||
* @param options optional exec options. See ExecOptions
|
||
* @returns Promise<number> exit code
|
||
*/
|
||
function exec(commandLine, args, options) {
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
const commandArgs = tr.argStringToArray(commandLine);
|
||
if (commandArgs.length === 0) {
|
||
throw new Error(`Parameter 'commandLine' cannot be null or empty.`);
|
||
}
|
||
// Path to tool to execute should be first arg
|
||
const toolPath = commandArgs[0];
|
||
args = commandArgs.slice(1).concat(args || []);
|
||
const runner = new tr.ToolRunner(toolPath, args, options);
|
||
return runner.exec();
|
||
});
|
||
}
|
||
exports.exec = exec;
|
||
/**
|
||
* Exec a command and get the output.
|
||
* Output will be streamed to the live console.
|
||
* Returns promise with the exit code and collected stdout and stderr
|
||
*
|
||
* @param commandLine command to execute (can include additional args). Must be correctly escaped.
|
||
* @param args optional arguments for tool. Escaping is handled by the lib.
|
||
* @param options optional exec options. See ExecOptions
|
||
* @returns Promise<ExecOutput> exit code, stdout, and stderr
|
||
*/
|
||
function getExecOutput(commandLine, args, options) {
|
||
var _a, _b;
|
||
return __awaiter(this, void 0, void 0, function* () {
|
||
let stdout = '';
|
||
let stderr = '';
|
||
//Using string decoder covers the case where a mult-byte character is split
|
||
const stdoutDecoder = new string_decoder_1.StringDecoder('utf8');
|
||
const stderrDecoder = new string_decoder_1.StringDecoder('utf8');
|
||
const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout;
|
||
const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr;
|
||
const stdErrListener = (data) => {
|
||
stderr += stderrDecoder.write(data);
|
||
if (originalStdErrListener) {
|
||
originalStdErrListener(data);
|
||
}
|
||
};
|
||
const stdOutListener = (data) => {
|
||
stdout += stdoutDecoder.write(data);
|
||
if (originalStdoutListener) {
|
||
originalStdoutListener(data);
|
||
}
|
||
};
|
||
const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener });
|
||
const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners }));
|
||
//flush any remaining characters
|
||
stdout += stdoutDecoder.end();
|
||
stderr += stderrDecoder.end();
|
||
return {
|
||
exitCode,
|
||
stdout,
|
||
stderr
|
||
};
|
||
});
|
||
}
|
||
exports.getExecOutput = getExecOutput;
|
||
//# sourceMappingURL=exec.js.map
|
||
|
||
/***/ }),
|
||
|
||
/***/ 8159:
|
||
/***/ (function(__unused_webpack_module, exports, __nccwpck_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) {
|
||
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.argStringToArray = exports.ToolRunner = void 0;
|
||
const os = __importStar(__nccwpck_require__(2037));
|
||
const events = __importStar(__nccwpck_require__(2361));
|
||
const child = __importStar(__nccwpck_require__(2081));
|
||
const path = __importStar(__nccwpck_require__(1017));
|
||
const io = __importStar(__nccwpck_require__(7436));
|
||
const ioUtil = __importStar(__nccwpck_require__(1962));
|
||
const timers_1 = __nccwpck_require__(9512);
|
||
/* eslint-disable @typescript-eslint/unbound-method */
|
||
const IS_WINDOWS = process.platform === 'win32';
|
||
/*
|
||
* Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way.
|
||
*/
|
||
class ToolRunner extends events.EventEmitter {
|
||
constructor(toolPath, args, options) {
|
||
super();
|
||
if (!toolPath) {
|
||
throw new Error("Parameter 'toolPath' cannot be null or empty.");
|
||
}
|
||
this.toolPath = toolPath;
|
||
this.args = args || [];
|
||
this.options = options || {};
|
||
}
|
||
_debug(message) {
|
||
if (this.options.listeners && this.options.listeners.debug) {
|
||
this.options.listeners.debug(message);
|
||
}
|
||
}
|
||
_getCommandString(options, noPrefix) {
|
||
const toolPath = this._getSpawnFileName();
|
||
const args = this._getSpawnArgs(options);
|
||
let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool
|
||
if (IS_WINDOWS) {
|
||
// Windows + cmd file
|
||
if (this._isCmdFile()) {
|
||
cmd += toolPath;
|
||
for (const a of args) {
|
||
cmd += ` ${a}`;
|
||
}
|
||
}
|
||
// Windows + verbatim
|
||
else if (options.windowsVerbatimArguments) {
|
||
cmd += `"${toolPath}"`;
|
||
for (const a of args) {
|
||
cmd += ` ${a}`;
|
||
}
|
||
}
|
||
// Windows (regular)
|
||
else {
|
||
cmd += this._windowsQuoteCmdArg(toolPath);
|
||
for (const a of args) {
|
||
cmd += ` ${this._windowsQuoteCmdArg(a)}`;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
// OSX/Linux - this can likely be improved with some form of quoting.
|
||
// creating processes on Unix is fundamentally different than Windows.
|
||
// on Unix, execvp() takes an arg array.
|
||
cmd += toolPath;
|
||
for (const a of args) {
|
||
cmd += ` ${a}`;
|
||
}
|
||