Skip to content

perf: Index crate items in parallel #1205

perf: Index crate items in parallel

perf: Index crate items in parallel #1205

Workflow file for this run

# This whole file is generated by a Rust script under `ci_utils`
# Do NOT edit this file manually.
name: Build and store docs artifact
on:
workflow_dispatch:
# See https://github.com/imjohnbo/ok-to-test/tree/master for an overview
# of how this works.
# I officially hate GitHub for forbidding OpenID Connect tokens in forks.
repository_dispatch:
types: [ok-to-test-command]
push:
jobs:
build_clis_linux:
name: "Build CLIs (linux)"
runs-on: ubuntu-latest
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build CLIs (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rust-lang/[email protected]
- name: Build CLI
run: |
cargo build --bin pavex --bin pavexc --release
- name: Store pavex CLI artifact
uses: actions/upload-artifact@v5
with:
name: pavex_cli_linux
path: target/release/pavex
- name: Store pavexc CLI artifact
uses: actions/upload-artifact@v5
with:
name: pavexc_cli_linux
path: target/release/pavexc
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build CLIs (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
lint_linux:
name: "Lint (linux)"
runs-on: ubuntu-latest
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Lint (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rust-lang/[email protected]
- name: Build CLI
run: |
cargo clippy
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Lint (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
starter_linux:
name: "Starter (linux)"
runs-on: ubuntu-latest
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Starter project (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rust-lang/[email protected]
with:
cache-workspaces: "./examples/starter -> ./target"
- name: Install cargo-binstall
uses: cargo-bins/cargo-binstall@main
- name: Install cargo-px
run: cargo binstall -y --force --github-token=${{ secrets.GITHUB_TOKEN }} cargo-px --version="^0.1.15"
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /home/runner/.cargo/bin/pavex
PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Check that starter is fresh
env:
PAVEX_DEBUG: "true"
PAVEX_PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
cd examples/starter
cargo fmt --check
cargo px verify-freshness
- name: Check starter compiles and it's up to date
env:
PAVEX_DEBUG: "true"
PAVEX_PAVEXC: /home/runner/.cargo/bin/pavexc
# Avoid spurious differences due to Pavex releases
PAVEXC_TEMPLATE_VERSION_REQ: "0.2"
run: |
cd examples
# Save the target folder before deleting, since it's warm
mv starter/target target && rm -rf starter
pavex new starter
# Remove the git folder
rm -rf starter/.git
# Move the target folder back
mv target starter/target
cd starter
cargo px test
- name: Check if any of the files changed
run: |
git diff --exit-code HEAD -- examples/starter ":(exclude)Cargo.lock" || (echo "Starter project is not up to date. Regenerate it using 'pavex new'" && exit 1)
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Starter project (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
macro_tests_linux:
name: "Run macro tests (linux)"
runs-on: ubuntu-latest
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run macro tests (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /home/runner/.cargo/bin/pavex
PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run tests
run: |
cargo test -p pavex_macros
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run macro tests (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
example_realworld_linux:
name: "Example realworld (linux)"
runs-on: ubuntu-latest
defaults:
run:
working-directory: examples/realworld
# Extra services that must spun up before this example can be tested
services:
postgres:
# Docker Hub image
image: postgres:14
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres
ports:
- 5432:5432
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Example realworld (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rust-lang/[email protected]
with:
cache-workspaces: "./examples/realworld -> ./target"
- name: Install cargo-binstall
uses: cargo-bins/cargo-binstall@main
- name: Install cargo-px
run: cargo binstall -y --force --github-token=${{ secrets.GITHUB_TOKEN }} cargo-px --version="^0.1.15"
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /home/runner/.cargo/bin/pavex
PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
# Steps that must be ran before the tests can be executed
- name: Install sqlx-cli
run:
cargo install sqlx-cli
--version="~0.8"
--features="rustls,postgres"
--no-default-features
--locked
# The --locked flag can be used to force Cargo to use the packaged Cargo.lock file if it is available.
# This may be useful for ensuring reproducible builds, to use the exact same set of dependencies that were available when the package was published.
# It may also be useful if a newer version of a dependency is published that no longer builds on your system, or has other problems
- name: Migrate database
run: |
SKIP_DOCKER=1 ./scripts/init_db.sh
- name: Check that queries are fresh
run: cargo sqlx prepare --workspace --check -- --all-targets
- name: Formatting
run: |
cargo fmt --check
- name: Test example
env:
PAVEX_DEBUG: "true"
PAVEX_PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
cargo px test
- name: Check if any of the files changed
run: |
git diff --exit-code HEAD -- . ":(exclude)Cargo.lock" || (echo "Example project is not up to date. Regenerate it using 'cargo px check'" && exit 1)
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Example realworld (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_pavex_session_redis_linux:
name: "Tests for `pavex_session_redis` (linux)"
# Jobs with Dockerized `services` can only be run on Linux
runs-on: ubuntu-latest
# Extra services that must spun up before this crate can be tested
services:
redis:
image: redis:8
ports:
- "56379:6379"
options: >-
--health-cmd="redis-cli ping || exit 1"
--health-interval=5s
--health-timeout=5s
--health-retries=5
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Tests pavex_session_redis (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /home/runner/.cargo/bin/pavex
PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run tests
run: |
cargo test --all-features --package pavex_session_redis
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Tests pavex_session_redis (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_pavex_session_sqlx_linux:
name: "Tests for `pavex_session_sqlx` (linux)"
# Jobs with Dockerized `services` can only be run on Linux
runs-on: ubuntu-latest
# Extra services that must spun up before this example can be tested
services:
postgres:
image: postgres:16-alpine
ports:
- "55432:5432"
env:
POSTGRES_USER: test
POSTGRES_PASSWORD: test
POSTGRES_DB: session_test
options: >-
--health-cmd="pg_isready -U test -d session_test -h 127.0.0.1"
--health-interval=5s
--health-timeout=5s
--health-retries=5
mysql:
image: mysql:8.4
ports:
- "53306:3306"
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: session_test
options: >-
--health-cmd="mysqladmin ping -h 127.0.0.1 -utest -ptest"
--health-interval=5s
--health-timeout=5s
--health-retries=10
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Tests pavex_session_sqlx (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /home/runner/.cargo/bin/pavex
PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run tests
run: |
cargo test --all-features --package pavex_session_sqlx
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Tests pavex_session_sqlx (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_linux:
name: "Run tests (linux)"
runs-on: ubuntu-latest
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run tests (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /home/runner/.cargo/bin/pavex
PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run tests
run: |
cargo test --all-features --workspace --exclude="pavex_cli" --exclude="pavex_macros" --exclude="pavex" --exclude="pavex_session_redis" --exclude="pavex_session_sqlx"
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run tests (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_pavex_linux:
name: "Run `pavex` tests (linux)"
runs-on: ubuntu-latest
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run `pavex` tests (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- uses: taiki-e/install-action@cargo-hack
- name: Install NASM for aws-lc-rs on Windows
if: runner.os == 'Windows'
uses: ilammy/setup-nasm@v1
- name: Install ninja-build tool for aws-lc-fips-sys on Windows
if: runner.os == 'Windows'
uses: seanmiddleditch/gha-setup-ninja@v6
- name: Install golang for aws-lc-fips-sys on macos
if: runner.os == 'MacOS'
uses: actions/setup-go@v6
with:
go-version: "1.25.0"
- name: Install cargo-hakari
uses: taiki-e/install-action@v2
with:
tool: cargo-hakari
- name: Remove workspace hack from Cargo.toml
run: |
cargo hakari disable
cargo hakari remove-deps -y
- name: Run Pavex tests with multiple feature combinations
if: runner.os != 'Windows'
run: |
cargo hack -p pavex --feature-powerset --depth 2 test --tests
- name: Run Pavex tests with multiple feature combinations
if: runner.os == 'Windows'
run: |
# FIPS only builds in `release` mode on Windows
cargo hack -p pavex --feature-powerset --exclude-features="fips" --depth 2 test --tests
cargo test -p pavex --release --tests --features fips,tls_crypto_provider_aws_lc_rs
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run `pavex` tests (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
ui_tests_linux:
name: "Run UI tests (linux)"
runs-on: ubuntu-latest
needs:
- build_clis_linux
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run UI tests (linux)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /home/runner/.cargo/bin/pavex
PAVEXC: /home/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run UI tests
env:
PAVEX_TEST_CLI_PATH: /home/runner/.cargo/bin/pavex
PAVEXC_TEST_CLI_PATH: /home/runner/.cargo/bin/pavexc
run: |
cargo test --package pavex_cli
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run UI tests (linux)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
build_clis_macos:
name: "Build CLIs (macos)"
runs-on: macos-14
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build CLIs (macos)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rust-lang/[email protected]
- name: Build CLI
run: |
cargo build --bin pavex --bin pavexc --release
- name: Store pavex CLI artifact
uses: actions/upload-artifact@v5
with:
name: pavex_cli_macos
path: target/release/pavex
- name: Store pavexc CLI artifact
uses: actions/upload-artifact@v5
with:
name: pavexc_cli_macos
path: target/release/pavexc
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build CLIs (macos)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_macos:
name: "Run tests (macos)"
runs-on: macos-14
needs:
- build_clis_macos
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run tests (macos)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_macos
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_macos
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /Users/runner/.cargo/bin/pavex
PAVEXC: /Users/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run tests
run: |
cargo test --all-features --workspace --exclude="pavex_cli" --exclude="pavex_macros" --exclude="pavex" --exclude="pavex_session_redis" --exclude="pavex_session_sqlx"
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run tests (macos)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_pavex_macos:
name: "Run `pavex` tests (macos)"
runs-on: macos-14
needs:
- build_clis_macos
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run `pavex` tests (macos)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- uses: taiki-e/install-action@cargo-hack
- name: Install NASM for aws-lc-rs on Windows
if: runner.os == 'Windows'
uses: ilammy/setup-nasm@v1
- name: Install ninja-build tool for aws-lc-fips-sys on Windows
if: runner.os == 'Windows'
uses: seanmiddleditch/gha-setup-ninja@v6
- name: Install golang for aws-lc-fips-sys on macos
if: runner.os == 'MacOS'
uses: actions/setup-go@v6
with:
go-version: "1.25.0"
- name: Install cargo-hakari
uses: taiki-e/install-action@v2
with:
tool: cargo-hakari
- name: Remove workspace hack from Cargo.toml
run: |
cargo hakari disable
cargo hakari remove-deps -y
- name: Run Pavex tests with multiple feature combinations
if: runner.os != 'Windows'
run: |
cargo hack -p pavex --feature-powerset --depth 2 test --tests
- name: Run Pavex tests with multiple feature combinations
if: runner.os == 'Windows'
run: |
# FIPS only builds in `release` mode on Windows
cargo hack -p pavex --feature-powerset --exclude-features="fips" --depth 2 test --tests
cargo test -p pavex --release --tests --features fips,tls_crypto_provider_aws_lc_rs
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run `pavex` tests (macos)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
ui_tests_macos:
name: "Run UI tests (macos)"
runs-on: macos-14
needs:
- build_clis_macos
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run UI tests (macos)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_macos
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_macos
path: ~/.cargo/bin
- name: Mark pavex as executable
env:
PAVEX: /Users/runner/.cargo/bin/pavex
PAVEXC: /Users/runner/.cargo/bin/pavexc
run: |
chmod +x ${{ env.PAVEX }}
chmod +x ${{ env.PAVEXC }}
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run UI tests
env:
PAVEX_TEST_CLI_PATH: /Users/runner/.cargo/bin/pavex
PAVEXC_TEST_CLI_PATH: /Users/runner/.cargo/bin/pavexc
run: |
cargo test --package pavex_cli
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run UI tests (macos)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
build_clis_windows:
name: "Build CLIs (windows)"
runs-on: windows-2022
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build CLIs (windows)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rust-lang/[email protected]
- name: Build CLI
run: |
cargo build --bin pavex --bin pavexc --release
- name: Store pavex CLI artifact
uses: actions/upload-artifact@v5
with:
name: pavex_cli_windows
path: target/release/pavex.exe
- name: Store pavexc CLI artifact
uses: actions/upload-artifact@v5
with:
name: pavexc_cli_windows
path: target/release/pavexc.exe
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build CLIs (windows)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_windows:
name: "Run tests (windows)"
runs-on: windows-2022
needs:
- build_clis_windows
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run tests (windows)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_windows
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_windows
path: ~/.cargo/bin
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run tests
run: |
cargo test --all-features --workspace --exclude="pavex_cli" --exclude="pavex_macros" --exclude="pavex" --exclude="pavex_session_redis" --exclude="pavex_session_sqlx"
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run tests (windows)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
tests_pavex_windows:
name: "Run `pavex` tests (windows)"
runs-on: windows-2022
needs:
- build_clis_windows
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run `pavex` tests (windows)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- uses: taiki-e/install-action@cargo-hack
- name: Install NASM for aws-lc-rs on Windows
if: runner.os == 'Windows'
uses: ilammy/setup-nasm@v1
- name: Install ninja-build tool for aws-lc-fips-sys on Windows
if: runner.os == 'Windows'
uses: seanmiddleditch/gha-setup-ninja@v6
- name: Install golang for aws-lc-fips-sys on macos
if: runner.os == 'MacOS'
uses: actions/setup-go@v6
with:
go-version: "1.25.0"
- name: Install cargo-hakari
uses: taiki-e/install-action@v2
with:
tool: cargo-hakari
- name: Remove workspace hack from Cargo.toml
run: |
cargo hakari disable
cargo hakari remove-deps -y
- name: Run Pavex tests with multiple feature combinations
if: runner.os != 'Windows'
run: |
cargo hack -p pavex --feature-powerset --depth 2 test --tests
- name: Run Pavex tests with multiple feature combinations
if: runner.os == 'Windows'
run: |
# FIPS only builds in `release` mode on Windows
cargo hack -p pavex --feature-powerset --exclude-features="fips" --depth 2 test --tests
cargo test -p pavex --release --tests --features fips,tls_crypto_provider_aws_lc_rs
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run `pavex` tests (windows)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
ui_tests_windows:
name: "Run UI tests (windows)"
runs-on: windows-2022
needs:
- build_clis_windows
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run UI tests (windows)
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
components: rustfmt
rustflags: ""
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_windows
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_windows
path: ~/.cargo/bin
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- name: Run UI tests
env:
PAVEX_TEST_CLI_PATH: C:\Users\runneradmin\.cargo\bin\pavex.exe
PAVEXC_TEST_CLI_PATH: C:\Users\runneradmin\.cargo\bin\pavexc.exe
run: |
cargo test --package pavex_cli
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Run UI tests (windows)
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
build_pxh:
runs-on: ubuntu-latest
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build pxh
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rust-lang/[email protected]
with:
rustflags: ""
cache-workspaces: "./docs/tools/pxh -> ./target"
- name: Build CLI
run: |
cd docs/tools/pxh
cargo build
- name: Store CLI artifact
uses: actions/upload-artifact@v5
with:
name: pxh
path: docs/tools/pxh/target/debug/pxh
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build pxh
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
is_up_to_date:
runs-on: ubuntu-latest
env:
PAVEX_PAVEXC: "/home/runner/.cargo/bin/pavexc"
needs:
- build_clis_linux
- build_pxh
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Check if up to date
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Set git identity
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "[email protected]"
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
with:
rustflags: ""
components: rustfmt
cache-workspaces: "./docs/examples -> ./target"
- name: Download pavex CLI artifact
uses: actions/download-artifact@v6
with:
name: pavex_cli_linux
path: ~/.cargo/bin
- name: Download pavexc CLI artifact
uses: actions/download-artifact@v6
with:
name: pavexc_cli_linux
path: ~/.cargo/bin
- name: Download pxh CLI artifact
uses: actions/download-artifact@v6
with:
name: pxh
path: ~/.cargo/bin
- name: Mark as executable
run: |
chmod +x ~/.cargo/bin/pavex
chmod +x ~/.cargo/bin/pavexc
chmod +x ~/.cargo/bin/pxh
- name: Activate pavex
env:
PAVEX_ACTIVATION_KEY: ${{ secrets.pavex_activation_key }}
run: |
pavex self activate
pavexc self setup
- uses: cargo-bins/cargo-binstall@main
- name: Install cargo-px
run: cargo binstall -y --github-token=${{ secrets.GITHUB_TOKEN }} [email protected]
- name: Install exa
run: cargo binstall -y --github-token=${{ secrets.GITHUB_TOKEN }} [email protected]
- name: Verify examples
run: |
cd docs/examples
RUST_BACKTRACE=0 pxh example verify
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Check if up to date
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
build_docs:
runs-on: ubuntu-latest
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build docs
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust stable toolchain
uses: actions-rust-lang/[email protected]
- name: Build API reference
run: |
cargo api_ref
- name: Copy API reference files
run: |
mkdir -p docs/api_reference
cp -r target/doc/* docs/api_reference
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install the project
run: uv sync --locked
- name: Build docs
run: |
uv run mkdocs build --strict
- uses: actions/upload-artifact@v5
with:
name: docs
path: site/
- name: Fix base
run: |
# Convert all "absolute" guide links in the reference to relative links so that we can scan for dead links
sudo find ./site -type f -exec sed -i "s#https://pavex.dev/docs/#file:///${PWD}/site/#g" {} +
sudo find ./site -type f -exec sed -i "s#https://pavex.dev/#file:///${PWD}/site/#g" {} +
- name: Link Checker
uses: lycheeverse/lychee-action@v2
with:
fail: true
# Pinning since there seems to be an issue with index.html files
# starting in 0.17.0
lycheeVersion: v0.16.1
args: |
--base site
--exclude-loopback
--exclude-path="site/api_reference/pavex/http"
--exclude-path="site/api_reference/pavex/time"
--exclude-path="site/api_reference/help.html"
--exclude-path="site/api_reference/settings.html"
--exclude-path="site/404.html"
--exclude=".*crate#per-style$"
--exclude=".*#setting-the-default-subscriber$"
--exclude="https://doc.rust-lang.org/*"
--exclude="https://stackoverflow.com/*"
--exclude="https://rust-random.github.io/*"
--exclude="https://github.com/LukeMathWalker/pavex/edit/main/*"
--exclude="https://docs.rs/**/*"
--exclude-path="site/api_reference/static.files"
--exclude="https://fonts.gstatic.com"
--require-https
--no-progress
site
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Build docs
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}
format_docs:
runs-on: ubuntu-latest
# Run if it's a PR on the official repo or a push to `main`
if: |
(github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)) ||
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
permissions:
pull-requests: write
checks: write
steps:
- name: Checkout repository from source repo
if: |
(github.event_name == 'push' && github.event.repository.full_name == github.repository)
uses: actions/checkout@v5
- name: Checkout repository from fork
if: |
github.event_name == 'repository_dispatch' &&
github.event.client_payload.slash_command.args.named.sha != '' &&
contains(
github.event.client_payload.pull_request.head.sha,
github.event.client_payload.slash_command.args.named.sha
)
uses: actions/checkout@v5
with:
ref: "refs/pull/${{ github.event.client_payload.pull_request.number }}/merge"
- uses: ./.github/actions/create-check
if: ${{ github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Format docs
workflow: "Build and store docs artifacts"
run_id: ${{ github.run_id }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- uses: dprint/[email protected]
- uses: ./.github/actions/finalize-check
if: ${{ always() && github.event_name != 'push' }}
with:
pr_number: ${{ github.event.client_payload.pull_request.number }}
job: Format docs
conclusion: ${{ job.status }}
github_token: ${{ secrets.GITHUB_TOKEN }}