perf: Index crate items in parallel #1205
This file contains hidden or 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
| # 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 }} |