mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
In upload-pages-artifact@v4 the maintainers have made the curious decision to omit hidden files (files whose names begin with ".") from the site that gets deployed to GitHub Pages and to provide no way to include a hidden file (at least "for now"), even though static sites may of course want to include files whose names begin with "." https://github.com/actions/upload-pages-artifact/pull/102 Work around this in by creating the "artifact" (tar file) ourselves and uploading it using the upload-artifact action, as suggested in the upload-pages-artifact PR linked above.
123 lines
4.4 KiB
YAML
123 lines
4.4 KiB
YAML
# Workflow for building the site and (optionally) publishing it to GitHub Pages.
|
|
name: Deploy to GitHub Pages
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
settings:
|
|
required: true
|
|
description: "The path to your Pelican settings file (`pelican`'s `--settings` option), for example: 'publishconf.py'"
|
|
type: string
|
|
requirements:
|
|
required: false
|
|
default: "pelican"
|
|
description: "The Python requirements to install, for example to enable markdown and typogrify use: 'pelican[markdown] typogrify' or if you have a requirements file use: '-r requirements.txt'"
|
|
type: string
|
|
output-path:
|
|
required: false
|
|
default: "output/"
|
|
description: "Where to output the generated files (`pelican`'s `--output` option)"
|
|
type: string
|
|
theme:
|
|
required: false
|
|
default: ""
|
|
description: "The GitHub repo URL of a custom theme to use, for example: 'https://github.com/seanh/sidecar.git'"
|
|
type: string
|
|
python:
|
|
required: false
|
|
default: "3.12"
|
|
description: "The version of Python to use, for example: '3.12' (to use the most recent version of Python 3.12, this is faster) or '3.12.1' (to use an exact version, slower)"
|
|
type: string
|
|
siteurl:
|
|
required: false
|
|
default: ""
|
|
description: "The base URL of your web site (Pelican's SITEURL setting). If not passed this will default to the URL of your GitHub Pages site, which is correct in most cases."
|
|
type: string
|
|
feed_domain:
|
|
required: false
|
|
default: ""
|
|
description: "The domain to be prepended to feed URLs (Pelican's FEED_DOMAIN setting). If not passed this will default to the URL of your GitHub Pages site, which is correct in most cases."
|
|
type: string
|
|
deploy:
|
|
required: false
|
|
default: true
|
|
description: "Whether to deploy the site. If true then build the site and deploy it. If false then just test that the site builds successfully but don't deploy anything."
|
|
type: boolean
|
|
permissions:
|
|
contents: read
|
|
pages: write
|
|
id-token: write
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ inputs.python }}
|
|
- name: Checkout theme
|
|
if: ${{ inputs.theme }}
|
|
run: git clone '${{ inputs.theme }}' .theme
|
|
- name: Configure GitHub Pages
|
|
id: pages
|
|
uses: actions/configure-pages@v5
|
|
- name: Install requirements
|
|
run: pip install ${{ inputs.requirements }}
|
|
- name: Build Pelican site
|
|
shell: python
|
|
run: |
|
|
import subprocess
|
|
|
|
cmd = "pelican"
|
|
cmd += " --settings ${{ inputs.settings }}"
|
|
cmd += " --extra-settings"
|
|
cmd += """ SITEURL='"${{ inputs.siteurl || steps.pages.outputs.base_url }}"'"""
|
|
cmd += """ FEED_DOMAIN='"${{ inputs.feed_domain || steps.pages.outputs.base_url }}"'"""
|
|
cmd += " --output ${{ inputs.output-path }}"
|
|
|
|
if "${{ inputs.theme }}":
|
|
cmd += " --theme-path .theme"
|
|
|
|
subprocess.run(cmd, shell=True, check=True)
|
|
- name: Fix permissions
|
|
run: |
|
|
chmod -c -R +rX "${{ inputs.output-path }}" | while read line; do
|
|
echo "::warning title=Invalid file permissions automatically fixed::$line"
|
|
done
|
|
- name: Archive artifact
|
|
shell: sh
|
|
run: |
|
|
echo "::group::Archive artifact"
|
|
tar \
|
|
--dereference \
|
|
--hard-dereference \
|
|
--directory "$OUTPUT_PATH" \
|
|
-cvf "$RUNNER_TEMP/artifact.tar" \
|
|
--exclude=.git \
|
|
--exclude=.github \
|
|
.
|
|
echo "::endgroup::"
|
|
env:
|
|
OUTPUT_PATH: ${{ inputs.output-path }}
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: github-pages
|
|
path: ${{ runner.temp }}/artifact.tar
|
|
retention-days: 1
|
|
if-no-files-found: error
|
|
deploy:
|
|
concurrency:
|
|
group: "pages"
|
|
cancel-in-progress: false
|
|
if: ${{ inputs.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
|