71 lines
3.0 KiB
YAML
71 lines
3.0 KiB
YAML
name: Generate UML
|
||
|
||
# Trigger whenever the domain model or the generator script itself changes.
|
||
# "workflow_dispatch" lets you re-run it manually from the GitHub UI.
|
||
on:
|
||
push:
|
||
paths:
|
||
- "src/netdiag/domain/models.py"
|
||
- "scripts/generate_uml.py"
|
||
workflow_dispatch:
|
||
|
||
# The job needs write access so it can push the generated files back.
|
||
permissions:
|
||
contents: write
|
||
|
||
jobs:
|
||
generate-uml:
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
# ── 1. check out the repository ────────────────────────────────────────
|
||
- uses: actions/checkout@v4
|
||
|
||
# ── 2. set up Python (stdlib only – no pip packages needed) ────────────
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.11"
|
||
|
||
# ── 3. generate UML/UML.d2 from models.py ──────────────────────────────
|
||
- name: Generate D2 source
|
||
run: python scripts/generate_uml.py src/netdiag/domain/models.py UML/UML.d2
|
||
|
||
# ── 4. install the D2 CLI ───────────────────────────────────────────────
|
||
#
|
||
# The official install script detects the platform and drops the binary
|
||
# into one of several locations depending on how the shell is invoked.
|
||
# We add all common candidates to GITHUB_PATH so the next step finds it
|
||
# regardless of where the script chose to install.
|
||
#
|
||
# Pin a specific version to keep renders reproducible.
|
||
# Bump this when you want to adopt a newer D2 release.
|
||
- name: Install D2
|
||
env:
|
||
D2_VERSION: "0.7.1"
|
||
run: |
|
||
curl -fsSL \
|
||
"https://github.com/terrastruct/d2/releases/download/v${D2_VERSION}/d2-v${D2_VERSION}-linux-amd64.tar.gz" \
|
||
| tar -xz -C /tmp
|
||
sudo install -m 0755 \
|
||
"/tmp/d2-v${D2_VERSION}-linux-amd64/bin/d2" \
|
||
/usr/local/bin/d2
|
||
d2 --version
|
||
|
||
# ── 5. render SVG ───────────────────────────────────────────────────────
|
||
- name: Render UML/UML.svg
|
||
run: d2 UML/UML.d2 UML/UML.svg
|
||
|
||
# ── 6. commit generated files back to the repo ─────────────────────────
|
||
#
|
||
# stefanzweifel/git-auto-commit-action is a thin wrapper around
|
||
# "git add / git commit / git push". It silently skips the commit when
|
||
# nothing has changed, so re-running the workflow is always safe.
|
||
#
|
||
# The "[skip ci]" suffix prevents this commit from re-triggering CI
|
||
# (GitHub Actions honors this convention natively).
|
||
- name: Commit generated UML files
|
||
uses: stefanzweifel/git-auto-commit-action@v5
|
||
with:
|
||
commit_message: "chore: auto-generate UML diagrams [skip ci]"
|
||
file_pattern: "UML/UML.d2 UML/UML.svg"
|