- Pushes to main use the same code/no-code rule as pull requests (`touches_code` in Select checks): a push changing only documentation, packaging, other workflows or the bots' scripts runs the repository checks only. With the merge queue off, every push to main ran the full suite and the Windows jobs, docs-only ones included. - affected.py: test data under tests/ selects the packages that read it (robustness, hole matrix, projection, taper: solidcraft-engine; oracle: the CLI, the kernel, xtask; action matrix: the CLI, the engine, xtask), and a vendored crate the packages that use it (truck: the kernel and up; egui-wgpu: the UI and the apps), instead of the whole workspace. tests/tools and unknown vendored crates still select everything. - Docker (the web app image) skips pushes touching only docs, test data or bot scripts; Pages skips test data and bot scripts; Generated files runs only when the manifests, lockfile, command registry, CLI or xtask change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QWhMwdqJYQKQq8RCLSL1LT
94 lines
3.3 KiB
YAML
94 lines
3.3 KiB
YAML
# The documentation site on GitHub Pages: the book (docs/book) at https://docs.solidcraft.io/
|
|
# and the bundled web app at /app/. Needs Settings → Pages → Source = GitHub Actions; skipped while the
|
|
# repository is private.
|
|
name: Pages
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
# The site is the book and the web app: test data and the GitHub bots' scripts change neither.
|
|
paths-ignore: ["tests/**", "scripts/claim/**", "scripts/triage/**"]
|
|
workflow_dispatch:
|
|
inputs:
|
|
release_tag:
|
|
description: "Published release for Flatpak (empty: latest stable release)"
|
|
type: string
|
|
required: false
|
|
default: ""
|
|
|
|
permissions:
|
|
contents: read
|
|
pages: write
|
|
id-token: write
|
|
|
|
concurrency:
|
|
group: pages
|
|
cancel-in-progress: false
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
MDBOOK_VERSION: v0.5.4
|
|
TRUNK_VERSION: v0.21.14
|
|
|
|
jobs:
|
|
build:
|
|
if: ${{ !github.event.repository.private }}
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: wasm32-unknown-unknown
|
|
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
|
|
- name: Install mdbook and trunk
|
|
run: |
|
|
mkdir -p "$HOME/.local/bin"
|
|
curl -sSL "https://github.com/rust-lang/mdBook/releases/download/${MDBOOK_VERSION}/mdbook-${MDBOOK_VERSION}-x86_64-unknown-linux-gnu.tar.gz" | tar -xz -C "$HOME/.local/bin"
|
|
curl -sSL "https://github.com/trunk-rs/trunk/releases/download/${TRUNK_VERSION}/trunk-x86_64-unknown-linux-gnu.tar.gz" | tar -xz -C "$HOME/.local/bin"
|
|
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
|
- name: Install a software Vulkan driver (lavapipe)
|
|
# The book's pictures are `solidcraft-cli snapshot`s, drawn on the GPU; the runner has none.
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends mesa-vulkan-drivers libvulkan1
|
|
- name: Build the book
|
|
env:
|
|
SOLIDCRAFT_GPU: software
|
|
run: cargo xtask book
|
|
- name: Build the web app
|
|
working-directory: apps/solidcraft-web
|
|
run: trunk build --release --public-url ./
|
|
- name: Test the web app offline and across an update (headless Chrome)
|
|
run: cargo xtask web-offline-test --site dist/web
|
|
- name: Assemble the site
|
|
run: |
|
|
mkdir -p site
|
|
cp -r target/book/. site/
|
|
cp -r dist/web site/app
|
|
- uses: actions/configure-pages@v5
|
|
id: pages
|
|
- name: Install Flatpak repository tools
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends flatpak ostree
|
|
- name: Include the published Flatpak repository
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
RELEASE_TAG: ${{ inputs.release_tag || '' }}
|
|
PAGES_BASE_URL: ${{ steps.pages.outputs.base_url }}
|
|
run: bash packaging/flatpak-site.sh site
|
|
- uses: actions/upload-pages-artifact@v3
|
|
with:
|
|
path: site
|
|
|
|
deploy:
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
environment:
|
|
name: github-pages
|
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
steps:
|
|
- id: deployment
|
|
uses: actions/deploy-pages@v4
|