Skip to content

Commit 51f108e

Browse files
authored
Merge pull request #34 from jdarcyryan/jdr/pages
jdr/pages
2 parents 1d93688 + 90deba2 commit 51f108e

1 file changed

Lines changed: 52 additions & 39 deletions

File tree

.github/workflows/pages.yml

Lines changed: 52 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,19 @@ jobs:
4646
REPO: ${{ github.repository }}
4747
run: |
4848
echo "Repository is private — removing existing Pages deployments"
49-
50-
# List all deployments in the github-pages environment
5149
DEPLOYMENTS=$(gh api "repos/${REPO}/deployments?environment=github-pages&per_page=100" --jq '.[].id' 2>/dev/null || true)
52-
5350
if [ -z "$DEPLOYMENTS" ]; then
5451
echo "No existing Pages deployments found"
5552
exit 0
5653
fi
57-
58-
# Mark each deployment as inactive, then delete it
5954
for ID in $DEPLOYMENTS; do
6055
echo "Deactivating deployment ${ID}..."
61-
gh api \
62-
--method POST \
63-
-H "Accept: application/vnd.github+json" \
64-
"repos/${REPO}/deployments/${ID}/statuses" \
65-
-f state=inactive 2>/dev/null || true
66-
56+
gh api --method POST -H "Accept: application/vnd.github+json" \
57+
"repos/${REPO}/deployments/${ID}/statuses" -f state=inactive 2>/dev/null || true
6758
echo "Deleting deployment ${ID}..."
68-
gh api \
69-
--method DELETE \
70-
-H "Accept: application/vnd.github+json" \
59+
gh api --method DELETE -H "Accept: application/vnd.github+json" \
7160
"repos/${REPO}/deployments/${ID}" 2>/dev/null || true
7261
done
73-
7462
echo "All Pages deployments removed"
7563
7664
# ── Build (only if public) ──────────────────────────────────────
@@ -98,13 +86,8 @@ jobs:
9886
STAGE="_site_source"
9987
10088
echo "::group::Staging allowed files"
101-
102-
# ── Stage ONLY allowed files into a clean directory ───────────
103-
# Whitelist: *.md files + LICENSE + LICENSE.txt
104-
# Everything else is excluded from the site.
10589
mkdir -p "${STAGE}"
10690
107-
# Copy all .md files preserving directory structure
10891
find . -name '*.md' \
10992
-not -path './.git/*' \
11093
-not -path "./${STAGE}/*" \
@@ -114,19 +97,16 @@ jobs:
11497
cp "$f" "$dest"
11598
done
11699
117-
# Copy LICENSE files (plain text)
118100
for lf in LICENSE LICENSE.txt; do
119101
[ -f "$lf" ] && cp "$lf" "${STAGE}/"
120102
done
121103
122-
# Remove any .gitkeep files that got copied
123104
find "${STAGE}" -name '.gitkeep' -delete
124105
125106
echo "Staged files:"
126107
find "${STAGE}" -type f | sort
127108
echo "::endgroup::"
128109
129-
# ── Everything below operates inside the staging dir ──────────
130110
cd "${STAGE}"
131111
132112
echo "::group::Generating Jekyll config and layout"
@@ -156,8 +136,10 @@ jobs:
156136
<meta charset="UTF-8">
157137
<meta name="viewport" content="width=device-width, initial-scale=1.0">
158138
<title>{{ page.title | default: site.title }}</title>
139+
<link rel="icon" type="image/svg+xml" href="https://raw.githubusercontent.com/PowerShell/PowerShell/refs/heads/master/assets/ps_black_128.svg">
159140
<link rel="preconnect" href="https://fonts.googleapis.com">
160141
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
142+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css">
161143
<style>
162144
:root{
163145
--bg-page:#f6f8fa;--bg-content:#fff;--bg-header:#fff;--bg-code:#f6f8fa;
@@ -201,10 +183,10 @@ jobs:
201183
.content img{max-width:100%}
202184
.content strong{color:var(--text-primary)}
203185
.release{border:1px solid var(--border);border-radius:6px;margin-bottom:8px}
204-
.release summary{padding:12px 16px;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:14px;list-style:none}
205-
.release summary::-webkit-details-marker{display:none}
206-
.release summary::before{content:'';display:inline-block;width:0;height:0;border-left:5px solid var(--text-muted);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform 0.15s}
207-
.release[open] summary::before{transform:rotate(90deg)}
186+
.release>summary{padding:12px 16px;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:14px;list-style:none}
187+
.release>summary::-webkit-details-marker{display:none}
188+
.release>summary::before{content:'';display:inline-block;width:0;height:0;border-left:5px solid var(--text-muted);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform 0.15s}
189+
.release[open]>summary::before{transform:rotate(90deg)}
208190
.release-tag{font-family:'IBM Plex Mono',monospace;font-weight:500;color:var(--link)}
209191
.release-date{font-size:13px;color:var(--text-muted)}
210192
.release-latest{font-size:11px;padding:2px 8px;border-radius:16px;background:var(--badge-bg);color:var(--badge-text);font-weight:500}
@@ -216,11 +198,28 @@ jobs:
216198
.release-body code{font-family:'IBM Plex Mono',monospace;font-size:13px;background:var(--bg-code);padding:2px 4px;border-radius:3px}
217199
.release-body pre code{background:transparent;padding:0}
218200
.release-assets{margin-top:12px;border-top:1px solid var(--border);padding-top:12px}
219-
.release-assets summary{padding:0;font-size:13px;font-weight:500;cursor:pointer;color:var(--text-primary);list-style:revert}
220-
.release-assets summary::-webkit-details-marker{display:revert}
221-
.release-assets summary::before{display:none}
222-
.release-asset{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--text-secondary);padding:3px 0}
201+
.release-assets>summary{padding:0;font-size:13px;font-weight:500;cursor:pointer;color:var(--text-primary);list-style:none;display:flex;align-items:center;gap:6px}
202+
.release-assets>summary::-webkit-details-marker{display:none}
203+
.release-assets>summary::before{content:'';display:inline-block;width:0;height:0;border-left:4px solid var(--text-muted);border-top:3px solid transparent;border-bottom:3px solid transparent;transition:transform 0.15s}
204+
.release-assets[open]>summary::before{transform:rotate(90deg)}
205+
.release-asset{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--text-secondary);padding:3px 0;padding-left:10px}
223206
.loading{text-align:center;padding:32px;color:var(--text-muted);font-size:14px}
207+
.code-block-wrap{border:1px solid var(--border);border-radius:6px;overflow:hidden;margin:8px 0 16px}
208+
.code-block-wrap .lang-label{font-size:11px;color:var(--text-muted);padding:4px 12px;border-bottom:1px solid var(--border);font-family:'IBM Plex Mono',monospace}
209+
.code-block-wrap pre{margin:0;border:none;border-radius:0}
210+
pre[class*="language-"],code[class*="language-"]{font-family:'IBM Plex Mono',monospace;font-size:13px}
211+
pre[class*="language-"]{background:var(--bg-code);margin:0;padding:12px 16px}
212+
@media(prefers-color-scheme:dark){
213+
pre[class*="language-"],code[class*="language-"]{color:var(--text-primary)}
214+
.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#8b949e}
215+
.token.punctuation{color:#8b949e}
216+
.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:#ff7b72}
217+
.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#a5d6ff}
218+
.token.operator,.token.entity,.token.url{color:#79c0ff}
219+
.token.atrule,.token.attr-value,.token.keyword{color:#d2a8ff}
220+
.token.function,.token.class-name{color:#d2a8ff}
221+
.token.regex,.token.important,.token.variable{color:#ffa657}
222+
}
224223
@media(max-width:640px){.site-header{padding:12px 16px}.container{padding:0 12px;margin:16px auto}.content{padding:20px}}
225224
</style>
226225
</head>
@@ -241,6 +240,15 @@ jobs:
241240
<main class="container">
242241
<div class="content">{{ content }}</div>
243242
</main>
243+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
244+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-powershell.min.js"></script>
245+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
246+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-yaml.min.js"></script>
247+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-json.min.js"></script>
248+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-csharp.min.js"></script>
249+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
250+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-docker.min.js"></script>
251+
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
244252
</body>
245253
</html>
246254
LAYOUTEOF
@@ -312,6 +320,7 @@ jobs:
312320
(async function() {
313321
var c = document.getElementById('releases-container');
314322
var repo = c.getAttribute('data-repo');
323+
var SHELL = {'bash':1,'sh':1,'shell':1,'console':1,'zsh':1,'terminal':1};
315324
try {
316325
var res = await fetch('https://api.github.com/repos/' + repo + '/releases');
317326
if (!res.ok) throw new Error(res.status);
@@ -334,7 +343,7 @@ jobs:
334343
return pre + '<a href="https://github.com/' + user + '">@' + user + '</a>';
335344
})
336345
.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>')
337-
.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g, '<em>$1</em>');
346+
.replace(/(?<!\*)\*([^*\n]+)\*(?!\*)/g, '<em>$1</em>');
338347
s = s.replace(/\x00CODE(\d+)\x00/g, function(m, idx) {
339348
return '<code>' + codes[parseInt(idx)] + '</code>';
340349
});
@@ -355,11 +364,14 @@ jobs:
355364
if (cb) {
356365
if (inList) { html += '</ul>'; inList = false; }
357366
var lang = cb[1].trim();
358-
var code = '';
367+
var escaped = '';
359368
i++;
360-
while (i < lines.length && !lines[i].match(/^```/)) { code += lines[i] + '\n'; i++; }
361-
var langLabel = lang ? '<div style="font-size:11px;color:var(--text-muted);padding:4px 12px;border-bottom:1px solid var(--border);font-family:IBM Plex Mono,monospace">' + lang + '</div>' : '';
362-
html += '<div style="border:1px solid var(--border);border-radius:6px;overflow:hidden;margin:8px 0 16px">' + langLabel + '<pre style="margin:0;border:none;border-radius:0"><code>' + code.replace(/</g,'&lt;').replace(/>/g,'&gt;') + '</code></pre></div>';
369+
while (i < lines.length && !lines[i].match(/^```/)) { escaped += lines[i] + '\n'; i++; }
370+
escaped = escaped.replace(/</g,'&lt;').replace(/>/g,'&gt;');
371+
var isShell = !lang || SHELL[lang.toLowerCase()];
372+
var langLabel = (!isShell && lang) ? '<div class="lang-label">' + lang + '</div>' : '';
373+
var langClass = lang ? ' class="language-' + lang + '"' : '';
374+
html += '<div class="code-block-wrap">' + langLabel + '<pre' + langClass + '><code' + langClass + '>' + escaped + '</code></pre></div>';
363375
} else if (h2) {
364376
if (inList) { html += '</ul>'; inList = false; }
365377
html += '<h2>' + inline(h2[1]) + '</h2>';
@@ -386,7 +398,6 @@ jobs:
386398
var latest = i === 0 ? '<span class="release-latest">latest</span>' : '';
387399
var openAttr = i === 0 ? ' open' : '';
388400
389-
// Commit SHA
390401
var sha = r.target_commitish || '';
391402
var shortSha = sha.substring(0, 7);
392403
var shaHtml = '';
@@ -396,7 +407,6 @@ jobs:
396407
+ '</div>';
397408
}
398409
399-
// Assets
400410
var assets = '';
401411
if (r.assets.length) {
402412
var hashMap = {};
@@ -415,7 +425,7 @@ jobs:
415425
var srcTar = 'https://github.com/' + repo + '/archive/refs/tags/' + r.tag_name + '.tar.gz';
416426
var totalAssets = mainAssets.length + 2;
417427
418-
assets = '<details class="release-assets"><summary>Assets (' + totalAssets + ')</summary>';
428+
assets = '<details class="release-assets" open><summary>Assets (' + totalAssets + ')</summary>';
419429
for (var j = 0; j < mainAssets.length; j++) {
420430
var a = mainAssets[j];
421431
var hash = hashMap[a.name];
@@ -432,6 +442,9 @@ jobs:
432442
433443
return '<details class="release"' + openAttr + '><summary><span class="release-tag">' + r.tag_name + '</span>' + latest + '<span class="release-date">' + d + '</span></summary><div class="release-body">' + md(r.body) + assets + shaHtml + '</div></details>';
434444
}).join('');
445+
446+
// Trigger Prism highlighting on dynamically inserted code
447+
if (typeof Prism !== 'undefined') Prism.highlightAll();
435448
} catch(e) {
436449
c.innerHTML = '<p>Unable to load releases. Visit <a href="https://github.com/' + repo + '/releases">GitHub</a> directly.</p>';
437450
}

0 commit comments

Comments
 (0)