name: Test on: push: branches: - main 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@v4 - name: Setup Node 20 uses: actions/setup-node@v4 with: node-version: 20.x cache: 'npm' - name: Install dependencies run: npm ci - name: Compile run: npm run build - name: Lint run: npm run lint - name: Format run: npm run format-check - name: Test run: npm run test # 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 echo "Lorem ipsum dolor sit amet" > path/to/dir-1/file1.txt echo "Hello world from file #2" > path/to/dir-2/file2.txt # Upload a single file artifact - name: 'Upload artifact #1' uses: ./ with: name: 'Artifact-A-${{ matrix.runs-on }}' path: path/to/dir-1/file1.txt # Upload using a wildcard pattern - name: 'Upload artifact #2' uses: ./ with: name: 'Artifact-Wildcard-${{ matrix.runs-on }}' path: path/**/dir*/ # Upload a multi-path artifact - name: 'Upload artifact #3' uses: ./ with: name: 'Multi-Path-Artifact-${{ matrix.runs-on }}' path: | path/to/dir-1/* path/to/dir-[23]/* !path/to/dir-3/*.txt # Download Artifact #1 and verify the correctness of the content - name: 'Download artifact #1' uses: actions/download-artifact@v4 with: name: 'Artifact-A-${{ matrix.runs-on }}' path: some/new/path - name: 'Verify Artifact #1' run: | $file = "some/new/path/file1.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 # Download Artifact #2 and verify the correctness of the content - name: 'Download artifact #2' uses: actions/download-artifact@v4 with: name: 'Artifact-Wildcard-${{ matrix.runs-on }}' 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(!(Test-Path -path $file1) -or !(Test-Path -path $file2)) { Write-Error "Expected files do not exist" } if(!((Get-Content $file1) -ceq "Lorem ipsum dolor sit amet") -or !((Get-Content $file2) -ceq "Hello world from file #2")) { Write-Error "File contents of downloaded artifacts are incorrect" } shell: pwsh # Download Artifact #4 and verify the correctness of the content - name: 'Download artifact #4' uses: actions/download-artifact@v4 with: name: 'Multi-Path-Artifact-${{ matrix.runs-on }}' path: multi/artifact - name: 'Verify Artifact #4' run: | $file1 = "multi/artifact/dir-1/file1.txt" $file2 = "multi/artifact/dir-2/file2.txt" if(!(Test-Path -path $file1) -or !(Test-Path -path $file2)) { Write-Error "Expected files do not exist" } if(!((Get-Content $file1) -ceq "Lorem ipsum dolor sit amet") -or !((Get-Content $file2) -ceq "Hello world from file #2")) { Write-Error "File contents of downloaded artifacts are incorrect" } shell: pwsh # Replace the contents of Artifact #1 - name: 'Overwrite artifact #1 again' uses: ./ with: name: 'Artifact-A-${{ matrix.runs-on }}' path: path/to/dir-2/file2.txt overwrite: true # Download replaced Artifact #1 and verify the correctness of the content - name: 'Download artifact #1 again' uses: actions/download-artifact@v4 with: name: 'Artifact-A-${{ matrix.runs-on }}' path: overwrite/some/new/path - name: 'Verify Artifact #1 again' run: | $file = "overwrite/some/new/path/file2.txt" if(!(Test-Path -path $file)) { Write-Error "Expected file does not exist" } if(!((Get-Content $file) -ceq "Hello world from file #2")) { Write-Error "File contents of downloaded artifacts are incorrect" } shell: pwsh