107 lines
4.9 KiB
Markdown
107 lines
4.9 KiB
Markdown
# 發行
|
||
|
||
## 自己打包
|
||
|
||
```sh
|
||
make dist # 版本號取自 git tag(沒有就用 commit 編號)
|
||
make dist VERSION=1.2.0 # 指定版本號
|
||
```
|
||
|
||
| 在哪打包 | 產生 |
|
||
|---|---|
|
||
| Mac | `dist/AnyBot-<版本>-macos-arm64.zip`:AnyBot.app(含圖示,ad hoc 簽章) |
|
||
| Linux | `dist/AnyBot-<版本>-ubuntu-<架構>.tar.gz`:有視窗的版本,`./install.sh` 安裝 |
|
||
| | `dist/AnyBot-<版本>-headless-<架構>.tar.gz`:沒有螢幕的 Linux(手腳或大腦),附 `hands.sh` |
|
||
| | `dist/AnyBot-<版本>-server-<架構>.tar.gz`:帳號伺服器+大腦+HTTPS,用已編好的程式建 Docker 映像,`deploy/server/setup.sh` |
|
||
|
||
Linux 版要在 Ubuntu 22.04(glibc 2.35)上編譯,才能在較新的 Ubuntu、Debian 12 等直接跑;用 `deploy/ci/Dockerfile.linux` 這個環境就是。
|
||
|
||
打包腳本:`deploy/mac/bundle.sh`、`deploy/ci/package-linux.sh`。
|
||
|
||
## 推 tag 自動建置(Gitea Actions)
|
||
|
||
`.gitea/workflows/release.yml`:推一個 `v` 開頭的 tag,兩個 runner 各自建置,把檔案掛到那個 tag 的 Release 上(沒有 Release 會自動建立;重建時會換掉同名的檔案)。
|
||
|
||
```sh
|
||
git tag v1.2.0
|
||
git push origin v1.2.0
|
||
```
|
||
|
||
| 工作 | runner 標籤 | 做什麼 |
|
||
|---|---|---|
|
||
| linux | `anybot-linux` | 在 `anybot-builder:22.04` 容器裡編譯、跑測試、打三個 Linux 包、上傳 |
|
||
| macos | `macos-arm64` | 在 Mac 上直接編譯、做 AnyBot.app、上傳 |
|
||
|
||
上傳用 `secrets.RELEASE_TOKEN`;沒設時用 Gitea 自動給的 token。如果自動的 token 沒有建立 Release 的權限,到 repo › 設定 › Actions › Secrets 加一個 `RELEASE_TOKEN`(有這個 repo 寫入權限的 access token)。
|
||
|
||
### 設定 Linux runner
|
||
|
||
在一台有 Docker 的 Linux(x86_64)上:
|
||
|
||
1. 在 Gitea 打開 Actions(管理員:`app.ini` 的 `[actions] ENABLED = true`),到 repo › 設定 › Actions › Runners › 建立新的 runner,複製註冊權杖。
|
||
2. 安裝 runner([gitea/runner](https://gitea.com/gitea/runner/releases),下載後核對 `.sha256`):
|
||
```sh
|
||
V=5.3.0
|
||
curl -fsSLO https://gitea.com/gitea/runner/releases/download/v$V/gitea-runner-$V-linux-amd64.xz
|
||
curl -fsSLO https://gitea.com/gitea/runner/releases/download/v$V/gitea-runner-$V-linux-amd64.xz.sha256
|
||
sha256sum -c gitea-runner-$V-linux-amd64.xz.sha256 && xz -d gitea-runner-$V-linux-amd64.xz
|
||
install -m 755 gitea-runner-$V-linux-amd64 ~/.local/bin/gitea-runner
|
||
```
|
||
3. 建好建置環境(只要一次;更新 Rust 時再建一次):
|
||
```sh
|
||
docker build -t anybot-builder:22.04 -f deploy/ci/Dockerfile.linux deploy/ci
|
||
```
|
||
4. 設定和註冊:
|
||
```sh
|
||
mkdir -p ~/.config/gitea-runner
|
||
cp deploy/ci/runner-linux.yaml ~/.config/gitea-runner/config.yaml # 檔案路徑裡的使用者名稱照你的改
|
||
cd ~/.config/gitea-runner
|
||
gitea-runner register --no-interactive --instance https://你的-gitea --token 註冊權杖 \
|
||
--name anybot-linux --labels "anybot-linux:docker://anybot-builder:22.04" -c config.yaml
|
||
```
|
||
5. 一直跑(systemd 使用者服務):
|
||
```ini
|
||
# ~/.config/systemd/user/gitea-runner.service
|
||
[Unit]
|
||
Description=Gitea runner (AnyBot releases)
|
||
After=network-online.target docker.service
|
||
|
||
[Service]
|
||
WorkingDirectory=%h/.config/gitea-runner
|
||
ExecStart=%h/.local/bin/gitea-runner daemon -c %h/.config/gitea-runner/config.yaml
|
||
Restart=always
|
||
RestartSec=5
|
||
|
||
[Install]
|
||
WantedBy=default.target
|
||
```
|
||
```sh
|
||
systemctl --user daemon-reload && systemctl --user enable --now gitea-runner
|
||
sudo loginctl enable-linger $USER # 登出後也繼續跑
|
||
```
|
||
|
||
`runner-linux.yaml` 用兩個 Docker 磁碟區保留下載的套件(`anybot-cargo-registry`)和編譯結果(`anybot-ci-target`),之後每次發行只重編有改的部分。
|
||
|
||
### 設定 Mac runner
|
||
|
||
Apple 的 App 只能在 Mac 上編譯。在一台裝好 Rust 和 Xcode Command Line Tools 的 Mac 上:
|
||
|
||
```sh
|
||
V=5.3.0
|
||
curl -fsSLO https://gitea.com/gitea/runner/releases/download/v$V/gitea-runner-$V-darwin-arm64.xz
|
||
curl -fsSLO https://gitea.com/gitea/runner/releases/download/v$V/gitea-runner-$V-darwin-arm64.xz.sha256
|
||
shasum -a 256 -c gitea-runner-$V-darwin-arm64.xz.sha256 && xz -d gitea-runner-$V-darwin-arm64.xz
|
||
install -m 755 gitea-runner-$V-darwin-arm64 ~/.local/bin/gitea-runner
|
||
mkdir -p ~/.config/gitea-runner && cd ~/.config/gitea-runner
|
||
gitea-runner register --no-interactive --instance https://你的-gitea --token 註冊權杖 \
|
||
--name anybot-mac --labels "macos-arm64:host"
|
||
gitea-runner daemon # 或做成 launchd 代理,開機自動執行
|
||
```
|
||
|
||
`host` 表示工作直接在這台 Mac 上跑(不用容器)。編譯結果保留在工作資料夾旁的 `anybot-target/`。
|
||
|
||
### 注意
|
||
|
||
- runner 要連得到 Gitea 的網址(HTTPS),也要能從 GitHub 下載 `actions/checkout`(Gitea 預設的 action 來源)。
|
||
- Mac 版用 ad hoc 簽章,沒有公證;使用者第一次打開要按右鍵 › 打開。要正式簽章和公證需要 Apple 開發者帳號。
|