81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # Migration
 | |
| 
 | |
| - [Migration](#migration)
 | |
|   - [Multiple uploads to the same named Artifact](#multiple-uploads-to-the-same-named-artifact)
 | |
| 
 | |
| Several behavioral differences exist between Artifact actions `v3` and below vs `v4`. This document outlines common scenarios in `v3`, and how they would be handled in `v4`.
 | |
| 
 | |
| ## Multiple uploads to the same named Artifact
 | |
| 
 | |
| In `v3`, Artifacts are _mutable_ so it's possible to write workflow scenarios where multiple jobs upload to the same Artifact like so:
 | |
| 
 | |
| ```yaml
 | |
| jobs:
 | |
|   upload:
 | |
|     strategy:
 | |
|       matrix:
 | |
|         runs-on: [ubuntu-latest, macos-latest, windows-latest]
 | |
|     runs-on: ${{ matrix.runs-on }}
 | |
|     steps:
 | |
|       - name: Create a File
 | |
|         run: echo "hello from ${{ matrix.runs-on }}" > file-${{ matrix.runs-on }}.txt
 | |
|       - name: Upload Artifact
 | |
|         uses: actions/upload-artifact@v3
 | |
|         with:
 | |
|           name: my-artifact # NOTE: same artifact name
 | |
|           path: file-${{ matrix.runs-on }}.txt
 | |
|   download:
 | |
|     needs: upload
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - name: Download All Artifacts
 | |
|         uses: actions/download-artifact@v3
 | |
|         with:
 | |
|           path: my-artifact
 | |
|       - run: ls -R my-artifact
 | |
| ```
 | |
| 
 | |
| This results in a directory like so:
 | |
| 
 | |
| ```
 | |
| my-artifact/
 | |
|   file-macos-latest.txt
 | |
|   file-ubuntu-latest.txt
 | |
|   file-windows-latest.txt
 | |
| ```
 | |
| 
 | |
| In v4, Artifacts are immutable (unless deleted). So you must change each of the uploaded Artifacts to have a different name and filter the downloads by name to achieve the same effect:
 | |
| 
 | |
| ```diff
 | |
| jobs:
 | |
|   upload:
 | |
|     strategy:
 | |
|       matrix:
 | |
|         runs-on: [ubuntu-latest, macos-latest, windows-latest]
 | |
|     runs-on: ${{ matrix.runs-on }}
 | |
|     steps:
 | |
|     - name: Create a File
 | |
|       run: echo "hello from ${{ matrix.runs-on }}" > file-${{ matrix.runs-on }}.txt
 | |
|     - name: Upload Artifact
 | |
| -     uses: actions/upload-artifact@v3
 | |
| +     uses: actions/upload-artifact@v4
 | |
|       with:
 | |
| -       name: my-artifact
 | |
| +       name: my-artifact-${{ matrix.runs-on }}
 | |
|         path: file-${{ matrix.runs-on }}.txt
 | |
|   download:
 | |
|     needs: upload
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|     - name: Download All Artifacts
 | |
| -     uses: actions/download-artifact@v3
 | |
| +     uses: actions/download-artifact@v4
 | |
|       with:
 | |
|         path: my-artifact
 | |
| +       pattern: my-artifact-*
 | |
| +       merge-multiple: true
 | |
|     - run: ls -R my-artifact
 | |
| ```
 | |
| 
 | |
| In `v4`, the new `pattern:` input will filter the downloaded Artifacts to match the name specified. The new `merge-multiple:` input will support downloading multiple Artifacts to the same directory. If the files within the Artifacts have the same name, the last writer wins.
 |