name: Deploy to Cloudflare on: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: read deployments: write jobs: deploy: runs-on: ubuntu-latest name: Deploy to Cloudflare Pages steps: - name: Checkout source code uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '24' cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build for Cloudflare run: pnpm run build:cloudflare env: BUILD_TARGET: cloudflare NODE_ENV: production # NEXT_PUBLIC_ 前缀的变量需要在构建时设置 NEXT_PUBLIC_STORAGE_TYPE: ${{ secrets.NEXT_PUBLIC_STORAGE_TYPE }} NEXT_PUBLIC_SITE_NAME: ${{ secrets.NEXT_PUBLIC_SITE_NAME }} NEXT_PUBLIC_SEARCH_MAX_PAGE: ${{ secrets.NEXT_PUBLIC_SEARCH_MAX_PAGE }} NEXT_PUBLIC_DOUBAN_PROXY_TYPE: ${{ secrets.NEXT_PUBLIC_DOUBAN_PROXY_TYPE }} NEXT_PUBLIC_DOUBAN_PROXY: ${{ secrets.NEXT_PUBLIC_DOUBAN_PROXY }} NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE: ${{ secrets.NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE }} NEXT_PUBLIC_DOUBAN_IMAGE_PROXY: ${{ secrets.NEXT_PUBLIC_DOUBAN_IMAGE_PROXY }} NEXT_PUBLIC_DISABLE_YELLOW_FILTER: ${{ secrets.NEXT_PUBLIC_DISABLE_YELLOW_FILTER }} NEXT_PUBLIC_FLUID_SEARCH: ${{ secrets.NEXT_PUBLIC_FLUID_SEARCH }} NEXT_PUBLIC_PROXY_M3U8_TOKEN: ${{ secrets.NEXT_PUBLIC_PROXY_M3U8_TOKEN }} NEXT_PUBLIC_DANMAKU_CACHE_EXPIRE_MINUTES: ${{ secrets.NEXT_PUBLIC_DANMAKU_CACHE_EXPIRE_MINUTES }} NEXT_PUBLIC_VOICE_CHAT_STRATEGY: ${{ secrets.NEXT_PUBLIC_VOICE_CHAT_STRATEGY }} NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD: ${{ secrets.NEXT_PUBLIC_ENABLE_OFFLINE_DOWNLOAD }} NEXT_PUBLIC_ENABLE_SOURCE_SEARCH: ${{ secrets.NEXT_PUBLIC_ENABLE_SOURCE_SEARCH }} - name: Set Cloudflare environment variables run: | # 设置运行时环境变量到 Cloudflare if [ -n "${{ secrets.USERNAME }}" ]; then echo "${{ secrets.USERNAME }}" | pnpm wrangler secret put USERNAME fi if [ -n "${{ secrets.PASSWORD }}" ]; then echo "${{ secrets.PASSWORD }}" | pnpm wrangler secret put PASSWORD fi if [ -n "${{ secrets.UPSTASH_URL }}" ]; then echo "${{ secrets.UPSTASH_URL }}" | pnpm wrangler secret put UPSTASH_URL fi if [ -n "${{ secrets.UPSTASH_TOKEN }}" ]; then echo "${{ secrets.UPSTASH_TOKEN }}" | pnpm wrangler secret put UPSTASH_TOKEN fi if [ -n "${{ secrets.TMDB_API_KEY }}" ]; then echo "${{ secrets.TMDB_API_KEY }}" | pnpm wrangler secret put TMDB_API_KEY fi if [ -n "${{ secrets.TMDB_PROXY }}" ]; then echo "${{ secrets.TMDB_PROXY }}" | pnpm wrangler secret put TMDB_PROXY fi if [ -n "${{ secrets.TMDB_REVERSE_PROXY }}" ]; then echo "${{ secrets.TMDB_REVERSE_PROXY }}" | pnpm wrangler secret put TMDB_REVERSE_PROXY fi if [ -n "${{ secrets.DANMAKU_API_BASE }}" ]; then echo "${{ secrets.DANMAKU_API_BASE }}" | pnpm wrangler secret put DANMAKU_API_BASE fi if [ -n "${{ secrets.DANMAKU_API_TOKEN }}" ]; then echo "${{ secrets.DANMAKU_API_TOKEN }}" | pnpm wrangler secret put DANMAKU_API_TOKEN fi if [ -n "${{ secrets.ANNOUNCEMENT }}" ]; then echo "${{ secrets.ANNOUNCEMENT }}" | pnpm wrangler secret put ANNOUNCEMENT fi if [ -n "${{ secrets.CRON_PASSWORD }}" ]; then echo "${{ secrets.CRON_PASSWORD }}" | pnpm wrangler secret put CRON_PASSWORD fi if [ -n "${{ secrets.SITE_BASE }}" ]; then echo "${{ secrets.SITE_BASE }}" | pnpm wrangler secret put SITE_BASE fi if [ -n "${{ secrets.REDIS_URL }}" ]; then echo "${{ secrets.REDIS_URL }}" | pnpm wrangler secret put REDIS_URL fi if [ -n "${{ secrets.KVROCKS_URL }}" ]; then echo "${{ secrets.KVROCKS_URL }}" | pnpm wrangler secret put KVROCKS_URL fi if [ -n "${{ secrets.INIT_CONFIG }}" ]; then echo "${{ secrets.INIT_CONFIG }}" | pnpm wrangler secret put INIT_CONFIG fi if [ -n "${{ secrets.CONFIG_SUBSCRIPTION_URL }}" ]; then echo "${{ secrets.CONFIG_SUBSCRIPTION_URL }}" | pnpm wrangler secret put CONFIG_SUBSCRIPTION_URL fi env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - name: Deploy to Cloudflare uses: cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: deploy packageManager: pnpm