77jobs :
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