name: Pull Request on: - pull_request - workflow_dispatch permissions: contents: read jobs: worker-build: strategy: matrix: platform: ['ubuntu-latest', 'windows-latest'] name: Build worker-build runs-on: ${{ matrix.platform }} steps: - uses: dtolnay/rust-toolchain@1.87.0 - uses: actions/checkout@v4 with: submodules: true - name: Cache Rust dependencies uses: actions/cache@v4 with: path: ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo- - run: cargo test -p worker-build - run: cargo build -p worker-build - uses: actions/upload-artifact@v4 with: name: worker-build path: target/debug/worker-build build-templates: name: Templates needs: worker-build runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@1.87.0 - uses: actions/checkout@v4 with: submodules: true - name: Cache Rust dependencies uses: actions/cache@v4 with: path: ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo- - uses: actions/download-artifact@v4 with: name: worker-build path: ./target/debug - name: Make worker-build executable run: chmod +x ./target/debug/worker-build - uses: cargo-bins/cargo-binstall@main - name: Install cargo-generate run: cargo binstall cargo-generate - name: Generate and build all templates run: | mkdir -p generated for template in templates/*/; do template_name=$(basename "$template") if [ "$template_name" = "leptos" ]; then echo "Skipping leptos template" continue fi echo "Generating $template_name" cargo generate --path $template --name "$template_name" --destination ./generated --force cd "generated/$template_name" echo "Building $template_name" ../../target/debug/worker-build cd ../.. done build-examples: name: Examples needs: worker-build runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@1.87.0 - uses: actions/checkout@v4 with: submodules: true - name: Cache Rust dependencies uses: actions/cache@v4 with: path: ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo- - uses: actions/download-artifact@v4 with: name: worker-build path: ./target/debug - name: Make worker-build executable run: chmod +x ./target/debug/worker-build - name: Build all examples run: | sed -i 's/, "examples\/axum"//g' Cargo.toml for example in examples/*/; do example_name=$(basename "$example") if [ "$example_name" = "coredump" ]; then echo "Skipping coredump example" continue fi echo "Building $example_name" cd "$example" ../../target/debug/worker-build cd ../.. done rustfmt: name: Formatter runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@1.87.0 with: components: rustfmt, clippy - uses: actions/checkout@v4 with: submodules: true - name: Cache Rust dependencies uses: actions/cache@v4 with: path: ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo- - name: Check Formatting run: cargo fmt --all -- --check - name: Check for idiomatic code run: cargo clippy --features d1,queue --all-targets --workspace -- -D warnings - name: Check for idiomatic code (http) run: cargo clippy --all-features --package worker-sandbox --all-targets -- -D warnings - name: Check for errors run: cargo check test: name: Test needs: worker-build strategy: matrix: platform: ['ubuntu-latest', 'windows-latest'] runs-on: ${{ matrix.platform }} steps: - uses: dtolnay/rust-toolchain@1.87.0 - uses: actions/checkout@v4 with: submodules: true - name: Setup Chomp uses: guybedford/chomp-action@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: actions/download-artifact@v4 with: name: worker-build path: ./target/debug - name: Make worker-build executable run: chmod +x ./target/debug/worker-build - name: Cache Rust dependencies uses: actions/cache@v4 with: path: ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo- - name: Install npm dependencies run: npm ci - name: Install wasm32 target run: rustup target add wasm32-unknown-unknown - name: Run unit tests run: chomp test:unit - name: Set up Docker Buildx if: matrix.platform == 'ubuntu-latest' uses: docker/setup-buildx-action@v3 - name: Build Container if: matrix.platform == 'ubuntu-latest' uses: docker/build-push-action@v6 with: context: ./test/container-echo push: false load: true tags: worker-dev/echocontainer:latest cache-from: type=gha cache-to: type=gha,mode=max - name: Run tests env: TEST_CONTAINER_NAME: ${{ matrix.platform == 'ubuntu-latest' && 'worker-dev/echocontainer:latest' || '' }} run: chomp test - name: Run tests (http) run: chomp test-http test-panic-unwind: name: Test (panic-unwind) needs: worker-build runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@nightly with: components: rust-src - uses: actions/checkout@v4 with: submodules: true - name: Setup Chomp uses: guybedford/chomp-action@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: actions/download-artifact@v4 with: name: worker-build path: ./target/debug - name: Make worker-build executable run: chmod +x ./target/debug/worker-build - name: Cache Rust dependencies uses: actions/cache@v4 with: path: ~/.cargo/registry ~/.cargo/git target key: ${{ runner.os }}-cargo-nightly-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-nightly- - name: Install npm dependencies run: npm ci - name: Install wasm32 target run: rustup target add wasm32-unknown-unknown - name: Run tests (panic-unwind) run: chomp test-panic-unwind