Adds tests/run-tests.fish (syntax lint over every .fish file, plus a sandboxed interactive load) and tests/functional.fish (10 checks covering XDG/PATH/CDPATH setup, key bindings, abbreviations, core functions, exit rewiring, and the opinionated-component registry). The sandbox copies config-relevant files into a scratch HOME/XDG tree rather than symlinking the checkout, since this repo also serves as a live ~/.config/fish and a symlink would let universal-variable writes leak into the real fish_variables file. Wires the suite into build-docs.yml as a `test` job that `build-docs` now depends on, so a broken config can no longer get published to the docs site. Documents the workflow in the README's new Testing section.
111 lines
3.4 KiB
YAML
111 lines
3.4 KiB
YAML
name: Generate documentation
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- "docs/manual/**"
|
|
- "docs/build-manual.py"
|
|
- "docs/manualtools.py"
|
|
- "docs/verify-manual.py"
|
|
- "docs/site/**"
|
|
- "functions/**"
|
|
- "conf.d/**"
|
|
- "config.fish"
|
|
- "completions/**"
|
|
- "integrations/**"
|
|
- "tests/**"
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: racknerd-mini
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITEA_TOKEN }}
|
|
|
|
- name: Install fish
|
|
run: |
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y software-properties-common
|
|
sudo add-apt-repository -y ppa:fish-shell/release-4
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y fish
|
|
|
|
- name: Run fish config tests
|
|
run: fish tests/run-tests.fish
|
|
|
|
build-docs:
|
|
needs: test
|
|
runs-on: racknerd-mini
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
token: ${{ secrets.GITEA_TOKEN }}
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y software-properties-common
|
|
sudo add-apt-repository -y ppa:fish-shell/release-4
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y pandoc python3-yaml fish
|
|
|
|
- name: Generate concatenated markdown
|
|
run: python3 docs/build-manual.py --concat -o docs/fish-config.md
|
|
|
|
# Regeneration MUST run before verification: verify-manual.py's
|
|
# test_concat_roundtrips_original compares a freshly-built concat
|
|
# against docs/fish-config.md on disk. Before this step ran, that
|
|
# file was still the stale pre-push copy, so any ordinary edit under
|
|
# docs/manual/** failed the round-trip check before anything was
|
|
# regenerated. Do not reorder this back — verification still gates
|
|
# pandoc and the auto-commit below, it just no longer requires a
|
|
# contributor to hand-sync the generated file before pushing.
|
|
- name: Verify manual integrity
|
|
run: python3 docs/verify-manual.py
|
|
|
|
- name: Compile man page
|
|
run: |
|
|
pandoc --standalone \
|
|
--from markdown \
|
|
--to man \
|
|
docs/fish-config.md \
|
|
-o docs/fish-config.1
|
|
|
|
- name: Set up Node
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "24"
|
|
|
|
- name: Build documentation site
|
|
run: |
|
|
python3 docs/build-manual.py --site
|
|
cd docs/site
|
|
npm ci
|
|
npx astro build
|
|
|
|
- name: Deploy to Cloudflare Pages
|
|
env:
|
|
CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
|
|
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
|
|
run: |
|
|
cd docs/site
|
|
npx --yes wrangler pages deploy dist/ \
|
|
--project-name=fish-config-docs \
|
|
--branch=main \
|
|
--commit-dirty=true
|
|
|
|
- name: Commit generated docs
|
|
run: |
|
|
git config user.name "Gitea Actions"
|
|
git config user.email "actions@gitea"
|
|
git add docs/fish-config.md docs/fish-config.1 conf.d/__fish_config_op_registry.fish
|
|
git diff --cached --quiet && echo "No changes to commit" && exit 0
|
|
git commit -m "chore(docs): regenerate manual, man page, and component registry"
|
|
git push
|