@ -10,6 +10,10 @@ on:
paths-ignore:
paths-ignore:
- '**.md'
- '**.md'
permissions:
contents : read
actions : write
jobs:
jobs:
build:
build:
name : Build
name : Build
@ -94,7 +98,7 @@ jobs:
# Download Artifact #1 and verify the correctness of the content
# Download Artifact #1 and verify the correctness of the content
- name : 'Download artifact #1'
- name : 'Download artifact #1'
uses : actions/download-artifact@ v4
uses : actions/download-artifact@ main
with:
with:
name : 'Artifact-A-${{ matrix.runs-on }}'
name : 'Artifact-A-${{ matrix.runs-on }}'
path : some/new/path
path : some/new/path
@ -114,7 +118,7 @@ jobs:
# Download Artifact #2 and verify the correctness of the content
# Download Artifact #2 and verify the correctness of the content
- name : 'Download artifact #2'
- name : 'Download artifact #2'
uses : actions/download-artifact@ v4
uses : actions/download-artifact@ main
with:
with:
name : 'Artifact-Wildcard-${{ matrix.runs-on }}'
name : 'Artifact-Wildcard-${{ matrix.runs-on }}'
path : some/other/path
path : some/other/path
@ -135,7 +139,7 @@ jobs:
# Download Artifact #4 and verify the correctness of the content
# Download Artifact #4 and verify the correctness of the content
- name : 'Download artifact #4'
- name : 'Download artifact #4'
uses : actions/download-artifact@ v4
uses : actions/download-artifact@ main
with:
with:
name : 'Multi-Path-Artifact-${{ matrix.runs-on }}'
name : 'Multi-Path-Artifact-${{ matrix.runs-on }}'
path : multi/artifact
path : multi/artifact
@ -155,7 +159,7 @@ jobs:
shell : pwsh
shell : pwsh
- name : 'Download symlinked artifact'
- name : 'Download symlinked artifact'
uses : actions/download-artifact@ v4
uses : actions/download-artifact@ main
with:
with:
name : 'Symlinked-Artifact-${{ matrix.runs-on }}'
name : 'Symlinked-Artifact-${{ matrix.runs-on }}'
path : from/symlink
path : from/symlink
@ -196,7 +200,7 @@ jobs:
# Download replaced Artifact #1 and verify the correctness of the content
# Download replaced Artifact #1 and verify the correctness of the content
- name : 'Download artifact #1 again'
- name : 'Download artifact #1 again'
uses : actions/download-artifact@ v4
uses : actions/download-artifact@ main
with:
with:
name : 'Artifact-A-${{ matrix.runs-on }}'
name : 'Artifact-A-${{ matrix.runs-on }}'
path : overwrite/some/new/path
path : overwrite/some/new/path
@ -213,6 +217,101 @@ jobs:
Write-Error "File contents of downloaded artifact are incorrect"
Write-Error "File contents of downloaded artifact are incorrect"
}
}
shell : pwsh
shell : pwsh
# Upload a single file without archiving (direct file upload)
- name : 'Create direct upload file'
run : echo -n 'direct file upload content' > direct-upload-${{ matrix.runs-on }}.txt
shell : bash
- name : 'Upload direct file artifact'
uses : ./
with:
name : 'Direct-File-${{ matrix.runs-on }}'
path : direct-upload-${{ matrix.runs-on }}.txt
archive : false
- name : 'Download direct file artifact'
uses : actions/download-artifact@main
with:
name : direct-upload-${{ matrix.runs-on }}.txt
path : direct-download
- name : 'Verify direct file artifact'
run : |
$file = "direct-download/direct-upload-${{ matrix.runs-on }}.txt"
if(!(Test-Path -path $file))
{
Write-Error "Expected file does not exist"
}
if(!((Get-Content $file -Raw).TrimEnd() -ceq "direct file upload content"))
{
Write-Error "File contents of downloaded artifact are incorrect"
}
shell : pwsh
upload-html-report:
name : Upload HTML Report
runs-on : ubuntu-latest
steps:
- name : Checkout
uses : actions/checkout@v4
- name : Setup Node 24
uses : actions/setup-node@v4
with:
node-version : 24. x
cache : 'npm'
- name : Install dependencies
run : npm ci
- name : Compile
run : npm run build
- name : Create HTML report
run : |
cat > report.html << 'EOF'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Artifact Upload Test Report</title>
<style>
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; max-width: 800px; margin: 40px auto; padding: 0 20px; color: #24292f; }
h1 { border-bottom: 1px solid #d0d7de; padding-bottom: 8px; }
.success { color: #1a7f37; }
.info { background: #ddf4ff; border: 1px solid #54aeff; border-radius: 6px; padding: 12px 16px; margin: 16px 0; }
table { border-collapse: collapse; width: 100%; margin: 16px 0; }
th, td { border: 1px solid #d0d7de; padding: 8px 12px; text-align: left; }
th { background: #f6f8fa; }
</style>
</head>
<body>
<h1>Artifact Upload Test Report</h1>
<div class="info">
<strong>This HTML file was uploaded as a single un-zipped artifact.</strong>
If you can see this in the browser, the feature is working correctly!
</div>
<table>
<tr><th>Property</th><th>Value</th></tr>
<tr><td>Upload method</td><td><code>archive : false </code></td></tr>
<tr><td>Content-Type</td><td><code>text/html</code></td></tr>
<tr><td>File</td><td><code>report.html</code></td></tr>
</table>
<p class="success">✔ Single file upload is working!</p>
</body>
</html>
EOF
- name : Upload HTML report (no archive)
uses : ./
with:
name : 'test-report'
path : report.html
archive : false
merge:
merge:
name : Merge
name : Merge
needs : build
needs : build
@ -230,7 +329,7 @@ jobs:
# easier to identify each of the merged artifacts
# easier to identify each of the merged artifacts
separate-directories : true
separate-directories : true
- name : 'Download merged artifacts'
- name : 'Download merged artifacts'
uses : actions/download-artifact@ v4
uses : actions/download-artifact@ main
with:
with:
name : merged-artifacts
name : merged-artifacts
path : all-merged-artifacts
path : all-merged-artifacts
@ -266,7 +365,7 @@ jobs:
# Download merged artifacts and verify the correctness of the content
# Download merged artifacts and verify the correctness of the content
- name : 'Download merged artifacts'
- name : 'Download merged artifacts'
uses : actions/download-artifact@ v4
uses : actions/download-artifact@ main
with:
with:
name : Merged-Artifact-As
name : Merged-Artifact-As
path : merged-artifact-a
path : merged-artifact-a
@ -290,3 +389,40 @@ jobs:
}
}
shell : pwsh
shell : pwsh
cleanup:
name : Cleanup Artifacts
needs : [ build, merge]
runs-on : ubuntu-latest
steps:
- name : Delete test artifacts
uses : actions/github-script@v8
with:
script : |
const keep = ['report.html'];
const owner = context.repo.owner;
const repo = context.repo.repo;
const runId = context.runId;
const {data: {artifacts}} = await github.rest.actions.listWorkflowRunArtifacts({
owner,
repo,
run_id : runId
});
for (const a of artifacts) {
if (keep.includes(a.name)) {
console.log(`Keeping artifact '${a.name}'`);
continue;
}
try {
await github.rest.actions.deleteArtifact({
owner,
repo,
artifact_id : a.id
});
console.log(`Deleted artifact '${a.name}'`);
} catch (err) {
console.log(`Could not delete artifact '${a.name}': ${err.message}`);
}
}