mirror of
				https://github.com/actions/checkout.git
				synced 2025-10-31 11:13:59 +08:00 
			
		
		
		
	Compare commits
	
		
			8 Commits
		
	
	
		
			v2.0.0
			...
			users/tihu
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 5acb8ff4c9 | ||
|   | db41740e12 | ||
|   | bc50a995b8 | ||
|   | dfd70d4a2d | ||
|   | ae525b2262 | ||
|   | f466b96953 | ||
|   | c85684db76 | ||
|   | 299dd5064e | 
							
								
								
									
										2
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -11,7 +11,7 @@ jobs: | |||||||
|   build: |   build: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|       - uses: actions/checkout@v1 # todo: switch to v2 |       - uses: actions/checkout@v2 | ||||||
|       - run: npm ci |       - run: npm ci | ||||||
|       - run: npm run build |       - run: npm run build | ||||||
|       - run: npm run format-check |       - run: npm run format-check | ||||||
|   | |||||||
							
								
								
									
										142
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										142
									
								
								README.md
									
									
									
									
									
								
							| @@ -6,27 +6,26 @@ | |||||||
|  |  | ||||||
| This action checks-out your repository under `$GITHUB_WORKSPACE`, so your workflow can access it. | This action checks-out your repository under `$GITHUB_WORKSPACE`, so your workflow can access it. | ||||||
|  |  | ||||||
| By default, the repository that triggered the workflow is checked-out, for the ref/SHA that triggered the event. | Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set `fetch-depth` to fetch more history. Refer [here](https://help.github.com/en/articles/events-that-trigger-workflows) to learn which commit `$GITHUB_SHA` points to for different events. | ||||||
|  |  | ||||||
| Refer [here](https://help.github.com/en/articles/events-that-trigger-workflows) to learn which commit `$GITHUB_SHA` points to for different events. | The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set `persist-credentials: false` to opt-out. | ||||||
|  |  | ||||||
|  | When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files. | ||||||
|  |  | ||||||
| # What's new | # What's new | ||||||
|  |  | ||||||
| - Improved fetch performance | - Improved performance | ||||||
|   - The default behavior now fetches only the commit being checked-out |   - Fetches only a single commit by default | ||||||
| - Script authenticated git commands | - Script authenticated git commands | ||||||
|   - Persists the input `token` in the local git config |   - Auth token persisted in the local git config | ||||||
|   - Enables your scripts to run authenticated git commands |  | ||||||
|   - Post-job cleanup removes the token |  | ||||||
|   - Opt out by setting the input `persist-credentials: false` |  | ||||||
| - Creates a local branch | - Creates a local branch | ||||||
|   - No longer detached HEAD when checking out a branch |   - No longer detached HEAD when checking out a branch | ||||||
|   - A local branch is created with the corresponding upstream branch set |  | ||||||
| - Improved layout | - Improved layout | ||||||
|   - The input `path` is always relative to $GITHUB_WORKSPACE |   - The input `path` is always relative to $GITHUB_WORKSPACE | ||||||
|   - Aligns better with container actions, where $GITHUB_WORKSPACE gets mapped in |   - Aligns better with container actions, where $GITHUB_WORKSPACE gets mapped in | ||||||
| - Fallback to REST API download | - Fallback to REST API download | ||||||
|   - When Git 2.18 or higher is not in the PATH, the REST API will be used to download the files |   - When Git 2.18 or higher is not in the PATH, the REST API will be used to download the files | ||||||
|  |   - When using a job container, the container's PATH is used | ||||||
| - Removed input `submodules` | - Removed input `submodules` | ||||||
|  |  | ||||||
| Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous versions. | Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous versions. | ||||||
| @@ -48,7 +47,8 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous | |||||||
|  |  | ||||||
|     # Auth token used to fetch the repository. The token is stored in the local git |     # Auth token used to fetch the repository. The token is stored in the local git | ||||||
|     # config, which enables your scripts to run authenticated git commands. The |     # config, which enables your scripts to run authenticated git commands. The | ||||||
|     # post-job step removes the token from the git config. |     # post-job step removes the token from the git config. [Learn more about creating | ||||||
|  |     # and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) | ||||||
|     # Default: ${{ github.token }} |     # Default: ${{ github.token }} | ||||||
|     token: '' |     token: '' | ||||||
|  |  | ||||||
| @@ -73,26 +73,85 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous | |||||||
| ``` | ``` | ||||||
| <!-- end usage --> | <!-- end usage --> | ||||||
|  |  | ||||||
|  | # Scenarios | ||||||
|  |  | ||||||
|  | - [Checkout a different branch](#Checkout-a-different-branch) | ||||||
|  | - [Checkout HEAD^](#Checkout-HEAD) | ||||||
|  | - [Checkout multiple repos (side by side)](#Checkout-multiple-repos-side-by-side) | ||||||
|  | - [Checkout multiple repos (nested)](#Checkout-multiple-repos-nested) | ||||||
|  | - [Checkout multiple repos (private)](#Checkout-multiple-repos-private) | ||||||
|  | - [Checkout pull request HEAD commit instead of merge commit](#Checkout-pull-request-HEAD-commit-instead-of-merge-commit) | ||||||
|  | - [Checkout pull request on closed event](#Checkout-pull-request-on-closed-event) | ||||||
|  | - [Checkout submodules](#Checkout-submodules) | ||||||
|  | - [Fetch all tags](#Fetch-all-tags) | ||||||
|  | - [Fetch all branches](#Fetch-all-branches) | ||||||
|  | - [Fetch all history for all tags and branches](#Fetch-all-history-for-all-tags-and-branches) | ||||||
|  |  | ||||||
| ## Checkout a different branch | ## Checkout a different branch | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v2 | - uses: actions/checkout@v2 | ||||||
|   with: |   with: | ||||||
|     ref: some-branch |     ref: my-branch | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ## Checkout a different, private repository | ## Checkout HEAD^ | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v2 | - uses: actions/checkout@v2 | ||||||
|   with: |   with: | ||||||
|     repository: myAccount/myRepository |     fetch-depth: 2 | ||||||
|     ref: refs/heads/master | - run: git checkout HEAD^ | ||||||
|     token: ${{ secrets.GitHub_PAT }} # `GitHub_PAT` is a secret that contains your PAT |  | ||||||
| ``` | ``` | ||||||
| > - `${{ github.token }}` is scoped to the current repository, so if you want to checkout another repository that is private you will need to provide your own [PAT](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line). |  | ||||||
|  |  | ||||||
| ## Checkout the HEAD commit of a PR, rather than the merge commit | ## Checkout multiple repos (side by side) | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Checkout | ||||||
|  |   uses: actions/checkout@v2 | ||||||
|  |   with: | ||||||
|  |     path: main | ||||||
|  |  | ||||||
|  | - name: Checkout tools repo | ||||||
|  |   uses: actions/checkout@v2 | ||||||
|  |   with: | ||||||
|  |     repository: my-org/my-tools | ||||||
|  |     path: my-tools | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Checkout multiple repos (nested) | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Checkout | ||||||
|  |   uses: actions/checkout@v2 | ||||||
|  |  | ||||||
|  | - name: Checkout tools repo | ||||||
|  |   uses: actions/checkout@v2 | ||||||
|  |   with: | ||||||
|  |     repository: my-org/my-tools | ||||||
|  |     path: my-tools | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Checkout multiple repos (private) | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - name: Checkout | ||||||
|  |   uses: actions/checkout@v2 | ||||||
|  |   with: | ||||||
|  |     path: main | ||||||
|  |  | ||||||
|  | - name: Checkout private tools | ||||||
|  |   uses: actions/checkout@v2 | ||||||
|  |   with: | ||||||
|  |     repository: my-org/my-private-tools | ||||||
|  |     token: ${{ secrets.GitHub_PAT }} # `GitHub_PAT` is a secret that contains your PAT | ||||||
|  |     path: my-tools | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | > - `${{ github.token }}` is scoped to the current repository, so if you want to checkout a different repository that is private you will need to provide your own [PAT](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line). | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Checkout pull request HEAD commit instead of merge commit | ||||||
|  |  | ||||||
| ```yaml | ```yaml | ||||||
| - uses: actions/checkout@v2 | - uses: actions/checkout@v2 | ||||||
| @@ -100,6 +159,55 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous | |||||||
|     ref: ${{ github.event.pull_request.head.sha }} |     ref: ${{ github.event.pull_request.head.sha }} | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ## Checkout pull request on closed event | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | on: | ||||||
|  |   pull_request: | ||||||
|  |     branches: [master] | ||||||
|  |     types: [opened, synchronize, closed] | ||||||
|  | jobs: | ||||||
|  |   build: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v2 | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Checkout submodules | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - uses: actions/checkout@v2 | ||||||
|  | - name: Checkout submodules | ||||||
|  |   shell: bash | ||||||
|  |   run: | | ||||||
|  |     auth_header="$(git config --local --get http.https://github.com/.extraheader)" | ||||||
|  |     git submodule sync --recursive | ||||||
|  |     git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Fetch all tags | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - uses: actions/checkout@v2 | ||||||
|  | - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Fetch all branches | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - uses: actions/checkout@v2 | ||||||
|  | - run: | | ||||||
|  |     git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/* | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Fetch all history for all tags and branches | ||||||
|  |  | ||||||
|  | ```yaml | ||||||
|  | - uses: actions/checkout@v2 | ||||||
|  | - run: | | ||||||
|  |     git fetch --prune --unshallow | ||||||
|  | ``` | ||||||
|  |  | ||||||
| # License | # License | ||||||
|  |  | ||||||
| The scripts and documentation in this project are released under the [MIT License](LICENSE) | The scripts and documentation in this project are released under the [MIT License](LICENSE) | ||||||
|   | |||||||
| @@ -13,7 +13,8 @@ inputs: | |||||||
|     description: > |     description: > | ||||||
|       Auth token used to fetch the repository. The token is stored in the local |       Auth token used to fetch the repository. The token is stored in the local | ||||||
|       git config, which enables your scripts to run authenticated git commands. |       git config, which enables your scripts to run authenticated git commands. | ||||||
|       The post-job step removes the token from the git config. |       The post-job step removes the token from the git config. [Learn more about | ||||||
|  |       creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) | ||||||
|     default: ${{ github.token }} |     default: ${{ github.token }} | ||||||
|   persist-credentials: |   persist-credentials: | ||||||
|     description: 'Whether to persist the token in the git config' |     description: 'Whether to persist the token in the git config' | ||||||
|   | |||||||
							
								
								
									
										1691
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1691
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										20
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										20
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "2.0.0", |   "version": "2.0.1", | ||||||
|   "lockfileVersion": 1, |   "lockfileVersion": 1, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
| @@ -929,6 +929,11 @@ | |||||||
|       "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", |       "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "agent-base": { | ||||||
|  |       "version": "5.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", | ||||||
|  |       "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" | ||||||
|  |     }, | ||||||
|     "ajv": { |     "ajv": { | ||||||
|       "version": "6.10.2", |       "version": "6.10.2", | ||||||
|       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", |       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", | ||||||
| @@ -1707,7 +1712,6 @@ | |||||||
|       "version": "4.1.1", |       "version": "4.1.1", | ||||||
|       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", |       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", | ||||||
|       "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", |       "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", | ||||||
|       "dev": true, |  | ||||||
|       "requires": { |       "requires": { | ||||||
|         "ms": "^2.1.1" |         "ms": "^2.1.1" | ||||||
|       } |       } | ||||||
| @@ -3670,6 +3674,15 @@ | |||||||
|         "sshpk": "^1.7.0" |         "sshpk": "^1.7.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "https-proxy-agent": { | ||||||
|  |       "version": "4.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", | ||||||
|  |       "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", | ||||||
|  |       "requires": { | ||||||
|  |         "agent-base": "5", | ||||||
|  |         "debug": "4" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "iconv-lite": { |     "iconv-lite": { | ||||||
|       "version": "0.4.24", |       "version": "0.4.24", | ||||||
|       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", |       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | ||||||
| @@ -4985,8 +4998,7 @@ | |||||||
|     "ms": { |     "ms": { | ||||||
|       "version": "2.1.2", |       "version": "2.1.2", | ||||||
|       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", |       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||||||
|       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", |       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||||||
|       "dev": true |  | ||||||
|     }, |     }, | ||||||
|     "mute-stream": { |     "mute-stream": { | ||||||
|       "version": "0.0.7", |       "version": "0.0.7", | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "checkout", |   "name": "checkout", | ||||||
|   "version": "2.0.0", |   "version": "2.0.1", | ||||||
|   "description": "checkout action", |   "description": "checkout action", | ||||||
|   "main": "lib/main.js", |   "main": "lib/main.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
| @@ -34,6 +34,7 @@ | |||||||
|     "@actions/github": "^2.0.0", |     "@actions/github": "^2.0.0", | ||||||
|     "@actions/io": "^1.0.1", |     "@actions/io": "^1.0.1", | ||||||
|     "@actions/tool-cache": "^1.1.2", |     "@actions/tool-cache": "^1.1.2", | ||||||
|  |     "https-proxy-agent": "^4.0.0", | ||||||
|     "uuid": "^3.3.3" |     "uuid": "^3.3.3" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|   | |||||||
| @@ -77,10 +77,12 @@ class GitCommandManager { | |||||||
|   async branchList(remote: boolean): Promise<string[]> { |   async branchList(remote: boolean): Promise<string[]> { | ||||||
|     const result: string[] = [] |     const result: string[] = [] | ||||||
|  |  | ||||||
|     // Note, this implementation uses "rev-parse --symbolic" because the output from |     // Note, this implementation uses "rev-parse --symbolic-full-name" because the output from | ||||||
|     // "branch --list" is more difficult when in a detached HEAD state. |     // "branch --list" is more difficult when in a detached HEAD state. | ||||||
|  |     // Note, this implementation uses "rev-parse --symbolic-full-name" because there is a bug | ||||||
|  |     // in Git 2.18 that causes "rev-parse --symbolic" to output symbolic full names. | ||||||
|  |  | ||||||
|     const args = ['rev-parse', '--symbolic'] |     const args = ['rev-parse', '--symbolic-full-name'] | ||||||
|     if (remote) { |     if (remote) { | ||||||
|       args.push('--remotes=origin') |       args.push('--remotes=origin') | ||||||
|     } else { |     } else { | ||||||
| @@ -92,6 +94,12 @@ class GitCommandManager { | |||||||
|     for (let branch of output.stdout.trim().split('\n')) { |     for (let branch of output.stdout.trim().split('\n')) { | ||||||
|       branch = branch.trim() |       branch = branch.trim() | ||||||
|       if (branch) { |       if (branch) { | ||||||
|  |         if (branch.startsWith('refs/heads/')) { | ||||||
|  |           branch = branch.substr('refs/heads/'.length) | ||||||
|  |         } else if (branch.startsWith('refs/remotes/')) { | ||||||
|  |           branch = branch.substr('refs/remotes/'.length) | ||||||
|  |         } | ||||||
|  |  | ||||||
|         result.push(branch) |         result.push(branch) | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -170,12 +178,12 @@ class GitCommandManager { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   async isDetached(): Promise<boolean> { |   async isDetached(): Promise<boolean> { | ||||||
|     // Note, this implementation uses "branch --show-current" because |     // Note, "branch --show-current" would be simpler but isn't available until Git 2.22 | ||||||
|     // "rev-parse --symbolic-full-name HEAD" can fail on a new repo |     const output = await this.execGit( | ||||||
|     // with nothing checked out. |       ['rev-parse', '--symbolic-full-name', '--verify', '--quiet', 'HEAD'], | ||||||
|  |       true | ||||||
|     const output = await this.execGit(['branch', '--show-current']) |     ) | ||||||
|     return output.stdout.trim() === '' |     return !output.stdout.trim().startsWith('refs/heads/') | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async lfsFetch(ref: string): Promise<void> { |   async lfsFetch(ref: string): Promise<void> { | ||||||
|   | |||||||
| @@ -8,6 +8,7 @@ import * as retryHelper from './retry-helper' | |||||||
| import * as toolCache from '@actions/tool-cache' | import * as toolCache from '@actions/tool-cache' | ||||||
| import {default as uuid} from 'uuid/v4' | import {default as uuid} from 'uuid/v4' | ||||||
| import {ReposGetArchiveLinkParams} from '@octokit/rest' | import {ReposGetArchiveLinkParams} from '@octokit/rest' | ||||||
|  | import HttpsProxyAgent from 'https-proxy-agent' | ||||||
|  |  | ||||||
| const IS_WINDOWS = process.platform === 'win32' | const IS_WINDOWS = process.platform === 'win32' | ||||||
|  |  | ||||||
| @@ -74,7 +75,7 @@ async function downloadArchive( | |||||||
|   ref: string, |   ref: string, | ||||||
|   commit: string |   commit: string | ||||||
| ): Promise<Buffer> { | ): Promise<Buffer> { | ||||||
|   const octokit = new github.GitHub(authToken) |   const octokit = createOctokit(authToken) | ||||||
|   const params: ReposGetArchiveLinkParams = { |   const params: ReposGetArchiveLinkParams = { | ||||||
|     owner: owner, |     owner: owner, | ||||||
|     repo: repo, |     repo: repo, | ||||||
| @@ -90,3 +91,38 @@ async function downloadArchive( | |||||||
|  |  | ||||||
|   return Buffer.from(response.data) // response.data is ArrayBuffer |   return Buffer.from(response.data) // response.data is ArrayBuffer | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function createOctokit(authToken: string): github.GitHub { | ||||||
|  |   let proxyVar: string = | ||||||
|  |     process.env['https_proxy'] || process.env['HTTPS_PROXY'] || '' | ||||||
|  |  | ||||||
|  |   if (!proxyVar) { | ||||||
|  |     return new github.GitHub(authToken) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   let noProxy: string = process.env['no_proxy'] || process.env['NO_PROXY'] || '' | ||||||
|  |  | ||||||
|  |   let bypass: boolean = false | ||||||
|  |   if (noProxy) { | ||||||
|  |     let bypassList = noProxy.split(',') | ||||||
|  |     for (let i = 0; i < bypassList.length; i++) { | ||||||
|  |       let item = bypassList[i] | ||||||
|  |       if ( | ||||||
|  |         item && | ||||||
|  |         typeof item === 'string' && | ||||||
|  |         item.trim().toLocaleLowerCase() === 'github.com' | ||||||
|  |       ) { | ||||||
|  |         bypass = true | ||||||
|  |         break | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   if (bypass) { | ||||||
|  |     return new github.GitHub(authToken) | ||||||
|  |   } else { | ||||||
|  |     return new github.GitHub(authToken, { | ||||||
|  |       request: {agent: new HttpsProxyAgent(proxyVar)} | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -65,9 +65,14 @@ function updateUsage( | |||||||
|       let segment: string = description |       let segment: string = description | ||||||
|       if (description.length > width) { |       if (description.length > width) { | ||||||
|         segment = description.substr(0, width + 1) |         segment = description.substr(0, width + 1) | ||||||
|         while (!segment.endsWith(' ')) { |         while (!segment.endsWith(' ') && segment) { | ||||||
|           segment = segment.substr(0, segment.length - 1) |           segment = segment.substr(0, segment.length - 1) | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         // Trimmed too much? | ||||||
|  |         if (segment.length < width * 0.67) { | ||||||
|  |           segment = description | ||||||
|  |         } | ||||||
|       } else { |       } else { | ||||||
|         segment = description |         segment = description | ||||||
|       } |       } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user