mirror of
				https://github.com/actions/download-artifact.git
				synced 2025-10-31 20:13:42 +00:00 
			
		
		
		
	V2 Download Artifact (#27)
* V2 Preview (#19) * V2 Setup * Add end-to-end tests * Update tests * Update tests * Update tests * Update tests again * Misc Updates * Improve logs * Update release * Update README.md * @actions/artifact v0.2.0 * Update to the latest version of the @actions/artifact package * Update @actions/artifact to 0.3.1 * Misc Updates * Add .gitattributes * Update Readme * Update test YAML
This commit is contained in:
		
							parent
							
								
									b85295d276
								
							
						
					
					
						commit
						1de1dea89c
					
				
							
								
								
									
										3
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | node_modules/ | ||||||
|  | lib/ | ||||||
|  | dist/ | ||||||
							
								
								
									
										16
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | { | ||||||
|  |     "env": { "node": true, "jest": true }, | ||||||
|  |     "parser": "@typescript-eslint/parser", | ||||||
|  |     "parserOptions": { "ecmaVersion": 9, "sourceType": "module" }, | ||||||
|  |     "extends": [ | ||||||
|  |       "eslint:recommended", | ||||||
|  |       "plugin:@typescript-eslint/eslint-recommended", | ||||||
|  |       "plugin:@typescript-eslint/recommended", | ||||||
|  |       "plugin:import/errors", | ||||||
|  |       "plugin:import/warnings", | ||||||
|  |       "plugin:import/typescript", | ||||||
|  |       "plugin:prettier/recommended", | ||||||
|  |       "prettier/@typescript-eslint" | ||||||
|  |     ], | ||||||
|  |     "plugins": ["@typescript-eslint"] | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | * text=auto eol=lf | ||||||
							
								
								
									
										104
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,104 @@ | |||||||
|  | name: Test | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     paths-ignore: | ||||||
|  |       - '**.md' | ||||||
|  |   pull_request: | ||||||
|  |     paths-ignore: | ||||||
|  |       - '**.md' | ||||||
|  | 
 | ||||||
|  | jobs: | ||||||
|  | 
 | ||||||
|  |   build: | ||||||
|  |     name: Build | ||||||
|  | 
 | ||||||
|  |     strategy: | ||||||
|  |       matrix: | ||||||
|  |         runs-on: [ubuntu-latest, macos-latest, windows-latest] | ||||||
|  |       fail-fast: false | ||||||
|  | 
 | ||||||
|  |     runs-on: ${{ matrix.runs-on }} | ||||||
|  | 
 | ||||||
|  |     steps: | ||||||
|  |     - name: Checkout | ||||||
|  |       uses: actions/checkout@v2 | ||||||
|  | 
 | ||||||
|  |     - name: Set Node.js 12.x | ||||||
|  |       uses: actions/setup-node@v1 | ||||||
|  |       with: | ||||||
|  |         node-version: 12.x | ||||||
|  | 
 | ||||||
|  |     - name: npm install | ||||||
|  |       run: npm install | ||||||
|  | 
 | ||||||
|  |     - name: Compile | ||||||
|  |       run: npm run build | ||||||
|  | 
 | ||||||
|  |     - name: Lint | ||||||
|  |       run: npm run lint | ||||||
|  | 
 | ||||||
|  |     - name: Format | ||||||
|  |       run: npm run format-check  | ||||||
|  | 
 | ||||||
|  |     # Test end-to-end by uploading two artifacts and then downloading them | ||||||
|  |     # Once upload-artifact v2 is out of preview, switch over | ||||||
|  |     - name: Create artifacts | ||||||
|  |       run: | | ||||||
|  |         mkdir -p path/to/artifact-A | ||||||
|  |         mkdir -p path/to/artifact-B | ||||||
|  |         echo "Lorem ipsum dolor sit amet" > path/to/artifact-A/file-A.txt | ||||||
|  |         echo "Hello world from file B" > path/to/artifact-B/file-B.txt | ||||||
|  |      | ||||||
|  |     - name: Upload artifact A | ||||||
|  |       uses: actions/upload-artifact@v1 | ||||||
|  |       with: | ||||||
|  |         name: 'Artifact-A' | ||||||
|  |         path: path/to/artifact-A | ||||||
|  | 
 | ||||||
|  |     - name: Upload artifact B | ||||||
|  |       uses: actions/upload-artifact@v1 | ||||||
|  |       with: | ||||||
|  |         name: 'Artifact-B' | ||||||
|  |         path: path/to/artifact-B | ||||||
|  | 
 | ||||||
|  |     # Test downloading a single artifact | ||||||
|  |     - name: Download artifact A | ||||||
|  |       uses: ./ | ||||||
|  |       with: | ||||||
|  |         name: 'Artifact-A' | ||||||
|  |         path: some/new/path | ||||||
|  | 
 | ||||||
|  |     - name: Verify successful download | ||||||
|  |       run: | | ||||||
|  |         $file = "some/new/path/file-A.txt" | ||||||
|  |         if(!(Test-Path -path $file)) | ||||||
|  |         { | ||||||
|  |             Write-Error "Expected file does not exist" | ||||||
|  |         } | ||||||
|  |         if(!((Get-Content $file) -ceq "Lorem ipsum dolor sit amet")) | ||||||
|  |         { | ||||||
|  |             Write-Error "File contents of downloaded artifact are incorrect" | ||||||
|  |         } | ||||||
|  |       shell: pwsh | ||||||
|  | 
 | ||||||
|  |     # Test downloading both artifacts at once | ||||||
|  |     - name: Download all Artifacts | ||||||
|  |       uses: ./ | ||||||
|  |       with: | ||||||
|  |         path: some/other/path | ||||||
|  | 
 | ||||||
|  |     - name: Verify successful download | ||||||
|  |       run: | | ||||||
|  |         $fileA = "some/other/path/Artifact-A/file-A.txt" | ||||||
|  |         $fileB = "some/other/path/Artifact-B/file-B.txt" | ||||||
|  |         if(!(Test-Path -path $fileA) -or !(Test-Path -path $fileB)) | ||||||
|  |         { | ||||||
|  |             Write-Error "Expected files do not exist" | ||||||
|  |         } | ||||||
|  |         if(!((Get-Content $fileA) -ceq "Lorem ipsum dolor sit amet") -or !((Get-Content $fileB) -ceq "Hello world from file B")) | ||||||
|  |         { | ||||||
|  |             Write-Error "File contents of downloaded artifacts are incorrect" | ||||||
|  |         } | ||||||
|  |       shell: pwsh | ||||||
|  | 
 | ||||||
|  |        | ||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | # Ignore node_modules, ncc is used to compile nodejs modules into a single file in the releases branch | ||||||
|  | node_modules/ | ||||||
|  | 
 | ||||||
|  | # Ignore js files that are transpiled from ts files in src/ | ||||||
|  | lib/ | ||||||
							
								
								
									
										3
									
								
								.prettierignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.prettierignore
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | dist/ | ||||||
|  | lib/ | ||||||
|  | node_modules/ | ||||||
							
								
								
									
										11
									
								
								.prettierrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.prettierrc.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | { | ||||||
|  |     "printWidth": 80, | ||||||
|  |     "tabWidth": 2, | ||||||
|  |     "useTabs": false, | ||||||
|  |     "semi": false, | ||||||
|  |     "singleQuote": true, | ||||||
|  |     "trailingComma": "none", | ||||||
|  |     "bracketSpacing": false, | ||||||
|  |     "arrowParens": "avoid", | ||||||
|  |     "parser": "typescript" | ||||||
|  |   } | ||||||
							
								
								
									
										75
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								README.md
									
									
									
									
									
								
							| @ -1,38 +1,91 @@ | |||||||
| # download-artifact | # Download-Artifact v2 | ||||||
| 
 | 
 | ||||||
| This downloads artifacts from your build. | This downloads artifacts from your build | ||||||
| 
 | 
 | ||||||
| See also [upload-artifact](https://github.com/actions/upload-artifact). | See also [upload-artifact](https://github.com/actions/upload-artifact). | ||||||
| 
 | 
 | ||||||
|  | # What's new | ||||||
|  | 
 | ||||||
|  | - Download all artifacts at once | ||||||
|  | - Port entire action to typescript from a runner plugin so it is easier to collaborate and accept contributions | ||||||
|  | 
 | ||||||
|  | Refer [here](https://github.com/actions/download-artifact/tree/v1) for the previous version | ||||||
|  | 
 | ||||||
| # Usage | # Usage | ||||||
| 
 | 
 | ||||||
| See [action.yml](action.yml) | See [action.yml](action.yml) | ||||||
| 
 | 
 | ||||||
| Basic (download to current working directory): | # Download a Single Artifact | ||||||
|  | 
 | ||||||
|  | Basic (download to the current working directory): | ||||||
| ```yaml | ```yaml | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v1 | - uses: actions/checkout@v2 | ||||||
| 
 | 
 | ||||||
| - uses: actions/download-artifact@v1 | - uses: actions/download-artifact@v2 | ||||||
|   with: |   with: | ||||||
|     name: my-artifact |     name: my-artifact | ||||||
|      |      | ||||||
| - run: cat my-artifact | - name: Display structure of downloaded files | ||||||
|  |   run: ls -R | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| Download to specific directory: | Download to a specific directory: | ||||||
| ```yaml | ```yaml | ||||||
| 
 |  | ||||||
| steps: | steps: | ||||||
| - uses: actions/checkout@v1 | - uses: actions/checkout@v2 | ||||||
| 
 | 
 | ||||||
| - uses: actions/download-artifact@v1 | - uses: actions/download-artifact@v2 | ||||||
|   with: |   with: | ||||||
|     name: my-artifact |     name: my-artifact | ||||||
|     path: path/to/artifact |     path: path/to/artifact | ||||||
|      |      | ||||||
| - run: ls path/to/artifact | - name: Display structure of downloaded files | ||||||
|  |   run: ls -R | ||||||
|  |   working-directory: path/to/artifact | ||||||
| ``` | ``` | ||||||
|  | # Download All Artifacts | ||||||
|  | 
 | ||||||
|  | If the `name` input parameter is not provided, all artifacts will be downloaded. To differentiate between downloaded artifacts, a directory denoted by the artifacts name will be created for each individual artifact. | ||||||
|  | 
 | ||||||
|  | Example, if there are two artifacts `Artifact-A` and `Artifact-B`, and the directory is `etc/usr/artifacts/`, the directory structure will look like this: | ||||||
|  | ``` | ||||||
|  |   etc/usr/artifacts/ | ||||||
|  |       Artifact-A/ | ||||||
|  |           ... contents of Artifact-A | ||||||
|  |       Artifact-B/ | ||||||
|  |           ... contents of Artifact-B | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Download all artifacts to a specific directory | ||||||
|  | ```yaml | ||||||
|  | steps: | ||||||
|  | - uses: actions/checkout@v2 | ||||||
|  | 
 | ||||||
|  | - uses: actions/download-artifact@v2 | ||||||
|  |   with: | ||||||
|  |     path: path/to/artifacts | ||||||
|  |      | ||||||
|  | - name: Display structure of downloaded files | ||||||
|  |   run: ls -R | ||||||
|  |   working-directory: path/to/artifacts | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Download all artifacts to the current working directory | ||||||
|  | ```yaml | ||||||
|  | steps: | ||||||
|  | - uses: actions/checkout@v2 | ||||||
|  | 
 | ||||||
|  | - uses: actions/download-artifact@v2 | ||||||
|  | 
 | ||||||
|  | - name: Display structure of downloaded files | ||||||
|  |   run: ls -R | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | # @actions/artifact package | ||||||
|  | 
 | ||||||
|  | Internally the [@actions/artifact](https://github.com/actions/toolkit/tree/master/packages/artifact) NPM package is used to interact with artifacts. You can find additional documentation there along with all the source code related to artifact download. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| # License | # License | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,9 +4,10 @@ author: 'GitHub' | |||||||
| inputs:  | inputs:  | ||||||
|   name: |   name: | ||||||
|     description: 'Artifact name' |     description: 'Artifact name' | ||||||
|     required: true |     required: false | ||||||
|   path: |   path: | ||||||
|     description: 'Destination path' |     description: 'Destination path' | ||||||
|  |     required: false | ||||||
| runs: | runs: | ||||||
|   # Plugins live on the runner and are only available to a certain set of first party actions. |   using: 'node12' | ||||||
|   plugin: 'download' |   main: 'dist/index.js' | ||||||
							
								
								
									
										7515
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7515
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2748
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2748
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										41
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | { | ||||||
|  |   "name": "download-artifact", | ||||||
|  |   "version": "2.0.0", | ||||||
|  |   "description": "Download a build artifact that was previously uploaded in the workflow by the upload-artifact action", | ||||||
|  |   "main": "dist/index.js", | ||||||
|  |   "scripts": { | ||||||
|  |     "build": "tsc", | ||||||
|  |     "release": "ncc build src/download-artifact.ts && git add -f dist/", | ||||||
|  |     "check-all": "concurrently \"npm:format-check\" \"npm:lint\" \"npm:build\"", | ||||||
|  |     "format": "prettier --write **/*.ts", | ||||||
|  |     "format-check": "prettier --check **/*.ts", | ||||||
|  |     "lint": "eslint **/*.ts" | ||||||
|  |   }, | ||||||
|  |   "repository": { | ||||||
|  |     "type": "git", | ||||||
|  |     "url": "git+https://github.com/actions/download-artifact.git" | ||||||
|  |   }, | ||||||
|  |   "keywords": [ | ||||||
|  |     "Actions", | ||||||
|  |     "GitHub", | ||||||
|  |     "Artifacts", | ||||||
|  |     "Download" | ||||||
|  |   ], | ||||||
|  |   "author": "GitHub", | ||||||
|  |   "license": "MIT", | ||||||
|  |   "bugs": { | ||||||
|  |     "url": "https://github.com/actions/download-artifact/issues" | ||||||
|  |   }, | ||||||
|  |   "homepage": "https://github.com/actions/download-artifact#readme", | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@actions/artifact": "^0.3.1", | ||||||
|  |     "@actions/core": "^1.2.3", | ||||||
|  |     "@typescript-eslint/parser": "^2.27.0", | ||||||
|  |     "@zeit/ncc": "^0.22.1", | ||||||
|  |     "concurrently": "^5.1.0", | ||||||
|  |     "eslint": "^6.8.0", | ||||||
|  |     "eslint-plugin-github": "^3.4.1", | ||||||
|  |     "prettier": "^2.0.4", | ||||||
|  |     "typescript": "^3.8.3" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										4
									
								
								src/constants.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/constants.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | export enum Inputs { | ||||||
|  |   Name = 'name', | ||||||
|  |   Path = 'path' | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								src/download-artifact.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/download-artifact.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | import * as core from '@actions/core' | ||||||
|  | import * as artifact from '@actions/artifact' | ||||||
|  | import {Inputs} from './constants' | ||||||
|  | 
 | ||||||
|  | async function run(): Promise<void> { | ||||||
|  |   try { | ||||||
|  |     const name = core.getInput(Inputs.Name, {required: false}) | ||||||
|  |     const path = core.getInput(Inputs.Path, {required: false}) | ||||||
|  | 
 | ||||||
|  |     const artifactClient = artifact.create() | ||||||
|  |     if (!name) { | ||||||
|  |       // download all artifacts
 | ||||||
|  |       const downloadResponse = await artifactClient.downloadAllArtifacts(path) | ||||||
|  |       core.info(`There were ${downloadResponse.length} artifacts downloaded`) | ||||||
|  |       for (const artifact of downloadResponse) { | ||||||
|  |         core.info( | ||||||
|  |           `Artifact ${artifact.artifactName} was downloaded to ${artifact.downloadPath}` | ||||||
|  |         ) | ||||||
|  |       } | ||||||
|  |     } else { | ||||||
|  |       // download a single artifact
 | ||||||
|  |       const downloadOptions = { | ||||||
|  |         createArtifactFolder: false | ||||||
|  |       } | ||||||
|  |       const downloadResponse = await artifactClient.downloadArtifact( | ||||||
|  |         name, | ||||||
|  |         path, | ||||||
|  |         downloadOptions | ||||||
|  |       ) | ||||||
|  |       core.info( | ||||||
|  |         `Artifact ${downloadResponse.artifactName} was downloaded to ${downloadResponse.downloadPath}` | ||||||
|  |       ) | ||||||
|  |     } | ||||||
|  |     core.info('Artifact download has finished successfully') | ||||||
|  |   } catch (err) { | ||||||
|  |     core.setFailed(err.message) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | run() | ||||||
							
								
								
									
										13
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | { | ||||||
|  |   "compilerOptions": { | ||||||
|  |     "target": "es6", | ||||||
|  |     "module": "commonjs", | ||||||
|  |     "outDir": "./lib", | ||||||
|  |     "rootDir": "./src", | ||||||
|  |     "strict": true, | ||||||
|  |     "noImplicitAny": false, | ||||||
|  |     "moduleResolution": "node", | ||||||
|  |     "esModuleInterop": true | ||||||
|  |   }, | ||||||
|  |   "exclude": ["node_modules", "**/*.test.ts"] | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user