name: "Test that artifact uploads and downloads succeed" on: push jobs: test-artifacts: runs-on: ubuntu-latest steps: - run: mkdir -p path/to/artifact - run: echo hello > path/to/artifact/world.txt - uses: actions/upload-artifact@v2 with: name: my-artifact path: path/to/artifact/world.txt - run: rm -rf path - uses: actions/download-artifact@v2 with: name: my-artifact - name: Display structure of downloaded files run: ls -la # Test end-to-end by uploading two artifacts and then downloading them - name: Create artifact files run: | mkdir -p path/to/dir-1 mkdir -p path/to/dir-2 mkdir -p path/to/dir-3 mkdir -p path/to/dir-5 mkdir -p path/to/dir-6 mkdir -p path/to/dir-7 echo "Lorem ipsum dolor sit amet" > path/to/dir-1/file1.txt echo "Hello world from file #2" > path/to/dir-2/file2.txt echo "This is a going to be a test for a large enough file that should get compressed with GZip. The @actions/artifact package uses GZip to upload files. This text should have a compression ratio greater than 100% so it should get uploaded using GZip" > path/to/dir-3/gzip.txt dd if=/dev/random of=path/to/dir-5/file5.rnd bs=1024 count=1024 dd if=/dev/random of=path/to/dir-6/file6.rnd bs=1024 count=$((10*1024)) dd if=/dev/random of=path/to/dir-7/file7.rnd bs=1024 count=$((10*1024)) # Upload a single file artifact - name: 'Upload artifact #1' uses: actions/upload-artifact@v2 with: name: 'Artifact-A' path: path/to/dir-1/file1.txt # Upload using a wildcard pattern, name should default to 'artifact' if not provided - name: 'Upload artifact #2' uses: actions/upload-artifact@v2 with: path: path/**/dir*/ # Upload a directory that contains a file that will be uploaded with GZip - name: 'Upload artifact #3' uses: actions/upload-artifact@v2 with: name: 'GZip-Artifact' path: path/to/dir-3/ # Upload a directory that contains a file that will be uploaded with GZip - name: 'Upload artifact #4' uses: actions/upload-artifact@v2 with: name: 'Multi-Path-Artifact' path: | path/to/dir-1/* path/to/dir-[23]/* !path/to/dir-3/*.txt # Upload a mid-size file artifact - name: 'Upload artifact #5' uses: actions/upload-artifact@v2 with: name: 'Mid-Size-Artifact' path: path/to/dir-5/file5.rnd # Upload a big file artifact - name: 'Upload artifact #6' uses: actions/upload-artifact@v2 with: name: 'Big-Artifact' path: path/to/dir-6/file6.rnd # Upload a big file artifact twice - name: 'Upload artifact #7 (First)' uses: actions/upload-artifact@v2 with: name: 'Big-Uploaded-Twice' path: path/to/dir-7/file7.rnd # Upload a big file artifact twice - name: 'Upload artifact #7 (Second)' uses: actions/upload-artifact@v2 with: name: 'Big-Uploaded-Twice' path: path/to/dir-7/file7.rnd # Verify artifacts. Switch to download-artifact@v2 once it's out of preview # Download Artifact #1 and verify the correctness of the content - name: 'Download artifact #1' uses: actions/download-artifact@v2 with: name: 'Artifact-A' path: some/new/path - name: 'Verify Artifact #1' run: | file="some/new/path/file1.txt" if [ ! -f $file ] ; then echo "Expected file does not exist" exit 1 fi if [ "$(cat $file)" != "Lorem ipsum dolor sit amet" ] ; then echo "File contents of downloaded artifact are incorrect" exit 1 fi # Download Artifact #2 and verify the correctness of the content - name: 'Download artifact #2' uses: actions/download-artifact@v2 with: name: 'artifact' path: some/other/path - name: 'Verify Artifact #2' run: | file1="some/other/path/to/dir-1/file1.txt" file2="some/other/path/to/dir-2/file2.txt" if [ ! -f $file1 -o ! -f $file2 ] ; then echo "Expected files do not exist" exit 1 fi if [ "$(cat $file1)" != "Lorem ipsum dolor sit amet" -o "$(cat $file2)" != "Hello world from file #2" ] ; then echo "File contents of downloaded artifacts are incorrect" exit 1 fi # Download Artifact #3 and verify the correctness of the content - name: 'Download artifact #3' uses: actions/download-artifact@v2 with: name: 'GZip-Artifact' path: gzip/artifact/path # Because a directory was used as input during the upload the parent directories, path/to/dir-3/, should not be included in the uploaded artifact - name: 'Verify Artifact #3' run: | gzipFile="gzip/artifact/path/gzip.txt" if [ ! -f $gzipFile ] ; then echo "Expected file do not exist" exit 1 fi if [ "$(cat $gzipFile)" != "This is a going to be a test for a large enough file that should get compressed with GZip. The @actions/artifact package uses GZip to upload files. This text should have a compression ratio greater than 100% so it should get uploaded using GZip" ] ; then echo "File contents of downloaded artifact is incorrect" exit 1 fi - name: 'Download artifact #4' uses: actions/download-artifact@v2 with: name: 'Multi-Path-Artifact' path: multi/artifact - name: 'Verify Artifact #4' run: | file1="multi/artifact/dir-1/file1.txt" file2="multi/artifact/dir-2/file2.txt" if [ ! -f $file1 -o ! -f $file2 ] ; then echo "Expected files do not exist" exit 1 fi if [ "$(cat $file1)" != "Lorem ipsum dolor sit amet" -o "$(cat $file2)" != "Hello world from file #2" ] ; then echo "File contents of downloaded artifacts are incorrect" exit 1 fi - name: 'Download artifact #5' uses: actions/download-artifact@v2 with: name: 'Mid-Size-Artifact' path: mid-size/artifact/path - name: 'Verify Artifact #5' run: | file="mid-size/artifact/path/file5.rnd" if [ ! -f $file ] ; then echo "Expected file does not exist" exit 1 fi if ! diff $file path/to/dir-5/file5.rnd ; then echo "File contents of downloaded artifact are incorrect" exit 1 fi - name: 'Download artifact #6' uses: actions/download-artifact@v2 with: name: 'Big-Artifact' path: big/artifact/path - name: 'Verify Artifact #6' run: | file="big/artifact/path/file6.rnd" if [ ! -f $file ] ; then echo "Expected file does not exist" exit 1 fi if ! diff $file path/to/dir-6/file6.rnd ; then echo "File contents of downloaded artifact are incorrect" exit 1 fi - name: 'Download artifact #7' uses: actions/download-artifact@v2 with: name: 'Big-Uploaded-Twice' path: big-uploaded-twice/artifact/path - name: 'Verify Artifact #7' run: | file="big-uploaded-twice/artifact/path/file7.rnd" if [ ! -f $file ] ; then echo "Expected file does not exist" exit 1 fi if ! diff $file path/to/dir-7/file7.rnd ; then echo "File contents of downloaded artifact are incorrect" exit 1 fi