Skip to content

Build GitHub Pages #110

Build GitHub Pages

Build GitHub Pages #110

Workflow file for this run

name: "Build GitHub Pages"
run-name: "Build GitHub Pages"
on:
workflow_call:
push:
branches-ignore: [main]
permissions:
contents: read
env:
GH_TOKEN: ${{ github.token }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v4
- name: "Install tools"
run: sudo apt install tidy pandoc
- name: "Install templates"
run: |
mkdir -p ~/.pandoc/templates
curl -sSL 'https://github.com/tajmone/pandoc-goodies/raw/refs/heads/master/templates/html5/github/GitHub.html5' -o ~/.pandoc/templates/GitHub.html5
- name: "Retrieve Code of Conduct"
run: curl --header "${MEDIA_TYPE_HEADER}" --header "${AUTH_TOKEN_HEADER}" --create-dirs --output code-of-conduct.md "${CONTENTS_ENDPOINT}/CODE_OF_CONDUCT.md"
env:
CONTENTS_ENDPOINT: '${{ github.api_url }}/repos/${{ github.repository_owner }}/.github/contents'
MEDIA_TYPE_HEADER: "Accept: application/vnd.github.raw"
AUTH_TOKEN_HEADER: "Authorization: Bearer ${{ github.token }}"
- name: "Retrieve Security Policy"
run: curl --header "${MEDIA_TYPE_HEADER}" --header "${AUTH_TOKEN_HEADER}" --create-dirs --output security/policy.md "${CONTENTS_ENDPOINT}/SECURITY.md"
env:
CONTENTS_ENDPOINT: '${{ github.api_url }}/repos/${{ github.repository_owner }}/.github/contents'
MEDIA_TYPE_HEADER: "Accept: application/vnd.github.raw"
AUTH_TOKEN_HEADER: "Authorization: Bearer ${{ github.token }}"
- name: "Retrieve Contribution Guidlines"
run: curl --header "${MEDIA_TYPE_HEADER}" --header "${AUTH_TOKEN_HEADER}" --create-dirs --output contributing.md "${CONTENTS_ENDPOINT}/CONTRIBUTING.md"
env:
CONTENTS_ENDPOINT: '${{ github.api_url }}/repos/${{ github.repository_owner }}/.github/contents'
MEDIA_TYPE_HEADER: "Accept: application/vnd.github.raw"
AUTH_TOKEN_HEADER: "Authorization: Bearer ${{ github.token }}"
- id: latest-release
name: "Get Details of Latest Release"
run: gh release view --json "${JQ_PROPS}" --jq "${JQ_QUERY}" | tee -a "${GITHUB_OUTPUT}"
env:
GH_REPO: '${{ vars.REPO_WITH_RELEASES }}'
JQ_PROPS: 'tagName'
JQ_QUERY: '"tag_name=" + (.tagName | tostring)'
- name: "Generate an authors.yaml file"
run: gh api "${ENDPOINT}" --jq "${JQ_QUERY}" | tee authors.yaml
env:
ENDPOINT: '/repos/${{ vars.REPO_WITH_RELEASES }}/contributors'
JQ_QUERY: '"author-meta:" + (["", (.[] | .login)] | join("\n- "))'
- name: "Generate a changelog.md file"
run: gh api "${ENDPOINT}" --template "${TEMPLATE}" | tee changelog.md
env:
ENDPOINT: '/repos/${{ vars.REPO_WITH_RELEASES }}/releases'
TEMPLATE: |
---
lang: en
title: Changelog
...
Please visit [https://www.jirastopwatch.com] for full introduction of JiraStopWatch and documentation.
{{ range . -}}
## [{{.name}}]({{ .html_url }})
{{- if .draft -}}
{{ " " }}![This is a draft release.](https://img.shields.io/badge/DRAFT-grey)
{{- else if .prerelease -}}
{{ " " }}![This is a pre-release.](https://img.shields.io/badge/PRE--RELEASE-orange)
{{- else if eq .tag_name "${{ steps.latest-release.outputs.tag_name }}" -}}
{{ " " }}![This is the latest release.](https://img.shields.io/badge/LATEST-green)
{{- end }}
{{ .body }}
{{ if .assets -}}
### Asset Downloads
{{- "\n" -}}
{{ range .assets }}
- [{{ or .label .name }}]({{ .browser_download_url }})
{{- end }}
{{ end }}
{{- end }}
{{- /* noop */ -}}
[https://www.jirastopwatch.com]: https://www.jirastopwatch.com
- name: "Generate a humans.md file"
run: gh api "${ENDPOINT}" --template "${TEMPLATE}" | sh | tee humans.md
env:
ENDPOINT: '/orgs/${{ github.repository_owner }}/repos'
JQ_QUERY: '"- " + (.name // .login) + " aka [@" + .login + "](" + .html_url + ")"'
TEMPLATE: |
echo "# Humans to Thank"
echo
echo "A huge thanks to all and colaborators who have contributed on GitHub!"
echo
{{range .}}
echo "## Contributors [{{.full_name}}]({{.html_url}})"
echo
gh api '/repos/{{.full_name}}/contributors' --jq '.[].login' | sort -u | xargs -ILOGIN gh api '/users/LOGIN' --jq "${JQ_QUERY}"
echo
{{end}}
- name: "Create generated HTML files"
run: |
make -f - << \EOF
all: $(patsubst %.md,%.html,$(wildcard *.md */*.md */*/*.md)) humans.txt
rm -f header.html
%.html: %.md
pandoc --metadata-file=authors.yaml --template=GitHub.html5 --include-in-header=header.html --from markdown+yaml_metadata_block+backtick_code_blocks+fenced_code_attributes+inline_notes+emoji-implicit_figures+shortcut_reference_links+spaced_reference_links+autolink_bare_uris-citations --to html --standalone $< --output $@
%.txt: %.md
pandoc --from markdown-citations --to plain+gutenberg --wrap=none $< --output $@
EOF
- name: "Create redirect HTML files"
run: |
make -f - << \EOF
all: $(patsubst %.redirect,%.html,$(wildcard *.redirect */*.redirect */*/*.redirect))
rm -f redirect.html $(wildcard *.redirect */*.redirect */*/*.redirect)
%.html: %.redirect
@echo "Generating $@..."
$(file > $@, $(subst {{ .REDIRECT }},$(file < $<),$(file < redirect.html)))
EOF
- name: "Tidy the HTML"
run: find . -name '*.html' | xargs tidy -indent --wrap 0 --output-html yes --warn-proprietary-attributes no -quiet -modify
- name: "Archive Pages Artifact"
uses: actions/upload-artifact@v4
with:
name: pages
path: |
.
!CNAME
!.nojekyll
!.git*/**