Skip to content

GitHub Pages Publishing

Garot Conklin edited this page May 14, 2026 · 1 revision

GitHub Pages Publishing

Every pipeline run generates a new HTML report and automatically publishes it to the public site at flexrpl.github.io/signal.


How it works

run_and_publish.sh
    → git add reports/ index.html archive.html
    → git commit -m "signal: daily brief YYYY-MM-DD"
    → git push origin main
        → .github/workflows/static.yml triggers
            → GitHub Actions uploads repo root to GitHub Pages
                → https://flexrpl.github.io/signal/ is updated

Reports are static HTML files committed directly to the main branch. GitHub Pages serves the repository root, so any file committed to main is immediately accessible.


Published files

File URL Updated
index.html flexrpl.github.io/signal/ Every run
archive.html flexrpl.github.io/signal/archive.html Every run
reports/brief_YYYYMMDD_HHMM.html flexrpl.github.io/signal/reports/brief_*.html Every run (new file added)
images/signal_banner.png flexrpl.github.io/signal/images/signal_banner.png Static

GitHub Actions workflow

.github/workflows/static.yml handles the deployment. It runs on every push to main:

on:
  push:
    branches: ["main"]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/configure-pages@v3
      - uses: actions/upload-pages-artifact@v2
        with:
          path: "." # uploads the entire repository root
      - uses: actions/deploy-pages@v2

The path: '.' ensures the entire repository — including reports/, index.html, archive.html, and images/ — is uploaded on every push.


One-time GitHub Pages setup

If starting from scratch on a new fork:

  1. Go to the repository on GitHub
  2. Settings → Pages
  3. Under Source, select GitHub Actions
  4. The static.yml workflow handles everything else automatically

Landing page (index.html)

Generated by _update_index() in main.py after each run. It contains:

  • The signal_banner.png as a full-page background with a dark overlay
  • A "Latest Brief" card linking to the most recent report
  • A "Browse Past Briefs" card linking to archive.html
  • The date and time (UTC) of the most recent brief

The HTML is written inline in main.py (not templated from a file) to keep the pipeline self-contained.


Archive page (archive.html)

Also generated by _update_index(). Contains:

  • A reverse-chronological list of all reports/brief_*.html files
  • A "latest" badge on the most recent entry
  • A link back to the landing page

If archive.html is missing from a git commit (it's in .gitignore is NOT the case — it's tracked), the archive will show stale data. The run_and_publish.sh script explicitly stages it:

git add reports/ index.html archive.html

Report filenames

Reports are named brief_YYYYMMDD_HHMM.html where the date and time are the UTC timestamp of report generation:

reports/brief_20260514_1353.html   → May 14, 2026 at 13:53 UTC

The filename format was simplified in May 2026 — earlier reports may include a _runN suffix (e.g. brief_20260511_1516_run5.html). These are renamed in the git history and display correctly in the archive.


Viewing reports locally

# Open the most recent report
open reports/brief_$(ls reports/ | sort | tail -1)

# Or use the path printed at the end of a run:
# open /Users/garotconklin/garotm/fleXRPL/signal/reports/brief_20260514_1353.html

Reports are fully self-contained — all CSS and JS is inline. No server required.

Clone this wiki locally