diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml
index e04e1c0b..acb0f41d 100644
--- a/.github/workflows/publish.yaml
+++ b/.github/workflows/publish.yaml
@@ -11,21 +11,59 @@ on:
- dev
paths:
- 'apps/www/**'
+ pull_request_target:
+ types:
+ # When a created pull request from forked repo, it will be comment 'Should deploy to add label'
+ - opened
+ # When a labeled '🚀request-deploy' pull request from forked repo, it will be deploy to Cloudflare Pages
+ - labeled
+ paths:
+ - 'apps/www/**'
# Allows you to run this workflow manually from the Actions tab
# eslint-disable-next-line yml/no-empty-mapping-value
workflow_dispatch:
+permissions:
+ # default contents: read & write (in forked repos, only read)
+ contents: write
+ # default deployments: read & write (in forked repos, only read)
+ deployments: write
+ # default pull-requests: read & write (in forked repos, only read)
+ pull-requests: write
+
jobs:
publish:
runs-on: ubuntu-latest
- permissions:
- contents: read
- deployments: write
+ env:
+ GITHUB_HEAD_REF: ${{ github.event.pull_request.head.sha }}
+
name: Publish to Cloudflare Pages
+ # push event in main branch
+ # workflow_dispatch event
+ # pull_request event from not forked repo
+ # pull_request_target event with label "🚀request-deploy" from forked repo
+ if: ${{
+ github.event_name == 'push' ||
+ github.event_name == 'workflow_dispatch' ||
+ (github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false) ||
+ (github.event_name == 'pull_request_target' &&
+ github.event.action == 'labeled' &&
+ github.event.pull_request.head.repo.fork == true &&
+ contains(github.event.label.name, '🚀request-deploy'))
+ }}
steps:
- name: Checkout
uses: actions/checkout@v3
+ with:
+ ref: ${{ github.event.pull_request.head.sha || github.ref }}
+ fetch-depth: 0
+
+ - name: Print pull request head information
+ run: |
+ echo "Pull Request SHA: ${{ github.event.pull_request.head.sha }}"
+ echo "Pull Request Ref: ${{ github.event.pull_request.head.ref }}"
+ echo "Pull Request Env: ${{ env.GITHUB_HEAD_REF }}"
# Run a build step here
- name: Setup Node.js environment
@@ -60,25 +98,72 @@ jobs:
# Run a action to publish docs
- name: Publish to Cloudflare Pages
- uses: unlike-ltd/github-actions-cloudflare-pages@v1.1.2
+ uses: cloudflare/pages-action@v1.5.0
with:
- cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- cloudflare-account-id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- cloudflare-project-name: shadcn-vue
+ apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ projectName: shadcn-vue
directory: .vitepress/dist
+ # Optional: Enable this if you want to have GitHub Deployments triggered
+ gitHubToken: ${{ secrets.GITHUB_TOKEN }}
+ # Optional: Switch what branch you are publishing to.
+ # By default this will be the branch which triggered this workflow
+ branch: refs/pull/${{ github.event.number }}/merge
+ # Optional: Change the working directory
+ workingDirectory: apps/www
+ wranglerVersion: '3'
+
+ - name: Create PR comment
+ if: ${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target' }}
+ uses: mshick/add-pr-comment@v2
+ with:
+ message: |
+ ### ⚡ Successfully Cloudflare Pages deployed!
+ | Name | Link |
+ | :--- | :--- |
+ | 🔨 Latest commit | ${{ github.event.pull_request.head.sha || github.sha }} |
+ | 🔍 Latest deploy log | ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} |
+ | 😎 Deploy Preview Url | [${{ steps.cloudflare-pages-deploy.outputs.url }}](${{ steps.cloudflare-pages-deploy.outputs.url }}) |
+ | 🌳 Environment | ${{ steps.cloudflare-pages-deploy.outputs.environment }} |
+
+ - name: Remove label
+ if: ${{ github.event_name == 'pull_request_target' && contains(github.event.label.name, '🚀request-deploy') }}
+ uses: actions/github-script@v6
+ with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- github-environment: ${{ github.event.pull_request.head.ref }}
- # uses: cloudflare/pages-action@v1.5.0
- # with:
- # apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- # accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
- # projectName: shadcn-vue
- # directory: .vitepress/dist
- # # Optional: Enable this if you want to have GitHub Deployments triggered
- # gitHubToken: ${{ secrets.GITHUB_TOKEN }}
- # # Optional: Switch what branch you are publishing to.
- # # By default this will be the branch which triggered this workflow
- # branch: refs/pull/${{ github.event.number }}/merge
- # # Optional: Change the working directory
- # workingDirectory: apps/www
- # wranglerVersion: '3'
+ script: |
+ github.rest.issues.removeLabel({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ name: ['🚀request-deploy']
+ })
+
+ # Comment on PR from the fork
+ comment:
+ name: Comment
+ runs-on: ubuntu-latest
+
+ # pull_request_target opened event from forked repo
+ if: ${{
+ github.event_name == 'pull_request_target' &&
+ github.event.action == 'opened' &&
+ github.event.pull_request.head.repo.fork == true
+ }}
+
+ steps:
+ - name: Create PR comment
+ run: |
+ cat << EOF > comment.md
+ # ⚠️ \`🚀request-deploy\` label is required for deployment
+
+ This repository is a forked repository.
+ Due to security reasons, deployment from forked repositories does not happen automatically.
+
+ To request deployment, please add the \`🚀request-deploy\` label to this pull request.
+ (Only certain members have the ability to add labels.)
+ EOF
+
+ gh pr comment ${{ github.event.number }} -R ${{ github.repository }} -F comment.md
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}