-
-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (130 loc) · 5.11 KB
/
Copy pathcasket-pages.yml
File metadata and controls
130 lines (130 loc) · 5.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# SPDX-License-Identifier: MPL-2.0
name: GitHub Pages
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# Pages is a repo-level admin feature; a workflow's `GITHUB_TOKEN`
# cannot enable it from CI, regardless of `pages: write` at workflow
# scope (verified: `actions/configure-pages@v6.0.0` returns 403
# "Resource not accessible by integration" on first-run enablement
# against a repo whose `has_pages: false`). Repos where the owner has
# not yet enabled Pages must skip the build/deploy chain entirely;
# otherwise the workflow goes red on every push to `main`.
#
# Unblock: enable Pages once via repo Settings → Pages (source: GitHub
# Actions). This precheck then short-circuits to `enabled=true` and
# the build/deploy jobs run normally. The `workflow_dispatch` entry
# point also keeps the workflow re-triggerable post-enablement.
precheck:
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
enabled: ${{ steps.check.outputs.enabled }}
steps:
- name: Probe Pages site
id: check
env:
GH_TOKEN: ${{ github.token }}
run: |
if gh api "repos/${GITHUB_REPOSITORY}/pages" >/dev/null 2>&1; then
echo "enabled=true" >> "$GITHUB_OUTPUT"
echo "::notice::Pages enabled — proceeding with build + deploy"
else
echo "enabled=false" >> "$GITHUB_OUTPUT"
echo "::notice::Pages not enabled on ${GITHUB_REPOSITORY} — skipping build/deploy. Enable via repo Settings → Pages to unblock."
fi
build:
needs: precheck
if: needs.precheck.outputs.enabled == 'true'
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Checkout casket-ssg
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: hyperpolymath/casket-ssg
path: .casket-ssg
- name: Setup GHCup
uses: haskell-actions/setup@cd0d9bdd65b20557f41bea4dbe43d0b5fbbfe553 # v2
with:
ghc-version: '9.8.2'
cabal-version: '3.10'
- name: Cache Cabal
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v4
with:
path: |
~/.cabal/packages
~/.cabal/store
.casket-ssg/dist-newstyle
key: ${{ runner.os }}-casket-${{ hashFiles('.casket-ssg/casket-ssg.cabal') }}
- name: Build casket-ssg
working-directory: .casket-ssg
run: cabal build
- name: Build site
run: |
mkdir -p site _site
# Generate index.md from README if site/index.md doesn't exist
if [ ! -f site/index.md ]; then
if [ -f README.adoc ]; then
# Convert AsciiDoc to Markdown (basic conversion)
echo "---" > site/index.md
echo "title: $(basename $PWD)" >> site/index.md
echo "date: $(date +%Y-%m-%d)" >> site/index.md
echo "---" >> site/index.md
cat README.adoc >> site/index.md
elif [ -f README.md ]; then
echo "---" > site/index.md
echo "title: $(basename $PWD)" >> site/index.md
echo "date: $(date +%Y-%m-%d)" >> site/index.md
echo "---" >> site/index.md
cat README.md >> site/index.md
else
echo "---" > site/index.md
echo "title: $(basename $PWD)" >> site/index.md
echo "date: $(date +%Y-%m-%d)" >> site/index.md
echo "---" >> site/index.md
echo "" >> site/index.md
echo "# $(basename $PWD)" >> site/index.md
echo "" >> site/index.md
echo "Documentation coming soon." >> site/index.md
fi
fi
cd .casket-ssg && cabal run casket-ssg -- build ../site ../_site
- name: Setup Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
with:
# Self-provision Pages on first run instead of failing with
# 404 ("Get Pages site failed"). The repo had Pages disabled
# at the GitHub level since the workflow was added; rather
# than maintain that as out-of-band state, let the workflow
# enable it. Idempotent on subsequent runs. The workflow's
# own permissions (pages: write, id-token: write) authorise
# this.
enablement: true
- name: Upload artifact
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
path: '_site'
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
timeout-minutes: 10
needs: [precheck, build]
if: needs.precheck.outputs.enabled == 'true'
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0