本文首發于 Anyeの小站,點擊跳轉 獲得更優質的閱讀體驗
前言
貼一段胡話
在用過 應用:靜態網頁服務 之后,事實證明:
總而言之,自動化是一個很令人著迷的東西,擺脫重復繁瑣的工作,解放了雙手的同時更是善待了自己。
簡介
本文將會以 Github Action 結合 Ryan 大佬 的 Halo 插件 應用:靜態網頁服務 來實現自動將 Github 上的開源項目 CorentinTh/it-tools 自動更新同步部署。
原理
- Fork 原項目,有微修需求的在 Fork 后的項目中做出修改
- 為 Fork 的項目添加 Upstream Sync · Actions · GitHub 這一 Action,該 Action 可以實現同步自己的分支和上游分支,并輸出一個是否有新提交的變量
has_new_commits
供我們使用,使用 corn 計劃任務實現定時查詢更新。 - 為項目添加 Actions,在
has_new_commits
或者commits
或者手動觸發的時候執行構建推送(按需添加)。
快速使用(以 it-tools 項目為例)
Fork 我已經修改好的項目 Anyexyz/it-tools ,然后按照 此處 操作。
實現(以 it-tools 項目為例)
Fork 項目
點擊 CorentinTh/it-tools 直達。
對項目源碼進行修改
在這里我對項目做出修改:
- (必要) 修改項目的 web 訪問路徑為
/tools
:
將 vite.config.ts:19
的 process.env.BASE_URL ?? '/';
改為 process.env.BASE_URL ?? '/tools';
- 修改項目的默認訪問語言為中文:
將 src/plugins/i18n.plugin.ts:8
的 en
改為 zh
。
- 其他個性化修改
添加工作流
Deploy to Halo
用于構建并部署到 Halo 靜態網頁服務。
name: Deploy to Haloon:push:branches: [main]repository_dispatch:types: [deploy]workflow_dispatch:jobs:deploy:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v4- uses: pnpm/action-setup@v3with:version: 8- uses: actions/setup-node@v4with:node-version: '20'cache: 'pnpm'- name: Install dependenciesrun: pnpm install- name: Buildrun: pnpm build- name: Deploy to Halorun: |npx halo-static-pages-deploy-cli deploy -e ${{ secrets.ENDPOINT }} -i ${{ secrets.ID }} -t ${{ secrets.PAT }} -f dist
我在這里添加了三個觸發條件:
- 響應
push
事件到main
分支。 - 響應
repository_dispatch
事件,類型為deploy
。 - 手動觸發。
Upstream Sync
用于同步上游 commits 并檢查是否有更新。
name: Upstream Syncpermissions:contents: writeissues: writeactions: writeon:schedule:- cron: '0 * * * *' # 每小時執行一次workflow_dispatch: # 手動觸發jobs:sync_latest_from_upstream:name: Sync latest commits from upstream reporuns-on: ubuntu-latestif: ${{ github.event.repository.fork }}steps:- uses: actions/checkout@v4- name: Clean issue noticeuses: actions-cool/issues-helper@v3with:actions: 'close-issues'labels: '🚨 Sync Fail'- name: Upstream Syncid: syncuses: aormsby/Fork-Sync-With-Upstream-action@v3.4.1with:target_sync_branch: maintarget_repo_token: ${{ secrets.GITHUB_TOKEN }} # 自動生成的 GitHub token,無需手動設置upstream_sync_repo: CorentinTh/it-toolsupstream_sync_branch: maintest_mode: false- name: New commits detected actionif: steps.sync.outputs.has_new_commits == 'true'uses: actions/github-script@v7.0.1with:script: |github.rest.repos.createDispatchEvent({owner: context.repo.owner,repo: context.repo.repo,event_type: 'deploy'})- name: Sync checkif: failure()uses: actions-cool/issues-helper@v3with:actions: 'create-issue'title: '🚨 同步失敗 | Sync Fail'labels: '🚨 Sync Fail'body: |由于上游倉庫的 workflow 文件變更,導致 GitHub 自動暫停了本次自動更新,你需要手動 Sync Fork 一次
觸發條件:
- 每小時自動執行一次
- 手動觸發
檢測新的提交
- name: New commits detected actionif: steps.sync.outputs.has_new_commits == 'true'uses: actions/github-script@v7.0.1with:script: |github.rest.repos.createDispatchEvent({owner: context.repo.owner,repo: context.repo.repo,event_type: 'deploy'})
如果檢測到有新提交,這一步使用 actions/github-script 動作觸發一個名為deploy
的事件,用于調用 Deploy to Halo
進行部署。
使用
創建一個靜態網頁服務
在已經安裝 應用:靜態網頁服務 插件的前提下,添加一個靜態網頁服務,目錄填寫 tools
(與 Github 項目配置相同)
創建后會生成一個 ID ,保存它。
申請個人令牌
在 Halo 的 UC 頁申請一個 個人令牌
,權限選擇 靜態項目 - 項目資源上傳。
保存該令牌。
Github 倉庫配置
在該倉庫的 Github Setting 下找到 Secrets and variables
,為 Actions 提供變量,添加 Repository secrets
,如下:
Name | Secret | Example |
---|---|---|
ENDPOINT | Halo API endpoint | https://demo.halo.run |
ID | Static Page ID | project-FRAuW |
PAT | Personal access token | pat_abcd |
保存,可以通過手動觸發的方式來測試是否可用。