diff options
| author | Binrui Dong <brett.browning.dong@gmail.com> | 2023-04-12 19:55:27 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-12 13:55:27 +0200 |
| commit | 14d9c28776de95fa1aca6d4fa9c2095443729e7d (patch) | |
| tree | cdbb5401fb8994cd3a57595464f622b6be9e21e0 /src | |
| parent | 9aef52d510de4e17a0ea5f69c5e81c687daf417c (diff) | |
Improve checkout performance on Windows runners by upgrading @actions/github dependency (#1246)
* Improve checkout performance on Windows runners by upgrading @actions/github dependency
Re: https://github.com/actions/checkout/issues/1186
@dscho discovered that the checkout action could stall for a
considerable amount of time on Windows runners waiting for PowerShell
invocations made from 'windows-release' npm package to complete.
Then I studied the dependency chain to figure out where
'windows-release' was imported:
'@actions/checkout'@main
<- '@actions/github'@2.2.0
<- '@octokit/endpoint'@6.0.1
<- '@octokit/graphql'@4.3.1
<- '@octokit/request'@5.4.2
<- '@octokit/rest'@16.43.1
<- 'universal-user-agent'@4.0.1
<- 'os-name'@3.1.0
<- 'windows-release'@3.1.0
'universal-user-agent' package dropped its dependency on 'os-name' in
https://github.com/gr2m/universal-user-agent/releases/tag/v6.0.0 .
'@actions/github' v3 removed dependency on '@octokit/rest'@16.43.1 and
allows users to move away from the old 'universal-user-agent' v4.
(https://github.com/actions/toolkit/pull/453)
This pull request attempts to update the version of '@actions/github'
used in the checkout action to avoid importing 'windows-release'.
Based on testing in my own repositories, I can see an improvement in
reduced wait time between entering the checkout action and git actually
starts to do useful work.
* Update .licenses
* Rebuild index.js
Diffstat (limited to 'src')
| -rw-r--r-- | src/github-api-helper.ts | 25 | ||||
| -rw-r--r-- | src/octokit-provider.ts | 23 | ||||
| -rw-r--r-- | src/ref-helper.ts | 8 |
3 files changed, 15 insertions, 41 deletions
diff --git a/src/github-api-helper.ts b/src/github-api-helper.ts index 2124a86..86632f5 100644 --- a/src/github-api-helper.ts +++ b/src/github-api-helper.ts @@ -1,12 +1,12 @@ import * as assert from 'assert' import * as core from '@actions/core' import * as fs from 'fs' +import * as github from '@actions/github' import * as io from '@actions/io' import * as path from 'path' import * as retryHelper from './retry-helper' import * as toolCache from '@actions/tool-cache' import {default as uuid} from 'uuid/v4' -import {getOctokit, Octokit} from './octokit-provider' const IS_WINDOWS = process.platform === 'win32' @@ -84,11 +84,11 @@ export async function getDefaultBranch( ): Promise<string> { return await retryHelper.execute(async () => { core.info('Retrieving the default branch name') - const octokit = getOctokit(authToken, {baseUrl: baseUrl}) + const octokit = github.getOctokit(authToken, {baseUrl: baseUrl}) let result: string try { // Get the default branch from the repo info - const response = await octokit.repos.get({owner, repo}) + const response = await octokit.rest.repos.get({owner, repo}) result = response.data.default_branch assert.ok(result, 'default_branch cannot be empty') } catch (err) { @@ -125,19 +125,14 @@ async function downloadArchive( commit: string, baseUrl?: string ): Promise<Buffer> { - const octokit = getOctokit(authToken, {baseUrl: baseUrl}) - const params: Octokit.ReposGetArchiveLinkParams = { + const octokit = github.getOctokit(authToken, {baseUrl: baseUrl}) + const download = IS_WINDOWS + ? octokit.rest.repos.downloadZipballArchive + : octokit.rest.repos.downloadTarballArchive + const response = await download({ owner: owner, repo: repo, - archive_format: IS_WINDOWS ? 'zipball' : 'tarball', ref: commit || ref - } - const response = await octokit.repos.getArchiveLink(params) - if (response.status != 200) { - throw new Error( - `Unexpected response from GitHub API. Status: ${response.status}, Data: ${response.data}` - ) - } - - return Buffer.from(response.data) // response.data is ArrayBuffer + }) + return Buffer.from(response.data as ArrayBuffer) // response.data is ArrayBuffer } diff --git a/src/octokit-provider.ts b/src/octokit-provider.ts deleted file mode 100644 index 4fb1285..0000000 --- a/src/octokit-provider.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as github from '@actions/github' -import {Octokit} from '@octokit/rest' -import {getServerApiUrl} from './url-helper' - -// Centralize all Octokit references by re-exporting -export {Octokit} from '@octokit/rest' - -export type OctokitOptions = { - baseUrl?: string - userAgent?: string -} - -export function getOctokit(authToken: string, opts: OctokitOptions) { - const options: Octokit.Options = { - baseUrl: getServerApiUrl(opts.baseUrl) - } - - if (opts.userAgent) { - options.userAgent = opts.userAgent - } - - return new github.GitHub(authToken, options) -} diff --git a/src/ref-helper.ts b/src/ref-helper.ts index ce875fc..9b1ca95 100644 --- a/src/ref-helper.ts +++ b/src/ref-helper.ts @@ -1,7 +1,6 @@ import {IGitCommandManager} from './git-command-manager' import * as core from '@actions/core' import * as github from '@actions/github' -import {getOctokit} from './octokit-provider' import {isGhes} from './url-helper' export const tagsRefSpec = '+refs/tags/*:refs/tags/*' @@ -245,7 +244,7 @@ export async function checkCommitInfo( core.debug( `Expected head sha ${expectedHeadSha}; actual head sha ${actualHeadSha}` ) - const octokit = getOctokit(token, { + const octokit = github.getOctokit(token, { baseUrl: baseUrl, userAgent: `actions-checkout-tracepoint/1.0 (code=STALE_MERGE;owner=${repositoryOwner};repo=${repositoryName};pr=${fromPayload( 'number' @@ -253,7 +252,10 @@ export async function checkCommitInfo( process.env['GITHUB_RUN_ID'] };expected_head_sha=${expectedHeadSha};actual_head_sha=${actualHeadSha})` }) - await octokit.repos.get({owner: repositoryOwner, repo: repositoryName}) + await octokit.rest.repos.get({ + owner: repositoryOwner, + repo: repositoryName + }) } } catch (err) { core.debug( |
