From 306dc1c898b59e8f4c5e110196c12d0edc6bb15c Mon Sep 17 00:00:00 2001 From: eric sciple Date: Mon, 9 Dec 2019 19:15:39 -0500 Subject: [PATCH] . --- dist/index.js | 25 ++++++++++++++++++------- src/git-command-manager.ts | 12 ++++++------ src/git-source-provider.ts | 6 ++++++ src/github-api-helper.ts | 18 +++++++++++++++++- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/dist/index.js b/dist/index.js index 765030c..c2cef21 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4439,6 +4439,9 @@ const fshelper = __importStar(__webpack_require__(618)); const io = __importStar(__webpack_require__(1)); const path = __importStar(__webpack_require__(622)); const git_version_1 = __webpack_require__(559); +// Auth header not supported before 2.9 +// Wire protocol v2 not supported before 2.18 +exports.MinimumGitVersion = new git_version_1.GitVersion('2.18'); function CreateCommandManager(workingDirectory, lfs) { return __awaiter(this, void 0, void 0, function* () { return yield GitCommandManager.createCommandManager(workingDirectory, lfs); @@ -4719,12 +4722,8 @@ class GitCommandManager { throw new Error('Unable to determine git version'); } // Minimum git version - // Note: - // - Auth header not supported before 2.9 - // - Wire protocol v2 not supported before 2.18 - const minimumGitVersion = new git_version_1.GitVersion('2.18'); - if (!gitVersion.checkMinimum(minimumGitVersion)) { - throw new Error(`Minimum required git version is ${minimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`); + if (!gitVersion.checkMinimum(exports.MinimumGitVersion)) { + throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`); } if (this.lfs) { // Git-lfs version @@ -4844,6 +4843,8 @@ function getSource(settings) { yield prepareExistingDirectory(git, settings.repositoryPath, repositoryUrl, settings.clean); } if (!git || `${1}` == '1') { + core.info(`Git version ${gitCommandManager.MinimumGitVersion} was not found in the PATH.`); + core.info(`Instead downloading the repository files using the GitHub REST API.`); yield githubApiHelper.downloadRepository(settings.accessToken, settings.repositoryOwner, settings.repositoryName, settings.ref, settings.repositoryPath); } else { @@ -8087,7 +8088,11 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", { value: true }); +const assert = __importStar(__webpack_require__(357)); +const exec = __importStar(__webpack_require__(986)); +const fs = __importStar(__webpack_require__(747)); const github = __importStar(__webpack_require__(469)); +const path = __importStar(__webpack_require__(622)); const IS_WINDOWS = process.platform === 'win32'; function downloadRepository(accessToken, owner, repo, ref, repositoryPath) { return __awaiter(this, void 0, void 0, function* () { @@ -8098,13 +8103,19 @@ function downloadRepository(accessToken, owner, repo, ref, repositoryPath) { repo: repo, ref: ref }; + // todo: retry const response = yield octokit.repos.getArchiveLink(params); if (response.status != 200) { - throw new Error(`GitHub API call failed with response status '${response.status}': ${response.data}`); + throw new Error(`Unexpected response from GitHub API. Status: '${response.status}'; Data: '${response.data}'`); } console.log(`status=${response.status}`); console.log(`headers=${JSON.stringify(response.headers)}`); console.log(`data=${JSON.stringify(typeof response.data)}`); + const runnerTemp = process.env['RUNNER_TEMP']; + assert.ok(runnerTemp, 'RUNNER_TEMP not defined'); + const archiveFile = path.join(runnerTemp, 'checkout.tar.gz'); + yield fs.promises.writeFile(archiveFile, response.data); + yield exec.exec(`tar -xzf "${archiveFile}"`, [], { cwd: repositoryPath }); }); } exports.downloadRepository = downloadRepository; diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index 6e4f22f..70dce8f 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -5,6 +5,10 @@ import * as io from '@actions/io' import * as path from 'path' import {GitVersion} from './git-version' +// Auth header not supported before 2.9 +// Wire protocol v2 not supported before 2.18 +export const MinimumGitVersion = new GitVersion('2.18') + export interface IGitCommandManager { branchDelete(remote: boolean, branch: string): Promise branchExists(remote: boolean, pattern: string): Promise @@ -338,13 +342,9 @@ class GitCommandManager { } // Minimum git version - // Note: - // - Auth header not supported before 2.9 - // - Wire protocol v2 not supported before 2.18 - const minimumGitVersion = new GitVersion('2.18') - if (!gitVersion.checkMinimum(minimumGitVersion)) { + if (!gitVersion.checkMinimum(MinimumGitVersion)) { throw new Error( - `Minimum required git version is ${minimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}` + `Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}` ) } diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index f96cd5d..487a8ee 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -79,6 +79,12 @@ export async function getSource(settings: ISourceSettings): Promise { } if (!git || `${1}` == '1') { + core.info( + `Git version ${gitCommandManager.MinimumGitVersion} was not found in the PATH.` + ) + core.info( + `Instead downloading the repository files using the GitHub REST API.` + ) await githubApiHelper.downloadRepository( settings.accessToken, settings.repositoryOwner, diff --git a/src/github-api-helper.ts b/src/github-api-helper.ts index 44fdd73..aa4ded2 100644 --- a/src/github-api-helper.ts +++ b/src/github-api-helper.ts @@ -1,5 +1,13 @@ +import * as assert from 'assert' +import * as core from '@actions/core' +import * as exec from '@actions/exec' +import * as fs from 'fs' import * as github from '@actions/github' +import * as io from '@actions/io' +import * as path from 'path' import {ReposGetArchiveLinkParams} from '@octokit/rest' +import {defaultCoreCipherList} from 'constants' +import {ExecOptions} from '@actions/exec/lib/interfaces' const IS_WINDOWS = process.platform === 'win32' @@ -17,13 +25,21 @@ export async function downloadRepository( repo: repo, ref: ref } + // todo: retry const response = await octokit.repos.getArchiveLink(params) if (response.status != 200) { throw new Error( - `GitHub API call failed with response status '${response.status}': ${response.data}` + `Unexpected response from GitHub API. Status: '${response.status}'; Data: '${response.data}'` ) } console.log(`status=${response.status}`) console.log(`headers=${JSON.stringify(response.headers)}`) console.log(`data=${JSON.stringify(typeof response.data)}`) + const runnerTemp = process.env['RUNNER_TEMP'] as string + assert.ok(runnerTemp, 'RUNNER_TEMP not defined') + const archiveFile = path.join(runnerTemp, 'checkout.tar.gz') + await fs.promises.writeFile(archiveFile, response.data) + await exec.exec(`tar -xzf "${archiveFile}"`, [], { + cwd: repositoryPath + } as ExecOptions) }