You've already forked uutils.github.io
mirror of
https://github.com/uutils/uutils.github.io.git
synced 2026-06-10 16:12:28 -07:00
c8e78040fe
`yes` ships in the WASM binary but its infinite output just spams the terminal, so filter it out of the generated WASM_COMMANDS list. Done in the workflow so a single regex covers both autocomplete/help (via AVAILABLE_COMMANDS) and the rendered prose section.
279 lines
9.6 KiB
YAML
279 lines
9.6 KiB
YAML
name: Docs
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
schedule:
|
|
- cron: "0 2 * * *"
|
|
|
|
jobs:
|
|
build:
|
|
name: Build website artifacts
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout uutils.github.io Repository
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: uutils/uutils.github.io
|
|
path: './uutils.github.io'
|
|
fetch-depth: 0
|
|
|
|
- name: Checkout Coreutils Repository
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: uutils/coreutils
|
|
path: './coreutils'
|
|
fetch-depth: 0
|
|
|
|
- name: Checkout Coreutils L10n Repository
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: uutils/coreutils-l10n
|
|
path: './coreutils-l10n'
|
|
fetch-depth: 0
|
|
|
|
- name: Checkout Findutils Repository
|
|
uses: actions/checkout@v6
|
|
with:
|
|
repository: uutils/findutils
|
|
path: './findutils'
|
|
fetch-depth: 0
|
|
|
|
- name: Install `rust` toolchain
|
|
uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
targets: wasm32-wasip1
|
|
|
|
- name: Install system deps
|
|
run: |
|
|
sudo apt update
|
|
sudo apt install libacl1-dev libselinux1-dev libsystemd-dev
|
|
pip install babel
|
|
|
|
- name: Install necessary tools (mdbook and mdbook-toc)
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: mdbook@0.5.0,mdbook-toc@0.15.3
|
|
|
|
- name: Copy l10n locales into coreutils
|
|
run: |
|
|
# Only copy locales into utilities that already exist in coreutils
|
|
# Exclude en-US.ftl to preserve the coreutils English originals
|
|
for util_dir in coreutils-l10n/src/uu/*/; do
|
|
util=$(basename "$util_dir")
|
|
if [ -d "coreutils/src/uu/$util/locales" ]; then
|
|
for ftl in "$util_dir"/locales/*.ftl; do
|
|
[ -f "$ftl" ] || continue
|
|
[ "$(basename "$ftl")" = "en-US.ftl" ] && continue
|
|
cp "$ftl" "coreutils/src/uu/$util/locales/"
|
|
done
|
|
fi
|
|
done
|
|
# Copy uucore l10n files, excluding en-US.ftl
|
|
if [ -d "coreutils-l10n/src/uucore/locales" ]; then
|
|
for ftl in coreutils-l10n/src/uucore/locales/*.ftl; do
|
|
[ -f "$ftl" ] || continue
|
|
[ "$(basename "$ftl")" = "en-US.ftl" ] && continue
|
|
cp "$ftl" "coreutils/src/uucore/locales/"
|
|
done
|
|
fi
|
|
|
|
- name: Patch mdbook theme with language selector
|
|
run: |
|
|
uutils.github.io/scripts/patch-mdbook-theme.sh coreutils/docs coreutils-l10n
|
|
|
|
- name: Build Coreutils Docs
|
|
run: |
|
|
cd coreutils
|
|
# Download and repack tldr zip: uudoc expects pages/common/ prefix
|
|
curl -sfL https://github.com/tldr-pages/tldr/releases/download/v2.3/tldr-pages.zip -o /tmp/tldr-raw.zip || true
|
|
if [ -f /tmp/tldr-raw.zip ]; then
|
|
mkdir -p /tmp/tldr-repack/pages
|
|
cd /tmp/tldr-repack && unzip -o /tmp/tldr-raw.zip -d pages/ > /dev/null
|
|
zip -r "$OLDPWD/docs/tldr.zip" pages/ > /dev/null
|
|
cd "$OLDPWD"
|
|
fi
|
|
cargo run --bin uudoc --all-features
|
|
cd docs
|
|
# Remove deprecated 'multilingual' field unsupported by newer mdbook
|
|
sed -i '/^multilingual/d' book.toml
|
|
# Strip the legacy FA4 `fa` class from uudoc-generated platform icons
|
|
# so mdbook 0.5's Font Awesome parser picks up the `fa-brands` family
|
|
# instead of defaulting to `regular` and warning about linux/windows/apple.
|
|
find src/utils -name '*.md' -exec sed -i 's|class="fa fa-brands |class="fa-brands |g' {} +
|
|
mdbook build
|
|
|
|
- name: Build Coreutils Docs (translations)
|
|
run: |
|
|
uutils.github.io/scripts/build-docs-l10n.sh coreutils
|
|
|
|
- name: Build Findutils Docs
|
|
run: |
|
|
cd findutils/docs
|
|
# Remove deprecated 'multilingual' field unsupported by newer mdbook
|
|
sed -i '/^multilingual/d' book.toml
|
|
mdbook build
|
|
|
|
- name: Build uutils WASM binary
|
|
run: |
|
|
cd coreutils
|
|
# Build the multicall binary for WASI target
|
|
# Use --no-default-features to avoid platform-specific dependencies
|
|
cargo build --release --target wasm32-wasip1 -p coreutils --no-default-features --features feat_wasm
|
|
if [ -f target/wasm32-wasip1/release/coreutils.wasm ]; then
|
|
mkdir -p ../uutils.github.io/static/wasm
|
|
cp target/wasm32-wasip1/release/coreutils.wasm ../uutils.github.io/static/wasm/uutils.wasm
|
|
# Optimize WASM size if wasm-opt is available
|
|
if command -v wasm-opt &> /dev/null; then
|
|
wasm-opt -Oz ../uutils.github.io/static/wasm/uutils.wasm -o ../uutils.github.io/static/wasm/uutils.wasm
|
|
fi
|
|
echo "WASM binary size: $(du -h ../uutils.github.io/static/wasm/uutils.wasm | cut -f1)"
|
|
# Generate the list of available locales from .ftl files
|
|
locales=$(find src/uu/*/locales src/uucore/locales -name '*.ftl' 2>/dev/null \
|
|
| sed 's|.*/||; s|\.ftl$||' | sort -u | paste -sd, -)
|
|
echo "const WASM_LOCALES = [$(echo "$locales" | sed 's/[^,]*/\"&\"/g')];" \
|
|
> ../uutils.github.io/static/wasm/locales.js
|
|
echo "Available locales: $locales"
|
|
# Generate the list of available commands from the feat_wasm feature
|
|
# in Cargo.toml so the playground stays in sync with the WASM build.
|
|
# HIDDEN_CMDS: utilities that ship in the binary but we don't want to
|
|
# advertise in the playground (e.g. `yes` produces infinite output
|
|
# that just spams the terminal).
|
|
HIDDEN_CMDS='^(yes)$'
|
|
commands=$(sed -n '/^feat_wasm = \[/,/^\]/p' Cargo.toml \
|
|
| grep -oE '"[a-zA-Z0-9_]+"' | tr -d '"' \
|
|
| sort -u | grep -vE "$HIDDEN_CMDS" | paste -sd, -)
|
|
echo "const WASM_COMMANDS = [$(echo "$commands" | sed 's/[^,]*/\"&\"/g')];" \
|
|
> ../uutils.github.io/static/wasm/commands.js
|
|
echo "Available commands: $commands"
|
|
# Record the coreutils commit used to build the WASM binary
|
|
commit_hash=$(git rev-parse HEAD)
|
|
commit_short=$(git rev-parse --short HEAD)
|
|
commit_date=$(git show -s --format=%cI HEAD)
|
|
{
|
|
echo "const UUTILS_WASM_VERSION = {"
|
|
echo " commit: \"${commit_hash}\","
|
|
echo " short: \"${commit_short}\","
|
|
echo " date: \"${commit_date}\""
|
|
echo "};"
|
|
} > ../uutils.github.io/static/wasm/version.js
|
|
echo "uutils WASM build: ${commit_short} (${commit_date})"
|
|
fi
|
|
|
|
- name: Run Zola
|
|
uses: shalzz/zola-deploy-action@v0.22.1
|
|
env:
|
|
BUILD_DIR: uutils.github.io
|
|
BUILD_ONLY: true
|
|
|
|
- name: Collect results into `public` folder
|
|
run: |
|
|
cp -r uutils.github.io/public public
|
|
cp -r coreutils/docs/book public/coreutils/docs
|
|
cp -r findutils/docs/book public/findutils/docs
|
|
# Copy translated docs to /coreutils/docs-{lang}/
|
|
for lang_dir in coreutils/docs/book-*/; do
|
|
[ -d "$lang_dir" ] || continue
|
|
lang=$(basename "$lang_dir" | sed 's/^book-//')
|
|
cp -r "$lang_dir" "public/coreutils/docs-${lang}"
|
|
done
|
|
|
|
- name: Run playground JS tests
|
|
run: |
|
|
npm install puppeteer@24
|
|
node uutils.github.io/scripts/run-tests.js --dir public --port 8080
|
|
|
|
- name: Remove test files from deploy output
|
|
run: rm -f public/js/wasm-terminal.test.html
|
|
|
|
- name: Upload artifact for checking the output
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
path: ./public
|
|
|
|
- name: Upload artifact for pages
|
|
uses: actions/upload-pages-artifact@v5
|
|
with:
|
|
path: ./public
|
|
|
|
# dev-docs:
|
|
# name: generate the dev doc
|
|
# runs-on: ubuntu-latest
|
|
# steps:
|
|
# - name: Checkout repository
|
|
# uses: actions/checkout@v4
|
|
# with:
|
|
# repository: uutils/coreutils
|
|
# path: './coreutils'
|
|
# fetch-depth: 0
|
|
|
|
# - name: Install `rust` toolchain
|
|
# uses: actions-rs/toolchain@v1
|
|
# with:
|
|
# toolchain: stable
|
|
# default: true
|
|
# profile: minimal
|
|
|
|
# - name: Build dev documentation
|
|
# run: |
|
|
# cd coreutils
|
|
# cargo doc --no-deps --all-features --workspace
|
|
|
|
# - name: Deploy Docs
|
|
# uses: peaceiris/actions-gh-pages@v3
|
|
# with:
|
|
# github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
# publish_dir: ./coreutils/target/doc
|
|
# destination_dir: coreutils/dev/
|
|
|
|
# build-report:
|
|
# name: generate the build report
|
|
# runs-on: ubuntu-latest
|
|
# steps:
|
|
# - name: Checkout repository
|
|
# uses: actions/checkout@v4
|
|
# with:
|
|
# repository: uutils/coreutils
|
|
# path: './coreutils'
|
|
# fetch-depth: 0
|
|
|
|
# - name: Install `rust` toolchain
|
|
# uses: actions-rs/toolchain@v1
|
|
# with:
|
|
# toolchain: nightly
|
|
# default: true
|
|
# profile: minimal
|
|
|
|
# - name: Build report
|
|
# run: |
|
|
# cd coreutils
|
|
# cargo +nightly build --timings=html -Zunstable-options
|
|
|
|
# - name: Deploy build report
|
|
# uses: peaceiris/actions-gh-pages@v3
|
|
# with:
|
|
# github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
# publish_dir: ./coreutils/target/cargo-timings/
|
|
# destination_dir: cargo-timings/
|
|
|
|
# Deployment job
|
|
deploy:
|
|
permissions:
|
|
contents: read
|
|
pages: write
|
|
id-token: write
|
|
environment:
|
|
name: github-pages
|
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'schedule'
|
|
steps:
|
|
- name: Deploy to GitHub Pages
|
|
id: deployment
|
|
uses: actions/deploy-pages@v5
|