|
1 | 1 | # Native ARM64 Workflow Explanation |
2 | 2 |
|
3 | | -This branch contains a fresh GitHub Actions workflow intended to build qBittorrent as a native Windows ARM64 executable using the MSVC ARM64 cross toolchain on GitHub's standard x64 Windows runner. |
| 3 | +This repository uses one CI path: a native Windows ARM64 build of qBittorrent using MSVC ARM64 cross tools on GitHub Actions. |
4 | 4 |
|
5 | | -## Why this workflow exists |
| 5 | +Workflow file: |
6 | 6 |
|
7 | | -The older workflow evolved through many fixes and experiments. This file is a clean rebuild that keeps the useful parts: |
| 7 | +- .github/workflows/ci_windows_arm64_native.yaml |
8 | 8 |
|
9 | | -- one visible version block |
10 | | -- one consistent vcpkg triplet |
11 | | -- a single MSVC-based ARM64 build path |
12 | | -- explicit release and prerelease publishing rules |
| 9 | +## Current repository baseline |
13 | 10 |
|
14 | | -The new workflow file is: |
| 11 | +The repo is intentionally minimal: |
15 | 12 |
|
16 | | -- `.github/workflows/ci_windows_arm64_native.yaml` |
| 13 | +- one default branch: main |
| 14 | +- one active workflow: ci_windows_arm64_native.yaml |
| 15 | +- one build strategy: MSVC-based ARM64 native executable |
17 | 16 |
|
18 | | -## How the workflow is organized |
| 17 | +Legacy workflows and MinGW helper files were removed to reduce confusion and maintenance overhead. |
19 | 18 |
|
20 | | -### 1. Triggers |
| 19 | +## Trigger model |
21 | 20 |
|
22 | | -The workflow runs when: |
| 21 | +The workflow runs on: |
23 | 22 |
|
24 | | -- you push to branch `main` |
25 | | -- you push a tag like `v5.2.3` |
26 | | -- you start it manually with `workflow_dispatch` |
| 23 | +- push to main |
| 24 | +- push of tags matching v* |
| 25 | +- manual workflow_dispatch |
27 | 26 |
|
28 | | -### 2. Version block |
| 27 | +This supports continuous prerelease builds from main and stable release builds from version tags. |
29 | 28 |
|
30 | | -At the top of the job you will see: |
| 29 | +## Version control surface |
31 | 30 |
|
32 | | -```yaml |
33 | | -boost_version: "1.91.0" |
34 | | -libt_version: "2.0.13" |
35 | | -qbt_version: "5.2.3" |
36 | | -qt_version: "6.10.3" |
37 | | -``` |
| 31 | +The main values to update for new builds are in the workflow env block: |
38 | 32 |
|
39 | | -This is the main update surface. If you want to build a newer qBittorrent or Qt version later, this is the first place you edit. |
| 33 | +- boost_version |
| 34 | +- libt_version |
| 35 | +- qbt_version |
| 36 | +- qt_version |
| 37 | +- vcpkg_triplet |
40 | 38 |
|
41 | | -### 3. Toolchain setup |
| 39 | +Keeping versions centralized makes upgrades predictable. |
42 | 40 |
|
43 | | -The workflow uses: |
| 41 | +## Toolchain and dependency model |
44 | 42 |
|
45 | | -- `ilammy/msvc-dev-cmd` to load the MSVC ARM64 cross compiler |
46 | | -- `lukka/run-vcpkg` to use the preinstalled vcpkg tree on the runner |
47 | | -- `ninja` for faster builds |
| 43 | +The job uses: |
48 | 44 |
|
49 | | -Important detail: the build still happens on GitHub's normal x64 Windows machine, but the compiler target is ARM64, so the produced `qbittorrent.exe` is a native ARM64 executable. |
| 45 | +- ilammy/msvc-dev-cmd for ARM64 cross compilation |
| 46 | +- lukka/run-vcpkg with a pinned baseline commit |
| 47 | +- Ninja for CMake builds |
50 | 48 |
|
51 | | -### 4. Dependency installation |
| 49 | +All dependency resolution is aligned to one triplet: |
52 | 50 |
|
53 | | -The workflow builds against one vcpkg triplet only: |
| 51 | +- arm64-windows-static-release |
54 | 52 |
|
55 | | -- `arm64-windows-static-release` |
| 53 | +That triplet is used consistently for OpenSSL, zlib, Qt configuration, libtorrent, and qBittorrent. |
56 | 54 |
|
57 | | -That triplet is used for: |
| 55 | +## Build stages |
58 | 56 |
|
59 | | -- OpenSSL |
60 | | -- zlib |
61 | | -- Qt configuration |
62 | | -- libtorrent |
63 | | -- qBittorrent |
| 57 | +1. Setup compiler and tools |
| 58 | +2. Initialize vcpkg and install dependencies |
| 59 | +3. Build Qt target libraries for ARM64 |
| 60 | +4. Build libtorrent for ARM64 |
| 61 | +5. Build qBittorrent |
| 62 | +6. Package artifact |
| 63 | +7. Publish artifact/release |
64 | 64 |
|
65 | | -The goal is to avoid mixing dependency models. |
| 65 | +## Packaging and publishing |
66 | 66 |
|
67 | | -### 5. Qt build |
| 67 | +Packaged files include: |
68 | 68 |
|
69 | | -The workflow installs: |
| 69 | +- qbittorrent.exe |
| 70 | +- dist/windows/qt.conf from qBittorrent sources |
70 | 71 |
|
71 | | -- host Qt tools for x64 from `install-qt-action` |
72 | | -- target Qt for ARM64 by building Qt from source |
| 72 | +Publishing rules: |
73 | 73 |
|
74 | | -The host Qt is needed because the build system runs helper tools on the x64 runner while compiling target libraries for ARM64. |
| 74 | +- pushes to main create prerelease artifacts |
| 75 | +- v* tags create release artifacts |
75 | 76 |
|
76 | | -### 6. libtorrent build |
| 77 | +## Notes |
77 | 78 |
|
78 | | -libtorrent is built from source with the same vcpkg triplet and the same ARM64 target model as qBittorrent. |
79 | | - |
80 | | -### 7. qBittorrent build |
81 | | - |
82 | | -qBittorrent is built from the official source tarball for the selected `qbt_version`. |
83 | | - |
84 | | -One compatibility hotfix is still used: |
85 | | - |
86 | | -- the workflow prepends a small `find_package(OpenSSL)` and `find_package(ZLIB)` block into qBittorrent's `CheckPackages.cmake` |
87 | | - |
88 | | -That hotfix is kept because it was already needed in your existing working builds to make imported CMake targets visible consistently. |
89 | | - |
90 | | -### 8. Packaging |
91 | | - |
92 | | -The workflow currently packages: |
93 | | - |
94 | | -- `qbittorrent.exe` |
95 | | -- qBittorrent's own `dist/windows/qt.conf` |
96 | | - |
97 | | -This matches the packaging pattern already used in the existing workflow. |
98 | | - |
99 | | -### 9. Publishing behavior |
100 | | - |
101 | | -There are two publishing modes: |
102 | | - |
103 | | -- tagged releases for `v*` tags |
104 | | -- prereleases for pushes to `main` |
105 | | - |
106 | | -That means every push on `main` can produce a downloadable prerelease artifact without touching version tags. |
107 | | - |
108 | | -## Repository baseline after cleanup |
109 | | - |
110 | | -For this new native MSVC workflow, the key files are: |
111 | | - |
112 | | -- `.github/workflows/ci_windows_arm64_native.yaml` |
113 | | -- `README.md` |
114 | | -- `NATIVE_WORKFLOW_EXPLANATION.md` |
115 | | - |
116 | | -The following legacy files are now removed from this repository baseline: |
117 | | - |
118 | | -- `.github/workflows/ci_windows_arm64.yaml` |
119 | | -- `.github/workflows/ci_mingw_arm64.yaml` |
120 | | -- `build.sh` |
121 | | -- `Toolchain-llvm-mingw.cmake` |
122 | | -- `patches/` |
123 | | -- root-level `qt.conf` |
124 | | - |
125 | | -## Important caution |
126 | | - |
127 | | -This new workflow can make the build logic cleaner, but it may not fix an upstream qBittorrent runtime regression by itself. If qBittorrent 5.2.3 still crashes after startup, that may still be an application-level issue rather than a workflow issue. |
| 79 | +- This cleanup simplifies CI maintenance. |
| 80 | +- Runtime issues in a specific qBittorrent version may still require upstream fixes and are not always CI-related. |
0 commit comments