Skip to content

Commit 33ef643

Browse files
authored
feat: incremental deployment (#154)
* feat: incremental deployment * feat: incremental deployment * use --delete and --checksum flag * trigger at PR * do not download previous builds and diff * trigger redeployment * upgrade to ossutil 2.1.0 * use new version of ossutil * remove redundant prefix before diff items * add description for deletion and updates * fix typo * polish up
1 parent 6cc3ad8 commit 33ef643

File tree

1 file changed

+61
-7
lines changed

1 file changed

+61
-7
lines changed

.github/workflows/cd.yml

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ on:
77
jobs:
88
build:
99
runs-on: ubuntu-latest
10+
env:
11+
TOKEN: ${{ secrets.GITHUB_TOKEN }}
12+
REPO: ${{ github.repository }}
13+
ARTIFACT_NAME: build-files
1014
steps:
11-
- uses: actions/checkout@v3
15+
- uses: actions/checkout@v4
1216

1317
- name: Setup Bun
1418
uses: oven-sh/setup-bun@v1
@@ -21,11 +25,39 @@ jobs:
2125
- name: Build
2226
run: bun run build
2327

28+
- name: Download previous build files
29+
run: |
30+
URL="https://api.github.com/repos/$REPO/actions/artifacts"
31+
ARTIFACT_JSON=$(curl -s -H "Authorization: token $TOKEN" \
32+
"$URL?name=$ARTIFACT_NAME&per_page=1")
33+
mkdir prev
34+
if [ "$(echo $ARTIFACT_JSON | jq '.total_count')" -gt 0 ]; then
35+
ARTIFACT_ID=$(echo $ARTIFACT_JSON | jq '.artifacts[0].id')
36+
echo "Downloading artifact ID: $ARTIFACT_ID"
37+
curl -L -H "Authorization: token $TOKEN" \
38+
"$URL/$ARTIFACT_ID/zip" -o artifact.zip
39+
unzip -q artifact.zip -d prev
40+
else
41+
echo "No previous artifacts found"
42+
fi
43+
2444
- name: Upload build files
2545
uses: actions/upload-artifact@v4
2646
with:
2747
name: build-files
2848
path: .vitepress/dist/
49+
retention-days: 90
50+
overwrite: true
51+
52+
- name: Diff artifacts
53+
run: |
54+
rsync -ainc --delete .vitepress/dist/ prev/ | tee diff-list
55+
56+
- name: Upload diff list
57+
uses: actions/upload-artifact@v4
58+
with:
59+
name: diff-list
60+
path: diff-list
2961

3062
deploy:
3163
needs: build
@@ -35,21 +67,43 @@ jobs:
3567
OSS_ACCESS_KEY_ID: ${{ secrets.OSS_ACCESS_KEY_ID }}
3668
OSS_ACCESS_KEY_SECRET: ${{ secrets.OSS_ACCESS_KEY_SECRET }}
3769
OSS_REGION: ${{ secrets.OSS_REGION }}
70+
BUCKET: oss://sustech-application
3871
steps:
3972
- name: Download build files
4073
uses: actions/download-artifact@v4
4174
with:
4275
name: build-files
4376
path: dist/
4477

45-
# see https://help.aliyun.com/zh/oss/developer-reference/ossutil-overview/
78+
# https://help.aliyun.com/zh/oss/developer-reference/ossutil-overview/
4679
- name: Setup ossutil
4780
run: |
48-
curl -o ossutil-2.0.6-beta.01091200-linux-amd64.zip \
49-
https://gosspublic.alicdn.com/ossutil/v2-beta/2.0.6-beta.01091200/ossutil-2.0.6-beta.01091200-linux-amd64.zip
50-
unzip -j ossutil-2.0.6-beta.01091200-linux-amd64.zip
81+
VERSION=2.1.0
82+
FILE_NAME=ossutil-$VERSION-linux-amd64.zip
83+
curl -o $FILE_NAME \
84+
https://gosspublic.alicdn.com/ossutil/v2/$VERSION/$FILE_NAME
85+
unzip -j $FILE_NAME
5186
chmod +x ossutil
5287
./ossutil version
5388
54-
- name: Deploy
55-
run: ./ossutil sync --delete --force dist/ oss://sustech-application/
89+
- name: Download diff list
90+
uses: actions/download-artifact@v4
91+
with:
92+
name: diff-list
93+
path: ./
94+
95+
- name: Deploy - delete files
96+
continue-on-error: true
97+
run: |
98+
echo "======== Files to be deleted... ========"
99+
grep '^\*' diff-list | sed 's/^\*.* //' | tee delete-list
100+
echo "======== End of deletion list ========"
101+
./ossutil rm -rf $BUCKET --files-from delete-list
102+
103+
- name: Deploy - update files
104+
continue-on-error: true
105+
run: |
106+
echo "======== Files to be updated... ========"
107+
grep '^>' diff-list | sed 's/^>.* //' | tee update-list
108+
echo "======== End of update list ========"
109+
./ossutil sync -f dist/ $BUCKET --files-from update-list

0 commit comments

Comments
 (0)