diff --git a/.github/workflows/cloudflare-open-next-build.yml b/.github/workflows/cloudflare-open-next-build.yml new file mode 100644 index 0000000000000..67df12fd7103c --- /dev/null +++ b/.github/workflows/cloudflare-open-next-build.yml @@ -0,0 +1,62 @@ +# Security Notes +# Only selected Actions are allowed within this repository. Please refer to (https://github.com/nodejs/nodejs.org/settings/actions) +# for the full list of available actions. If you want to add a new one, please reach out a maintainer with Admin permissions. +# REVIEWERS, please always double-check security practices before merging a PR that contains Workflow changes!! +# AUTHORS, please only use actions with explicit SHA references, and avoid using `@master` or `@main` references or `@version` tags. + +name: Cloudflare OpenNext Build + +on: + push: + branches: + - main + pull_request: + branches: + - main + +defaults: + run: + # This ensures that the working directory is the root of the repository + working-directory: ./ + +permissions: + contents: read + actions: read + +env: + # See https://turbo.build/repo/docs/reference/command-line-reference/run#--cache-dir + TURBO_ARGS: --cache-dir=.turbo/cache + # See https://turbo.build/repo/docs/reference/command-line-reference/run#--force + TURBO_FORCE: true + +jobs: + build-cloudflare-worker: + name: Build Cloudflare Worker + runs-on: ubuntu-latest + + steps: + - name: Harden Runner + uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0 + with: + egress-policy: audit + + - name: Git Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Set up pnpm + uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0 + with: + cache: true + + - name: Set up Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + # We want to ensure that the Node.js version running here respects our supported versions + node-version-file: '.nvmrc' + cache: 'pnpm' + + - name: Install packages + run: pnpm install --frozen-lockfile + + - name: Build Cloudflare Worker + run: pnpm exec turbo run cloudflare:build:worker ${{ env.TURBO_ARGS }} diff --git a/apps/site/package.json b/apps/site/package.json index fef3e1e59e307..a840c139bb22f 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -6,7 +6,6 @@ "build": "cross-env NODE_NO_WARNINGS=1 next build", "check-types": "tsc --noEmit", "deploy": "cross-env NEXT_PUBLIC_STATIC_EXPORT=true NODE_NO_WARNINGS=1 next build", - "predev": "pnpm build-blog-data", "dev": "cross-env NODE_NO_WARNINGS=1 next dev", "lint": "turbo run lint:md lint:js lint:css", "lint:css": "stylelint \"**/*.css\" --allow-empty-input --cache --cache-strategy=content --cache-location=.stylelintcache", @@ -23,8 +22,8 @@ "build-blog-data": "node ./scripts/blog-data/generate.mjs", "build-blog-data:watch": "node --watch --watch-path=pages/en/blog ./scripts/blog-data/generate.mjs", "cloudflare:build:worker": "opennextjs-cloudflare build", - "cloudflare:preview": "pnpm run cloudflare:build:worker && wrangler dev", - "cloudflare:deploy": "pnpm run cloudflare:build:worker && wrangler deploy" + "cloudflare:preview": "wrangler dev", + "cloudflare:deploy": "wrangler deploy" }, "dependencies": { "@heroicons/react": "~2.2.0", diff --git a/apps/site/turbo.json b/apps/site/turbo.json index e8a826992df66..c7cbeb7bb7025 100644 --- a/apps/site/turbo.json +++ b/apps/site/turbo.json @@ -4,6 +4,7 @@ "globalEnv": ["NODE_ENV"], "tasks": { "dev": { + "dependsOn": ["build-blog-data"], "cache": false, "persistent": true, "env": [ @@ -24,7 +25,7 @@ ] }, "build": { - "dependsOn": ["^build"], + "dependsOn": ["build-blog-data", "^build"], "inputs": [ "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", "{app,components,layouts,pages,styles}/**/*.css", @@ -133,7 +134,19 @@ "inputs": ["{pages}/**/*.{mdx,md}"], "outputs": ["public/blog-data.json"] }, + "cloudflare:build:worker": { + "dependsOn": ["build-blog-data"], + "inputs": [ + "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", + "{app,components,layouts,pages,styles}/**/*.css", + "{next-data,scripts,i18n}/**/*.{mjs,json}", + "{app,pages}/**/*.{mdx,md}", + "*.{md,mdx,json,ts,tsx,mjs,yml}" + ], + "outputs": [".open-next/**"] + }, "cloudflare:preview": { + "dependsOn": ["cloudflare:build:worker"], "inputs": [ "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", "{app,components,layouts,pages,styles}/**/*.css", @@ -144,6 +157,7 @@ "outputs": [".open-next/**"] }, "cloudflare:deploy": { + "dependsOn": ["cloudflare:build:worker"], "inputs": [ "{app,components,hooks,i18n,layouts,middlewares,pages,providers,types,util}/**/*.{ts,tsx}", "{app,components,layouts,pages,styles}/**/*.css",