@@ -3,66 +3,39 @@ name: Deploy to GitHub Pages
33on :
44 push :
55 branches : ["main"]
6- workflow_dispatch :
7- repository_dispatch :
8- types : [visibility_changed]
96
107permissions :
118 contents : read
129 pages : write
1310 id-token : write
14- deployments : write
1511
1612concurrency :
1713 group : " pages"
1814 cancel-in-progress : false
1915
2016jobs :
21- check-visibility :
17+ check :
2218 runs-on : ubuntu-latest
2319 outputs :
24- is_private : ${{ steps.check.outputs.is_private }}
20+ pages_enabled : ${{ steps.check.outputs.pages_enabled }}
2521 steps :
26- - name : Check repo visibility
22+ - name : Check if Pages is enabled
2723 id : check
28- run : |
29- if [ "${{ github.event.repository.private }}" = "true" ]; then
30- echo "is_private=true" >> "$GITHUB_OUTPUT"
31- echo "::warning::Repository is private — Pages deployment will be skipped"
32- else
33- echo "is_private=false" >> "$GITHUB_OUTPUT"
34- fi
35-
36- teardown :
37- runs-on : ubuntu-latest
38- needs : check-visibility
39- if : needs.check-visibility.outputs.is_private == 'true'
40- steps :
41- - name : Remove GitHub Pages deployments
4224 env :
4325 GH_TOKEN : ${{ github.token }}
44- REPO : ${{ github.repository }}
4526 run : |
46- echo "Repository is private — removing existing Pages deployments"
47- DEPLOYMENTS=$(gh api "repos/${REPO}/deployments?environment=github-pages&per_page=100" --jq '.[].id' 2>/dev/null || true)
48- if [ -z "$DEPLOYMENTS" ]; then
49- echo "No existing Pages deployments found"
50- exit 0
27+ HTTP_CODE=$(gh api "repos/${{ github.repository }}/pages" --silent -i 2>/dev/null | head -1 | awk '{print $2}')
28+ if [ "$HTTP_CODE" = "200" ]; then
29+ echo "pages_enabled=true" >> "$GITHUB_OUTPUT"
30+ else
31+ echo "pages_enabled=false" >> "$GITHUB_OUTPUT"
32+ echo "::notice::GitHub Pages is not enabled — skipping. Enable it in Settings → Pages → Source → GitHub Actions."
5133 fi
52- for ID in $DEPLOYMENTS; do
53- echo "Deactivating deployment ${ID}..."
54- gh api --method POST -H "Accept: application/vnd.github+json" \
55- "repos/${REPO}/deployments/${ID}/statuses" -f state=inactive 2>/dev/null || true
56- echo "Deleting deployment ${ID}..."
57- gh api --method DELETE -H "Accept: application/vnd.github+json" \
58- "repos/${REPO}/deployments/${ID}" 2>/dev/null || true
59- done
60- echo "All Pages deployments removed"
6134
6235 build :
6336 runs-on : ubuntu-latest
64- needs : check-visibility
65- if : needs.check-visibility .outputs.is_private == 'false '
37+ needs : check
38+ if : needs.check.outputs.pages_enabled == 'true '
6639 steps :
6740 - name : Checkout
6841 uses : actions/checkout@v4
7649 run : |
7750 set -e
7851
79- OWNER="${REPO_FULL%%/*}"
8052 REPO="${REPO_NAME}"
8153 DESC="${REPO_DESC:-$REPO}"
8254 BASE_URL="/${REPO}"
9870 [ -f "$lf" ] && cp "$lf" "${STAGE}/"
9971 done
10072
101- # Copy assets/ folder if it exists (favicon, images, etc.)
10273 if [ -d "assets" ]; then
103- mkdir -p "${STAGE}/assets"
10474 find ./assets -type f \( -name '*.svg' -o -name '*.png' -o -name '*.ico' -o -name '*.jpg' -o -name '*.webp' \) \
10575 | while read -r f; do
10676 dest="${STAGE}/${f#./}"
@@ -166,14 +136,12 @@ jobs:
166136 body{font-family:'IBM Plex Sans',-apple-system,sans-serif;color:var(--text-primary);background:var(--bg-page);line-height:1.7}
167137 a{color:var(--link);text-decoration:none}
168138 a:hover{text-decoration:underline}
169-
170139 .site-header{background:var(--bg-header);border-bottom:1px solid var(--border);padding:16px 24px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}
171140 .site-title{font-size:16px;font-weight:500;color:var(--text-primary);text-decoration:none}
172141 .site-nav{display:flex;gap:20px;flex-wrap:wrap}
173142 .site-nav a{font-size:14px;color:var(--text-secondary);text-decoration:none;padding:4px 0}
174143 .site-nav a:hover{color:var(--text-primary)}
175144 .site-nav a.active{color:var(--text-primary);font-weight:500;border-bottom:2px solid var(--accent)}
176-
177145 .container{max-width:820px;margin:32px auto;padding:0 24px}
178146 .content{background:var(--bg-content);border:1px solid var(--border);border-radius:6px;padding:32px}
179147 .content h1{font-size:24px;font-weight:500;margin:0 0 16px;border-bottom:1px solid var(--border);padding-bottom:8px}
@@ -189,15 +157,14 @@ jobs:
189157 .content th,.content td{border:1px solid var(--border);padding:8px 12px;text-align:left}
190158 .content th{background:var(--bg-code);font-weight:500}
191159 .content img{max-width:100%}
192-
193160 code{font-family:'IBM Plex Mono',monospace !important;font-size:13px !important;background:var(--inline-code-bg) !important;color:var(--inline-code-text) !important;padding:2px 6px;border-radius:4px}
194161 pre{background:var(--bg-code) !important;border:1px solid var(--border);border-radius:6px;padding:16px;overflow-x:auto;margin:8px 0 16px;line-height:1.5;color:var(--text-primary)}
195162 pre code{background:transparent !important;color:inherit !important;padding:0;border-radius:0}
196163 pre[class*="language-"]{background:var(--bg-code) !important;padding:12px 16px;margin:8px 0 16px;color:var(--text-primary)}
197164 pre[class*="language-"] code,code[class*="language-"]{background:transparent !important;color:inherit !important}
165+ .token{background:none !important;text-shadow:none !important}
198166 .token.comment,.token.prolog,.token.doctype,.token.cdata{color:#6a737d !important;font-style:italic}
199167 .token.punctuation{color:#24292f !important}
200- .token.namespace{opacity:.7}
201168 .token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:#005cc5 !important}
202169 .token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#032f62 !important}
203170 .token.operator,.token.entity,.token.url{color:#d73a49 !important}
@@ -214,29 +181,25 @@ jobs:
214181 .token.function,.token.class-name{color:#d2a8ff !important}
215182 .token.regex,.token.important,.token.variable{color:#ffa657 !important}
216183 }
217-
218- .token{background:none !important;text-shadow:none !important}
219-
220184 details>summary{list-style:none}
221185 details>summary::-webkit-details-marker{display:none}
222-
223- .release{border:1px solid var(--border);border-radius:6px;margin-bottom:8px}
224- .release>summary{padding:12px 16px;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:14px}
225- .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;flex-shrink:0}
226- .release[open]>summary::before{transform:rotate(90deg)}
186+ .collapsible{border:1px solid var(--border);border-radius:6px;margin-bottom:8px}
187+ .collapsible>summary{padding:12px 16px;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:14px}
188+ .collapsible>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;flex-shrink:0}
189+ .collapsible[open]>summary::before{transform:rotate(90deg)}
190+ .collapsible-body{padding:0 16px 16px;font-size:14px;color:var(--text-secondary);line-height:1.7}
191+ .collapsible-body h1{font-size:20px;border:none;padding:0;margin:0 0 12px}
192+ .collapsible-body h2{font-size:16px;border:none;padding:0;margin:16px 0 8px}
193+ .collapsible-body h3{font-size:14px;margin:12px 0 6px}
194+ .collapsible-body ul{padding-left:20px}
195+ .collapsible-body li{margin-bottom:2px;font-size:13px}
196+ .collapsible-body hr{border:none;border-top:1px solid var(--border);margin:16px 0}
197+ .collapsible-body p:empty{display:none}
198+ .collapsible-body strong{color:inherit}
227199 .release-tag{font-family:'IBM Plex Mono',monospace;font-weight:500;color:var(--link)}
228200 .release-date{font-size:13px;color:var(--text-muted)}
229201 .release-sha{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--text-muted);margin-left:auto;text-decoration:none}
230202 .release-latest{font-size:11px;padding:2px 8px;border-radius:16px;background:var(--badge-bg);color:var(--badge-text);font-weight:500}
231-
232- .release-body{padding:0 16px 16px;font-size:14px;color:var(--text-secondary);line-height:1.7}
233- .release-body h2,.release-body h3{font-size:14px;font-weight:500;color:var(--text-primary);margin:12px 0 4px;border:none;padding:0}
234- .release-body ul{padding-left:20px}
235- .release-body li{margin-bottom:2px;font-size:13px}
236- .release-body hr{border:none;border-top:1px solid var(--border);margin:16px 0}
237- .release-body p:empty{display:none}
238- .release-body strong{color:inherit}
239-
240203 .release-assets{margin-top:16px;border-top:1px solid var(--border);padding-top:12px}
241204 .release-assets>summary{padding:0;font-size:13px;font-weight:500;cursor:pointer;color:var(--text-primary);display:flex;align-items:center;gap:6px}
242205 .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;flex-shrink:0}
@@ -246,7 +209,7 @@ jobs:
246209 .release-asset-size{color:var(--text-muted);font-size:11px}
247210 .release-asset-hash{font-family:'IBM Plex Mono',monospace;font-size:10px;color:var(--text-muted);word-break:break-all;display:block;margin-top:1px}
248211 .release-footer{margin-top:16px;padding-top:12px;border-top:1px solid var(--border);font-size:13px}
249-
212+ .doc-cmd-name{font-family:'IBM Plex Mono',monospace;font-weight:500;color:var(--text-primary)}
250213 .loading{text-align:center;padding:32px;color:var(--text-muted);font-size:14px}
251214 @media(max-width:640px){.site-header{padding:12px 16px}.container{padding:0 12px;margin:16px auto}.content{padding:20px}}
252215 </style>
@@ -315,16 +278,28 @@ jobs:
315278 title: Docs
316279 permalink: /docs/
317280 ---
318- # Function reference
281+ # Exported Commands
282+
283+ <p style="font-size:14px;color:var(--text-secondary);margin-bottom:24px">
284+ Command documentation generated by
285+ <a href="{{ site.github_repo }}/actions">GitHub Actions</a>,
286+ stored in
287+ <a href="{{ site.github_repo }}/tree/main/docs"><code>docs/</code></a>.
288+ </p>
289+
319290 {% assign doc_pages = site.pages | where_exp: "p", "p.path contains 'docs/'" | where_exp: "p", "p.name != 'index.md'" | sort: "title" %}
291+
320292 {% if doc_pages.size > 0 %}
321- <ul>
322293 {% for doc in doc_pages %}
323- <li><a href="{{ doc.url | relative_url }}"><code>{{ doc.title }}</code></a> — {{ doc.description | default: doc.title }}</li>
294+ <details class="collapsible">
295+ <summary><span class="doc-cmd-name">{{ doc.title }}</span></summary>
296+ <div class="collapsible-body">
297+ {{ doc.content }}
298+ </div>
299+ </details>
324300 {% endfor %}
325- </ul>
326301 {% else %}
327- <p><em>No function documentation found yet .</em></p>
302+ <p><em>No exported commands found. Documentation is generated automatically when functions are added to the module .</em></p>
328303 {% endif %}
329304 DOCSEOF
330305 echo "Created docs/index.md"
@@ -397,8 +372,8 @@ jobs:
397372 } else {
398373 if (inList) { out += '</ul>'; inList = false; }
399374 var trimmed = L.trim();
400- if (trimmed === '---') { out += '<hr>'; }
401- else if (trimmed !== '') { out += '<p>' + inline(L) + '</p>'; }
375+ if (trimmed === '---') out += '<hr>';
376+ else if (trimmed !== '') out += '<p>' + inline(L) + '</p>';
402377 }
403378 }
404379 if (inList) out += '</ul>';
@@ -419,62 +394,36 @@ jobs:
419394 var d = new Date(r.published_at).toLocaleDateString('en-GB', {day:'numeric',month:'short',year:'numeric'});
420395 var latest = i === 0 ? ' <span class="release-latest">latest</span>' : '';
421396 var openAttr = i === 0 ? ' open' : '';
422-
423397 var sha = r.target_commitish || '';
424398 var shortSha = sha.length >= 7 ? sha.substring(0, 7) : '';
425399 var shaHtml = shortSha ? '<a class="release-sha" href="https://github.com/' + repo + '/commit/' + sha + '">' + shortSha + '</a>' : '';
426-
427400 var allAssets = r.assets || [];
428401 var srcZip = 'https://github.com/' + repo + '/archive/refs/tags/' + r.tag_name + '.zip';
429402 var srcTar = 'https://github.com/' + repo + '/archive/refs/tags/' + r.tag_name + '.tar.gz';
430-
431403 var assetsHtml = '<details class="release-assets" open><summary>Assets (' + (allAssets.length + 2) + ')</summary>';
432404 for (var j = 0; j < allAssets.length; j++) {
433405 var a = allAssets[j];
434406 var isHash = /\.(sha256|sha512|md5|sha1)$/i.test(a.name);
435- assetsHtml += '<div class="release-asset">'
436- + '<a href="' + a.browser_download_url + '">' + a.name + '</a>'
437- + ' <span class="release-asset-size">' + (a.size / 1024).toFixed(1) + ' KB</span>'
438- + (isHash ? '<span class="release-asset-hash" data-hash-url="' + a.browser_download_url + '"></span>' : '')
439- + '</div>';
407+ assetsHtml += '<div class="release-asset"><a href="' + a.browser_download_url + '">' + a.name + '</a> <span class="release-asset-size">' + (a.size / 1024).toFixed(1) + ' KB</span>' + (isHash ? '<span class="release-asset-hash" data-hash-url="' + a.browser_download_url + '"></span>' : '') + '</div>';
440408 }
441409 assetsHtml += '<div class="release-asset"><a href="' + srcZip + '">Source code</a> <span class="release-asset-size">(zip)</span></div>';
442410 assetsHtml += '<div class="release-asset"><a href="' + srcTar + '">Source code</a> <span class="release-asset-size">(tar.gz)</span></div>';
443411 assetsHtml += '</details>';
444-
445412 var footer = '<div class="release-footer"><a href="https://github.com/' + repo + '/releases/tag/' + encodeURIComponent(r.tag_name) + '">View release</a></div>';
446-
447- html += '<details class="release"' + openAttr + '>'
448- + '<summary>'
449- + '<span class="release-tag">' + esc(r.tag_name) + '</span>'
450- + latest
451- + ' <span class="release-date">' + d + '</span>'
452- + shaHtml
453- + '</summary>'
454- + '<div class="release-body">'
455- + md(r.body)
456- + assetsHtml
457- + footer
458- + '</div></details>';
413+ html += '<details class="collapsible"' + openAttr + '><summary><span class="release-tag">' + esc(r.tag_name) + '</span>' + latest + ' <span class="release-date">' + d + '</span>' + shaHtml + '</summary><div class="collapsible-body">' + md(r.body) + assetsHtml + footer + '</div></details>';
459414 }
460415
461416 c.innerHTML = html;
462417
463418 document.querySelectorAll('[data-hash-url]').forEach(function(span) {
464- getHash(span.getAttribute('data-hash-url')).then(function(h) {
465- span.textContent = h || '';
466- });
419+ getHash(span.getAttribute('data-hash-url')).then(function(h) { span.textContent = h || ''; });
467420 });
468421
469422 function doHighlight() {
470- if (typeof Prism !== 'undefined' && Prism.highlightAll) {
471- Prism.highlightAll();
472- } else {
473- setTimeout(doHighlight, 300);
474- }
423+ if (typeof Prism !== 'undefined' && Prism.highlightAll) Prism.highlightAll();
424+ else setTimeout(doHighlight, 300);
475425 }
476426 setTimeout(doHighlight, 300);
477-
478427 } catch(e) {
479428 c.innerHTML = '<p>Unable to load releases. Visit <a href="https://github.com/' + repo + '/releases">GitHub</a> directly.</p>';
480429 }
@@ -499,15 +448,14 @@ jobs:
499448 for lf in LICENSE LICENSE.txt; do
500449 [ -f "$lf" ] && LICENSE_SRC="$lf" && break
501450 done
502-
503451 if [ -n "$LICENSE_SRC" ]; then
504452 if ! ([ -f "LICENSE.md" ] && head -1 LICENSE.md | grep -q '^\-\-\-'); then
505453 TEMP=$(mktemp)
506454 printf -- '---\nlayout: default\ntitle: License\npermalink: /license/\n---\n\n# License\n\n```\n' > "$TEMP"
507455 cat "$LICENSE_SRC" >> "$TEMP"
508456 printf '\n```\n' >> "$TEMP"
509457 mv "$TEMP" LICENSE.md
510- echo "Created LICENSE.md from ${LICENSE_SRC} "
458+ echo "Created LICENSE.md"
511459 fi
512460 elif [ -f "LICENSE.md" ] && ! head -1 LICENSE.md | grep -q '^\-\-\-'; then
513461 TEMP=$(mktemp)
@@ -534,7 +482,6 @@ jobs:
534482 fi
535483
536484 echo "::endgroup::"
537-
538485 echo "Final site source contents:"
539486 find . -type f | sort
540487
@@ -556,7 +503,6 @@ jobs:
556503 url : ${{ steps.deployment.outputs.page_url }}
557504 runs-on : ubuntu-latest
558505 needs : build
559- if : needs.build.result == 'success'
560506 steps :
561507 - name : Deploy to GitHub Pages
562508 id : deployment
0 commit comments