diff --git a/README.md b/README.md index 6cce2e3..74898af 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,8 @@ For more information, see the [`@actions/artifact`](https://github.com/actions/t 3. Limit of Artifacts for an individual job. Each job in a workflow run now has a limit of 10 artifacts. +For assistance with breaking changes, see [MIGRATION.md](docs/MIGRATION.md). + ## Usage ### Inputs diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md new file mode 100644 index 0000000..7a7ad25 --- /dev/null +++ b/docs/MIGRATION.md @@ -0,0 +1,80 @@ +# 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.