chore(deps-dev): bump hono from 4.11.7 to 4.12.4 in /packages/core #725
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
| name: PR Tests | |
| on: | |
| pull_request_target: | |
| branches: | |
| - main | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| # Authorization job - gates fork PRs behind environment approval | |
| authorize: | |
| runs-on: ubuntu-latest | |
| # Use 'external' environment (requires approval) for fork PRs, 'internal' for same-repo PRs | |
| environment: | |
| name: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository && 'external' || 'internal' }} | |
| steps: | |
| - name: Authorize | |
| run: | | |
| echo "✅ Workflow authorized" | |
| echo "Event: ${{ github.event_name }}" | |
| echo "Repository: ${{ github.repository }}" | |
| echo "PR Head Repo: ${{ github.event.pull_request.head.repo.full_name || 'N/A' }}" | |
| echo "Is Fork: ${{ github.event.pull_request.head.repo.full_name != github.repository }}" | |
| test: | |
| needs: authorize | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| # For pull_request_target, we need to checkout the PR head | |
| ref: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.sha || github.sha }} | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| # TODO: Re-enable type checking after fixing remaining TypeScript errors | |
| # Tracked in follow-up issue | |
| # - name: Type check | |
| # run: npm run type-check | |
| - name: Run unit tests with coverage | |
| run: npm run test:cov | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: ./packages/core/coverage/coverage-final.json | |
| flags: unittests | |
| fail_ci_if_error: false | |
| verbose: true | |
| - name: Build core package | |
| run: npm run build:core | |
| # Skip Cloudflare deployment and E2E tests for Dependabot PRs (no access to secrets) | |
| - name: Create fresh D1 database for PR | |
| if: github.actor != 'dependabot[bot]' | |
| id: create-db | |
| run: | | |
| cd my-sonicjs-app | |
| BRANCH_NAME="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" | |
| # Limit to 43 chars to allow for "sonicjs-pr-" prefix (11 chars) = 54 total | |
| # Remove trailing hyphens to avoid invalid worker names | |
| SAFE_BRANCH=$(echo "$BRANCH_NAME" | sed 's/[^a-zA-Z0-9-]/-/g' | cut -c1-43 | sed 's/-*$//') | |
| DB_NAME="sonicjs-pr-${SAFE_BRANCH}" | |
| echo "Creating fresh D1 database: $DB_NAME" | |
| # Check if database already exists | |
| EXISTING_DB=$(npx wrangler d1 list --json | jq -r ".[] | select(.name == \"$DB_NAME\") | .uuid" 2>/dev/null || echo "") | |
| if [ -n "$EXISTING_DB" ]; then | |
| echo "Database $DB_NAME already exists with ID: $EXISTING_DB" | |
| echo "Deleting existing database to ensure fresh migrations..." | |
| npx wrangler d1 delete "$DB_NAME" -y || true | |
| sleep 2 | |
| fi | |
| # Create new database (always fresh) | |
| CREATE_OUTPUT=$(npx wrangler d1 create "$DB_NAME" 2>&1) | |
| echo "$CREATE_OUTPUT" | |
| # Extract database ID from creation output | |
| DB_ID=$(echo "$CREATE_OUTPUT" | grep -oP 'database_id\s*=\s*"\K[^"]+' || echo "") | |
| if [ -z "$DB_ID" ]; then | |
| # Try alternative extraction method | |
| DB_ID=$(npx wrangler d1 list --json | jq -r ".[] | select(.name == \"$DB_NAME\") | .uuid") | |
| fi | |
| if [ -z "$DB_ID" ]; then | |
| echo "Error: Failed to get database ID" | |
| exit 1 | |
| fi | |
| echo "Database ID: $DB_ID" | |
| echo "db_id=$DB_ID" >> $GITHUB_OUTPUT | |
| echo "db_name=$DB_NAME" >> $GITHUB_OUTPUT | |
| # Update wrangler.toml with the new database ID | |
| sed -i "s/database_id = \"[^\"]*\"/database_id = \"$DB_ID\"/" wrangler.toml | |
| sed -i "s/database_name = \"[^\"]*\"/database_name = \"$DB_NAME\"/" wrangler.toml | |
| echo "Updated wrangler.toml with new database" | |
| grep -A2 "d1_databases" wrangler.toml | |
| env: | |
| CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} | |
| CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} | |
| - name: Run D1 migrations | |
| if: github.actor != 'dependabot[bot]' | |
| run: | | |
| cd my-sonicjs-app | |
| echo "Applying migrations to database: ${{ steps.create-db.outputs.db_name }}" | |
| npx wrangler d1 migrations apply ${{ steps.create-db.outputs.db_name }} --remote | |
| env: | |
| CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} | |
| CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} | |
| - name: Deploy to Cloudflare Workers Preview | |
| if: github.actor != 'dependabot[bot]' | |
| id: deploy | |
| run: | | |
| cd my-sonicjs-app | |
| # Deploy to preview with unique name based on PR/branch | |
| # Cloudflare Workers has a 54 character limit for script names with previews | |
| # Prefix "sonicjs-pr-" is 11 chars, so max branch name is 43 chars | |
| BRANCH_NAME="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" | |
| # Limit to 43 chars to allow for "sonicjs-pr-" prefix (11 chars) = 54 total | |
| # Remove trailing hyphens to avoid invalid worker names | |
| SAFE_BRANCH=$(echo "$BRANCH_NAME" | sed 's/[^a-zA-Z0-9-]/-/g' | cut -c1-43 | sed 's/-*$//') | |
| # Deploy and capture the URL (don't exit on error) | |
| set +e | |
| echo "Deploying to preview environment: sonicjs-pr-${SAFE_BRANCH}" | |
| DEPLOY_OUTPUT=$(npx wrangler deploy --name "sonicjs-pr-${SAFE_BRANCH}" 2>&1) | |
| DEPLOY_EXIT_CODE=$? | |
| set -e | |
| echo "=== Wrangler Deploy Output ===" | |
| echo "$DEPLOY_OUTPUT" | |
| echo "=== End Deploy Output ===" | |
| if [ $DEPLOY_EXIT_CODE -ne 0 ]; then | |
| echo "Error: Wrangler deploy failed with exit code $DEPLOY_EXIT_CODE" | |
| exit 1 | |
| fi | |
| # Extract the URL from wrangler output | |
| PREVIEW_URL=$(echo "$DEPLOY_OUTPUT" | grep -oP 'https://[^\s]+\.workers\.dev' | head -1) | |
| if [ -z "$PREVIEW_URL" ]; then | |
| echo "Failed to extract preview URL from wrangler output" | |
| exit 1 | |
| fi | |
| echo "Preview URL: $PREVIEW_URL" | |
| echo "preview_url=$PREVIEW_URL" >> $GITHUB_OUTPUT | |
| env: | |
| CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} | |
| CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} | |
| - name: Wait for preview deployment | |
| if: github.actor != 'dependabot[bot]' | |
| run: | | |
| echo "Waiting for preview to be ready..." | |
| for i in {1..30}; do | |
| if curl -s -o /dev/null -w "%{http_code}" "${{ steps.deploy.outputs.preview_url }}" | grep -q "200\|301\|302"; then | |
| echo "Preview is ready!" | |
| exit 0 | |
| fi | |
| echo "Attempt $i/30: Preview not ready yet, waiting..." | |
| sleep 10 | |
| done | |
| echo "Preview failed to become ready" | |
| exit 1 | |
| - name: Install Playwright browsers | |
| if: github.actor != 'dependabot[bot]' | |
| run: npx playwright install --with-deps chromium | |
| - name: Run E2E tests against preview | |
| if: github.actor != 'dependabot[bot]' | |
| run: npm run e2e | |
| env: | |
| CI: true | |
| BASE_URL: ${{ steps.deploy.outputs.preview_url }} | |
| - name: Upload test results | |
| if: always() && github.actor != 'dependabot[bot]' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: playwright-report | |
| path: playwright-report/ | |
| retention-days: 7 | |
| - name: Upload test videos | |
| if: always() && github.actor != 'dependabot[bot]' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test-videos | |
| path: | | |
| test-results/**/*.webm | |
| playwright-report/**/*.webm | |
| retention-days: 7 |