Skip to content

Build GitHub Pages

Build GitHub Pages #79

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@v3
- 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 api "${ENDPOINT}" --jq "${JQ_QUERY}" | tee -a "${GITHUB_OUTPUT}"
env:
ENDPOINT: '/repos/${{ vars.REPO_WITH_RELEASES }}/releases/latest'
JQ_QUERY: '"tag_name=" + (.tag_name | 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
{{ range .assets }}
- [{{ or .label .name }}]({{ .browser_download_url }})
{{ end }}
{{- end }}
{{- end }}
[https://www.jirastopwatch.com]: https://www.jirastopwatch.com
- name: "Create generated HTML files"
run: |
make -f - << \EOF
all: $(patsubst %.md,%.html,$(wildcard *.md */*.md */*/*.md))
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 --to html --standalone $< --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*/**