ci: avoid remote actions in cross build
This commit is contained in:
@@ -20,14 +20,26 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
run: |
|
||||
set -euo pipefail
|
||||
dnf install -y git rsync
|
||||
REPO_URL="${GITHUB_SERVER_URL:-https://git.luochen570.cn}/${GITHUB_REPOSITORY}.git"
|
||||
TOKEN="${GITHUB_TOKEN:-${GITEA_TOKEN:-}}"
|
||||
if [ -n "$TOKEN" ]; then
|
||||
git -c http.extraHeader="Authorization: token ${TOKEN}" \
|
||||
clone --depth 1 --branch "${GITHUB_REF_NAME:-main}" "$REPO_URL" source
|
||||
else
|
||||
git clone --depth 1 --branch "${GITHUB_REF_NAME:-main}" "$REPO_URL" source
|
||||
fi
|
||||
rsync -a --delete source/ ./
|
||||
rm -rf source
|
||||
|
||||
- name: Install cross build dependencies
|
||||
run: |
|
||||
set -euo pipefail
|
||||
dnf install -y \
|
||||
git \
|
||||
cmake \
|
||||
curl \
|
||||
ninja-build \
|
||||
p7zip \
|
||||
p7zip-plugins \
|
||||
@@ -106,11 +118,20 @@ jobs:
|
||||
7z l dist-windows-cross/chengnan-windows-x86_64-cross.zip | grep 'chengnan.exe'
|
||||
7z l dist-windows-cross/chengnan-windows-x86_64-cross.zip | grep 'platforms/'
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: chengnan-windows-x86_64-cross
|
||||
path: |
|
||||
dist-windows-cross/chengnan-windows-x86_64-cross.zip
|
||||
dist-windows-cross/chengnan-windows-x86_64-cross.zip.sha256
|
||||
if-no-files-found: error
|
||||
- name: Upload package to Gitea Packages
|
||||
run: |
|
||||
set -euo pipefail
|
||||
PACKAGE_NAME="chengnan-windows-x86_64-cross"
|
||||
VERSION="${GITHUB_SHA:-manual}"
|
||||
VERSION="${VERSION:0:10}"
|
||||
OWNER="${GITHUB_REPOSITORY%%/*}"
|
||||
API_BASE="${GITHUB_SERVER_URL:-https://git.luochen570.cn}/api/packages/${OWNER}/generic/chengnan/${VERSION}"
|
||||
TOKEN="${GITHUB_TOKEN:-${GITEA_TOKEN:-}}"
|
||||
test -n "$TOKEN"
|
||||
curl --fail --location --user "${GITHUB_ACTOR:-luochen570}:${TOKEN}" \
|
||||
--upload-file "dist-windows-cross/${PACKAGE_NAME}.zip" \
|
||||
"${API_BASE}/${PACKAGE_NAME}.zip"
|
||||
curl --fail --location --user "${GITHUB_ACTOR:-luochen570}:${TOKEN}" \
|
||||
--upload-file "dist-windows-cross/${PACKAGE_NAME}.zip.sha256" \
|
||||
"${API_BASE}/${PACKAGE_NAME}.zip.sha256"
|
||||
echo "Package uploaded to: ${API_BASE}/"
|
||||
|
||||
38
README.md
38
README.md
@@ -43,7 +43,8 @@ chengnan 是一个面向 Windows 的图片查看器 / 简单图像处理应用
|
||||
```text
|
||||
chengnan/
|
||||
├── .gitea/workflows/
|
||||
│ └── build-windows-release.yml # Windows 构建与发布工作流
|
||||
│ ├── build-windows-cross-linux.yml # Linux Runner 交叉编译 Windows 发布包
|
||||
│ └── build-windows-release.yml # Windows Runner 原生构建备用工作流
|
||||
├── app/
|
||||
│ ├── include/ # 头文件
|
||||
│ └── src/ # 源文件
|
||||
@@ -54,18 +55,37 @@ chengnan/
|
||||
|
||||
## 构建与发布
|
||||
|
||||
本项目不在仓库中保存编译工具或第三方二进制依赖。所有构建工作都在 `.gitea/workflows/build-windows-release.yml` 中完成。
|
||||
本项目不在仓库中保存编译工具或第三方二进制依赖。所有构建工作都在 Gitea Actions 工作流中完成。
|
||||
|
||||
工作流会在 Windows Runner 中临时完成以下步骤:
|
||||
当前优先使用 `.gitea/workflows/build-windows-cross-linux.yml`:在自建 `9950x` Linux Runner 的 Fedora 41 容器中,通过 MinGW-w64 交叉编译生成 Windows x86_64 发布包。`.gitea/workflows/build-windows-release.yml` 保留为 Windows Runner 原生构建备用工作流。
|
||||
|
||||
交叉编译工作流会临时完成以下步骤:
|
||||
|
||||
1. 拉取源码
|
||||
2. 安装 Windows 构建环境和依赖
|
||||
2. 安装 Fedora / MinGW-w64 构建环境和依赖
|
||||
3. 配置 CMake
|
||||
4. 编译 Release 版本
|
||||
5. 部署 Qt / OpenCV / MinGW 运行时依赖
|
||||
5. 收集 Qt / OpenCV / MinGW 运行时依赖
|
||||
6. 打包 Windows 发布包
|
||||
7. 生成 SHA256 校验文件
|
||||
8. 上传构建产物
|
||||
8. 上传发布包到 Gitea Packages
|
||||
|
||||
## 编译工具链版本
|
||||
|
||||
交叉编译工作流固定使用以下环境和包版本:
|
||||
|
||||
| 组件 | 版本 |
|
||||
| --- | --- |
|
||||
| Runner 标签 | `9950x` |
|
||||
| 容器镜像 | `fedora:41` |
|
||||
| C++ 语言标准 | `C++17` |
|
||||
| MinGW-w64 GCC C++ | `mingw64-gcc-c++ 14.2.1-3.fc41` |
|
||||
| CMake | `cmake 3.28.3-7.fc41` |
|
||||
| Ninja | `ninja-build 1.12.1-3.fc41` |
|
||||
| Qt 6 Base | `mingw64-qt6-qtbase 6.7.2-3.fc41` |
|
||||
| OpenCV | `mingw64-opencv 4.10.0-1.fc41` |
|
||||
|
||||
版本来源为 Fedora 41 `Everything/x86_64` 仓库元数据;构建时由工作流临时安装,不提交到源码仓库。
|
||||
|
||||
触发方式:
|
||||
|
||||
@@ -77,8 +97,8 @@ chengnan/
|
||||
构建产物:
|
||||
|
||||
```text
|
||||
chengnan-windows-x86_64.zip
|
||||
chengnan-windows-x86_64.zip.sha256
|
||||
chengnan-windows-x86_64-cross.zip
|
||||
chengnan-windows-x86_64-cross.zip.sha256
|
||||
```
|
||||
|
||||
发布包解压后,双击 `chengnan.exe` 运行。请保留同目录 DLL 和 Qt 插件目录,不要只复制单个 exe。
|
||||
@@ -100,7 +120,7 @@ chengnan-windows-x86_64.zip.sha256
|
||||
- 不提交编译器、CMake、Ninja、Qt、OpenCV、MSYS2、vcpkg 等工具或 SDK
|
||||
- 不提交 `build-*`、`dist-*`、`.exe`、`.dll` 等构建产物
|
||||
- 第三方依赖只在工作流运行期间临时安装
|
||||
- 发布包只作为工作流 artifact 产出,不进入源码仓库
|
||||
- 发布包只作为工作流产物或 Gitea Packages 文件产出,不进入源码仓库
|
||||
|
||||
## 验收标准
|
||||
|
||||
|
||||
Reference in New Issue
Block a user