Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 47 additions & 24 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,74 +19,97 @@ concurrency:
jobs:
build:
name: Build and validate site
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 15
defaults:
run:
working-directory: repos/emulebb-pages
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
EMULEBB_WORKSPACE_ROOT: ${{ github.workspace }}

steps:
- name: Checkout organization website
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
path: repos/emulebb-pages
persist-credentials: false

- name: Checkout public-presence authority
uses: actions/checkout@v7
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: emulebb/emulebb-tooling
path: .local/emulebb-tooling
ref: 027dcf32aab5ed2d1e3441b6231e8e500cc2e945
path: repos/emulebb-tooling
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@v7
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7
with:
python-version: '3.x'
python-version: '3.15.2'
cache: pip
cache-dependency-path: requirements.txt
cache-dependency-path: repos/emulebb-pages/requirements.txt

- name: Install renderer dependencies
run: python -m pip install -r requirements.txt
run: python -B -m pip install -r requirements.txt

- name: Prepare owned artifact boundary
env:
EMULEBB_WORKSPACE_OUTPUT_ROOT: ${{ runner.temp }}/emulebb-output
run: |
mkdir -p "$EMULEBB_WORKSPACE_OUTPUT_ROOT"
printf 'EMULEBB_WORKSPACE_OUTPUT_ROOT=%s\n' "$EMULEBB_WORKSPACE_OUTPUT_ROOT" >> "$GITHUB_ENV"

- name: Test renderer staging and locale preservation
run: python -B -m unittest discover -s tests -v

- name: Validate public-presence contract
run: python .local/emulebb-tooling/helpers/public-presence.py validate
run: python -B ../emulebb-tooling/helpers/public-presence.py validate

- name: Check committed generated pages
run: |
committed_lastmod="$(grep -m1 -o '<lastmod>[^<]*' sitemap.xml | cut -d '>' -f2)"
python tools/render_pages.py \
--contract .local/emulebb-tooling/manifests/public-presence.v1.json \
python -B tools/render_pages.py \
--contract ../emulebb-tooling/manifests/public-presence.v1.json \
--lastmod "$committed_lastmod" \
--check

- name: Render clean site artifact
run: |
python tools/render_pages.py \
--contract .local/emulebb-tooling/manifests/public-presence.v1.json \
python -B tools/render_pages.py \
--contract ../emulebb-tooling/manifests/public-presence.v1.json \
--lastmod "$(date -u +%F)" \
--output-root .local/site
--workspace-output-root "$EMULEBB_WORKSPACE_OUTPUT_ROOT" \
--output-root "$EMULEBB_WORKSPACE_OUTPUT_ROOT/artifacts/public-presence/${{ github.run_id }}-${{ github.run_attempt }}/site"

- name: Validate site and documentation links
run: |
python .local/emulebb-tooling/helpers/pages-site-tools.py --pages-root .local/site validate
python .local/emulebb-tooling/helpers/check-tooling-doclinks.py \
--docs-root .local/emulebb-tooling/docs \
.local/site
site="$EMULEBB_WORKSPACE_OUTPUT_ROOT/artifacts/public-presence/${{ github.run_id }}-${{ github.run_attempt }}/site"
python -B ../emulebb-tooling/helpers/pages-site-tools.py --pages-root "$site" validate
python -B ../emulebb-tooling/helpers/check-tooling-doclinks.py \
--docs-root ../emulebb-tooling/docs \
"$site"

- name: Verify stable installer checksum
working-directory: .local/site
working-directory: ${{ runner.temp }}/emulebb-output/artifacts/public-presence/${{ github.run_id }}-${{ github.run_attempt }}/site
run: sha256sum --check install.ps1.sha256

- name: Configure GitHub Pages
if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' }}
uses: actions/configure-pages@v6
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6

- name: Upload GitHub Pages artifact
if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' }}
uses: actions/upload-pages-artifact@v5
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
with:
path: .local/site
path: ${{ runner.temp }}/emulebb-output/artifacts/public-presence/${{ github.run_id }}-${{ github.run_attempt }}/site

deploy:
name: Deploy organization website
if: ${{ (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && github.ref == 'refs/heads/main' }}
needs: build
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 10
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
permissions:
Expand All @@ -100,4 +123,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5
16 changes: 9 additions & 7 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ edition. Everything below is this repo's local deltas only.

## Hard Rules

- Keep every HTML page text-only. Do not publish in-page logos, mascots,
screenshots, copied application artwork, or other raster assets. The browser
favicon at `assets/brand/emulebb-favicon.ico` is the only image exception.
- Use the text wordmark `eMuleBB` in page headers. Do not add logo or image
fields to metadata or structured data unless this policy changes first.
- Use the `eMuleBB` text wordmark with only the operator-approved proposal-1
Rust donkey assets recorded in the public-presence contract. Do not publish
screenshots, unrelated artwork, or unapproved image variants.
- Give approved in-page images explicit dimensions and appropriate alt text.
The approved social card may appear in Open Graph/Twitter metadata. Keep the
favicon at `assets/brand/emulebb-favicon.ico`; do not regenerate brand assets.
- Treat `emulebb-tooling` active/reference docs as the source of truth. Pages
summarizes and links; it does not invent feature or release facts.
- Treat `..\emulebb-tooling\manifests\public-presence.v1.json` as the source
Expand Down Expand Up @@ -56,8 +57,9 @@ edition. Everything below is this repo's local deltas only.
pages and `python tools\render_pages.py --lastmod YYYY-MM-DD --check` to
confirm committed HTML is up to date with the templates and public-presence
contract.
- Use `python tools\render_pages.py --lastmod YYYY-MM-DD --output-root
.local\site` to stage the bounded deployment artifact.
- The supported manager stages deployment artifacts below inherited
`EMULEBB_WORKSPACE_OUTPUT_ROOT`; the renderer refuses source-local staging.
`--capabilities` advertises the supported output protocol without writing.
- Use `python ..\emulebb-tooling\helpers\pages-site-tools.py --pages-root . validate`
before publishing locale, metadata, sitemap, asset-policy, or navigation
changes.
Expand Down
48 changes: 32 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
# eMuleBB organization website

This repository publishes the organization GitHub Pages site. The public front
door presents CI-gated `emulebb-rust` nightly builds as the primary active-beta
testing channel and eMuleBB MFC `0.7.x` as the maintained Windows line. Beta 3
is expected after a few more weeks of implementation and stabilization. Rust
development is best-effort, and contributors are welcome.
The public front door for eMuleBB Rust gives equal space to using the client
and developing with its REST API. CI-gated nightly packages are the active-beta
testing channel; Beta 3 is the next development target.

**Contents:** [Read the site](#read-the-site) · [Maintain the source](#static-page-production) · [Validate and publish](#validation-and-publication)

## Read the site

- [Use eMuleBB Rust](https://emulebb.github.io/emulebb-tooling/products/emulebb-rust/reference/GUIDE-GETTING-STARTED/)
- [Choose a platform and package](https://emulebb.github.io/emulebb-tooling/products/emulebb-rust/reference/GUIDE-DOWNLOADS-PLATFORMS/)
- [Develop with the client](https://emulebb.github.io/emulebb-tooling/products/emulebb-rust/reference/GUIDE-CONTRIBUTING/)
- [Build against the REST API](https://emulebb.github.io/emulebb-tooling/products/emulebb-rust/api/GUIDE-API-CONSUMERS/)

The homepage is the single canonical product page. `/rust/` is retained only as
a no-index compatibility redirect. Only the homepage and FAQ have localized
Expand All @@ -22,25 +29,34 @@ fallback, but source edits go through the Jinja2 renderer and the shared
`emulebb-tooling\manifests\public-presence.v1.json` contract:

```powershell
python -m pip install -r requirements.txt
python ..\emulebb-tooling\helpers\public-presence.py validate
python -B ..\emulebb-tooling\helpers\public-presence.py validate
$lastmod = Get-Date -Format yyyy-MM-dd
python tools\render_pages.py --lastmod $lastmod
python tools\render_pages.py --lastmod $lastmod --check
python tools\render_pages.py --lastmod $lastmod --output-root .local\site
python -B tools\render_pages.py --lastmod $lastmod
python -B tools\render_pages.py --lastmod $lastmod --check
```

Run the validation helper before publishing:

```powershell
python ..\emulebb-tooling\helpers\pages-site-tools.py --pages-root .local\site validate
python ..\emulebb-tooling\helpers\check-tooling-doclinks.py --docs-root ..\emulebb-tooling\docs .local\site
python -B ..\emulebb-tooling\helpers\pages-site-tools.py --pages-root . validate
python -B ..\emulebb-tooling\helpers\check-tooling-doclinks.py --docs-root ..\emulebb-tooling\docs .
```

`.github/workflows/pages.yml` repeats these checks, verifies
`install.ps1.sha256`, uploads only `.local/site`, and deploys through GitHub
Pages Actions on `main`. Scheduled runs validate contract drift without
publishing.
## Validation and publication

The workspace manager probes `tools/render_pages.py --capabilities` and stages
the site in a fresh owned `OUTPUT/artifacts/public-presence/<run>/site`
directory. Explicit staging requires both `--output-root` and
`--workspace-output-root`; the latter must match the inherited output boundary.
Existing site directories and redirected paths are refused. Keep generated
scratch outside the checkout and leave inherited workspace variables unchanged.

The proposal-1 identity derivatives are supplied assets. Preserve their bytes,
dimensions and recorded SHA-256 values; do not regenerate them.

`.github/workflows/pages.yml` repeats the checks, verifies
`install.ps1.sha256`, uploads only the staged site, and deploys through GitHub
Pages Actions on `main`. Scheduled runs validate without publishing.

## Markdown Documentation Publishing

Expand Down
5 changes: 3 additions & 2 deletions ar-ae/faq/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="ar-AE">
<html lang="ar-AE" dir="rtl">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
Expand Down Expand Up @@ -110,8 +110,9 @@
</script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a aria-label="eMule broadband edition home" class="brand brand-text" href="https://emulebb.github.io/ar-ae/">eMuleBB</a>
<a aria-label="eMule broadband edition home" class="brand brand-text" href="https://emulebb.github.io/ar-ae/"><img class="brand-logo" src="../../assets/brand/emulebb-logo-256.png" width="256" height="256" alt=""/><span dir="ltr">eMuleBB</span></a>
<button aria-controls="primary-nav" aria-expanded="false" aria-label="فتح التنقل الرئيسي" class="menu-toggle" type="button">
<span class="menu-toggle-label">القائمة</span>
</button>
Expand Down
6 changes: 4 additions & 2 deletions ar-ae/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="ar-AE">
<html lang="ar-AE" dir="rtl">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
Expand Down Expand Up @@ -74,8 +74,9 @@
</script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top">eMuleBB</a>
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top"><img class="brand-logo" src="../assets/brand/emulebb-logo-256.png" width="256" height="256" alt=""/><span dir="ltr">eMuleBB</span></a>
<button aria-controls="primary-nav" aria-expanded="false" aria-label="فتح التنقل الرئيسي" class="menu-toggle" type="button">
<span class="menu-toggle-label">القائمة</span>
</button>
Expand Down Expand Up @@ -162,6 +163,7 @@ <h2>eMuleBB</h2>
<a href="../languages/">اللغات</a>
<a href="https://github.com/emulebb">GitHub</a>
<a href="https://discord.gg/uWQa9g37">Discord</a>

</div>
</footer>
<script>
Expand Down
Binary file added assets/brand/emulebb-donkey-180.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/brand/emulebb-favicon.ico
Binary file not shown.
Binary file added assets/brand/emulebb-logo-256.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/brand/emulebb-logo-384.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/brand/emulebb-logo-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/brand/rust-social-preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 4 additions & 2 deletions ast/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="ast">
<html lang="ast" dir="ltr">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
Expand Down Expand Up @@ -74,8 +74,9 @@
</script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top">eMuleBB</a>
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top"><img class="brand-logo" src="../assets/brand/emulebb-logo-256.png" width="256" height="256" alt=""/><span dir="ltr">eMuleBB</span></a>
<button aria-controls="primary-nav" aria-expanded="false" aria-label="Abrir navegación principal" class="menu-toggle" type="button">
<span class="menu-toggle-label">Menú</span>
</button>
Expand Down Expand Up @@ -162,6 +163,7 @@ <h2>eMuleBB</h2>
<a href="../languages/">Llingües</a>
<a href="https://github.com/emulebb">GitHub</a>
<a href="https://discord.gg/uWQa9g37">Discord</a>

</div>
</footer>
<script>
Expand Down
6 changes: 4 additions & 2 deletions bg/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="bg">
<html lang="bg" dir="ltr">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
Expand Down Expand Up @@ -74,8 +74,9 @@
</script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top">eMuleBB</a>
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top"><img class="brand-logo" src="../assets/brand/emulebb-logo-256.png" width="256" height="256" alt=""/><span dir="ltr">eMuleBB</span></a>
<button aria-controls="primary-nav" aria-expanded="false" aria-label="Отвори основната навигация" class="menu-toggle" type="button">
<span class="menu-toggle-label">Меню</span>
</button>
Expand Down Expand Up @@ -162,6 +163,7 @@ <h2>eMuleBB</h2>
<a href="../languages/">Езици</a>
<a href="https://github.com/emulebb">GitHub</a>
<a href="https://discord.gg/uWQa9g37">Discord</a>

</div>
</footer>
<script>
Expand Down
6 changes: 4 additions & 2 deletions br/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="br">
<html lang="br" dir="ltr">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
Expand Down Expand Up @@ -74,8 +74,9 @@
</script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top">eMuleBB</a>
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top"><img class="brand-logo" src="../assets/brand/emulebb-logo-256.png" width="256" height="256" alt=""/><span dir="ltr">eMuleBB</span></a>
<button aria-controls="primary-nav" aria-expanded="false" aria-label="Digeriñ ar merdeiñ pennañ" class="menu-toggle" type="button">
<span class="menu-toggle-label">Lañser</span>
</button>
Expand Down Expand Up @@ -162,6 +163,7 @@ <h2>eMuleBB</h2>
<a href="../languages/">Yezhoù</a>
<a href="https://github.com/emulebb">GitHub</a>
<a href="https://discord.gg/uWQa9g37">Discord</a>

</div>
</footer>
<script>
Expand Down
6 changes: 4 additions & 2 deletions ca-valencia-racv/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="ca-ES-valencia-x-racv">
<html lang="ca-ES-valencia-x-racv" dir="ltr">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
Expand Down Expand Up @@ -74,8 +74,9 @@
</script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top">eMuleBB</a>
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top"><img class="brand-logo" src="../assets/brand/emulebb-logo-256.png" width="256" height="256" alt=""/><span dir="ltr">eMuleBB</span></a>
<button aria-controls="primary-nav" aria-expanded="false" aria-label="Obrir la navegació principal" class="menu-toggle" type="button">
<span class="menu-toggle-label">Menú</span>
</button>
Expand Down Expand Up @@ -162,6 +163,7 @@ <h2>eMuleBB</h2>
<a href="../languages/">Llengües</a>
<a href="https://github.com/emulebb">GitHub</a>
<a href="https://discord.gg/uWQa9g37">Discord</a>

</div>
</footer>
<script>
Expand Down
6 changes: 4 additions & 2 deletions ca-valencia/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="ca-ES-valencia">
<html lang="ca-ES-valencia" dir="ltr">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
Expand Down Expand Up @@ -74,8 +74,9 @@
</script>
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top">eMuleBB</a>
<a aria-label="eMule broadband edition home" class="brand brand-text" href="#top"><img class="brand-logo" src="../assets/brand/emulebb-logo-256.png" width="256" height="256" alt=""/><span dir="ltr">eMuleBB</span></a>
<button aria-controls="primary-nav" aria-expanded="false" aria-label="Obri la navegació principal" class="menu-toggle" type="button">
<span class="menu-toggle-label">Menú</span>
</button>
Expand Down Expand Up @@ -162,6 +163,7 @@ <h2>eMuleBB</h2>
<a href="../languages/">Llengües</a>
<a href="https://github.com/emulebb">GitHub</a>
<a href="https://discord.gg/uWQa9g37">Discord</a>

</div>
</footer>
<script>
Expand Down
Loading