Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
local-download-artifact/README.md
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
169 lines (122 sloc)
5.03 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Download-Artifact v3 | |
This downloads artifacts from your build | |
See also [upload-artifact](https://github.com/actions/upload-artifact). | |
# What's new | |
- Download all artifacts at once | |
- Output parameter for the download path | |
- 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/v2) for the previous version | |
# Usage | |
See [action.yml](action.yml) | |
# Download a Single Artifact | |
Basic (download to the current working directory): | |
```yaml | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: my-artifact | |
- name: Display structure of downloaded files | |
run: ls -R | |
``` | |
Download to a specific directory: | |
```yaml | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: my-artifact | |
path: path/to/artifact | |
- name: Display structure of downloaded files | |
run: ls -R | |
working-directory: path/to/artifact | |
``` | |
Basic tilde expansion is supported for the `path` input: | |
```yaml | |
- uses: actions/download-artifact@v3 | |
with: | |
name: my-artifact | |
path: ~/download/path | |
``` | |
## Compatibility between `v1` and `v2`/`v3` | |
When using `download-artifact@v1`, a directory denoted by the name of the artifact would be created if the `path` input was not provided. All of the contents would be downloaded to this directory. | |
``` | |
current/working/directory/ | |
my-artifact/ | |
... contents of my-artifact | |
``` | |
With `v2` and `v3`, when an artifact is specified by the `name` input, there is no longer an extra directory that is created if the `path` input is not provided. All the contents are downloaded to the current working directory. | |
``` | |
current/working/directory/ | |
... contents of my-artifact | |
``` | |
To maintain the same behavior for `v2` and `v3`, you can set the `path` to the name of the artifact so an extra directory gets created. | |
``` | |
- uses: actions/download-artifact@v2 | |
with: | |
name: my-artifact | |
path: my-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@v3 | |
- uses: actions/download-artifact@v3 | |
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@v3 | |
- uses: actions/download-artifact@v3 | |
- name: Display structure of downloaded files | |
run: ls -R | |
``` | |
# Download path output | |
The `download-path` step output contains information regarding where the artifact was downloaded to. This output can be used for a variety of purposes such as logging or as input to other actions. Be aware of the extra directory that is created if downloading all artifacts (no name specified). | |
```yaml | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
id: download | |
with: | |
name: 'my-artifact' | |
path: path/to/artifacts | |
- name: 'Echo download path' | |
run: echo ${{steps.download.outputs.download-path}} | |
``` | |
> Note: The `id` defined in the `download/artifact` step must match the `id` defined in the `echo` step (i.e `steps.[ID].outputs.download-path`) | |
# Limitations | |
### Permission Loss | |
:exclamation: File permissions are not maintained during artifact upload :exclamation: For example, if you make a file executable using `chmod` and then upload that file, post-download the file is no longer guaranteed to be set as an executable. | |
### Case Insensitive Uploads | |
:exclamation: File uploads are case insensitive :exclamation: If you upload `A.txt` and `a.txt` with the same root path, only a single file will be saved and available during download. | |
### Maintaining file permissions and case sensitive files | |
If file permissions and case sensitivity are required, you can `tar` all of your files together before artifact upload. Post download, the `tar` file will maintain file permissions and case sensitivity. | |
```yaml | |
- name: 'Tar files' | |
run: tar -cvf my_files.tar /path/to/my/directory | |
- name: 'Upload Artifact' | |
uses: actions/upload-artifact@v2 | |
with: | |
name: my-artifact | |
path: my_files.tar | |
``` | |
# @actions/artifact package | |
Internally the [@actions/artifact](https://github.com/actions/toolkit/tree/main/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 | |
The scripts and documentation in this project are released under the [MIT License](LICENSE) |