Deploy versioned docs (#260) #920
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- master | |
tags: | |
- v* | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
check-toolchain-is-stable: | |
name: Check toolchain is stable | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get toolchain | |
id: toolchain | |
uses: ./.github/actions/get-toolchain | |
- name: Check toolchain | |
run: | | |
if [ "${{ steps.toolchain.outputs.channel }}" != "stable" ]; then | |
echo 'Toolchain is not "stable", is "${{ steps.toolchain.outputs.channel }}". Check the file rust-toolchain.toml' | |
exit 1 | |
fi | |
echo "channel=$channel" >> $GITHUB_OUTPUT | |
qa: | |
name: QA | |
runs-on: ubuntu-latest | |
needs: check-toolchain-is-stable | |
strategy: | |
fail-fast: false | |
matrix: | |
process: | |
- lint | |
- check-all-features | |
- build-all-features | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get toolchain | |
id: toolchain | |
uses: ./.github/actions/get-toolchain | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
rust-version: ${{ steps.toolchain.outputs.channel }} | |
profile: minimal | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Install dependencies | |
run: | | |
pip install --upgrade pip | |
pip install pre-commit | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
target | |
~/.cache/pre-commit | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('**/.pre-commit-config.yaml') }} | |
- name: Install libgtk | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libgtk-4-dev | |
- name: Lint | |
if: matrix.process == 'lint' | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 25 | |
max_attempts: 3 | |
retry_wait_seconds: 15 | |
warning_on_retry: false | |
command: pre-commit run --all-files --show-diff-on-failure | |
- name: Check all features | |
if: matrix.process == 'check-all-features' | |
run: | | |
pre-commit run --all-files --verbose \ | |
--config end2end/.pre-commit-config.yaml \ | |
cargo-check-all-features | |
- name: Build all features | |
if: matrix.process == 'build-all-features' | |
run: | | |
pre-commit run --all-files --verbose \ | |
--config end2end/.pre-commit-config.yaml \ | |
cargo-build-all-features | |
build-book: | |
name: Build book | |
needs: check-toolchain-is-stable | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get toolchain | |
id: toolchain | |
uses: ./.github/actions/get-toolchain | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
rust-version: ${{ steps.toolchain.outputs.channel }} | |
profile: minimal | |
- name: Install cargo binstall | |
uses: cargo-bins/cargo-binstall@main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install mdbook | |
run: cargo binstall -y mdbook mdbook-admonish mdbook-toc | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build book | |
run: | | |
cd book | |
mdbook-admonish install . | |
mdbook build | |
unit-tests: | |
name: Unit tests | |
needs: check-toolchain-is-stable | |
runs-on: ${{ matrix.runs-on }} | |
strategy: | |
fail-fast: false | |
matrix: | |
runs-on: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get toolchain | |
id: toolchain | |
uses: ./.github/actions/get-toolchain | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
rust-version: ${{ steps.toolchain.outputs.channel }} | |
profile: minimal | |
targets: wasm32-unknown-unknown | |
- name: Install cargo binstall | |
uses: cargo-bins/cargo-binstall@main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install wasm-pack | |
run: cargo binstall -y wasm-pack | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
target | |
key: ${{ runner.os }}-cargo-unit-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }} | |
- name: Run unit tests | |
run: cargo test -p leptos-fluent -p leptos-fluent-macros | |
end2end-tests: | |
needs: check-toolchain-is-stable | |
name: End to end tests (${{ matrix.browser }}, ${{ matrix.runs-on }}) | |
runs-on: ${{ matrix.runs-on }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- runs-on: ubuntu-latest | |
browser: firefox | |
- runs-on: ubuntu-latest | |
browser: chrome | |
- runs-on: macos-latest | |
browser: chrome | |
- runs-on: windows-latest | |
browser: firefox | |
- runs-on: windows-latest | |
browser: chrome | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get toolchain | |
id: toolchain | |
uses: ./.github/actions/get-toolchain | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
rust-version: ${{ steps.toolchain.outputs.channel }} | |
profile: minimal | |
targets: wasm32-unknown-unknown | |
- name: Install cargo binstall | |
uses: cargo-bins/cargo-binstall@main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install wasm-pack | |
run: cargo binstall -y wasm-pack | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
target | |
key: ${{ runner.os }}-cargo-end2end-${{ matrix.browser }}-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }} | |
- name: Run end to end tests | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 25 | |
max_attempts: 3 | |
retry_wait_seconds: 1 | |
warning_on_retry: false | |
command: | | |
cd end2end | |
wasm-pack test --headless --${{ matrix.browser }} | |
build-examples: | |
needs: check-toolchain-is-stable | |
name: Build example | |
runs-on: ${{ matrix.runs-on }} | |
strategy: | |
fail-fast: false | |
matrix: | |
example: | |
- csr-minimal | |
- csr-complete | |
- ssr-hydrate-actix | |
- ssr-hydrate-axum | |
- ssr-islands-axum | |
- system-gtk | |
toolchain: | |
- stable | |
- nightly | |
runs-on: | |
- ubuntu-latest | |
- macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set nightly toolchain | |
if: matrix.toolchain == 'nightly' | |
uses: ./.github/actions/set-toolchain | |
with: | |
channel: nightly | |
- name: Get toolchain | |
id: toolchain | |
uses: ./.github/actions/get-toolchain | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
with: | |
rust-version: ${{ steps.toolchain.outputs.channel }} | |
profile: minimal | |
targets: wasm32-unknown-unknown | |
- name: Install cargo binstall | |
uses: cargo-bins/cargo-binstall@main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install trunk | |
if: startsWith(matrix.example, 'csr') | |
run: cargo binstall -y trunk | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install cargo-leptos | |
if: startsWith(matrix.example, 'ssr') | |
run: cargo binstall -y cargo-leptos | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Cache dependencies | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
target | |
key: ${{ runner.os }}-cargo-${{ matrix.example }}-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.toolchain }} | |
- name: Get build features | |
id: build-features | |
run: | | |
option=$([ "${{ matrix.toolchain }}" == "nightly" ] && echo "--features=leptos-fluent/nightly" || echo "") | |
echo "features=$option" >> $GITHUB_OUTPUT | |
- name: Build with trunk | |
if: startsWith(matrix.example, 'csr') | |
run: | | |
cd examples/${{ matrix.example }} | |
trunk build --release ${{ steps.build-features.outputs.features }} | |
- name: Build with cargo-leptos | |
if: startsWith(matrix.example, 'ssr') | |
run: | | |
cd examples/${{ matrix.example }} | |
cargo leptos build --release ${{ steps.build-features.outputs.features }} | |
- name: Install GTK4 on Ubuntu | |
if: endsWith(matrix.example, 'gtk') && startsWith(matrix.runs-on, 'ubuntu') | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y libgtk-4-dev | |
- name: Install GTK4 on MacOS | |
if: endsWith(matrix.example, 'gtk') && startsWith(matrix.runs-on, 'macos') | |
run: brew install gtk4 | |
- name: Build with cargo | |
if: startsWith(matrix.example, 'system') | |
run: | | |
cd examples/${{ matrix.example }} | |
cargo build --release ${{ steps.build-features.outputs.features }} | |
test-release-leptos-fluent-macros: | |
needs: | |
- qa | |
- unit-tests | |
- end2end-tests | |
- build-examples | |
- build-book | |
if: startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' | |
name: Test leptos-fluent-macros release | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
- name: Publish | |
run: | | |
cargo login ${{ secrets.CRATES_TOKEN }} | |
cargo publish -v --dry-run --features=json -p leptos-fluent-macros | |
release-leptos-fluent-macros: | |
if: startsWith(github.ref, 'refs/tags/') | |
name: Release leptos-fluent-macros | |
needs: | |
- test-release-leptos-fluent-macros | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
- name: Publish | |
run: | | |
cargo login ${{ secrets.CRATES_TOKEN }} | |
cargo publish -v -p leptos-fluent-macros | |
release-leptos-fluent: | |
if: startsWith(github.ref, 'refs/tags/') | |
name: Release leptos-fluent | |
needs: | |
- release-leptos-fluent-macros | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
- name: Get project version | |
id: version | |
uses: ./.github/actions/get-version | |
- name: Update version | |
run: sed -i "s/^leptos-fluent-macros = .*/leptos-fluent-macros = \"${{ steps.version.outputs.version }}\"/" leptos-fluent/Cargo.toml | |
- name: Publish | |
run: | | |
cargo login ${{ secrets.CRATES_TOKEN }} | |
cargo publish --allow-dirty -v -p leptos-fluent | |
create-release: | |
if: startsWith(github.ref, 'refs/tags/') | |
name: Create release | |
needs: | |
- release-leptos-fluent | |
permissions: | |
contents: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get tag metadata | |
id: tag | |
run: | | |
TAG_TITLE=${GITHUB_REF#refs/*/} | |
echo "title=$TAG_TITLE" >> $GITHUB_OUTPUT | |
- name: Create release | |
uses: softprops/action-gh-release@v2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
name: ${{ steps.tag.outputs.title }} | |
tag_name: ${{ steps.tag.outputs.title }} | |
body: | | |
See [CHANGELOG](https://github.com/mondeja/leptos-fluent/blob/master/CHANGELOG.md). | |
draft: false | |
prerelease: false | |
deploy-book: | |
if: | | |
startsWith(github.ref, 'refs/tags/') || | |
github.ref == 'refs/heads/master' | |
name: Deploy book | |
permissions: | |
contents: write | |
needs: | |
- build-book | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Rust | |
uses: hecrj/setup-rust-action@v2 | |
- name: Install cargo binstall | |
uses: cargo-bins/cargo-binstall@main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Get project version | |
id: version | |
uses: ./.github/actions/get-version | |
- name: Install mdbook | |
run: cargo binstall -y mdbook mdbook-admonish mdbook-toc | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build book | |
run: | | |
cd book | |
mdbook-admonish install . | |
mdbook build | |
# create versioned copy | |
cd .. | |
cp -r book/dist book/v${{ steps.version.outputs.version }} | |
- name: Deploy book | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./book/dist | |
- name: Deploy book v${{ steps.version.outputs.version }} | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./book/v${{ steps.version.outputs.version }} | |
destination_dir: v${{ steps.version.outputs.version }} |