name: CI 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: inputs: job: description: "Job to run" required: false default: all type: choice options: - all - test - build-docs jobs: test: if: github.event_name != 'workflow_dispatch' || github.event.inputs.job == 'all' || github.event.inputs.job == 'test' runs-on: racknerd-mini steps: - name: Checkout uses: actions/checkout@v4 with: token: ${{ secrets.GITEA_TOKEN }} - name: Install fish run: | sudo apt-get -o Acquire::Retries=3 update -qq sudo DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y software-properties-common sudo add-apt-repository -y ppa:fish-shell/release-4 sudo apt-get -o Acquire::Retries=3 update -qq sudo DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y fish - name: Run fish config tests run: fish tests/run-tests.fish build-docs: needs: test if: | always() && (github.event.inputs.job == 'build-docs' || ((github.event_name != 'workflow_dispatch' || github.event.inputs.job == 'all') && needs.test.result == 'success')) runs-on: racknerd-mini steps: - name: Checkout uses: actions/checkout@v4 with: token: ${{ secrets.GITEA_TOKEN }} - name: Install dependencies run: | sudo apt-get -o Acquire::Retries=3 update -qq sudo DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y software-properties-common sudo add-apt-repository -y ppa:fish-shell/release-4 sudo apt-get -o Acquire::Retries=3 update -qq sudo DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -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: Generate site content run: python3 docs/build-manual.py --site - name: Build documentation site working-directory: docs/site run: | npm ci npx astro build - name: Deploy to Cloudflare Pages working-directory: docs/site env: CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }} run: | 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