From 850c5af644079513a188c19cd4e77a9cba3ce0a2 Mon Sep 17 00:00:00 2001 From: eric sciple Date: Mon, 9 Dec 2019 19:15:39 -0500 Subject: . --- src/git-command-manager.ts | 12 ++++++------ src/git-source-provider.ts | 6 ++++++ src/github-api-helper.ts | 18 +++++++++++++++++- 3 files changed, 29 insertions(+), 7 deletions(-) (limited to 'src') 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) } -- cgit v1.2.3