ok-to-test-command #913
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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: | |
branches: | |
- main | |
jobs: | |
build_clis_linux: | |
name: "Build CLIs (linux)" | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
cache-workspaces: "./libs -> ./target" | |
- name: Build CLI | |
run: | | |
cd libs | |
cargo build --bin pavex --bin pavexc --release | |
- name: Store pavex CLI artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pavex_cli_linux | |
path: libs/target/release/pavex | |
- name: Store pavexc CLI artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pavexc_cli_linux | |
path: libs/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 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
cache-workspaces: "./libs -> ./target" | |
- name: Build CLI | |
run: | | |
cd libs | |
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 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
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@v4 | |
with: | |
name: pavex_cli_linux | |
path: ~/.cargo/bin | |
- name: Download pavexc CLI artifact | |
uses: actions/download-artifact@v4 | |
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.1" | |
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 }} | |
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 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
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@v4 | |
with: | |
name: pavex_cli_linux | |
path: ~/.cargo/bin | |
- name: Download pavexc CLI artifact | |
uses: actions/download-artifact@v4 | |
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_linux: | |
name: "Run tests (linux)" | |
runs-on: ubuntu-latest | |
needs: | |
- build_clis_linux | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
components: rustfmt | |
rustflags: "" | |
cache-workspaces: "./libs -> ./target" | |
- name: Download pavex CLI artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: pavex_cli_linux | |
path: ~/.cargo/bin | |
- name: Download pavexc CLI artifact | |
uses: actions/download-artifact@v4 | |
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 | |
working-directory: libs | |
run: | | |
cargo test --all-features --no-run | |
cargo test --all-features --workspace --exclude="pavex_cli" | |
- name: Run UI tests | |
env: | |
PAVEX_TEST_CLI_PATH: /home/runner/.cargo/bin/pavex | |
PAVEXC_TEST_CLI_PATH: /home/runner/.cargo/bin/pavexc | |
working-directory: libs | |
run: | | |
cargo test --all-features --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 tests (linux) | |
conclusion: ${{ job.status }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
build_clis_macos: | |
name: "Build CLIs (macos)" | |
runs-on: macos-14 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
cache-workspaces: "./libs -> ./target" | |
- name: Build CLI | |
run: | | |
cd libs | |
cargo build --bin pavex --bin pavexc --release | |
- name: Store pavex CLI artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pavex_cli_macos | |
path: libs/target/release/pavex | |
- name: Store pavexc CLI artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pavexc_cli_macos | |
path: libs/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 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
components: rustfmt | |
rustflags: "" | |
cache-workspaces: "./libs -> ./target" | |
- name: Download pavex CLI artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: pavex_cli_macos | |
path: ~/.cargo/bin | |
- name: Download pavexc CLI artifact | |
uses: actions/download-artifact@v4 | |
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 | |
working-directory: libs | |
run: | | |
cargo test --all-features --no-run | |
cargo test --all-features --workspace --exclude="pavex_cli" | |
- name: Run UI tests | |
env: | |
PAVEX_TEST_CLI_PATH: /Users/runner/.cargo/bin/pavex | |
PAVEXC_TEST_CLI_PATH: /Users/runner/.cargo/bin/pavexc | |
working-directory: libs | |
run: | | |
cargo test --all-features --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 tests (macos) | |
conclusion: ${{ job.status }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
build_clis_windows: | |
name: "Build CLIs (windows)" | |
runs-on: windows-2022 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
cache-workspaces: "./libs -> ./target" | |
- name: Build CLI | |
run: | | |
cd libs | |
cargo build --bin pavex --bin pavexc --release | |
- name: Store pavex CLI artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pavex_cli_windows | |
path: libs/target/release/pavex.exe | |
- name: Store pavexc CLI artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pavexc_cli_windows | |
path: libs/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 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
components: rustfmt | |
rustflags: "" | |
cache-workspaces: "./libs -> ./target" | |
- name: Download pavex CLI artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: pavex_cli_windows | |
path: ~/.cargo/bin | |
- name: Download pavexc CLI artifact | |
uses: actions/download-artifact@v4 | |
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 | |
working-directory: libs | |
run: | | |
cargo test --all-features --no-run | |
cargo test --all-features --workspace --exclude="pavex_cli" | |
- 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 | |
working-directory: libs | |
run: | | |
cargo test --all-features --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 tests (windows) | |
conclusion: ${{ job.status }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
build_tutorial_generator: | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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 tutorial generator | |
workflow: "Build and store docs artifacts" | |
run_id: ${{ github.run_id }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Rust | |
uses: actions-rust-lang/setup-rust-toolchain@v1.8.0 | |
with: | |
rustflags: "" | |
cache-workspaces: "./doc_examples/tutorial_generator -> ./target" | |
- name: Build CLI | |
run: | | |
cd doc_examples/tutorial_generator | |
cargo build | |
- name: Store CLI artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tutorial_generator | |
path: doc_examples/tutorial_generator/target/debug/tutorial_generator | |
- uses: ./.github/actions/finalize-check | |
if: ${{ always() && github.event_name != 'push' }} | |
with: | |
pr_number: ${{ github.event.client_payload.pull_request.number }} | |
job: Build tutorial generator | |
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_tutorial_generator | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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 "ci@pavex.dev" | |
- name: Install Rust stable toolchain | |
uses: actions-rust-lang/setup-rust-toolchain@v1.8.0 | |
with: | |
rustflags: "" | |
components: rustfmt | |
cache-workspaces: "./libs -> ./target" | |
- name: Download pavex CLI artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: pavex_cli_linux | |
path: ~/.cargo/bin | |
- name: Download pavexc CLI artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: pavexc_cli_linux | |
path: ~/.cargo/bin | |
- name: Download tutorial_generator CLI artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: tutorial_generator | |
path: ~/.cargo/bin | |
- name: Mark as executable | |
run: | | |
chmod +x ~/.cargo/bin/pavex | |
chmod +x ~/.cargo/bin/pavexc | |
chmod +x ~/.cargo/bin/tutorial_generator | |
- 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 }} cargo-px@0.1 | |
- name: Install exa | |
run: cargo binstall -y --github-token=${{ secrets.GITHUB_TOKEN }} exa@0.10 | |
- name: Verify tutorials | |
run: | | |
cd doc_examples | |
RUST_BACKTRACE=0 tutorial_generator --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 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/setup-rust-toolchain@v1.8.0 | |
with: | |
cache-workspaces: "./libs -> ./target" | |
- name: Build API reference | |
run: | | |
cd libs | |
cargo doc --package pavex --package pavex_cli_client --package pavex_session --package pavex_session_memory_store --no-deps | |
- name: Copy API reference files | |
run: | | |
mkdir -p docs/api_reference | |
cp -r libs/target/doc/* docs/api_reference | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and export to Docker | |
uses: docker/build-push-action@v5 | |
with: | |
context: docs/ | |
load: true | |
tags: pavex-docs | |
- name: Build docs | |
run: | | |
docker run --rm -v ${PWD}:/docs pavex-docs build | |
- uses: actions/upload-artifact@v4 | |
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 . -type f -exec sed -i "s#https://pavex.dev/docs/#file:///${PWD}/site/#g" {} + | |
sudo find . -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="https://doc.rust-lang.org/*" | |
--exclude="https://stackoverflow.com/*" | |
--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 | |
permissions: | |
pull-requests: write | |
checks: write | |
# 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) | |
steps: | |
- name: Checkout repository from source repo | |
if: | | |
(github.event_name == 'push' && github.event.repository.full_name == github.repository) | |
uses: actions/checkout@v4 | |
- 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@v4 | |
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/check@v2.2 | |
- 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 }} |