From b30262ccb4e7ced835cadd057a5d39e6d846ebd5 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Thu, 4 Jan 2024 15:09:24 +0000 Subject: [PATCH] Remove functionality for checking out external repos --- lib/external-queries.js | 72 --------------- lib/external-queries.js.map | 1 - lib/external-queries.test.js | 143 ---------------------------- lib/external-queries.test.js.map | 1 - src/external-queries.test.ts | 154 ------------------------------- src/external-queries.ts | 64 ------------- 6 files changed, 435 deletions(-) delete mode 100644 lib/external-queries.js delete mode 100644 lib/external-queries.js.map delete mode 100644 lib/external-queries.test.js delete mode 100644 lib/external-queries.test.js.map delete mode 100644 src/external-queries.test.ts delete mode 100644 src/external-queries.ts diff --git a/lib/external-queries.js b/lib/external-queries.js deleted file mode 100644 index fc2f064cc..000000000 --- a/lib/external-queries.js +++ /dev/null @@ -1,72 +0,0 @@ -"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.buildCheckoutURL = exports.checkoutExternalRepository = void 0; -const fs = __importStar(require("fs")); -const path = __importStar(require("path")); -const toolrunner = __importStar(require("@actions/exec/lib/toolrunner")); -const safeWhich = __importStar(require("@chrisgavin/safe-which")); -const util_1 = require("./util"); -/** - * Check out repository at the given ref, and return the directory of the checkout. - */ -async function checkoutExternalRepository(repository, ref, apiDetails, tempDir, logger) { - logger.info(`Checking out ${repository}`); - const checkoutLocation = path.join(tempDir, repository, ref); - if (!checkoutLocation.startsWith(tempDir)) { - // this still permits locations that mess with sibling repositories in `tempDir`, but that is acceptable - throw new util_1.UserError(`'${repository}@${ref}' is not a valid repository and reference.`); - } - if (!fs.existsSync(checkoutLocation)) { - const repoCloneURL = buildCheckoutURL(repository, apiDetails); - await new toolrunner.ToolRunner(await safeWhich.safeWhich("git"), [ - "clone", - repoCloneURL, - checkoutLocation, - ]).exec(); - await new toolrunner.ToolRunner(await safeWhich.safeWhich("git"), [ - `--work-tree=${checkoutLocation}`, - `--git-dir=${checkoutLocation}/.git`, - "checkout", - ref, - ]).exec(); - } - return checkoutLocation; -} -exports.checkoutExternalRepository = checkoutExternalRepository; -function buildCheckoutURL(repository, apiDetails) { - const repoCloneURL = new URL(apiDetails.url); - if (apiDetails.externalRepoAuth !== undefined) { - repoCloneURL.username = "x-access-token"; - repoCloneURL.password = apiDetails.externalRepoAuth; - } - if (!repoCloneURL.pathname.endsWith("/")) { - repoCloneURL.pathname += "/"; - } - repoCloneURL.pathname += `${repository}`; - return repoCloneURL.toString(); -} -exports.buildCheckoutURL = buildCheckoutURL; -//# sourceMappingURL=external-queries.js.map \ No newline at end of file diff --git a/lib/external-queries.js.map b/lib/external-queries.js.map deleted file mode 100644 index cc83bba91..000000000 --- a/lib/external-queries.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"external-queries.js","sourceRoot":"","sources":["../src/external-queries.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,yEAA2D;AAC3D,kEAAoD;AAIpD,iCAAmC;AAEnC;;GAEG;AACI,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,GAAW,EACX,UAAwC,EACxC,OAAe,EACf,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,wGAAwG;QACxG,MAAM,IAAI,gBAAS,CACjB,IAAI,UAAU,IAAI,GAAG,4CAA4C,CAClE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9D,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAChE,OAAO;YACP,YAAY;YACZ,gBAAgB;SACjB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAChE,eAAe,gBAAgB,EAAE;YACjC,aAAa,gBAAgB,OAAO;YACpC,UAAU;YACV,GAAG;SACJ,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAlCD,gEAkCC;AAED,SAAgB,gBAAgB,CAC9B,UAAkB,EAClB,UAAwC;IAExC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC9C,YAAY,CAAC,QAAQ,GAAG,gBAAgB,CAAC;QACzC,YAAY,CAAC,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC;IACtD,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,YAAY,CAAC,QAAQ,IAAI,GAAG,CAAC;IAC/B,CAAC;IACD,YAAY,CAAC,QAAQ,IAAI,GAAG,UAAU,EAAE,CAAC;IACzC,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;AACjC,CAAC;AAdD,4CAcC"} \ No newline at end of file diff --git a/lib/external-queries.test.js b/lib/external-queries.test.js deleted file mode 100644 index 64f709fd1..000000000 --- a/lib/external-queries.test.js +++ /dev/null @@ -1,143 +0,0 @@ -"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 __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const fs = __importStar(require("fs")); -const path = __importStar(require("path")); -const toolrunner = __importStar(require("@actions/exec/lib/toolrunner")); -const safeWhich = __importStar(require("@chrisgavin/safe-which")); -const ava_1 = __importDefault(require("ava")); -const externalQueries = __importStar(require("./external-queries")); -const logging_1 = require("./logging"); -const testing_utils_1 = require("./testing-utils"); -const util = __importStar(require("./util")); -(0, testing_utils_1.setupTests)(ava_1.default); -(0, ava_1.default)("checkoutExternalQueries", async (t) => { - await util.withTmpDir(async (tmpDir) => { - // Create a test repo in a subdir of the temp dir. - // It should have a default branch with two commits after the initial commit, where - // - the first commit contains files 'a' and 'b' - // - the second commit contains only 'a' - // Place the repo in a subdir because we're going to checkout a copy in tmpDir - const testRepoBaseDir = path.join(tmpDir, "test-repo-dir"); - const repoName = "some/repo"; - const repoPath = path.join(testRepoBaseDir, repoName); - const repoGitDir = path.join(repoPath, ".git"); - // Run the given git command, and return the output. - // Passes --git-dir and --work-tree. - // Any stderr output is suppressed until the command fails. - const runGit = async function (command) { - let stdout = ""; - let stderr = ""; - command = [ - `--git-dir=${repoGitDir}`, - `--work-tree=${repoPath}`, - ...command, - ]; - console.log(`Running: git ${command.join(" ")}`); - try { - await new toolrunner.ToolRunner(await safeWhich.safeWhich("git"), command, { - silent: true, - listeners: { - stdout: (data) => { - stdout += data.toString(); - }, - stderr: (data) => { - stderr += data.toString(); - }, - }, - }).exec(); - } - catch (e) { - console.log(`Command failed: git ${command.join(" ")}`); - process.stderr.write(stderr); - throw e; - } - return stdout.trim(); - }; - fs.mkdirSync(repoPath, { recursive: true }); - await runGit(["init", repoPath]); - await runGit(["config", "user.email", "test@github.com"]); - await runGit(["config", "user.name", "Test Test"]); - await runGit(["config", "commit.gpgsign", "false"]); - fs.writeFileSync(path.join(repoPath, "a"), "a content"); - await runGit(["add", "a"]); - await runGit(["commit", "-m", "commit1"]); - fs.writeFileSync(path.join(repoPath, "b"), "b content"); - await runGit(["add", "b"]); - await runGit(["commit", "-m", "commit1"]); - const commit1Sha = await runGit(["rev-parse", "HEAD"]); - fs.unlinkSync(path.join(repoPath, "b")); - await runGit(["add", "b"]); - await runGit(["commit", "-m", "commit2"]); - const commit2Sha = await runGit(["rev-parse", "HEAD"]); - // Checkout the first commit, which should contain 'a' and 'b' - t.false(fs.existsSync(path.join(tmpDir, repoName))); - await externalQueries.checkoutExternalRepository(repoName, commit1Sha, { - url: `file://${testRepoBaseDir}`, - externalRepoAuth: "", - apiURL: undefined, - }, tmpDir, (0, logging_1.getRunnerLogger)(true)); - t.true(fs.existsSync(path.join(tmpDir, repoName))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "a"))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "b"))); - // Checkout the second commit as well, which should only contain 'a' - t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); - await externalQueries.checkoutExternalRepository(repoName, commit2Sha, { - url: `file://${testRepoBaseDir}`, - externalRepoAuth: "", - apiURL: undefined, - }, tmpDir, (0, logging_1.getRunnerLogger)(true)); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "a"))); - t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "b"))); - }); -}); -(0, ava_1.default)("buildCheckoutURL", (t) => { - t.deepEqual(externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.com", - externalRepoAuth: undefined, - apiURL: undefined, - }), "https://github.com/foo/bar"); - t.deepEqual(externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.example.com/", - externalRepoAuth: undefined, - apiURL: undefined, - }), "https://github.example.com/foo/bar"); - t.deepEqual(externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.com", - externalRepoAuth: "abc", - apiURL: undefined, - }), "https://x-access-token:abc@github.com/foo/bar"); - t.deepEqual(externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.example.com/", - externalRepoAuth: "abc", - apiURL: undefined, - }), "https://x-access-token:abc@github.example.com/foo/bar"); -}); -//# sourceMappingURL=external-queries.test.js.map \ No newline at end of file diff --git a/lib/external-queries.test.js.map b/lib/external-queries.test.js.map deleted file mode 100644 index 2f4ac9347..000000000 --- a/lib/external-queries.test.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"external-queries.test.js","sourceRoot":"","sources":["../src/external-queries.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/external-queries.test.ts b/src/external-queries.test.ts deleted file mode 100644 index 992ebbd2f..000000000 --- a/src/external-queries.test.ts +++ /dev/null @@ -1,154 +0,0 @@ -import * as fs from "fs"; -import * as path from "path"; - -import * as toolrunner from "@actions/exec/lib/toolrunner"; -import * as safeWhich from "@chrisgavin/safe-which"; -import test from "ava"; - -import * as externalQueries from "./external-queries"; -import { getRunnerLogger } from "./logging"; -import { setupTests } from "./testing-utils"; -import * as util from "./util"; - -setupTests(test); - -test("checkoutExternalQueries", async (t) => { - await util.withTmpDir(async (tmpDir) => { - // Create a test repo in a subdir of the temp dir. - // It should have a default branch with two commits after the initial commit, where - // - the first commit contains files 'a' and 'b' - // - the second commit contains only 'a' - // Place the repo in a subdir because we're going to checkout a copy in tmpDir - const testRepoBaseDir = path.join(tmpDir, "test-repo-dir"); - const repoName = "some/repo"; - const repoPath = path.join(testRepoBaseDir, repoName); - const repoGitDir = path.join(repoPath, ".git"); - - // Run the given git command, and return the output. - // Passes --git-dir and --work-tree. - // Any stderr output is suppressed until the command fails. - const runGit = async function (command: string[]): Promise { - let stdout = ""; - let stderr = ""; - command = [ - `--git-dir=${repoGitDir}`, - `--work-tree=${repoPath}`, - ...command, - ]; - console.log(`Running: git ${command.join(" ")}`); - try { - await new toolrunner.ToolRunner( - await safeWhich.safeWhich("git"), - command, - { - silent: true, - listeners: { - stdout: (data) => { - stdout += data.toString(); - }, - stderr: (data) => { - stderr += data.toString(); - }, - }, - }, - ).exec(); - } catch (e) { - console.log(`Command failed: git ${command.join(" ")}`); - process.stderr.write(stderr); - throw e; - } - return stdout.trim(); - }; - - fs.mkdirSync(repoPath, { recursive: true }); - await runGit(["init", repoPath]); - await runGit(["config", "user.email", "test@github.com"]); - await runGit(["config", "user.name", "Test Test"]); - await runGit(["config", "commit.gpgsign", "false"]); - - fs.writeFileSync(path.join(repoPath, "a"), "a content"); - await runGit(["add", "a"]); - await runGit(["commit", "-m", "commit1"]); - - fs.writeFileSync(path.join(repoPath, "b"), "b content"); - await runGit(["add", "b"]); - await runGit(["commit", "-m", "commit1"]); - const commit1Sha = await runGit(["rev-parse", "HEAD"]); - - fs.unlinkSync(path.join(repoPath, "b")); - await runGit(["add", "b"]); - await runGit(["commit", "-m", "commit2"]); - const commit2Sha = await runGit(["rev-parse", "HEAD"]); - - // Checkout the first commit, which should contain 'a' and 'b' - t.false(fs.existsSync(path.join(tmpDir, repoName))); - await externalQueries.checkoutExternalRepository( - repoName, - commit1Sha, - { - url: `file://${testRepoBaseDir}`, - externalRepoAuth: "", - apiURL: undefined, - }, - tmpDir, - getRunnerLogger(true), - ); - t.true(fs.existsSync(path.join(tmpDir, repoName))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "a"))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "b"))); - - // Checkout the second commit as well, which should only contain 'a' - t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); - await externalQueries.checkoutExternalRepository( - repoName, - commit2Sha, - { - url: `file://${testRepoBaseDir}`, - externalRepoAuth: "", - apiURL: undefined, - }, - tmpDir, - getRunnerLogger(true), - ); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "a"))); - t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "b"))); - }); -}); - -test("buildCheckoutURL", (t) => { - t.deepEqual( - externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.com", - externalRepoAuth: undefined, - apiURL: undefined, - }), - "https://github.com/foo/bar", - ); - t.deepEqual( - externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.example.com/", - externalRepoAuth: undefined, - apiURL: undefined, - }), - "https://github.example.com/foo/bar", - ); - - t.deepEqual( - externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.com", - externalRepoAuth: "abc", - apiURL: undefined, - }), - "https://x-access-token:abc@github.com/foo/bar", - ); - t.deepEqual( - externalQueries.buildCheckoutURL("foo/bar", { - url: "https://github.example.com/", - externalRepoAuth: "abc", - apiURL: undefined, - }), - "https://x-access-token:abc@github.example.com/foo/bar", - ); -}); diff --git a/src/external-queries.ts b/src/external-queries.ts deleted file mode 100644 index 44fbe80ba..000000000 --- a/src/external-queries.ts +++ /dev/null @@ -1,64 +0,0 @@ -import * as fs from "fs"; -import * as path from "path"; - -import * as toolrunner from "@actions/exec/lib/toolrunner"; -import * as safeWhich from "@chrisgavin/safe-which"; - -import { GitHubApiExternalRepoDetails } from "./api-client"; -import { Logger } from "./logging"; -import { UserError } from "./util"; - -/** - * Check out repository at the given ref, and return the directory of the checkout. - */ -export async function checkoutExternalRepository( - repository: string, - ref: string, - apiDetails: GitHubApiExternalRepoDetails, - tempDir: string, - logger: Logger, -): Promise { - logger.info(`Checking out ${repository}`); - - const checkoutLocation = path.join(tempDir, repository, ref); - - if (!checkoutLocation.startsWith(tempDir)) { - // this still permits locations that mess with sibling repositories in `tempDir`, but that is acceptable - throw new UserError( - `'${repository}@${ref}' is not a valid repository and reference.`, - ); - } - - if (!fs.existsSync(checkoutLocation)) { - const repoCloneURL = buildCheckoutURL(repository, apiDetails); - await new toolrunner.ToolRunner(await safeWhich.safeWhich("git"), [ - "clone", - repoCloneURL, - checkoutLocation, - ]).exec(); - await new toolrunner.ToolRunner(await safeWhich.safeWhich("git"), [ - `--work-tree=${checkoutLocation}`, - `--git-dir=${checkoutLocation}/.git`, - "checkout", - ref, - ]).exec(); - } - - return checkoutLocation; -} - -export function buildCheckoutURL( - repository: string, - apiDetails: GitHubApiExternalRepoDetails, -): string { - const repoCloneURL = new URL(apiDetails.url); - if (apiDetails.externalRepoAuth !== undefined) { - repoCloneURL.username = "x-access-token"; - repoCloneURL.password = apiDetails.externalRepoAuth; - } - if (!repoCloneURL.pathname.endsWith("/")) { - repoCloneURL.pathname += "/"; - } - repoCloneURL.pathname += `${repository}`; - return repoCloneURL.toString(); -}