diff --git a/.github/workflows/cloudflare-deploy.yml b/.github/workflows/cloudflare-deploy.yml new file mode 100644 index 0000000..2f15c15 --- /dev/null +++ b/.github/workflows/cloudflare-deploy.yml @@ -0,0 +1,119 @@ +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 + with: + version: 9 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + 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