# Builds the quotesdb API Worker Wasm binary and applies OpenTofu infrastructure. # Triggered on push to the quotesdb branch when API or infra files change. # Required secrets: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_ZONE_ID name: Deploy quotesdb API on: push: branches: - quotesdb paths: - "quotesdb/src/bin/api/**" - "quotesdb/src/lib.rs" - "quotesdb/infra/**" - "quotesdb/Cargo.toml" - "quotesdb/Cargo.lock" jobs: deploy-api: runs-on: ubuntu-latest defaults: run: working-directory: quotesdb steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain with wasm32 target uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown - name: Cache Rust build artifacts uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git quotesdb/target key: ${{ runner.os }}-cargo-api-${{ hashFiles('quotesdb/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-api- - name: Build API Wasm binary run: cargo build --release --bin api --target wasm32-unknown-unknown - name: Setup OpenTofu uses: opentofu/setup-opentofu@v1 - name: Initialise and apply infrastructure working-directory: quotesdb/infra env: TF_VAR_cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }} TF_VAR_cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} TF_VAR_cloudflare_zone_id: ${{ secrets.CLOUDFLARE_ZONE_ID }} run: | tofu init tofu apply -auto-approve - name: Apply D1 schema migrations env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} run: wrangler d1 execute quotesdb --file infra/schema.sql --remote