diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml new file mode 100644 index 0000000..cccecfd --- /dev/null +++ b/.github/workflows/pr-preview.yml @@ -0,0 +1,132 @@ +#################### 🚧 WARNING: READ THIS BEFORE USING THIS FILE 🚧 #################### +# +# +# +# IF YOU DON'T KNOW WHAT YOU'RE DOING, YOU CAN EASILY LEAK SECRETS BY USING A +# `pull_request_target` WORKFLOW INSTEAD OF `pull_request`! SERIOUSLY, DO NOT +# BLINDLY COPY AND PASTE THIS FILE WITHOUT UNDERSTANDING THE FULL IMPLICATIONS +# OF WHAT YOU'RE DOING! WE HAVE TESTED THIS FOR OUR OWN USE CASES, WHICH ARE +# NOT NECESSARILY THE SAME AS YOURS! WHILE WE AREN'T EXPOSING ANY OF OUR SECRETS, +# ONE COULD EASILY DO SO BY MODIFYING OR ADDING A STEP TO THIS WORKFLOW! +# +# +# +#################### 🚧 WARNING: READ THIS BEFORE USING THIS FILE 🚧 #################### + +name: Preview Deployment +on: + pull_request_target: + types: + - opened + - synchronize + - closed + +# cancel in-progress runs on new commits to same PR (github.event.number) +concurrency: + group: ${{ github.workflow }}-${{ github.event.number || github.sha }} + cancel-in-progress: true + +env: + PROJECT_NAME: playground + +jobs: + deploy-preview: + if: ${{ github.event.action != 'closed' }} + permissions: + contents: read + pull-requests: write + deployments: write + runs-on: ubuntu-latest + name: Deploy Preview to Cloudflare Pages + env: + BRANCH_NAME: preview-${{ github.head_ref }} + ACTION_RUN: ${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}} + steps: + - uses: actions/checkout@v4 + with: + submodules: "recursive" + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + + - name: Create comment + id: comment + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: "github-actions[bot]" + body: | + ## ⚡ Cloudflare Pages Deployment + | Name | Status | Preview | + | :--- | :----- | :------ | + | ${{env.BRANCH_NAME}} | 🔨 Building ([Logs](${{env.ACTION_RUN}})) | waiting... | + + # Build + - uses: pnpm/action-setup@v4 + with: + version: 9 + - name: Install Deps + run: pnpm i -C frontend + - name: Build + run: pnpm run -C frontend build + env: + VITE_BACKEND_HOST: ${{ secrets.BACKEND_HOST }} + + # Deploy steps + - name: Deploy + id: deploy + uses: cloudflare/wrangler-action@v3 + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy ./frontend/dist --project-name "${{ env.PROJECT_NAME }}" --branch "${{ env.BRANCH_NAME }}" + + - name: Extract hash from CF url Deploy + run: | + url_hash=$(echo "${{ steps.deploy.outputs.deployment-url }}" | sed -n 's|https://\([^.]*\).${{env.PROJECT_NAME}}.*|\1|p') + echo "SHA_SHORT=$url_hash" >> $GITHUB_ENV + + - name: Create comment + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ github.event.pull_request.number }} + comment-id: ${{ steps.comment.outputs.comment-id }} + edit-mode: replace + body: | + ## ⚡ Cloudflare Pages Deployment + | Name | Status | Preview | + | :--- | :----- | :------ | + | ${{env.BRANCH_NAME}} | ✅ Ready ([Logs](${{env.ACTION_RUN}})) | [${{env.SHA_SHORT}}](${{ steps.deploy.outputs.deployment-url }}) | + + # remove-preview: + # if: ${{ github.event.action == "closed" }} + # permissions: + # contents: read + # pull-requests: write + # deployments: write + # runs-on: ubuntu-latest + # name: Remove Preview of Cloudflare Pages + # steps: + # - uses: actions/checkout@v3 + # with: + # submodules: "recursive" + # ref: ${{ github.event.pull_request.head.ref }} + # repository: ${{ github.event.pull_request.head.repo.full_name }} + + # - name: Deploy + # id: deploy + # uses: cloudflare/wrangler-action@v3 + # with: + # apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + # accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + # command: pages --project-name=homepage --branch="${ env.BRANCH_NAME }" + + # - name: Create comment + # uses: peter-evans/create-or-update-comment@v4 + # with: + # issue-number: ${{ github.event.pull_request.number }} + # comment-author: 'github-actions[bot]' + # body: | + # ## ⚡ Removing Cloudflare Pages Preview + # | Name | Status | + # | :--- | :----- | + # | ${{env.BRANCH_NAME}} | ✅ Removed | diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml new file mode 100644 index 0000000..9a0aad5 --- /dev/null +++ b/.github/workflows/web.yml @@ -0,0 +1,47 @@ +name: Deploy to production + +on: + workflow_dispatch: + push: + branches: + - main + paths: + - '.github/workflows/deploy.yml' + - 'frontend/**' + +env: + PROJECT_NAME: playground + +jobs: + deploy: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 9 + - name: Install Deps + run: pnpm i -C frontend + - name: Build + run: pnpm run -C frontend build + env: + VITE_BACKEND_HOST: ${{ secrets.BACKEND_HOST }} + - name: Deploy + uses: cloudflare/wrangler-action@v3 + env: + # AUTH_GITHUB_ID: ${{ secrets.AUTH_GITHUB_ID }} + # AUTH_GITHUB_SECRET: ${{ secrets.AUTH_GITHUB_SECRET }} + # AUTH_SECRET: ${{ secrets.AUTH_SECRET }} + # AUTH_TRUST_HOST: ${{ secrets.AUTH_TRUST_HOST }} + # ADMINS: ${{ secrets.ADMINS }} + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy ./frontend/dist --project-name "${{ env.PROJECT_NAME }}" + # secrets: | + # ADMINS + # AUTH_GITHUB_ID + # AUTH_GITHUB_SECRET + # AUTH_SECRET + # AUTH_TRUST_HOST