mirror of
https://github.com/actions/upload-pages-artifact.git
synced 2026-02-09 11:51:33 +00:00
Compare commits
135 Commits
v1.0.0
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c314fcbb0 | ||
|
|
2d163be3dd | ||
|
|
c70484322b | ||
|
|
9605915f1d | ||
|
|
e59cdfe6d6 | ||
|
|
a2d6704326 | ||
|
|
984864e7b7 | ||
|
|
45dc78884c | ||
|
|
efaad07812 | ||
|
|
fc056d0994 | ||
|
|
717c17dd70 | ||
|
|
5ed71eacfa | ||
|
|
2219f71d09 | ||
|
|
b83d5a118e | ||
|
|
a16f4a08dd | ||
|
|
a5aa90da21 | ||
|
|
2eb9582f11 | ||
|
|
68c8fd1023 | ||
|
|
b73e0a2c88 | ||
|
|
aefddd41c8 | ||
|
|
7abc80a9c4 | ||
|
|
1780dfc2ce | ||
|
|
36a9e8110d | ||
|
|
bb87865510 | ||
|
|
c7522bd753 | ||
|
|
a8628efa7f | ||
|
|
b443e1f622 | ||
|
|
ff11fa5c8a | ||
|
|
4ee80ee697 | ||
|
|
f98d42fd3a | ||
|
|
56afc609e7 | ||
|
|
d12fdfb149 | ||
|
|
aef5542762 | ||
|
|
29cedd75fc | ||
|
|
a69c22e32e | ||
|
|
794e304fb3 | ||
|
|
14007f6464 | ||
|
|
0191170de1 | ||
|
|
0e7832dab2 | ||
|
|
1a6d9fac9a | ||
|
|
027b0ddc3d | ||
|
|
53e19ad193 | ||
|
|
0252fc4ba7 | ||
|
|
2a5c144074 | ||
|
|
7e3f6bb53b | ||
|
|
257e666c05 | ||
|
|
0313a19afa | ||
|
|
1228e65686 | ||
|
|
eb31309b6c | ||
|
|
241a975ec2 | ||
|
|
ef95519d72 | ||
|
|
ecdd3edff7 | ||
|
|
e699324f6a | ||
|
|
405e4260b4 | ||
|
|
39a95dabfa | ||
|
|
a753861a5d | ||
|
|
dca6bac0e5 | ||
|
|
3138c05496 | ||
|
|
07f501f6a0 | ||
|
|
84bb4cd4b7 | ||
|
|
8f17ae6041 | ||
|
|
bc7aff665b | ||
|
|
6327a23a11 | ||
|
|
81e1caf958 | ||
|
|
9c071e6bed | ||
|
|
75e09bde99 | ||
|
|
74d0f02a66 | ||
|
|
6e866d065b | ||
|
|
a3f792f9c5 | ||
|
|
66b63f4a7d | ||
|
|
82a6ae9add | ||
|
|
dd7005653b | ||
|
|
f6a706f190 | ||
|
|
2642ae83d2 | ||
|
|
4d8166c5f5 | ||
|
|
64bcae551a | ||
|
|
d07e4817c2 | ||
|
|
07744da919 | ||
|
|
a3acd10bdf | ||
|
|
1e171d0d53 | ||
|
|
c06cea93b0 | ||
|
|
d8fa6d6dc2 | ||
|
|
2b33ce347b | ||
|
|
6fae3a4821 | ||
|
|
c55689491b | ||
|
|
253fd476ed | ||
|
|
98c5608efa | ||
|
|
c8641e8004 | ||
|
|
b27b6af8bf | ||
|
|
73907447a0 | ||
|
|
6da3417318 | ||
|
|
386aa88c28 | ||
|
|
90d4377601 | ||
|
|
79d3b41b30 | ||
|
|
7d0004809d | ||
|
|
1ca738b002 | ||
|
|
4103baae3e | ||
|
|
4506126207 | ||
|
|
6de1c7ae49 | ||
|
|
de1b81a30a | ||
|
|
61a978d261 | ||
|
|
3cb2c0f93b | ||
|
|
e02d70a4e3 | ||
|
|
73b4a0753a | ||
|
|
aff0f4398b | ||
|
|
42a1761ba2 | ||
|
|
12e73a1efa | ||
|
|
a597aecd27 | ||
|
|
fa880244ea | ||
|
|
70a14093be | ||
|
|
fb03cce750 | ||
|
|
287627f624 | ||
|
|
88565766e5 | ||
|
|
d3a918bb5e | ||
|
|
8ad82273b5 | ||
|
|
2f3239288b | ||
|
|
fc6db751bf | ||
|
|
888798aeba | ||
|
|
2ab5cde5b2 | ||
|
|
ae9ee82aa6 | ||
|
|
78f064a158 | ||
|
|
6b3212610f | ||
|
|
6a57e48bf6 | ||
|
|
724b9438f5 | ||
|
|
f422a5a910 | ||
|
|
0ab6893735 | ||
|
|
fd7afbc054 | ||
|
|
16e781d8a4 | ||
|
|
f4e69017a7 | ||
|
|
e361946409 | ||
|
|
ef7661905b | ||
|
|
780ca3f8cd | ||
|
|
4fe9084ffa | ||
|
|
ceec27c96b | ||
|
|
4143b6e8b8 |
9
.github/dependabot.yml
vendored
Normal file
9
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
groups:
|
||||
non-breaking-changes:
|
||||
update-types: [minor, patch]
|
||||
4
.github/workflows/draft-release.yml
vendored
4
.github/workflows/draft-release.yml
vendored
@@ -8,7 +8,7 @@ jobs:
|
||||
draft-release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: release-drafter/release-drafter@v5
|
||||
- uses: actions/checkout@v4
|
||||
- uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
20
.github/workflows/publish-immutable-actions.yml
vendored
Normal file
20
.github/workflows/publish-immutable-actions.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: 'Publish Immutable Action Version'
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
packages: write
|
||||
|
||||
steps:
|
||||
- name: Checking out
|
||||
uses: actions/checkout@v4
|
||||
- name: Publish
|
||||
id: publish
|
||||
uses: actions/publish-immutable-action@v0.0.4
|
||||
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@@ -1,7 +1,7 @@
|
||||
name: Release
|
||||
on:
|
||||
release:
|
||||
types: [edited]
|
||||
types: [released]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
TAG_NAME:
|
||||
@@ -24,7 +24,7 @@ jobs:
|
||||
steps:
|
||||
- name: Update the ${{ env.TAG_NAME }} tag
|
||||
id: update-major-tag
|
||||
uses: actions/publish-action@v0.1.0
|
||||
uses: actions/publish-action@v0.3.0
|
||||
with:
|
||||
source-tag: ${{ env.TAG_NAME }}
|
||||
slack-webhook: ${{ secrets.SLACK_WEBHOOK }}
|
||||
|
||||
59
.github/workflows/test-hosted-runners.yml
vendored
Normal file
59
.github/workflows/test-hosted-runners.yml
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
name: Run Tests
|
||||
|
||||
#
|
||||
# Create some files with script/new-artifact.sh and confirm they are properly packaged and uploaded
|
||||
# as artifacts with the actions.
|
||||
#
|
||||
# This is tested on all OS platforms where we have hosted runners.
|
||||
#
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Generate files
|
||||
run: mkdir artifact && mkdir artifact2 && cd artifact && ../script/new-artifact.sh
|
||||
shell: bash
|
||||
|
||||
- name: Upload Pages artifact
|
||||
uses: ./
|
||||
with:
|
||||
name: pages-artifact-${{ matrix.os }}
|
||||
path: artifact
|
||||
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: pages-artifact-${{ matrix.os }}
|
||||
path: artifact2
|
||||
|
||||
- name: Extract artifact
|
||||
run: tar -xf artifact2/artifact.tar -C artifact2 && rm artifact2/artifact.tar
|
||||
shell: bash
|
||||
|
||||
- name: Check for absence of hidden files
|
||||
run: if [ $(find artifact2 -regex ".*/\..*" | wc -l) != 0 ]; then echo "Hidden files found"; exit 1; fi
|
||||
shell: bash
|
||||
|
||||
- name: Compare files
|
||||
run: |
|
||||
rm artifact/.hidden
|
||||
diff -qr artifact artifact2
|
||||
shell: bash
|
||||
|
||||
- name: Check for absence of symlinks
|
||||
run: if [ $(find artifact2 -type l | wc -l) != 0 ]; then echo "Symlinks found"; exit 1; fi
|
||||
shell: bash
|
||||
92
README.md
92
README.md
@@ -1,55 +1,99 @@
|
||||
# Upload-Pages-Artifact
|
||||
# upload-pages-artifact
|
||||
|
||||
A composite action for packaging and uploading artifact that can be deployed to [GitHub Pages][pages].
|
||||
A composite Action for packaging and uploading artifact that can be deployed to [GitHub Pages][pages].
|
||||
|
||||
# Scope
|
||||
## Usage
|
||||
|
||||
⚠️ Official support for building Pages with Actions is in public beta at the moment.
|
||||
See [action.yml](action.yml) for the various `inputs` this action supports (or [below](#inputs-📥)).
|
||||
|
||||
# Usage
|
||||
If you breakdown your workflow in two jobs (`build` and `deploy`), we recommend this action to be used in your `build` job:
|
||||
|
||||
See [action.yml](action.yml)
|
||||
```yaml
|
||||
jobs:
|
||||
# Build job
|
||||
build:
|
||||
# Specify runner + build & upload the static files as an artifact
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Build static files
|
||||
id: build
|
||||
run: |
|
||||
# <Not provided for brevity>
|
||||
# At a minimum this step should build the static files of your site
|
||||
# <Not provided for brevity>
|
||||
|
||||
<!-- TODO: document custom workflow -->
|
||||
- name: Upload static files as artifact
|
||||
id: deployment
|
||||
uses: actions/upload-pages-artifact@v3 # or specific "vX.X.X" version tag for this action
|
||||
with:
|
||||
path: build_outputs_folder/
|
||||
|
||||
# Artifact validation
|
||||
# Deployment job
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
```
|
||||
|
||||
While using this action is optional, we highly recommend it since it takes care of producing (mostly) valid artifacts.
|
||||
### Inputs 📥
|
||||
|
||||
A Pages artifact must:
|
||||
| Input | Required? | Default | Description |
|
||||
| ---------------- | --------- | -------------- | -------------------------------------------------- |
|
||||
| `name` | `false` | `github-pages` | Artifact name |
|
||||
| `path` | `true` | `_site/` | Path of the directory containing the static assets |
|
||||
| `retention-days` | `false` | `1` | Duration after which artifact will expire in days |
|
||||
|
||||
- Be called `github-pages`
|
||||
### Outputs 📤
|
||||
|
||||
| Output | Description |
|
||||
| ------------- | ---------------------------------------- |
|
||||
| `artifact_id` | The ID of the artifact that was uploaded |
|
||||
|
||||
## Artifact validation
|
||||
|
||||
While choosing to use this action as part of your approach to deploying to GitHub Pages is technically optional, we highly recommend it since it takes care of producing (mostly) valid artifacts.
|
||||
|
||||
However, if you _**do not**_ choose to use this action but still want to deploy to Pages using an Actions workflow, then you must upload an Actions artifact that meets the following criteria:
|
||||
|
||||
- Be named `github-pages`
|
||||
- Be a single [`gzip` archive][gzip] containing a single [`tar` file][tar]
|
||||
|
||||
The [`tar` file][tar] must:
|
||||
|
||||
- be under 10GB in size
|
||||
- be under 10GB in size (we recommend under 1 GB!)
|
||||
- :warning: The GitHub Pages [officially supported maximum size limit is 1GB][pages-usage-limits], so the subsequent deployment of larger tarballs are not guaranteed to succeed — often because they are more prone to exceeding the maximum deployment timeout of 10 minutes.
|
||||
- ⛔ However, there is also an _unofficial_ absolute maximum size limit of 10GB, which Pages will not even _attempt_ to deploy.
|
||||
- not contain any symbolic or hard links
|
||||
- contain only files and directories
|
||||
|
||||
# Release instructions
|
||||
## Release instructions
|
||||
|
||||
In order to release a new version of this Action:
|
||||
|
||||
1. Locate the semantic version of the upcoming release (a draft is maintained by the [`draft-release` workflow][draft-release])
|
||||
1. Locate the semantic version of the [upcoming release][release-list] (a draft is maintained by the [`draft-release` workflow][draft-release]).
|
||||
|
||||
2. Push a matching tag, for instance for `v0.1.0`:
|
||||
2. Publish the draft release from the `main` branch with semantic version as the tag name, _with_ the checkbox to publish to the GitHub Marketplace checked. :ballot_box_with_check:
|
||||
|
||||
```bash
|
||||
git tag v0.1.0
|
||||
git push origin v0.1.0
|
||||
```
|
||||
3. After publishing the release, the [`release` workflow][release] will automatically run to create/update the corresponding major version tag such as `v0`.
|
||||
|
||||
3. Publish the draft release (the major tag such as `v0` will be created/updated by the [`release` workflow][release])
|
||||
⚠️ Environment approval is required. Check the [Release workflow run list][release-workflow-runs].
|
||||
|
||||
⚠️ Environment approval is required.
|
||||
|
||||
# License
|
||||
## License
|
||||
|
||||
The scripts and documentation in this project are released under the [MIT License](LICENSE).
|
||||
|
||||
<!-- references -->
|
||||
[pages]: https://pages.github.com
|
||||
[release-list]: https://github.com/actions/upload-pages-artifact/releases
|
||||
[draft-release]: .github/workflows/draft-release.yml
|
||||
[release]: .github/workflows/release.yml
|
||||
[release-workflow-runs]: https://github.com/actions/upload-pages-artifact/actions/workflows/release.yml
|
||||
[gzip]: https://en.wikipedia.org/wiki/Gzip
|
||||
[tar]: https://en.wikipedia.org/wiki/Tar_(computing)
|
||||
[tar]: https://en.wikipedia.org/wiki/Tar_(computing)
|
||||
[pages-usage-limits]: https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#usage-limits
|
||||
|
||||
69
action.yml
69
action.yml
@@ -1,30 +1,85 @@
|
||||
name: "Upload Pages artifact"
|
||||
name: "Upload GitHub Pages artifact"
|
||||
description: "A composite action that prepares your static assets to be deployed to GitHub Pages"
|
||||
author: "GitHub"
|
||||
inputs:
|
||||
name:
|
||||
description: 'Artifact name'
|
||||
required: false
|
||||
default: 'github-pages'
|
||||
path:
|
||||
description: "Path of the directoring containing the static assets."
|
||||
description: "Path of the directory containing the static assets."
|
||||
required: true
|
||||
default: "_site/"
|
||||
retention-days:
|
||||
description: "Duration after which artifact will expire in days."
|
||||
required: false
|
||||
default: "1"
|
||||
outputs:
|
||||
artifact_id:
|
||||
description: "The ID of the artifact that was uploaded."
|
||||
value: ${{ steps.upload-artifact.outputs.artifact-id }}
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Archive artifact
|
||||
shell: bash
|
||||
shell: sh
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
echo ::group::Archive artifact
|
||||
tar \
|
||||
--dereference --hard-dereference \
|
||||
--directory ${{ inputs.path }} \
|
||||
-cvf ${{ runner.temp }}/artifact.tar \
|
||||
--directory "$INPUT_PATH" \
|
||||
-cvf "$RUNNER_TEMP/artifact.tar" \
|
||||
--exclude=.git \
|
||||
--exclude=.github \
|
||||
--exclude=".[^/]*" \
|
||||
.
|
||||
echo ::endgroup::
|
||||
env:
|
||||
INPUT_PATH: ${{ inputs.path }}
|
||||
|
||||
# Switch to gtar (GNU tar instead of bsdtar which is the default in the MacOS runners so we can use --hard-dereference)
|
||||
- name: Archive artifact
|
||||
shell: sh
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
echo ::group::Archive artifact
|
||||
gtar \
|
||||
--dereference --hard-dereference \
|
||||
--directory "$INPUT_PATH" \
|
||||
-cvf "$RUNNER_TEMP/artifact.tar" \
|
||||
--exclude=.git \
|
||||
--exclude=.github \
|
||||
--exclude=".[^/]*" \
|
||||
.
|
||||
echo ::endgroup::
|
||||
env:
|
||||
INPUT_PATH: ${{ inputs.path }}
|
||||
|
||||
# Massage the paths for Windows only
|
||||
- name: Archive artifact
|
||||
shell: bash
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
echo ::group::Archive artifact
|
||||
tar \
|
||||
--dereference --hard-dereference \
|
||||
--directory "$INPUT_PATH" \
|
||||
-cvf "$RUNNER_TEMP\artifact.tar" \
|
||||
--exclude=.git \
|
||||
--exclude=.github \
|
||||
--exclude=".[^/]*" \
|
||||
--force-local \
|
||||
"."
|
||||
echo ::endgroup::
|
||||
env:
|
||||
INPUT_PATH: ${{ inputs.path }}
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@main
|
||||
id: upload-artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: github-pages
|
||||
name: ${{ inputs.name }}
|
||||
path: ${{ runner.temp }}/artifact.tar
|
||||
retention-days: ${{ inputs.retention-days }}
|
||||
if-no-files-found: error
|
||||
|
||||
13
script/new-artifact.sh
Executable file
13
script/new-artifact.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# Create some files and directories in the current folder
|
||||
echo 'hello' > hello.txt
|
||||
mkdir subdir
|
||||
echo 'world' > subdir/world.txt
|
||||
|
||||
# Add some symlinks (which we should dereference properly when archiving)
|
||||
ln -s subdir subdir-link
|
||||
ln -s hello.txt bonjour.txt
|
||||
|
||||
# Create some hidden files
|
||||
echo 'foo' > .hidden
|
||||
Reference in New Issue
Block a user