From 26178058e4938f94a31faab19a99003626cba070 Mon Sep 17 00:00:00 2001 From: peter-evans <18365890+peter-evans@users.noreply.github.com> Date: Wed, 31 Jan 2024 10:45:17 +0000 Subject: [PATCH] [CI] test built --- action.yml | 10 +- dist/index.js | 499 +++++++++++++++++++++++++++----------------------- report.txt | 1 + 3 files changed, 273 insertions(+), 237 deletions(-) create mode 100644 report.txt diff --git a/action.yml b/action.yml index 39652f6..e265d04 100644 --- a/action.yml +++ b/action.yml @@ -4,6 +4,10 @@ inputs: token: description: 'GITHUB_TOKEN or a `repo` scoped Personal Access Token (PAT)' default: ${{ github.token }} + git-token: + description: > + The Personal Access Token (PAT) that the action will use for git operations. + Defaults to the value of `token`. path: description: > Relative path under $GITHUB_WORKSPACE to the repository. @@ -20,12 +24,12 @@ inputs: description: > The committer name and email address in the format `Display Name `. Defaults to the GitHub Actions bot user. - default: 'GitHub ' + default: 'github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>' author: description: > The author name and email address in the format `Display Name `. Defaults to the user who triggered the workflow run. - default: '${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>' + default: '${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com>' signoff: description: 'Add `Signed-off-by` line by the committer at the end of the commit log message.' default: false @@ -80,7 +84,7 @@ outputs: pull-request-head-sha: description: 'The commit SHA of the pull request branch.' runs: - using: 'node16' + using: 'node20' main: 'dist/index.js' branding: icon: 'git-pull-request' diff --git a/dist/index.js b/dist/index.js index 66d4115..1089e16 100644 --- a/dist/index.js +++ b/dist/index.js @@ -171,9 +171,7 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName if (branchRemoteName == 'fork') { // If pushing to a fork we must fetch with 'unshallow' to avoid the following error on git push // ! [remote rejected] HEAD -> tests/push-branch-to-fork (shallow update not allowed) - yield git.fetch([`${workingBase}:${workingBase}`], baseRemote, [ - '--force' - ]); + yield git.fetch([`${workingBase}:${workingBase}`], baseRemote, ['--force'], true); } else { // If the remote is 'origin' we can git reset @@ -318,43 +316,21 @@ const core = __importStar(__nccwpck_require__(2186)); const create_or_update_branch_1 = __nccwpck_require__(8363); const github_helper_1 = __nccwpck_require__(446); const git_command_manager_1 = __nccwpck_require__(738); -const git_auth_helper_1 = __nccwpck_require__(2565); +const git_config_helper_1 = __nccwpck_require__(8384); const utils = __importStar(__nccwpck_require__(918)); function createPullRequest(inputs) { return __awaiter(this, void 0, void 0, function* () { - let gitAuthHelper; + let gitConfigHelper, git; try { - if (!inputs.token) { - throw new Error(`Input 'token' not supplied. Unable to continue.`); - } - if (inputs.bodyPath) { - if (!utils.fileExistsSync(inputs.bodyPath)) { - throw new Error(`File '${inputs.bodyPath}' does not exist.`); - } - // Update the body input with the contents of the file - inputs.body = utils.readFile(inputs.bodyPath); - } - // 65536 characters is the maximum allowed for the pull request body. - if (inputs.body.length > 65536) { - core.warning(`Pull request body is too long. Truncating to 65536 characters.`); - inputs.body = inputs.body.substring(0, 65536); - } - // Get the repository path - const repoPath = utils.getRepoPath(inputs.path); - // Create a git command manager - const git = yield git_command_manager_1.GitCommandManager.create(repoPath); - // Save and unset the extraheader auth config if it exists core.startGroup('Prepare git configuration'); - gitAuthHelper = new git_auth_helper_1.GitAuthHelper(git); - yield gitAuthHelper.addSafeDirectory(); - yield gitAuthHelper.savePersistedAuth(); + const repoPath = utils.getRepoPath(inputs.path); + git = yield git_command_manager_1.GitCommandManager.create(repoPath); + gitConfigHelper = yield git_config_helper_1.GitConfigHelper.create(git); core.endGroup(); - // Init the GitHub client - const githubHelper = new github_helper_1.GitHubHelper(inputs.token); core.startGroup('Determining the base and head repositories'); - // Determine the base repository from git config - const remoteUrl = yield git.tryGetRemoteUrl(); - const baseRemote = utils.getRemoteDetail(remoteUrl); + const baseRemote = gitConfigHelper.getGitRemote(); + // Init the GitHub client + const githubHelper = new github_helper_1.GitHubHelper(baseRemote.hostname, inputs.token); // Determine the head repository; the target for the pull request branch const branchRemoteName = inputs.pushToFork ? 'fork' : 'origin'; const branchRepository = inputs.pushToFork @@ -363,9 +339,14 @@ function createPullRequest(inputs) { if (inputs.pushToFork) { // Check if the supplied fork is really a fork of the base core.info(`Checking if '${branchRepository}' is a fork of '${baseRemote.repository}'`); - const parentRepository = yield githubHelper.getRepositoryParent(branchRepository); - if (parentRepository != baseRemote.repository) { - throw new Error(`Repository '${branchRepository}' is not a fork of '${baseRemote.repository}'. Unable to continue.`); + const baseParentRepository = yield githubHelper.getRepositoryParent(baseRemote.repository); + const branchParentRepository = yield githubHelper.getRepositoryParent(branchRepository); + if (branchParentRepository == null) { + throw new Error(`Repository '${branchRepository}' is not a fork. Unable to continue.`); + } + if (branchParentRepository != baseRemote.repository && + baseParentRepository != branchParentRepository) { + throw new Error(`Repository '${branchRepository}' is not a fork of '${baseRemote.repository}', nor are they siblings. Unable to continue.`); } // Add a remote for the fork const remoteUrl = utils.getRemoteUrl(baseRemote.protocol, baseRemote.hostname, branchRepository); @@ -376,7 +357,7 @@ function createPullRequest(inputs) { // Configure auth if (baseRemote.protocol == 'HTTPS') { core.startGroup('Configuring credential for HTTPS authentication'); - yield gitAuthHelper.configureToken(inputs.token); + yield gitConfigHelper.configureToken(inputs.gitToken); core.endGroup(); } core.startGroup('Checking the base repository state'); @@ -503,11 +484,11 @@ function createPullRequest(inputs) { core.setFailed(utils.getErrorMessage(error)); } finally { - // Remove auth and restore persisted auth config if it existed core.startGroup('Restore git configuration'); - yield gitAuthHelper.removeAuth(); - yield gitAuthHelper.restorePersistedAuth(); - yield gitAuthHelper.removeSafeDirectory(); + if (inputs.pushToFork) { + yield git.exec(['remote', 'rm', 'fork']); + } + yield gitConfigHelper.close(); core.endGroup(); } }); @@ -515,163 +496,6 @@ function createPullRequest(inputs) { exports.createPullRequest = createPullRequest; -/***/ }), - -/***/ 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.GitAuthHelper = void 0; -const core = __importStar(__nccwpck_require__(2186)); -const fs = __importStar(__nccwpck_require__(7147)); -const path = __importStar(__nccwpck_require__(1017)); -const url_1 = __nccwpck_require__(7310); -const utils = __importStar(__nccwpck_require__(918)); -class GitAuthHelper { - constructor(git) { - this.gitConfigPath = ''; - this.safeDirectoryConfigKey = 'safe.directory'; - this.safeDirectoryAdded = false; - this.extraheaderConfigPlaceholderValue = 'AUTHORIZATION: basic ***'; - this.extraheaderConfigValueRegex = '^AUTHORIZATION:'; - this.persistedExtraheaderConfigValue = ''; - this.git = git; - this.workingDirectory = this.git.getWorkingDirectory(); - const serverUrl = this.getServerUrl(); - this.extraheaderConfigKey = `http.${serverUrl.origin}/.extraheader`; - } - addSafeDirectory() { - return __awaiter(this, void 0, void 0, function* () { - const exists = yield this.git.configExists(this.safeDirectoryConfigKey, this.workingDirectory, true); - if (!exists) { - yield this.git.config(this.safeDirectoryConfigKey, this.workingDirectory, true, true); - this.safeDirectoryAdded = true; - } - }); - } - removeSafeDirectory() { - return __awaiter(this, void 0, void 0, function* () { - if (this.safeDirectoryAdded) { - yield this.git.tryConfigUnset(this.safeDirectoryConfigKey, this.workingDirectory, true); - } - }); - } - savePersistedAuth() { - return __awaiter(this, void 0, void 0, function* () { - // Save and unset persisted extraheader credential in git config if it exists - this.persistedExtraheaderConfigValue = yield this.getAndUnset(); - }); - } - restorePersistedAuth() { - return __awaiter(this, void 0, void 0, function* () { - if (this.persistedExtraheaderConfigValue) { - try { - yield this.setExtraheaderConfig(this.persistedExtraheaderConfigValue); - core.info('Persisted git credentials restored'); - } - catch (e) { - core.warning(utils.getErrorMessage(e)); - } - } - }); - } - configureToken(token) { - return __awaiter(this, void 0, void 0, function* () { - // Encode and configure the basic credential for HTTPS access - const basicCredential = Buffer.from(`x-access-token:${token}`, 'utf8').toString('base64'); - core.setSecret(basicCredential); - const extraheaderConfigValue = `AUTHORIZATION: basic ${basicCredential}`; - yield this.setExtraheaderConfig(extraheaderConfigValue); - }); - } - removeAuth() { - return __awaiter(this, void 0, void 0, function* () { - yield this.getAndUnset(); - }); - } - setExtraheaderConfig(extraheaderConfigValue) { - return __awaiter(this, void 0, void 0, function* () { - // 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 - // See https://github.com/actions/checkout/blob/main/src/git-auth-helper.ts#L267-L274 - yield this.git.config(this.extraheaderConfigKey, this.extraheaderConfigPlaceholderValue); - // Replace the placeholder - yield this.gitConfigStringReplace(this.extraheaderConfigPlaceholderValue, extraheaderConfigValue); - }); - } - getAndUnset() { - return __awaiter(this, void 0, void 0, function* () { - let configValue = ''; - // Save and unset persisted extraheader credential in git config if it exists - if (yield this.git.configExists(this.extraheaderConfigKey, this.extraheaderConfigValueRegex)) { - configValue = yield this.git.getConfigValue(this.extraheaderConfigKey, this.extraheaderConfigValueRegex); - if (yield this.git.tryConfigUnset(this.extraheaderConfigKey, this.extraheaderConfigValueRegex)) { - core.info(`Unset config key '${this.extraheaderConfigKey}'`); - } - else { - core.warning(`Failed to unset config key '${this.extraheaderConfigKey}'`); - } - } - return configValue; - }); - } - gitConfigStringReplace(find, replace) { - return __awaiter(this, void 0, void 0, function* () { - if (this.gitConfigPath.length === 0) { - const gitDir = yield this.git.getGitDirectory(); - this.gitConfigPath = path.join(this.workingDirectory, gitDir, 'config'); - } - let content = (yield fs.promises.readFile(this.gitConfigPath)).toString(); - const index = content.indexOf(find); - if (index < 0 || index != content.lastIndexOf(find)) { - throw new Error(`Unable to replace '${find}' in ${this.gitConfigPath}`); - } - content = content.replace(find, replace); - yield fs.promises.writeFile(this.gitConfigPath, content); - }); - } - getServerUrl() { - return new url_1.URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); - } -} -exports.GitAuthHelper = GitAuthHelper; - - /***/ }), /***/ 738: @@ -793,14 +617,15 @@ class GitCommandManager { return output.exitCode === 0; }); } - fetch(refSpec, remoteName, options) { + fetch(refSpec, remoteName, options, unshallow = false) { return __awaiter(this, void 0, void 0, function* () { const args = ['-c', 'protocol.version=2', 'fetch']; if (!refSpec.some(x => x === tagsRefSpec)) { args.push('--no-tags'); } args.push('--progress', '--no-recurse-submodules'); - if (utils.fileExistsSync(path.join(this.workingDirectory, '.git', 'shallow'))) { + if (unshallow && + utils.fileExistsSync(path.join(this.workingDirectory, '.git', 'shallow'))) { args.push('--unshallow'); } if (options) { @@ -1002,6 +827,218 @@ class GitOutput { } +/***/ }), + +/***/ 8384: +/***/ (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.GitConfigHelper = void 0; +const core = __importStar(__nccwpck_require__(2186)); +const fs = __importStar(__nccwpck_require__(7147)); +const path = __importStar(__nccwpck_require__(1017)); +const url_1 = __nccwpck_require__(7310); +const utils = __importStar(__nccwpck_require__(918)); +class GitConfigHelper { + constructor(git) { + this.gitConfigPath = ''; + this.safeDirectoryConfigKey = 'safe.directory'; + this.safeDirectoryAdded = false; + this.remoteUrl = ''; + this.extraheaderConfigKey = ''; + this.extraheaderConfigPlaceholderValue = 'AUTHORIZATION: basic ***'; + this.extraheaderConfigValueRegex = '^AUTHORIZATION:'; + this.persistedExtraheaderConfigValue = ''; + this.git = git; + this.workingDirectory = this.git.getWorkingDirectory(); + } + static create(git) { + return __awaiter(this, void 0, void 0, function* () { + const gitConfigHelper = new GitConfigHelper(git); + yield gitConfigHelper.addSafeDirectory(); + yield gitConfigHelper.fetchRemoteDetail(); + yield gitConfigHelper.savePersistedAuth(); + return gitConfigHelper; + }); + } + close() { + return __awaiter(this, void 0, void 0, function* () { + // Remove auth and restore persisted auth config if it existed + yield this.removeAuth(); + yield this.restorePersistedAuth(); + yield this.removeSafeDirectory(); + }); + } + addSafeDirectory() { + return __awaiter(this, void 0, void 0, function* () { + const exists = yield this.git.configExists(this.safeDirectoryConfigKey, this.workingDirectory, true); + if (!exists) { + yield this.git.config(this.safeDirectoryConfigKey, this.workingDirectory, true, true); + this.safeDirectoryAdded = true; + } + }); + } + removeSafeDirectory() { + return __awaiter(this, void 0, void 0, function* () { + if (this.safeDirectoryAdded) { + yield this.git.tryConfigUnset(this.safeDirectoryConfigKey, this.workingDirectory, true); + } + }); + } + fetchRemoteDetail() { + return __awaiter(this, void 0, void 0, function* () { + this.remoteUrl = yield this.git.tryGetRemoteUrl(); + }); + } + getGitRemote() { + return GitConfigHelper.parseGitRemote(this.remoteUrl); + } + static parseGitRemote(remoteUrl) { + const httpsUrlPattern = new RegExp('^(https?)://(?:.+@)?(.+?)/(.+/.+?)(\\.git)?$', 'i'); + const httpsMatch = remoteUrl.match(httpsUrlPattern); + if (httpsMatch) { + return { + hostname: httpsMatch[2], + protocol: 'HTTPS', + repository: httpsMatch[3] + }; + } + const sshUrlPattern = new RegExp('^git@(.+?):(.+/.+)\\.git$', 'i'); + const sshMatch = remoteUrl.match(sshUrlPattern); + if (sshMatch) { + return { + hostname: sshMatch[1], + protocol: 'SSH', + repository: sshMatch[2] + }; + } + // Unauthenticated git protocol for integration tests only + const gitUrlPattern = new RegExp('^git://(.+?)/(.+/.+)\\.git$', 'i'); + const gitMatch = remoteUrl.match(gitUrlPattern); + if (gitMatch) { + return { + hostname: gitMatch[1], + protocol: 'GIT', + repository: gitMatch[2] + }; + } + throw new Error(`The format of '${remoteUrl}' is not a valid GitHub repository URL`); + } + savePersistedAuth() { + return __awaiter(this, void 0, void 0, function* () { + const serverUrl = new url_1.URL(`https://${this.getGitRemote().hostname}`); + this.extraheaderConfigKey = `http.${serverUrl.origin}/.extraheader`; + // Save and unset persisted extraheader credential in git config if it exists + this.persistedExtraheaderConfigValue = yield this.getAndUnset(); + }); + } + restorePersistedAuth() { + return __awaiter(this, void 0, void 0, function* () { + if (this.persistedExtraheaderConfigValue) { + try { + yield this.setExtraheaderConfig(this.persistedExtraheaderConfigValue); + core.info('Persisted git credentials restored'); + } + catch (e) { + core.warning(utils.getErrorMessage(e)); + } + } + }); + } + configureToken(token) { + return __awaiter(this, void 0, void 0, function* () { + // Encode and configure the basic credential for HTTPS access + const basicCredential = Buffer.from(`x-access-token:${token}`, 'utf8').toString('base64'); + core.setSecret(basicCredential); + const extraheaderConfigValue = `AUTHORIZATION: basic ${basicCredential}`; + yield this.setExtraheaderConfig(extraheaderConfigValue); + }); + } + removeAuth() { + return __awaiter(this, void 0, void 0, function* () { + yield this.getAndUnset(); + }); + } + setExtraheaderConfig(extraheaderConfigValue) { + return __awaiter(this, void 0, void 0, function* () { + // 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 + // See https://github.com/actions/checkout/blob/main/src/git-auth-helper.ts#L267-L274 + yield this.git.config(this.extraheaderConfigKey, this.extraheaderConfigPlaceholderValue); + // Replace the placeholder + yield this.gitConfigStringReplace(this.extraheaderConfigPlaceholderValue, extraheaderConfigValue); + }); + } + getAndUnset() { + return __awaiter(this, void 0, void 0, function* () { + let configValue = ''; + // Save and unset persisted extraheader credential in git config if it exists + if (yield this.git.configExists(this.extraheaderConfigKey, this.extraheaderConfigValueRegex)) { + configValue = yield this.git.getConfigValue(this.extraheaderConfigKey, this.extraheaderConfigValueRegex); + if (yield this.git.tryConfigUnset(this.extraheaderConfigKey, this.extraheaderConfigValueRegex)) { + core.info(`Unset config key '${this.extraheaderConfigKey}'`); + } + else { + core.warning(`Failed to unset config key '${this.extraheaderConfigKey}'`); + } + } + return configValue; + }); + } + gitConfigStringReplace(find, replace) { + return __awaiter(this, void 0, void 0, function* () { + if (this.gitConfigPath.length === 0) { + const gitDir = yield this.git.getGitDirectory(); + this.gitConfigPath = path.join(this.workingDirectory, gitDir, 'config'); + } + let content = (yield fs.promises.readFile(this.gitConfigPath)).toString(); + const index = content.indexOf(find); + if (index < 0 || index != content.lastIndexOf(find)) { + throw new Error(`Unable to replace '${find}' in ${this.gitConfigPath}`); + } + content = content.replace(find, replace); + yield fs.promises.writeFile(this.gitConfigPath, content); + }); + } +} +exports.GitConfigHelper = GitConfigHelper; + + /***/ }), /***/ 446: @@ -1048,12 +1085,17 @@ const octokit_client_1 = __nccwpck_require__(5040); const utils = __importStar(__nccwpck_require__(918)); const ERROR_PR_REVIEW_TOKEN_SCOPE = 'Validation Failed: "Could not resolve to a node with the global id of'; class GitHubHelper { - constructor(token) { + constructor(githubServerHostname, token) { const options = {}; if (token) { options.auth = `${token}`; } - options.baseUrl = process.env['GITHUB_API_URL'] || 'https://api.github.com'; + if (githubServerHostname !== 'github.com') { + options.baseUrl = `https://${githubServerHostname}/api/v3`; + } + else { + options.baseUrl = 'https://api.github.com'; + } this.octokit = new octokit_client_1.Octokit(options); } parseRepository(repository) { @@ -1104,7 +1146,7 @@ class GitHubHelper { return __awaiter(this, void 0, void 0, function* () { const { data: headRepo } = yield this.octokit.rest.repos.get(Object.assign({}, this.parseRepository(headRepository))); if (!headRepo.parent) { - throw new Error(`Repository '${headRepository}' is not a fork. Unable to continue.`); + return null; } return headRepo.parent.full_name; }); @@ -1206,6 +1248,7 @@ function run() { try { const inputs = { token: core.getInput('token'), + gitToken: core.getInput('git-token'), path: core.getInput('path'), addPaths: utils.getInputAsArray('add-paths'), commitMessage: core.getInput('commit-message'), @@ -1228,6 +1271,24 @@ function run() { draft: core.getBooleanInput('draft') }; core.debug(`Inputs: ${(0, util_1.inspect)(inputs)}`); + if (!inputs.token) { + throw new Error(`Input 'token' not supplied. Unable to continue.`); + } + if (!inputs.gitToken) { + inputs.gitToken = inputs.token; + } + if (inputs.bodyPath) { + if (!utils.fileExistsSync(inputs.bodyPath)) { + throw new Error(`File '${inputs.bodyPath}' does not exist.`); + } + // Update the body input with the contents of the file + inputs.body = utils.readFile(inputs.bodyPath); + } + // 65536 characters is the maximum allowed for the pull request body. + if (inputs.body.length > 65536) { + core.warning(`Pull request body is too long. Truncating to 65536 characters.`); + inputs.body = inputs.body.substring(0, 65536); + } yield (0, create_pull_request_1.createPullRequest)(inputs); } catch (error) { @@ -1295,7 +1356,7 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getErrorMessage = exports.readFile = exports.fileExistsSync = exports.parseDisplayNameEmail = exports.randomString = exports.secondsSinceEpoch = exports.getRemoteUrl = exports.getRemoteDetail = exports.getRepoPath = exports.stripOrgPrefixFromTeams = exports.getStringAsArray = exports.getInputAsArray = void 0; +exports.getErrorMessage = exports.readFile = exports.fileExistsSync = exports.parseDisplayNameEmail = exports.randomString = exports.secondsSinceEpoch = exports.getRemoteUrl = exports.getRepoPath = exports.stripOrgPrefixFromTeams = exports.getStringAsArray = exports.getInputAsArray = void 0; const core = __importStar(__nccwpck_require__(2186)); const fs = __importStar(__nccwpck_require__(7147)); const path = __importStar(__nccwpck_require__(1017)); @@ -1334,36 +1395,6 @@ function getRepoPath(relativePath) { return repoPath; } exports.getRepoPath = getRepoPath; -function getRemoteDetail(remoteUrl) { - // Parse the protocol and github repository from a URL - // e.g. HTTPS, peter-evans/create-pull-request - const githubUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'; - const githubServerMatch = githubUrl.match(/^https?:\/\/(.+)$/i); - if (!githubServerMatch) { - throw new Error('Could not parse GitHub Server name'); - } - const hostname = githubServerMatch[1]; - const httpsUrlPattern = new RegExp('^https?://.*@?' + hostname + '/(.+/.+?)(\\.git)?$', 'i'); - const sshUrlPattern = new RegExp('^git@' + hostname + ':(.+/.+)\\.git$', 'i'); - const httpsMatch = remoteUrl.match(httpsUrlPattern); - if (httpsMatch) { - return { - hostname, - protocol: 'HTTPS', - repository: httpsMatch[1] - }; - } - const sshMatch = remoteUrl.match(sshUrlPattern); - if (sshMatch) { - return { - hostname, - protocol: 'SSH', - repository: sshMatch[1] - }; - } - throw new Error(`The format of '${remoteUrl}' is not a valid GitHub repository URL`); -} -exports.getRemoteDetail = getRemoteDetail; function getRemoteUrl(protocol, hostname, repository) { return protocol == 'HTTPS' ? `https://${hostname}/${repository}` diff --git a/report.txt b/report.txt new file mode 100644 index 0000000..7c3836e --- /dev/null +++ b/report.txt @@ -0,0 +1 @@ +1706697916