-
Notifications
You must be signed in to change notification settings - Fork 0
141 lines (121 loc) · 3.86 KB
/
build-n-publish.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
---
name: Build and Deploy
on:
workflow_dispatch:
inputs:
deploy-frontend:
description: "Deploy Frontend"
default: false
type: boolean
deploy-backend:
description: "Deploy Backend"
default: false
type: boolean
update-data:
description: "Update Data"
default: false
type: boolean
push:
branches:
- main
jobs:
setup:
name: Deploy Setup
runs-on: ubuntu-latest
outputs:
frontend-changed: ${{ steps.changes.outputs.frontend-changed }}
data-changed: ${{ steps.changes.outputs.data-changed }}
backend-changed: ${{ steps.changes.outputs.backend-changed }}
steps:
- name: Checkout
uses: actions/[email protected]
- name: Detect Changes
id: changes
run: |
FRONTEND_DIFF=$(git diff --name-only HEAD~1 -- frontend/* | wc -l | xargs)
DATA_DIFF=$(git diff --name-only HEAD~1 -- data/* | wc -l | xargs)
BACKEND_DIFF=$(git diff --name-only HEAD~1 -- backend/* | wc -l | xargs)
if [[ "$FRONTEND_DIFF" == "1" ]]; then
echo "frontend-changed=true" >> $GITHUB_OUTPUT
fi
if [[ "$DATA_DIFF" == "1" ]]; then
echo "data-changed=true" >> $GITHUB_OUTPUT
fi
if [[ "$BACKEND_DIFF" == "1" ]]; then
echo "backend-changed=true" >> $GITHUB_OUTPUT
fi
build-frontend:
name: Build Frontend
if: ${{ needs.setup.outputs.frontend-changed == 'true' || inputs.deploy-frontend }}
needs: [setup]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/[email protected]
- name: Build Site
run: |
cd frontend
npm ci
echo "{}" > src/posts.json
npm run build
- name: Upload Site Artifact
uses: actions/[email protected]
with:
path: frontend/build
deploy-frontend:
name: Deploy Frontend
if: ${{ needs.setup.outputs.frontend-changed == 'true' || inputs.deploy-frontend }}
runs-on: ubuntu-latest
needs:
- setup
- build-frontend
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/[email protected]
build-n-deploy-data:
name: Build Data
if: ${{ needs.setup.outputs.data-changed == 'true' || inputs.update-data }}
needs: [setup]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/[email protected]
- name: Build data
working-directory: data
run: |
npm run build:posts
npm run build:rss
- name: Publish posts to R2
uses: cloudflare/[email protected]
with:
apiToken: ${{ secrets.CF_API_KEY }}
accountId: ${{ secrets.CF_ACCOUNT }}
command: r2 object put flinnlab-blog/posts.json --file ./data/posts.json
- name: Publish RSS Feed to R2
uses: cloudflare/[email protected]
with:
apiToken: ${{ secrets.CF_API_KEY }}
accountId: ${{ secrets.CF_ACCOUNT }}
command: r2 object put flinnlab-blog/rss.xml --file ./data/rss.xml
deploy-backend:
name: Deploy Backend
if: ${{ needs.setup.outputs.backend-changed == 'true' || inputs.deploy-backend }}
needs: [setup]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/[email protected]
- name: Deploy Backend
uses: cloudflare/[email protected]
with:
apiToken: ${{ secrets.CF_API_KEY }}
accountId: ${{ secrets.CF_ACCOUNT }}
workingDirectory: backend
command: deploy --env production