Skip to content

Merge pull request #247 from daodaoedu/dev #29

Merge pull request #247 from daodaoedu/dev

Merge pull request #247 from daodaoedu/dev #29

Workflow file for this run

name: Deploy to Cloudflare
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref }}
cancel-in-progress: true
on:
push:
branches:
- "prod"
- "dev"
workflow_dispatch:
env:
BRANCH_NAME: ${{ github.ref_name }}
jobs:
init:
name: Initial Common Steps
runs-on: ubuntu-latest
steps:
- name: Git checkout
uses: actions/checkout@v4
- name: Cache dependencies
id: cache
uses: actions/cache@v3
with:
path: |
node_modules
~/.cache/Cypress
key: deps-node-modules-${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile
lint:
name: Lint
runs-on: ubuntu-latest
needs: init
steps:
- name: Git checkout
uses: actions/checkout@v4
- name: Cache dependencies
id: cache
uses: actions/cache@v3
with:
path: |
node_modules
~/.cache/Cypress
key: deps-node-modules-${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile
- name: lint
id: lint
continue-on-error: true
run: |
if ! yarn lint; then
ERROR_MSG=$(yarn lint 2>&1)
echo "lint_error<<EOF" >> $GITHUB_OUTPUT
echo "$ERROR_MSG" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
exit 1
fi
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add .
git diff --cached --quiet || echo "changes=true" >> $GITHUB_OUTPUT
- name: Send Error Notification
if: steps.lint.outcome == 'failure'
uses: ./.github/actions/notification
with:
TYPE: failure
TITLE: "❌ Lint Failed"
DESCRIPTION: "Branch: ${{ env.BRANCH_NAME }}\n\n${{ steps.lint.outputs.lint_error }}"
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Check on failure
if: steps.lint.outcome == 'failure'
run: |
echo "Lint failed"
exit 1
- name: Commit lint Changes
if: steps.lint.outcome == 'success' && steps.lint.outputs.changes == 'true'
run: |
git commit -m "chore: format code"
git push
build_and_deploy:
name: Build and Deploy to Cloudflare
runs-on: ubuntu-latest
environment: production
timeout-minutes: 30
needs: lint
if: needs.lint.result == 'success'
steps:
- name: Git checkout
uses: actions/checkout@v4
- name: Cache dependencies
id: cache
uses: actions/cache@v3
with:
path: |
node_modules
~/.cache/Cypress
key: deps-node-modules-${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile
- name: Build
run: yarn pages:build
env:
NEXT_PUBLIC_API_URL: ${{ github.ref_name == 'prod' && secrets.NEXT_PUBLIC_API_URL || secrets.NEXT_PUBLIC_API_URL_DEV }}
- name: Deploy to Cloudflare
id: deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
command: pages deploy --branch=${{ env.BRANCH_NAME }}
outputs:
preview-url: ${{ github.ref_name == 'prod' && 'https://www.daoedu.tw/' || steps.deploy.outputs.pages-deployment-alias-url }}
cmd-output: ${{ steps.deploy.outputs.command-output }}
send_result:
name: Send Result
runs-on: ubuntu-latest
needs: build_and_deploy
if: always()
steps:
- name: Git checkout
uses: actions/checkout@v4
- name: Send Build and Deploy Failed Notification
if: ${{ needs.build_and_deploy.result == 'failure' }}
uses: ./.github/actions/notification
with:
TYPE: failure
TITLE: "❌ Build and Deploy Failed"
DESCRIPTION: "${{ needs.build_and_deploy.outputs.cmd-output }}"
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Send Build Succeeded Notification
if: ${{ needs.build_and_deploy.result == 'success' }}
uses: ./.github/actions/notification
with:
TYPE: success
TITLE: "✅ Build Succeeded"
DESCRIPTION: "Preview URL: ${{ needs.build_and_deploy.outputs.preview-url }}"
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}