AnyBot/docs/release.md

4.9 KiB
Raw Blame History

發行

自己打包

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 會自動建立;重建時會換掉同名的檔案)。

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,下載後核對 .sha256):
    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 時再建一次):
    docker build -t anybot-builder:22.04 -f deploy/ci/Dockerfile.linux deploy/ci
    
  4. 設定和註冊:
    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 使用者服務):
    # ~/.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
    
    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 上:

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 開發者帳號。