Skip to content

Islands example

Islands example #864

Workflow file for this run

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
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
- 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: Update version
run: |
version=$(grep -oP --color=never '^version = "\K[^"]+' leptos-fluent/Cargo.toml)
sed -i "s/^leptos-fluent-macros = .*/leptos-fluent-macros = \"$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: 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
- name: Deploy book
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./book/dist