name: Pull Request on: - pull_request - workflow_dispatch permissions: contents: read jobs: worker-build: name: Test & Build worker-build runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@1.83.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: Build Templates needs: worker-build runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@1.83.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: Build Examples needs: worker-build runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@1.83.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.83.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 runs-on: ubuntu-latest steps: - uses: dtolnay/rust-toolchain@1.83.0 - uses: actions/checkout@v4 with: submodules: true - 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 packages run: | sudo apt update sudo apt clean sudo apt install -y build-essential libssl-dev netcat-traditional libc++-dev - name: Install npm dependencies run: npm ci - name: Build Wasm Bindgen run: cd wasm-bindgen && cargo build -p wasm-bindgen-cli --bin wasm-bindgen --bin wasm-bindgen-test-runner - name: Install wasm32 target run: rustup target add wasm32-unknown-unknown - name: Run wasm-bindgen tests env: CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER: ${{ github.workspace }}/wasm-bindgen/target/debug/wasm-bindgen-test-runner run: cargo test -p worker --target wasm32-unknown-unknown - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Container 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: worker-dev/echocontainer:latest run: npm run test - name: Run tests (http) run: npm run test-http