b43601b4fd
- 新增 scripts/ci/provision-{mac,windows}.sh:幂等预置,按 Flutter 版本
stamp 短路,pipeline 首跑自动 precache + 预热缓存,运行时不再下载 engine
- scripts/ci/_env.sh:抽出共用镜像 env,compile 脚本统一 source
- deploy.yml:build-macos needs build-linux-web,同一 mac runner 串行
执行,避免排队超时;各 build job 加 Provision 前置步骤
- 删除 .gitea/workflows/ci.yml
- backup.yml:暂停定时备份(保留 workflow_dispatch 手动触发)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
134 lines
3.7 KiB
YAML
134 lines
3.7 KiB
YAML
name: Deploy
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v[0-9]*.[0-9]*.[0-9]*'
|
|
|
|
jobs:
|
|
build-linux-web:
|
|
runs-on: mac
|
|
env:
|
|
GOPROXY: https://goproxy.cn,direct
|
|
PUB_HOSTED_URL: https://pub.flutter-io.cn
|
|
FLUTTER_STORAGE_BASE_URL: https://storage.flutter-io.cn
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Provision (idempotent — auto-runs if host not initialized)
|
|
run: sh scripts/ci/provision-mac.sh
|
|
|
|
- name: Compile (Linux backend + Flutter Web)
|
|
run: sh scripts/ci/compile.sh "${{ gitea.ref_name }}"
|
|
|
|
- name: Upload linux-web artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: linux-web
|
|
path: dist/
|
|
|
|
build-macos:
|
|
# Same physical runner as build-linux-web (label: mac, capacity 1). Run them
|
|
# serially via needs so the second job doesn't sit queued and time out.
|
|
needs: build-linux-web
|
|
runs-on: mac
|
|
env:
|
|
PUB_HOSTED_URL: https://pub.flutter-io.cn
|
|
FLUTTER_STORAGE_BASE_URL: https://storage.flutter-io.cn
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Provision (idempotent — auto-runs if host not initialized)
|
|
run: sh scripts/ci/provision-mac.sh
|
|
|
|
- name: Compile (Flutter macOS)
|
|
run: sh scripts/ci/compile-macos.sh "${{ gitea.ref_name }}"
|
|
|
|
- name: Upload macos artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: macos
|
|
path: dist/
|
|
|
|
build-windows:
|
|
runs-on: windows
|
|
env:
|
|
GOPROXY: https://goproxy.cn,direct
|
|
PUB_HOSTED_URL: https://pub.flutter-io.cn
|
|
FLUTTER_STORAGE_BASE_URL: https://storage.flutter-io.cn
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Provision (idempotent — auto-runs if host not initialized)
|
|
shell: bash
|
|
run: sh scripts/ci/provision-windows.sh
|
|
|
|
- name: Compile (Flutter Windows)
|
|
shell: bash
|
|
run: sh scripts/ci/compile-windows.sh "${{ gitea.ref_name }}"
|
|
|
|
- name: Upload windows artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: windows
|
|
path: dist/
|
|
|
|
release-deploy:
|
|
needs: [build-linux-web, build-macos, build-windows]
|
|
runs-on: mac
|
|
env:
|
|
GOPROXY: https://goproxy.cn,direct
|
|
PUB_HOSTED_URL: https://pub.flutter-io.cn
|
|
FLUTTER_STORAGE_BASE_URL: https://storage.flutter-io.cn
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Download linux-web artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: linux-web
|
|
path: dist/
|
|
|
|
- name: Download macos artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: macos
|
|
path: dist/
|
|
|
|
- name: Download windows artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: windows
|
|
path: dist/
|
|
|
|
- name: Test
|
|
run: sh scripts/ci/test.sh
|
|
|
|
- name: Release
|
|
env:
|
|
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
|
|
FORGEJO_URL: ${{ secrets.FORGEJO_URL }}
|
|
GITEA_REPOSITORY: ${{ gitea.repository }}
|
|
run: sh scripts/ci/release.sh "${{ gitea.ref_name }}"
|
|
|
|
- name: Deploy
|
|
env:
|
|
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
|
|
FORGEJO_URL: ${{ secrets.FORGEJO_URL }}
|
|
GITEA_REPOSITORY: ${{ gitea.repository }}
|
|
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }}
|
|
EC2_HOST: ${{ secrets.EC2_HOST }}
|
|
EC2_USER: ${{ secrets.EC2_USER }}
|
|
run: sh scripts/ci/deploy.sh "${{ gitea.ref_name }}"
|
|
|
|
- name: Notify
|
|
if: always()
|
|
env:
|
|
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
|
|
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
|
|
run: sh scripts/ci/notify.sh "${{ gitea.ref_name }}" "${{ job.status }}"
|