diff --git a/lib/external-queries.js b/lib/external-queries.js index e837bcd2f..6d79504ab 100644 --- a/lib/external-queries.js +++ b/lib/external-queries.js @@ -21,7 +21,7 @@ async function checkoutExternalRepository(repository, ref, githubUrl, tempDir, l throw new Error(`'${repository}@${ref}' is not a valid repository and reference.`); } if (!fs.existsSync(checkoutLocation)) { - const repoURL = githubUrl + '/' + repository + '.git'; + const repoURL = githubUrl + '/' + repository; await new toolrunnner.ToolRunner('git', ['clone', repoURL, checkoutLocation]).exec(); await new toolrunnner.ToolRunner('git', [ '--work-tree=' + checkoutLocation, diff --git a/lib/external-queries.js.map b/lib/external-queries.js.map index 220fbd169..103003b45 100644 --- a/lib/external-queries.js.map +++ b/lib/external-queries.js.map @@ -1 +1 @@ -{"version":3,"file":"external-queries.js","sourceRoot":"","sources":["../src/external-queries.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0EAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAI7B;;GAEG;AACI,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,OAAe,EACf,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,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;QACzC,wGAAwG;QACxG,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,IAAI,GAAG,4CAA4C,CAAC,CAAC;KACpF;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,SAAS,GAAG,GAAG,GAAG,UAAU,GAAG,MAAM,CAAC;QACtD,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE;YACtC,cAAc,GAAG,gBAAgB;YACjC,YAAY,GAAG,gBAAgB,GAAG,OAAO;YACzC,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC,IAAI,EAAE,CAAC;KACX;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AA3BD,gEA2BC"} \ No newline at end of file +{"version":3,"file":"external-queries.js","sourceRoot":"","sources":["../src/external-queries.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0EAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAI7B;;GAEG;AACI,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,OAAe,EACf,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,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;QACzC,wGAAwG;QACxG,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,IAAI,GAAG,4CAA4C,CAAC,CAAC;KACpF;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,SAAS,GAAG,GAAG,GAAG,UAAU,CAAC;QAC7C,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE;YACtC,cAAc,GAAG,gBAAgB;YACjC,YAAY,GAAG,gBAAgB,GAAG,OAAO;YACzC,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC,IAAI,EAAE,CAAC;KACX;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AA3BD,gEA2BC"} \ No newline at end of file diff --git a/lib/external-queries.test.js b/lib/external-queries.test.js index 1a377937a..acc42403a 100644 --- a/lib/external-queries.test.js +++ b/lib/external-queries.test.js @@ -1,7 +1,4 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; @@ -9,7 +6,11 @@ var __importStar = (this && this.__importStar) || function (mod) { result["default"] = mod; return result; }; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; Object.defineProperty(exports, "__esModule", { value: true }); +const toolrunnner = __importStar(require("@actions/exec/lib/toolrunner")); const ava_1 = __importDefault(require("ava")); const fs = __importStar(require("fs")); const path = __importStar(require("path")); @@ -20,10 +21,67 @@ const util = __importStar(require("./util")); testing_utils_1.setupTests(ava_1.default); ava_1.default("checkoutExternalQueries", async (t) => { await util.withTmpDir(async (tmpDir) => { - const ref = "df4c6869212341b601005567381944ed90906b6b"; - await externalQueries.checkoutExternalRepository("github/codeql-go", ref, 'https://github.com', tmpDir, logging_1.getRunnerLogger(true)); - // COPYRIGHT file existed in df4c6869212341b601005567381944ed90906b6b but not in the default branch - t.true(fs.existsSync(path.join(tmpDir, "github", "codeql-go", ref, "COPYRIGHT"))); + // 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 toolrunnner.ToolRunner('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']); + 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, `file://${testRepoBaseDir}`, tmpDir, 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, `file://${testRepoBaseDir}`, tmpDir, 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'))); }); }); //# 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 index 2b86d4f7e..1f21efe57 100644 --- a/lib/external-queries.test.js.map +++ b/lib/external-queries.test.js.map @@ -1 +1 @@ -{"version":3,"file":"external-queries.test.js","sourceRoot":"","sources":["../src/external-queries.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAuB;AACvB,uCAAyB;AACzB,2CAA6B;AAE7B,oEAAsD;AACtD,uCAA4C;AAC5C,mDAA2C;AAC3C,6CAA+B;AAE/B,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,yBAAyB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACxC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QACnC,MAAM,GAAG,GAAG,0CAA0C,CAAC;QACvD,MAAM,eAAe,CAAC,0BAA0B,CAC9C,kBAAkB,EAClB,GAAG,EACH,oBAAoB,EACpB,MAAM,EACN,yBAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzB,mGAAmG;QACnG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file +{"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 index 903b3d167..0bb40d544 100644 --- a/src/external-queries.test.ts +++ b/src/external-queries.test.ts @@ -1,3 +1,4 @@ +import * as toolrunnner from '@actions/exec/lib/toolrunner'; import test from 'ava'; import * as fs from "fs"; import * as path from "path"; @@ -11,15 +12,86 @@ setupTests(test); test("checkoutExternalQueries", async t => { await util.withTmpDir(async tmpDir => { - const ref = "df4c6869212341b601005567381944ed90906b6b"; + // 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<string> { + let stdout = ''; + let stderr = ''; + command = [`--git-dir=${repoGitDir}`, `--work-tree=${repoPath}`, ...command]; + console.log('Running: git ' + command.join(' ')); + try { + await new toolrunnner.ToolRunner('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']); + + 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( - "github/codeql-go", - ref, - 'https://github.com', + repoName, + commit1Sha, + `file://${testRepoBaseDir}`, 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'))); + + - // COPYRIGHT file existed in df4c6869212341b601005567381944ed90906b6b but not in the default branch - t.true(fs.existsSync(path.join(tmpDir, "github", "codeql-go", ref, "COPYRIGHT"))); + // 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, + `file://${testRepoBaseDir}`, + 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'))); }); }); diff --git a/src/external-queries.ts b/src/external-queries.ts index 1f54aa5a6..083e155a9 100644 --- a/src/external-queries.ts +++ b/src/external-queries.ts @@ -24,7 +24,7 @@ export async function checkoutExternalRepository( } if (!fs.existsSync(checkoutLocation)) { - const repoURL = githubUrl + '/' + repository + '.git'; + const repoURL = githubUrl + '/' + repository; await new toolrunnner.ToolRunner('git', ['clone', repoURL, checkoutLocation]).exec(); await new toolrunnner.ToolRunner('git', [ '--work-tree=' + checkoutLocation,