mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 18:18:37 +08:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									8f4b7f8486
								
							
						
					
					
						commit
						a3c4ed97a0
					
				
							
								
								
									
										24768
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24768
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										872
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										872
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -30,7 +30,7 @@ | |||
|   "dependencies": { | ||||
|     "@actions/core": "^1.10.0", | ||||
|     "@actions/exec": "^1.0.1", | ||||
|     "@actions/github": "^2.2.0", | ||||
|     "@actions/github": "^5.0.0", | ||||
|     "@actions/io": "^1.1.3", | ||||
|     "@actions/tool-cache": "^1.1.2", | ||||
|     "uuid": "^3.3.3" | ||||
|  |  | |||
|  | @ -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
 | ||||
| } | ||||
|  |  | |||
|  | @ -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) | ||||
| } | ||||
|  | @ -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( | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Binrui Dong
						Binrui Dong