diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c791602..bb980d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,8 +25,7 @@ jobs: .config.yaml.template \ docker-compose.yml.template \ compose.all-in-one.yml \ - compose.local.override.yml \ - mkdocs.yml + compose.local.override.yml compose-validate: name: Compose Validate @@ -113,27 +112,6 @@ jobs: working-directory: dotty-pi-ext run: npm test - frontmatter-check: - name: Frontmatter Check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - name: Verify YAML frontmatter in docs - run: | - fail=0 - for f in docs/*.md; do - # Skip symlinks — root-level files (README, ROADMAP, SETUP, etc.) - # are symlinked into docs/ for the mkdocs nav but are primarily - # consumed as plain GitHub markdown; YAML frontmatter would clutter - # their on-GitHub rendering. - [ -L "$f" ] && continue - if ! head -1 "$f" | grep -q '^---$'; then - echo "FAIL: $f missing YAML frontmatter" - fail=1 - fi - done - exit $fail - docs-links: name: Docs Link Check runs-on: ubuntu-latest @@ -153,7 +131,7 @@ jobs: notify-failure: name: Notify on Failure runs-on: ubuntu-latest - needs: [yaml-lint, compose-validate, config-parse, lint, python-tests, pi-ext-tests, frontmatter-check, docs-links] + needs: [yaml-lint, compose-validate, config-parse, lint, python-tests, pi-ext-tests, docs-links] if: failure() env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml deleted file mode 100644 index 4006d84..0000000 --- a/.github/workflows/docs-deploy.yml +++ /dev/null @@ -1,110 +0,0 @@ -name: Deploy docs to GitHub Pages - -on: - # Pushes to main publish the 'dev' alias. - # Tag pushes (server-v*, fw-v*, v*) publish a versioned doc set and update - # the 'latest' alias. - # Path filters are deliberately omitted: mike deploys are cheap, and tag - # pushes don't always evaluate path filters reliably. - push: - branches: - - main - tags: - - "server-v*" - - "fw-v*" - - "v*" - workflow_dispatch: - inputs: - version: - description: "Version label to deploy (e.g. 0.1, 1.0). Leave blank to deploy as 'dev'." - required: false - default: "" - alias: - description: "Alias to update (e.g. latest). Leave blank for none." - required: false - default: "" - -permissions: - contents: write - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - - name: Configure git identity for mike - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - - - name: Fetch existing gh-pages branch (mike requires it) - run: | - git fetch origin gh-pages --depth=1 || echo "gh-pages branch not found yet; mike will create it on first deploy." - - - name: Set up Python - uses: actions/setup-python@v6 - with: - python-version: "3.12" - - - name: Install docs requirements - run: pip install -r docs/requirements.txt - - - name: Determine deploy mode - id: mode - env: - GITHUB_REF: ${{ github.ref }} - GITHUB_EVENT_NAME: ${{ github.event_name }} - INPUT_VERSION: ${{ github.event.inputs.version }} - INPUT_ALIAS: ${{ github.event.inputs.alias }} - run: | - set -euo pipefail - if [ "$GITHUB_EVENT_NAME" = "workflow_dispatch" ]; then - VERSION="${INPUT_VERSION:-dev}" - ALIAS="${INPUT_ALIAS:-}" - elif [[ "$GITHUB_REF" == refs/tags/* ]]; then - TAG="${GITHUB_REF#refs/tags/}" - # Strip server-v / fw-v / v prefix; keep MAJOR.MINOR for the doc version. - RAW="${TAG#server-v}" - RAW="${RAW#fw-v}" - RAW="${RAW#v}" - # Reduce 1.2.3 to 1.2 (per-tag docs are typically MAJOR.MINOR). - VERSION="$(echo "$RAW" | awk -F. '{ printf "%s.%s", $1, $2 }')" - ALIAS="latest" - elif [ "$GITHUB_REF" = "refs/heads/main" ]; then - VERSION="dev" - ALIAS="" - else - echo "Unsupported trigger: $GITHUB_REF"; exit 1 - fi - echo "version=$VERSION" >> "$GITHUB_OUTPUT" - echo "alias=$ALIAS" >> "$GITHUB_OUTPUT" - echo "Deploying version='$VERSION' alias='$ALIAS'" - - - name: Deploy with mike (tag -> versioned + latest) - if: steps.mode.outputs.alias == 'latest' - run: | - mike deploy --push --update-aliases \ - "${{ steps.mode.outputs.version }}" latest - - - name: Deploy with mike (main -> dev) - if: steps.mode.outputs.version == 'dev' && steps.mode.outputs.alias == '' - run: | - mike deploy --push "${{ steps.mode.outputs.version }}" - - - name: Deploy with mike (manual dispatch, custom) - if: github.event_name == 'workflow_dispatch' && steps.mode.outputs.version != 'dev' - run: | - if [ -n "${{ steps.mode.outputs.alias }}" ]; then - mike deploy --push --update-aliases \ - "${{ steps.mode.outputs.version }}" "${{ steps.mode.outputs.alias }}" - else - mike deploy --push "${{ steps.mode.outputs.version }}" - fi - - - name: Set default alias to 'latest' (idempotent) - if: steps.mode.outputs.alias == 'latest' - run: mike set-default --push latest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c56298b..cbabda3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,9 +22,8 @@ repos: - id: end-of-file-fixer exclude: '^firmware/' - id: check-yaml - exclude: '^(mkdocs\.yml|\.github/workflows/.*\.yml|firmware/)' - # mkdocs.yml uses python tags (!!python/name:...) that PyYAML - # safe_load can't resolve; GHA workflows use the same. yamllint + exclude: '^(\.github/workflows/.*\.yml|firmware/)' + # GHA workflows use tags PyYAML safe_load can't resolve; yamllint # already lints them in CI. - id: check-json exclude: '^firmware/' diff --git a/CHANGELOG.md b/CHANGELOG.md index fa5d605..d165dbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -87,7 +87,6 @@ First git-tagged public release. Covers all server + firmware work shipped to `m - **Wake-word options doc** (`docs/wake-word.md`) — current architecture, 21 prebuilt English wake words, three paths to "Hey Dotty" (Path A interim shipped, Path B microWakeWord roadmap, Path C wakenet9 custom). Sample collection guide. - **SBOM scaffold** (`scripts/generate-sbom.sh`, `docs/sbom.md`) — CycloneDX-ish component+license inventory. `make sbom`. - **Signed releases scaffold** (`docs/signed-releases.md`, `KEYS.txt`) — GPG signing walkthrough + CI integration snippet (commented-out signing step ready to enable). -- **Versioned docs via mike** (`mkdocs.yml`, `.github/workflows/docs-deploy.yml`, `docs/requirements.txt`, `docs/versioning.md`) — `/latest/`, `/v0.1/`, `/dev/` URL structure. ### Added — firmware (StackChan/dotty fork, 2026-04-25 sprint) - **Layer 1 privacy LEDs scaffold** — `PrivacyLeds` singleton drives right-ring index 6 (mic) + index 7 (camera). RAII `MicPeripheralGuard` + `CameraPeripheralGuard` tie LED state to peripheral enable codepath. New `self.robot.get_privacy_state` MCP tool. `set_led_multi` rejects indices 6/7. diff --git a/COMPATIBILITY.md b/COMPATIBILITY.md index c90ca77..84d56c5 100644 --- a/COMPATIBILITY.md +++ b/COMPATIBILITY.md @@ -7,7 +7,7 @@ server-side components: xiaozhi-esp32-server, the `dotty-pi` agent container, dotty-behaviour, and the `bridge.py` dashboard service. It describes what each component exposes, what counts as a breaking change, and how to upgrade safely. -For protocol wire formats see [protocols.md](https://brettkinny.github.io/dotty-stackchan/latest/protocols/). +For protocol wire formats see `docs/protocols.md`. ## Compatibility matrix @@ -92,14 +92,11 @@ Server and firmware are versioned independently: 3. Commit with message: `release: server-vX.Y.Z` (or `release: fw-vX.Y.Z`). 4. Create an annotated tag: `git tag -a server-vX.Y.Z -m "server-vX.Y.Z"` 5. Push the tag: `git push origin server-vX.Y.Z` -6. Deploy versioned docs (handled automatically by `.github/workflows/docs-deploy.yml` - on tag push; if you need to deploy manually, run - `mike deploy --push --update-aliases X.Y latest` from the repo root after - `pip install -r docs/requirements.txt`). See - [`versioning.md`](https://brettkinny.github.io/dotty-stackchan/latest/versioning/) for the full URL/alias model. - -GitHub Actions handles image builds, artifact publishing, and versioned doc -deploys from the tag. + +The docs live as plain markdown under `docs/` and render on GitHub directly — +there is no separate docs-site build to deploy. + +GitHub Actions handles image builds and artifact publishing from the tag. ### Compatibility matrix updates diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6a2c9b1..e86a9bf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -74,20 +74,6 @@ deployments must use a placeholder: Port numbers (`8000`, `8003`, `8080`, `18789`, `42617`) are product-generic and do not need placeholders. -## Documentation versioning - -The docs site is published per-version using -[`mike`](https://github.com/jimporter/mike). Pushes to `main` update the -`/dev/` alias automatically; tag pushes (`server-vX.Y.Z`, `fw-vX.Y.Z`) publish -a versioned tree at `/vX.Y/` and bump the `/latest/` alias. See -[`versioning.md`](https://brettkinny.github.io/dotty-stackchan/latest/versioning/) for the URL structure, version -dropdown behavior, and maintainer commands (`mike deploy ... --push`, -`mike list`, `mike delete`). - -When you add or rename a doc, prefer edits that work cleanly across versions -(don't break links from older versions to ones that still exist). If a doc is -only relevant for a future version, note that in the PR description. - ## AI-assisted contributions This project is openly AI-assisted, and your contributions can be too — using a diff --git a/docs/assets/dotty-hero.svg b/docs/assets/dotty-hero.svg deleted file mode 100644 index 87f988a..0000000 --- a/docs/assets/dotty-hero.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 6c5c53b..0000000 --- a/docs/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -mkdocs-material>=9.5 -mike>=2.1 -pymdown-extensions>=10 diff --git a/docs/style.md b/docs/style.md index 276e2d6..a82cee0 100644 --- a/docs/style.md +++ b/docs/style.md @@ -27,7 +27,8 @@ description: One-line summary of what this page covers. --- ``` -MkDocs Material uses these for the HTML `