Author SHA1 Message Date
github-actions[bot] 07e9bb622e Update LATEST_VERSION to ff8d5c1 [skip ci] 2026-07-03 14:42:18 +00:00
github-actions[bot] 068432ae4a Update LATEST_VERSION_MACOS to ff8d5c13f [skip ci] 2026-07-03 14:38:29 +00:00
cheezwiz7899andGitHub bf564e9437 Merge pull request #54 from Splaser/macos-sdl3-workflow-fix 2026-07-03 23:37:09 +10:00
bdm 9f329a5d67 Fix macOS SDL3 workflow dependency 2026-07-03 20:58:21 +08:00
github-actions[bot] 19523efdee Update LATEST_VERSION to a38cf86 [skip ci] 2026-07-03 04:43:44 +00:00
github-actions[bot] 06fbda4fb9 Update LATEST_VERSION_MACOS to a38cf86fa [skip ci] 2026-07-03 04:33:29 +00:00
cheezwiz7899andGitHub 89ddaf92c4 Merge pull request #53 from citron-neo/revert-52-cpm-linux2
Revert "ci(linux): migrate CI builds to build-citron-linux.sh"
2026-07-03 14:17:43 +10:00
cheezwiz7899andGitHub 55ddf574e8 Revert "ci(linux): migrate CI builds to build-citron-linux.sh" 2026-07-03 14:15:25 +10:00
github-actions[bot] f306685201 Update LATEST_VERSION to ca6d997 [skip ci] 2026-07-02 22:10:36 +00:00
github-actions[bot] bc07c8e6da Update LATEST_VERSION_MACOS to ca6d997c1 [skip ci] 2026-07-02 22:00:36 +00:00
cheezwiz7899andGitHub 2bd8b164ab Merge pull request #52 from cheezwiz7899/cpm-linux2
ci(linux): migrate CI builds to build-citron-linux.sh
2026-07-03 07:36:04 +10:00
cheezwiz7899 d17f84c0f9 ci(linux): remove Arch container, standardize workflows, fix credential exposure
- Remove Arch container and pacman steps from nightly/stable Linux jobs;
  all three workflows now run identically on the Ubuntu runner
- Switch gamemode install from pacman to apt in nightly/stable
- Add persist-credentials: false to Checkout CI Scripts in all three workflows
2026-07-02 13:21:02 +10:00
cheezwiz7899 46e01b49cc Merge remote-tracking branch 'origin/main' into cpm-linux2 2026-07-02 10:34:46 +10:00
cheezwiz7899 e064d15557 ci(linux): migrate to build-citron-linux.sh, remove Arch container, and clean up obsolete scripts
build-linux.yml (all three workflows: build-linux, build_nightly, build_stable):
- Replace per-workflow build/package shell scripts (build-citron.sh,
  get-dependencies.sh, package-citron.sh) with a unified call to
  build-citron-linux.sh from the emulator repo, which handles dependency
  setup, CPM build, and AppImage/tar.zst packaging in one script
- Remove Arch Linux container (ghcr.io/pkgforge-dev/archlinux:latest)
  from the linux build job; the job now runs directly on the Ubuntu
  GitHub-hosted runner, eliminating the nested container layer
- Remove the 'Install Git' step (pacman -Syu git) that was only needed
  inside the Arch container
- Remove the 'Install Packaging Dependencies' step (pacman gamemode)
  that was only needed inside the Arch container; gamemode handling is
  now delegated to build-citron-linux.sh

Deleted files:
- build-citron.sh: Arch-based build script replaced by build-citron-linux.sh
- get-dependencies.sh: Arch pacman dependency installer, superseded
- package-citron.sh: Arch-based AppImage packager, superseded
- PKGBUILD: unused Arch Linux package build descriptor

README.md:
- Update title and badge references from 'Citron' to 'Citron Neo'
- Rewrite AppImage/tar.zst section to mention tar.zst artifact and
  updated uruntime fuse3 compatibility notes
- Replace star history HTML block with inline image badge
- Replace bullet lists with dash lists for consistent markdown style
- Remove 'raison d'etre' image block and Pkgforge attribution section
2026-07-02 10:30:25 +10:00
github-actions[bot] 3f2efad127 Update LATEST_VERSION to 3bfc60c [skip ci] 2026-07-01 15:12:47 +00:00
github-actions[bot] d1eb8376ac Update LATEST_VERSION_MACOS to 3bfc60c8a [skip ci] 2026-07-01 15:09:23 +00:00
github-actions[bot] 93125444bf Update LATEST_VERSION to 2b8c732 [skip ci] 2026-06-30 14:55:06 +00:00
github-actions[bot] 8fa1a1f979 Update LATEST_VERSION_MACOS to 2b8c73237 [skip ci] 2026-06-30 14:53:31 +00:00
github-actions[bot] 2831852d93 Update LATEST_VERSION to eaceaa6 [skip ci] 2026-06-29 16:23:35 +00:00
github-actions[bot] 8fb0d15334 Update LATEST_VERSION_MACOS to eaceaa6a9 [skip ci] 2026-06-29 16:10:03 +00:00
github-actions[bot] beb44f3281 Update LATEST_VERSION to 97257ab [skip ci] 2026-06-28 14:25:57 +00:00
github-actions[bot] 350f6f2755 Update LATEST_VERSION_MACOS to 97257ab1a [skip ci] 2026-06-28 14:19:32 +00:00
cheezwiz7899andGitHub da0e74d875 Merge pull request #50 from cheezwiz7899/android-fix
fix(android): enable OpenSSL in gradlew cmake args
2026-06-28 20:35:30 +10:00
cheezwiz7899 782b68f541 fix(android): enable OpenSSL in gradlew cmake args
Follows emulator-side changes in citron-neo/emulator commit 198b764e2e751bcc8a9740c404425347b9b7b790 that now
provide OpenSSL via vcpkg for Android and default ENABLE_OPENSSL=ON.
The previous -DENABLE_OPENSSL=OFF in both the nightly and stable
gradlew invocations overrode the source default and would have left
OpenSSL::Crypto unresolved at link time.

Updated both assembleMainlineRelease invocations:
  -DENABLE_OPENSSL=OFF → -DENABLE_OPENSSL=ON
2026-06-28 18:19:49 +10:00
cheezwiz7899andGitHub 4c443effb6 Update get-dependencies.sh
delete mbedtls2... because arch removed it from the repo
2026-06-28 08:44:53 +10:00
github-actions[bot] 33401e2584 Update LATEST_VERSION to a89fbff2d [skip ci] 2026-06-27 14:28:37 +00:00
github-actions[bot] 7536fe6717 Update LATEST_VERSION_MACOS to a89fbff2d [skip ci] 2026-06-27 14:10:10 +00:00
github-actions[bot] 2c144827a6 Update LATEST_VERSION to 44fedcc47 [skip ci] 2026-06-26 15:02:52 +00:00
github-actions[bot] d8b4d717d9 Update LATEST_VERSION_MACOS to 44fedcc47 [skip ci] 2026-06-26 14:53:33 +00:00
github-actions[bot] 7e635568ea Update LATEST_VERSION to 540272b7e [skip ci] 2026-06-25 15:11:14 +00:00
github-actions[bot] b7141875a1 Update LATEST_VERSION_MACOS to 540272b7e [skip ci] 2026-06-25 14:57:41 +00:00
github-actions[bot] 3d695038ce Update LATEST_VERSION to ff5d14a69 [skip ci] 2026-06-24 15:12:22 +00:00
github-actions[bot] 1dd7de390d Update LATEST_VERSION_MACOS to ff5d14a69 [skip ci] 2026-06-24 15:03:16 +00:00
CollectingWandGitHub c1d75d2859 Merge pull request #49 from Samueru-sama/patch-3
add `patchelf`
2026-06-24 00:09:39 -04:00
SamuelandGitHub 0bac88677a add patchelf 2026-06-16 09:49:52 -04:00
github-actions[bot] 832b3b5871 Update LATEST_VERSION to 7eac81ab4 [skip ci] 2026-06-13 14:39:28 +00:00
github-actions[bot] 6205477d73 Update LATEST_VERSION_MACOS to 7eac81ab4 [skip ci] 2026-06-13 14:28:13 +00:00
github-actions[bot] 7552e53a1c Update LATEST_VERSION to c3eb581 [skip ci] 2026-06-11 16:35:30 +00:00
github-actions[bot] 8fcb6b54eb Update LATEST_VERSION_MACOS to c3eb58143 [skip ci] 2026-06-11 16:34:51 +00:00
github-actions[bot] 2cf0e35199 Update LATEST_VERSION to 16bff11 [skip ci] 2026-06-02 17:08:40 +00:00
github-actions[bot] 4a9c70b2b2 Update LATEST_VERSION_MACOS to 16bff1183 [skip ci] 2026-06-02 17:03:09 +00:00
github-actions[bot] 8376913e04 Update LATEST_VERSION to 05e7127 [skip ci] 2026-05-20 16:02:23 +00:00
github-actions[bot] 5ccb3d2c56 Update LATEST_VERSION_MACOS to 05e71276f [skip ci] 2026-05-20 15:52:41 +00:00
github-actions[bot] 922258e2f5 Update LATEST_VERSION to 691c3d6 [skip ci] 2026-05-20 06:49:37 +00:00
github-actions[bot] acc30b07fa Update LATEST_VERSION_MACOS to 691c3d6b1 [skip ci] 2026-05-20 06:41:45 +00:00
github-actions[bot] 3ab9cae671 Update LATEST_VERSION to c90bfad [skip ci] 2026-05-19 16:00:52 +00:00
github-actions[bot] 546e246cdc Update LATEST_VERSION_MACOS to c90bfad9c [skip ci] 2026-05-19 15:57:34 +00:00
github-actions[bot] d64b16040c Update LATEST_VERSION to fab192f [skip ci] 2026-05-19 02:49:46 +00:00
github-actions[bot] ddd414e289 Update LATEST_VERSION_MACOS to fab192f77 [skip ci] 2026-05-19 02:43:37 +00:00
github-actions[bot] 2843c3e756 Update LATEST_VERSION to fde6cba [skip ci] 2026-05-18 16:08:53 +00:00
github-actions[bot] 3542ed262f Update LATEST_VERSION_MACOS to fde6cba55 [skip ci] 2026-05-18 16:06:32 +00:00
github-actions[bot] fcc721ed73 Update LATEST_VERSION to 6d0d9b5 [skip ci] 2026-05-18 01:49:28 +00:00
github-actions[bot] b94fc3b8cf Update LATEST_VERSION_MACOS to 6d0d9b5d5 [skip ci] 2026-05-18 01:41:50 +00:00
github-actions[bot] 65faa59a67 Update LATEST_VERSION to 1e3fbe9 [skip ci] 2026-05-17 21:33:52 +00:00
github-actions[bot] 2fc95bdbe7 Update LATEST_VERSION_MACOS to 1e3fbe927 [skip ci] 2026-05-17 21:24:38 +00:00
github-actions[bot] 9b1698cfd7 Update LATEST_VERSION to 6bd30f6 [skip ci] 2026-05-15 14:44:14 +00:00
github-actions[bot] bdc2c7e206 Update LATEST_VERSION_MACOS to 6bd30f6e2 [skip ci] 2026-05-15 14:35:30 +00:00
github-actions[bot] 14ca21772c Update LATEST_VERSION to be8356d [skip ci] 2026-05-15 03:44:33 +00:00
github-actions[bot] 286bca765f Update LATEST_VERSION_MACOS to be8356dc5 [skip ci] 2026-05-15 03:36:21 +00:00
github-actions[bot] 718107d6cc Update LATEST_VERSION to 09d1c65 [skip ci] 2026-05-14 14:51:28 +00:00
github-actions[bot] 3661901b95 Update LATEST_VERSION_MACOS to 09d1c65be [skip ci] 2026-05-14 14:50:36 +00:00
github-actions[bot] e1717d7ec3 Update LATEST_VERSION to d02a93e [skip ci] 2026-05-12 15:01:57 +00:00
github-actions[bot] b2e4f581d3 Update LATEST_VERSION to d02a93ef2 [skip ci] 2026-05-12 07:17:14 +00:00
github-actions[bot] 35138e6506 Update LATEST_VERSION_MACOS to d02a93ef2 [skip ci] 2026-05-12 07:07:31 +00:00
github-actions[bot] e77f5f3d6c Update LATEST_VERSION to 577f0c8 [skip ci] 2026-05-11 15:47:34 +00:00
github-actions[bot] d5f7b2a0f5 Update LATEST_VERSION_MACOS to 577f0c875 [skip ci] 2026-05-11 15:45:16 +00:00
github-actions[bot] 97446e1b7b Update LATEST_VERSION to f282c44 [skip ci] 2026-05-11 08:13:27 +00:00
github-actions[bot] 35eccd1637 Update LATEST_VERSION_MACOS to f282c4450 [skip ci] 2026-05-11 08:03:31 +00:00
collecting 2c0e0a3262 Nuke MSVC 2026-05-11 03:49:32 -04:00
github-actions[bot] 0266b1a4d0 Update LATEST_VERSION to ee04d39 [skip ci] 2026-05-09 07:41:13 +00:00
github-actions[bot] c5afb61df4 Update LATEST_VERSION_MACOS to ee04d39d7 [skip ci] 2026-05-09 07:31:20 +00:00
github-actions[bot] e4135afbf8 Update LATEST_VERSION to 5d4bb65 [skip ci] 2026-05-07 08:26:08 +00:00
github-actions[bot] 06922e0e14 Update LATEST_VERSION_MACOS to 5d4bb6539 [skip ci] 2026-05-07 08:15:48 +00:00
github-actions[bot] 20e784f943 Update LATEST_VERSION_MACOS to 2126c7c8a [skip ci] 2026-05-07 02:39:39 +00:00
github-actions[bot] b82a439938 Update LATEST_VERSION to a65fdc6 [skip ci] 2026-05-07 02:23:11 +00:00
github-actions[bot] 065ea1d717 Update LATEST_VERSION to 5211aa0 [skip ci] 2026-05-06 14:53:34 +00:00
github-actions[bot] e1ca884e44 Update LATEST_VERSION_MACOS to 5211aa066 [skip ci] 2026-05-06 14:43:57 +00:00
github-actions[bot] 8a616c2de8 Update LATEST_VERSION to 4a45214 [skip ci] 2026-05-04 14:41:36 +00:00
github-actions[bot] 19a590fd09 Update LATEST_VERSION_MACOS to 4a45214af [skip ci] 2026-05-04 14:39:59 +00:00
github-actions[bot] 9efb04ca27 Update LATEST_VERSION to b1ba68e [skip ci] 2026-05-04 00:04:21 +00:00
github-actions[bot] af56667e41 Update LATEST_VERSION_MACOS to b1ba68ef6 [skip ci] 2026-05-03 23:55:42 +00:00
github-actions[bot] 08f3f29b89 Update LATEST_VERSION to 8538ff1fd [skip ci] 2026-05-03 16:11:29 +00:00
CollectingWandGitHub 5e09b8dc0f Merge pull request #34 from Samueru-sama/patch-2
add `icu-mini`
2026-05-03 11:05:38 -04:00
github-actions[bot] 433f010228 Update LATEST_VERSION to 41360d9 [skip ci] 2026-05-03 14:45:52 +00:00
github-actions[bot] a4c5a4b2fe Update LATEST_VERSION_MACOS to 41360d9c0 [skip ci] 2026-05-03 14:37:55 +00:00
github-actions[bot] e7523e69ea Update LATEST_VERSION to fd516a7 [skip ci] 2026-05-03 13:48:37 +00:00
github-actions[bot] ae32f5184b Update LATEST_VERSION_MACOS to fd516a709 [skip ci] 2026-05-03 13:38:08 +00:00
github-actions[bot] 91302faa01 Update LATEST_VERSION to cf61299 [skip ci] 2026-05-01 14:04:23 +00:00
github-actions[bot] 5408e498a2 Update LATEST_VERSION to 3d62c55 [skip ci] 2026-05-01 12:11:03 +00:00
github-actions[bot] 47e4d8083a Update LATEST_VERSION_MACOS to cf6129959 [skip ci] 2026-05-01 11:58:02 +00:00
github-actions[bot] 7e776a1125 Update LATEST_VERSION to e153c0f [skip ci] 2026-04-30 20:29:23 +00:00
github-actions[bot] 148b6a2e9a Update LATEST_VERSION_MACOS to e153c0f14 [skip ci] 2026-04-30 20:25:10 +00:00
github-actions[bot] 96412ddb42 Update LATEST_VERSION to 7b0a87b [skip ci] 2026-04-30 09:14:07 +00:00
github-actions[bot] 03c5de382d Update LATEST_VERSION_MACOS to 7b0a87b2e [skip ci] 2026-04-30 09:10:07 +00:00
SamuelandGitHub 9c7c15609e add icu-mini 2026-04-29 10:02:49 -04:00
github-actions[bot] 4741c828eb Update LATEST_VERSION to 7b679b9 [skip ci] 2026-04-29 09:33:22 +00:00
github-actions[bot] 27b181565e Update LATEST_VERSION_MACOS to 7b679b992 [skip ci] 2026-04-29 09:28:09 +00:00
github-actions[bot] 19b014c262 Update LATEST_VERSION to 20a8ad6 [skip ci] 2026-04-29 08:11:34 +00:00
github-actions[bot] feac6825d4 Update LATEST_VERSION_MACOS to 20a8ad6e3 [skip ci] 2026-04-29 08:07:06 +00:00
github-actions[bot] 6f7155deb9 Update LATEST_VERSION to 1b85657 [skip ci] 2026-04-29 04:27:37 +00:00
github-actions[bot] ad8df019a9 Update LATEST_VERSION_MACOS to 1b85657b1 [skip ci] 2026-04-29 04:19:05 +00:00
github-actions[bot] 4c032dca46 Update LATEST_VERSION to 86db2178a [skip ci] 2026-04-28 09:28:36 +00:00
github-actions[bot] ea03b02fa4 Update LATEST_VERSION_MACOS to 86db2178a [skip ci] 2026-04-28 09:21:28 +00:00
github-actions[bot] 246b47937c Update LATEST_VERSION to 61b750b9e [skip ci] 2026-04-28 09:01:33 +00:00
github-actions[bot] faba4dd7d6 Update LATEST_VERSION to 2e51f0d [skip ci] 2026-04-28 07:31:47 +00:00
github-actions[bot] 8a109b8ae9 Update LATEST_VERSION_MACOS to 2e51f0d5c [skip ci] 2026-04-28 07:22:56 +00:00
CollectingWandGitHub 8bd4db1434 Merge pull request #33 from cheezwiz7899/clangtron-windows-cpm3
ci: linux build fix
2026-04-28 02:43:18 -04:00
cheezwiz7899 481d3f9918 linux fix 2026-04-28 18:29:42 +12:00
github-actions[bot] 96985c7618 Update LATEST_VERSION to 4996594 [skip ci] 2026-04-28 05:12:04 +00:00
CollectingWandGitHub 6dfda9512e Merge pull request #32 from cheezwiz7899/clangtron-windows-cpm2
ci: adjust clangtron-windows jobs for CPM migration
2026-04-28 00:49:36 -04:00
cheezwiz7899 df387b93a4 ci: adjust clangtron-windows jobs for CPM migration 2026-04-28 15:22:29 +12:00
github-actions[bot] f01f374aa9 Update LATEST_VERSION to 5161994 [skip ci] 2026-04-27 15:36:53 +00:00
github-actions[bot] dc5deba3de Update LATEST_VERSION_MACOS to 51619945d [skip ci] 2026-04-27 15:30:43 +00:00
github-actions[bot] 2481fc29d7 Update LATEST_VERSION_MACOS to 0076ee8fc [skip ci] 2026-04-27 14:29:10 +00:00
github-actions[bot] d1009d2413 Update LATEST_VERSION to 0237a9b [skip ci] 2026-04-27 07:53:31 +00:00
github-actions[bot] 0bcd36374a Update LATEST_VERSION_MACOS to 0237a9b88 [skip ci] 2026-04-27 07:52:26 +00:00
github-actions[bot] 14fd113971 Update LATEST_VERSION_MACOS to cf89d0f35 [skip ci] 2026-04-27 07:32:01 +00:00
github-actions[bot] 7881a3e238 Update LATEST_VERSION to 373bed0 [skip ci] 2026-04-27 07:08:35 +00:00
github-actions[bot] 69e466141e Update LATEST_VERSION to 541e505 [skip ci] 2026-04-26 13:52:54 +00:00
github-actions[bot] d66cb1df26 Update LATEST_VERSION to 11f0065 [skip ci] 2026-04-25 13:52:09 +00:00
github-actions[bot] 18912ed350 Update LATEST_VERSION to 0e1295a [skip ci] 2026-04-25 06:43:28 +00:00
github-actions[bot] 4817f74efa Update LATEST_VERSION to 9173bdf [skip ci] 2026-04-22 07:16:10 +00:00
CollectingWandGitHub a5657393e9 Merge pull request #12 from Samueru-sama/patch-1
simplify appimage deployment

Thank-you Samueru-sama for your appreciated care & dedication for AppImages across multiple projects!
2026-04-22 03:03:05 -04:00
github-actions[bot] c4f5bd84aa Update LATEST_VERSION to 1650492 [skip ci] 2026-04-22 00:36:47 +00:00
github-actions[bot] 9dd04b9215 Update LATEST_VERSION to f655a0c [skip ci] 2026-04-21 14:24:46 +00:00
SamuelandGitHub fce89fc9ef fix? 2026-04-21 00:57:20 -04:00
SamuelandGitHub 65873e20cc add debloated packages 2026-04-21 00:36:30 -04:00
CollectingWandGitHub cf2a6c7b64 Merge pull request #18 from cheezwiz7899/main
ci: add MSVC builds for windows back
2026-04-21 00:11:12 -04:00
SamuelandGitHub 1410686bc9 nuke tarball 2026-04-20 23:38:20 -04:00
cheezwiz7899 05947e4eee Episode VI: return of the msvc 2026-04-21 11:19:39 +12:00
github-actions[bot] 89d4c0ebab Update LATEST_VERSION to cc3be66 [skip ci] 2026-04-20 14:26:54 +00:00
github-actions[bot] a490912c28 Update LATEST_VERSION to 46fc914 [skip ci] 2026-04-20 13:13:09 +00:00
github-actions[bot] 8c5360c1a6 Update LATEST_VERSION to 6ef7ca3 [skip ci] 2026-04-20 07:46:51 +00:00
github-actions[bot] ccda811eaf Update LATEST_VERSION to 7760d4a7e [skip ci] 2026-04-20 04:35:36 +00:00
github-actions[bot] 8596d2d09b Update LATEST_VERSION to 087a320 [skip ci] 2026-04-20 01:17:26 +00:00
CollectingWandGitHub f24c503e39 Merge pull request #16 from CollectingW/main
fix: Stable.yml
2026-04-19 20:54:01 -04:00
collecting 715aec416f fix: Stable.yml 2026-04-19 20:53:28 -04:00
CollectingWandGitHub 358079e6b3 Merge pull request #15 from CollectingW/main
fix: Remove crons from separate jobs, ensure Nightly has Clangtron & …
2026-04-19 20:50:41 -04:00
collecting 9845e7dea1 fix: Remove crons from separate jobs, ensure Nightly has Clangtron & update README for only Stable & Nightly .yml health 2026-04-19 20:49:54 -04:00
SamuelandGitHub 943bc3ffa2 Merge branch 'citron-neo:main' into patch-1 2026-04-19 17:29:34 -04:00
CollectingWandGitHub a22884897d Merge pull request #13 from cheezwiz7899/main
clangtron-windows-CI
2026-04-19 16:59:50 -04:00
cheezwiz7899andGitHub d2021e7306 Merge branch 'citron-neo:main' into main 2026-04-19 22:52:19 +12:00
cheezwiz7899 d301f31b68 ci: point clangtron jobs back to main citron-neo repository 2026-04-19 22:51:08 +12:00
github-actions[bot] 0de1505e84 Update LATEST_VERSION to 73993e5 [skip ci] 2026-04-19 08:02:28 +00:00
github-actions[bot] 17e24f428e Update LATEST_VERSION_MACOS to 73993e5f3 [skip ci] 2026-04-19 07:54:05 +00:00
cheezwiz7899 1e914abe8b ci: add qt caching for clangtron builds 2026-04-19 16:56:35 +12:00
SamuelandGitHub 85d860e931 simplify appimage deployment 2026-04-19 00:18:41 -04:00
cheezwiz7899 23cb3574ad ci: fix vcpkg caching and add ffmpeg caching for clangtron builds 2026-04-19 12:53:50 +12:00
cheezwiz7899 e99ae4cfa7 ci: trigger windows ci to fix llvm demangle 2026-04-19 11:35:21 +12:00
cheezwiz7899 f0c64e6001 help github remember where it put llvm during the setup step 2026-04-19 10:46:34 +12:00
cheezwiz7899andGitHub 9ac446b614 Update build-windows.yml
Temporarily clone from fork branch for testing
2026-04-19 08:36:46 +12:00
cheezwiz7899 e3de2d82a5 add clangtron-windows builds 2026-04-18 15:20:50 +10:00
github-actions[bot] b34a39a9dc Update LATEST_VERSION to 0db11ed [skip ci] 2026-04-17 10:46:53 +00:00
11 changed files with 411 additions and 509 deletions
+2 -4
View File
@@ -2,8 +2,6 @@ name: Build Citron (Android)
on:
workflow_dispatch:
schedule:
- cron: "0 12 * * *"
jobs:
check-version:
@@ -181,7 +179,7 @@ jobs:
export ANDROID_NDK="$ANDROID_NDK_HOME"
chmod +x gradlew
./gradlew assembleMainlineRelease \
-Pcmake.args="-DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_OPENSSL=OFF -DCITRON_USE_BUNDLED_VCPKG=ON -DCITRON_USE_BUNDLED_FFMPEG=ON -DCITRON_ENABLE_LTO=ON -DCITRON_BUILD_TYPE=Release"
-Pcmake.args="-DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_OPENSSL=ON -DCITRON_USE_BUNDLED_VCPKG=ON -DCITRON_USE_BUNDLED_FFMPEG=ON -DCITRON_ENABLE_LTO=ON -DCITRON_BUILD_TYPE=Release"
- name: Upload APK artifact
uses: actions/upload-artifact@v4
@@ -340,7 +338,7 @@ jobs:
export ANDROID_NDK="$ANDROID_NDK_HOME"
chmod +x ./gradlew
./gradlew assembleMainlineRelease \
-Pcmake.args="-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DENABLE_UPDATE_CHECKER=ON -DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_OPENSSL=OFF -DCITRON_USE_BUNDLED_VCPKG=ON -DCITRON_USE_BUNDLED_FFMPEG=ON -DCITRON_ENABLE_LTO=ON -DCITRON_BUILD_TYPE=Release"
-Pcmake.args="-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DENABLE_UPDATE_CHECKER=ON -DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_OPENSSL=ON -DCITRON_USE_BUNDLED_VCPKG=ON -DCITRON_USE_BUNDLED_FFMPEG=ON -DCITRON_ENABLE_LTO=ON -DCITRON_BUILD_TYPE=Release"
APK_PATH=$(find app/build/outputs/apk -type f -name "*.apk" | head -n 1)
if [ -z "$APK_PATH" ]; then
-2
View File
@@ -5,8 +5,6 @@ concurrency:
cancel-in-progress: true
on:
schedule:
- cron: "0 12 * * *"
workflow_dispatch: {}
jobs:
+92 -28
View File
@@ -5,8 +5,6 @@ concurrency:
cancel-in-progress: true
on:
schedule:
- cron: "0 14 * * *"
workflow_dispatch: {}
jobs:
@@ -68,7 +66,7 @@ jobs:
- name: Install System Dependencies via Homebrew
run: |
brew install ninja boost catch2 cmake enet fmt ffmpeg glslang hidapi libvpx lld llvm nasm nlohmann-json openal-soft sdl2 molten-vk vulkan-headers vulkan-loader webp lz4 zstd openssl@3 pkg-config libusb opus python@3.12
brew install ninja boost catch2 cmake enet fmt ffmpeg glslang hidapi libvpx lld llvm nasm nlohmann-json openal-soft sdl2 sdl3 molten-vk vulkan-headers vulkan-loader webp lz4 zstd openssl@3 pkg-config libusb opus python@3.12
- name: Clone Citron Source
shell: bash
@@ -194,6 +192,8 @@ jobs:
"$MACDEPLOYQT_PATH" "$APP_BUNDLE_PATH" -libpath="$QT_LIB_PATH" -verbose=1 -always-overwrite
FRAMEWORKS_PATH="$APP_BUNDLE_PATH/Contents/Frameworks"
EXECUTABLE_PATH="$APP_BUNDLE_PATH/Contents/MacOS/citron"
mkdir -p "$FRAMEWORKS_PATH"
# Create Vulkan ICD json to ensure bundled MoltenVK is used (not homebrew's)
echo "Setting up Vulkan ICD for bundled MoltenVK..."
@@ -211,40 +211,62 @@ jobs:
ICDEOF
echo "Created MoltenVK ICD at $VULKAN_ICD_DIR/MoltenVK_icd.json"
# Copy missing transitive dependencies (like libsharpyuv from webp, liblcms2 from jxl)
# Copy missing transitive dependencies (like libsharpyuv from webp, liblcms2 from jxl).
# Scan the main executable too; macdeployqt can miss non-Qt Homebrew libraries linked by citron.
echo "Checking for missing transitive dependencies..."
copy_missing_deps() {
find_bundled_binaries() {
printf '%s\n' "$EXECUTABLE_PATH"
find "$FRAMEWORKS_PATH" -name "*.dylib" -type f | while read -r dylib; do
# Handle @rpath/ references
otool -L "$dylib" 2>/dev/null | grep -E "^\s+@rpath/" | awk '{print $1}' | sed 's|@rpath/||' | while read -r dep; do
if [ ! -f "$FRAMEWORKS_PATH/$dep" ]; then
HOMEBREW_LIB=$(find /opt/homebrew/lib /opt/homebrew/Cellar /usr/local/lib -name "$dep" 2>/dev/null | head -1)
if [ -n "$HOMEBREW_LIB" ] && [ -f "$HOMEBREW_LIB" ]; then
echo "Copying missing @rpath dependency: $dep"
cp "$HOMEBREW_LIB" "$FRAMEWORKS_PATH/"
chmod u+w "$FRAMEWORKS_PATH/$dep"
install_name_tool -id "@rpath/$dep" "$FRAMEWORKS_PATH/$dep" 2>/dev/null || true
fi
fi
done
# Handle absolute homebrew path references (critical for portability!)
otool -L "$dylib" 2>/dev/null | grep -E "^\s+(/opt/homebrew|/usr/local)" | awk '{print $1}' | while read -r abs_dep; do
dep_name=$(basename "$abs_dep")
if [ ! -f "$FRAMEWORKS_PATH/$dep_name" ] && [ -f "$abs_dep" ]; then
echo "Copying missing absolute-path dependency: $dep_name (from $abs_dep)"
cp "$abs_dep" "$FRAMEWORKS_PATH/"
chmod u+w "$FRAMEWORKS_PATH/$dep_name"
install_name_tool -id "@rpath/$dep_name" "$FRAMEWORKS_PATH/$dep_name" 2>/dev/null || true
fi
done
printf '%s\n' "$dylib"
done
find "$FRAMEWORKS_PATH" -name "*.framework" -type d | while read -r framework_dir; do
framework_name=$(basename "$framework_dir" .framework)
framework_binary="$framework_dir/Versions/A/$framework_name"
[ ! -f "$framework_binary" ] && framework_binary="$framework_dir/$framework_name"
[ -f "$framework_binary" ] && printf '%s\n' "$framework_binary"
done
}
copy_deps_for_binary() {
local binary="$1"
[ -f "$binary" ] || return 0
# Handle @rpath/ references
otool -L "$binary" 2>/dev/null | grep -E "^\s+@rpath/" | awk '{print $1}' | sed 's|@rpath/||' | while read -r dep; do
if [ ! -f "$FRAMEWORKS_PATH/$dep" ]; then
HOMEBREW_LIB=$(find /opt/homebrew/lib /opt/homebrew/Cellar /usr/local/lib -name "$dep" 2>/dev/null | head -1)
if [ -n "$HOMEBREW_LIB" ] && [ -f "$HOMEBREW_LIB" ]; then
echo "Copying missing @rpath dependency for $(basename "$binary"): $dep"
cp "$HOMEBREW_LIB" "$FRAMEWORKS_PATH/"
chmod u+w "$FRAMEWORKS_PATH/$dep"
install_name_tool -id "@rpath/$dep" "$FRAMEWORKS_PATH/$dep" 2>/dev/null || true
fi
fi
done
# Handle absolute homebrew path references (critical for portability!)
otool -L "$binary" 2>/dev/null | grep -E "^\s+(/opt/homebrew|/usr/local)" | awk '{print $1}' | while read -r abs_dep; do
dep_name=$(basename "$abs_dep")
if [ ! -f "$FRAMEWORKS_PATH/$dep_name" ] && [ -f "$abs_dep" ]; then
echo "Copying missing absolute-path dependency for $(basename "$binary"): $dep_name (from $abs_dep)"
cp "$abs_dep" "$FRAMEWORKS_PATH/"
chmod u+w "$FRAMEWORKS_PATH/$dep_name"
install_name_tool -id "@rpath/$dep_name" "$FRAMEWORKS_PATH/$dep_name" 2>/dev/null || true
fi
done
}
copy_missing_deps() {
find_bundled_binaries | while read -r binary; do
copy_deps_for_binary "$binary"
done
}
# Run multiple passes to catch nested dependencies
for i in 1 2 3 4 5; do
echo "Pass $i: checking dependencies..."
copy_missing_deps
done
EXECUTABLE_PATH="$APP_BUNDLE_PATH/Contents/MacOS/citron"
install_name_tool -add_rpath "@executable_path/../Frameworks" "$EXECUTABLE_PATH" 2>/dev/null || true
@@ -301,8 +323,50 @@ jobs:
[ -f "$framework_binary" ] && install_name_tool -id "@rpath/$framework_name.framework/Versions/A/$framework_name" "$framework_binary" 2>/dev/null || true
done
find_bundled_binaries | while read -r binary; do
otool -L "$binary" 2>/dev/null | grep -E "^\s+/" | awk '{print $1}' | while read -r dep; do
dep_name=$(basename "$dep")
if [ -f "$FRAMEWORKS_PATH/$dep_name" ]; then
install_name_tool -change "$dep" "@rpath/$dep_name" "$binary" 2>/dev/null || true
fi
done
done
# Some SDL3 consumers load "libSDL3.dylib" dynamically at runtime, so it will not
# necessarily appear in otool output. Homebrew/macdeployqt may only leave
# "libSDL3.0.dylib" in Frameworks, which makes that dlopen path fail.
SDL3_BREW_PREFIX="$(brew --prefix sdl3 2>/dev/null || true)"
if [ ! -f "$FRAMEWORKS_PATH/libSDL3.dylib" ]; then
if [ -n "$SDL3_BREW_PREFIX" ] && [ -f "$SDL3_BREW_PREFIX/lib/libSDL3.dylib" ]; then
echo "Copying libSDL3.dylib from Homebrew for runtime dlopen compatibility"
cp "$SDL3_BREW_PREFIX/lib/libSDL3.dylib" "$FRAMEWORKS_PATH/libSDL3.dylib"
elif [ -f "$FRAMEWORKS_PATH/libSDL3.0.dylib" ]; then
echo "Creating libSDL3.dylib from bundled libSDL3.0.dylib for runtime dlopen compatibility"
cp "$FRAMEWORKS_PATH/libSDL3.0.dylib" "$FRAMEWORKS_PATH/libSDL3.dylib"
fi
fi
if [ -f "$FRAMEWORKS_PATH/libSDL3.dylib" ]; then
chmod u+w "$FRAMEWORKS_PATH/libSDL3.dylib"
install_name_tool -id "@rpath/libSDL3.dylib" "$FRAMEWORKS_PATH/libSDL3.dylib" 2>/dev/null || true
fi
chmod -R u+w "$APP_BUNDLE_PATH"
codesign --force --deep -s - "$APP_BUNDLE_PATH"
codesign --verify --deep --strict --verbose=2 "$APP_BUNDLE_PATH"
echo "Final executable SDL dependencies:"
otool -L "$EXECUTABLE_PATH" | grep -i SDL || true
echo "Final executable rpaths:"
otool -l "$EXECUTABLE_PATH" | grep -A2 LC_RPATH || true
echo "Checking for remaining Homebrew library references..."
if find_bundled_binaries | while read -r binary; do
otool -L "$binary" 2>/dev/null | grep -E "^\s+(/opt/homebrew|/usr/local)" && echo " in $binary"
done | tee /tmp/citron-homebrew-refs.txt; [ -s /tmp/citron-homebrew-refs.txt ]; then
echo "::error::Packaged app still contains Homebrew library references."
exit 1
fi
# Step 8: Create the final DMG
echo "Creating final DMG..."
+56 -307
View File
@@ -5,8 +5,6 @@ concurrency:
cancel-in-progress: true
on:
schedule:
- cron: "0 12 * * *"
workflow_dispatch: {}
jobs:
@@ -55,54 +53,23 @@ jobs:
echo "should_build=false" >> $GITHUB_OUTPUT
fi
build-mingw:
name: "Citron Build (Windows MinGW - x64)"
build-clangtron:
name: "Citron Build (Windows Clangtron - x64)"
needs: [check-version]
if: needs.check-version.outputs.should_build == 'true'
runs-on: windows-latest
timeout-minutes: 180
defaults:
run:
shell: msys2 {0}
runs-on: ubuntu-latest
timeout-minutes: 240
env:
CPM_SOURCE_CACHE: /home/runner/.cache/cpm
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: UCRT64
update: true
install: >-
mingw-w64-ucrt-x86_64-toolchain
mingw-w64-ucrt-x86_64-cmake
mingw-w64-ucrt-x86_64-ninja
mingw-w64-ucrt-x86_64-qt6-base
mingw-w64-ucrt-x86_64-qt6-tools
mingw-w64-ucrt-x86_64-qt6-multimedia
mingw-w64-ucrt-x86_64-qt6-translations
mingw-w64-ucrt-x86_64-SDL2
mingw-w64-ucrt-x86_64-vulkan-headers
mingw-w64-ucrt-x86_64-vulkan-loader
mingw-w64-ucrt-x86_64-vulkan-utility-libraries
mingw-w64-ucrt-x86_64-vulkan-memory-allocator
mingw-w64-ucrt-x86_64-openssl
mingw-w64-ucrt-x86_64-boost
mingw-w64-ucrt-x86_64-nlohmann-json
mingw-w64-ucrt-x86_64-zlib
mingw-w64-ucrt-x86_64-zstd
mingw-w64-ucrt-x86_64-lz4
mingw-w64-ucrt-x86_64-ffmpeg
mingw-w64-ucrt-x86_64-opus
mingw-w64-ucrt-x86_64-openal
mingw-w64-ucrt-x86_64-libusb
git
base-devel
- name: Clone Citron Source (MinGW)
- name: Clone Citron Source (Clangtron)
run: |
ATTEMPT=0
MAX_ATTEMPTS=999
@@ -112,7 +79,7 @@ jobs:
rm -rf citron
if git clone --recursive "https://github.com/citron-neo/emulator.git" citron; then
if git clone "https://github.com/citron-neo/emulator.git" citron; then
echo "Clone successful on attempt $ATTEMPT."
break
fi
@@ -126,16 +93,21 @@ jobs:
sleep 15
done
- name: Cache build directory (MinGW)
uses: actions/cache@v4
id: cache-build
with:
path: ./citron/build
key: mingw-build-${{ runner.os }}-${{ hashFiles('citron/CMakeLists.txt') }}-${{ hashFiles('.github/workflows/build-windows.yml') }}
restore-keys: |
mingw-build-${{ runner.os }}-
- name: Init required submodules
working-directory: ./citron
run: |
echo "CPM manages all dependencies — no submodules needed for Clangtron"
- name: Get Version (MinGW)
- name: Cache CPM and Toolchain (Clangtron)
uses: actions/cache@v4
with:
path: /home/runner/.cache/cpm
key: clangtron-cache-${{ runner.os }}-${{ hashFiles('citron/CMakeModules/dependencies.cmake', 'citron/build-clangtron-windows.sh') }}
restore-keys: |
clangtron-cache-${{ runner.os }}-
- name: Get Version (Clangtron)
id: version
working-directory: ./citron
run: |
@@ -143,270 +115,48 @@ jobs:
VERSION=$(git rev-parse --short HEAD)
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
- name: Clear stale CMake cache (MinGW)
working-directory: ./citron
run: rm -f build/CMakeCache.txt
- name: Skip BOLT build (not needed for --pgo none)
run: |
echo '#!/bin/bash' | sudo tee /usr/local/bin/llvm-bolt-21
echo '#!/bin/bash' | sudo tee /usr/local/bin/merge-fdata-21
sudo chmod +x /usr/local/bin/llvm-bolt-21
sudo chmod +x /usr/local/bin/merge-fdata-21
- name: Configure CMake (MinGW)
- name: Setup Clangtron Build Environment
working-directory: ./citron
run: |
cmake -B build -S . -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCITRON_USE_BUNDLED_VCPKG=ON \
-DCITRON_USE_BUNDLED_QT=OFF \
-DCITRON_USE_BUNDLED_FFMPEG=OFF \
-DCITRON_USE_EXTERNAL_SDL2=ON \
-DCITRON_USE_EXTERNAL_VULKAN_HEADERS=ON \
-DCITRON_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES=ON \
-DCITRON_BUILD_TYPE=Release \
-DCITRON_TESTS=OFF \
-DENABLE_QT=ON \
-DENABLE_QT6=ON \
-DENABLE_SDL2=ON \
-DENABLE_WEB_SERVICE=ON \
-DENABLE_OPENSSL=ON \
-DENABLE_CUBEB=OFF \
-DENABLE_OPENAL=ON \
-DUSE_DISCORD_PRESENCE=OFF \
-DCITRON_USE_AUTO_UPDATER=OFF \
-DCITRON_USE_PRECOMPILED_HEADERS=ON \
-DENABLE_LIBUSB=OFF
chmod +x build-clangtron-windows.sh
./build-clangtron-windows.sh setup
echo "${HOME}/.cache/cpm/llvm-mingw/bin" >> "$GITHUB_PATH"
- name: Build Citron (MinGW)
working-directory: ./citron
run: cmake --build build --config Release -j$(nproc)
- name: Copy vcpkg runtime DLLs to bin (MinGW)
- name: Build Citron (Clangtron LTO)
working-directory: ./citron
run: |
# vcpkg's DLL directory is not on the shell PATH, so CMake's deploy step
# and ldd both miss these DLLs entirely.
VCPKG_BIN="./build/vcpkg_installed/x64-mingw-dynamic/bin"
BIN_DIR="./build/bin"
if [ -d "$VCPKG_BIN" ]; then
find "$VCPKG_BIN" -maxdepth 1 -name "*.dll" -exec cp -v {} "$BIN_DIR/" \;
else
echo "Warning: vcpkg bin dir not found at $VCPKG_BIN"
export CITRON_BUILD_TYPE=Release
./build-clangtron-windows.sh use --pgo none --lto full
- name: Package Windows Build (Clangtron)
run: |
mkdir -p dist
BIN_DIR="./citron/build/use-nopgo/bin"
if [ ! -d "$BIN_DIR" ]; then
echo "::error::Build output not found at $BIN_DIR"
exit 1
fi
cd "$BIN_DIR"
zip -r "${GITHUB_WORKSPACE}/dist/Citron-windows-nightly-${{ steps.version.outputs.VERSION }}-x64-clangtron.zip" .
- name: Prune unused DLLs from build/bin (MinGW)
working-directory: ./citron
run: |
# CopyMinGWDeps.cmake pulls in the full transitive closure of citron.exe
# through /ucrt64/bin, including many DLLs that are never actually loaded.
#
# We compute the true required set using a full recursive objdump closure:
# starting from the citron binaries, we follow every DLL import reference
# and collect any DLL that is present in build/bin. We repeat until no
# new DLLs are added. Anything not reached by this walk is deleted.
#
# This is correct by construction: if Windows would load a DLL at startup
# (directly or transitively through another DLL we ship), it will be in
# the closure. If it would not be loaded, it won't be. No hardcoded lists.
BIN_DIR="./build/bin"
echo "=== DLLs before pruning: $(find "$BIN_DIR" -maxdepth 1 -name "*.dll" | wc -l) ==="
# Build a lookup of lowercase dll name -> path for every DLL in bin/
declare -A bin_dlls
while IFS= read -r dll_path; do
dll_name=$(basename "$dll_path" | tr '[:upper:]' '[:lower:]')
bin_dlls["$dll_name"]="$dll_path"
done < <(find "$BIN_DIR" -maxdepth 1 -name "*.dll")
# Closure: set of lowercase dll names known to be required
declare -A closure
# Queue: dll names to process
declare -a queue
# Seed with the citron executables
for exe in "$BIN_DIR"/citron.exe "$BIN_DIR"/citron-cmd.exe "$BIN_DIR"/citron-room.exe; do
[[ -f "$exe" ]] || continue
while IFS= read -r dep; do
dep_lower=$(echo "$dep" | tr '[:upper:]' '[:lower:]')
if [[ -n "${bin_dlls[$dep_lower]+_}" && -z "${closure[$dep_lower]+_}" ]]; then
closure["$dep_lower"]=1
queue+=("$dep_lower")
fi
done < <(objdump -p "$exe" 2>/dev/null | awk '/DLL Name:/{print $3}')
done
# BFS: expand through each newly discovered DLL in bin/
while [[ ${#queue[@]} -gt 0 ]]; do
current="${queue[0]}"
queue=("${queue[@]:1}")
dll_path="${bin_dlls[$current]}"
while IFS= read -r dep; do
dep_lower=$(echo "$dep" | tr '[:upper:]' '[:lower:]')
if [[ -n "${bin_dlls[$dep_lower]+_}" && -z "${closure[$dep_lower]+_}" ]]; then
closure["$dep_lower"]=1
queue+=("$dep_lower")
fi
done < <(objdump -p "$dll_path" 2>/dev/null | awk '/DLL Name:/{print $3}')
done
echo "Closure size: ${#closure[@]} DLLs required"
# Remove everything in bin/ that is not in the closure
removed=0
kept=0
while IFS= read -r dll_path; do
dll_lower=$(basename "$dll_path" | tr '[:upper:]' '[:lower:]')
if [[ -z "${closure[$dll_lower]+_}" ]]; then
echo " Pruning: $(basename "$dll_path")"
rm -f "$dll_path"
removed=$((removed + 1))
else
kept=$((kept + 1))
fi
done < <(find "$BIN_DIR" -maxdepth 1 -name "*.dll")
echo "=== Pruned $removed, kept $kept ==="
echo "=== Final DLL list ==="
find "$BIN_DIR" -maxdepth 1 -name "*.dll" | sort | xargs -I{} basename {}
- name: Package Windows Build (MinGW)
shell: pwsh
run: |
mkdir dist
mkdir temp_package
$binDir = ".\citron\build\bin"
if (Test-Path "$binDir\Release") { $binDir = "$binDir\Release" }
Get-ChildItem $binDir -Recurse | Where-Object {
$_.Extension -ne ".pdb" -and $_.Extension -ne ".a" -and $_.Extension -ne ".o"
} | ForEach-Object {
$relativePath = $_.FullName.Replace((Resolve-Path $binDir).Path, "").TrimStart('\')
$destPath = Join-Path ".\temp_package" $relativePath
$destDir = Split-Path $destPath -Parent
if (!(Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null }
Copy-Item $_.FullName $destPath -Force
}
Compress-Archive -Path ".\temp_package\*" -DestinationPath ".\dist\Citron-windows-nightly-${{ steps.version.outputs.VERSION }}-x64-mingw.zip"
Remove-Item ".\temp_package" -Recurse -Force
- name: Upload Windows Build (MinGW)
- name: Upload Windows Build (Clangtron)
uses: actions/upload-artifact@v4
with:
name: Citron-Windows-Nightly-Mingw-x64
path: "dist/*.zip"
build-msvc:
name: "Citron Build (Windows MSVC - x64)"
needs: [check-version]
if: needs.check-version.outputs.should_build == 'true'
runs-on: windows-latest
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install Vulkan SDK
shell: pwsh
run: |
$vulkan_sdk_url = "https://sdk.lunarg.com/sdk/download/1.3.283.0/windows/VulkanSDK-1.3.283.0-Installer.exe"
Invoke-WebRequest -Uri $vulkan_sdk_url -OutFile VulkanSDK-Installer.exe
Start-Process -FilePath ".\VulkanSDK-Installer.exe" -ArgumentList "--accept-licenses", "--default-answer", "--confirm-command", "install" -Wait
echo "C:\VulkanSDK\1.3.283.0\Bin" | Out-File -FilePath $env:GITHUB_PATH -Append
- name: Clone Citron Source (MSVC)
shell: bash
run: |
ATTEMPT=0
MAX_ATTEMPTS=999
while true; do
ATTEMPT=$((ATTEMPT + 1))
echo "Attempt $ATTEMPT of $MAX_ATTEMPTS: Cloning Citron..."
rm -rf citron
if git clone --recursive "https://github.com/citron-neo/emulator.git" citron; then
echo "Clone successful on attempt $ATTEMPT."
break
fi
if [ $ATTEMPT -ge $MAX_ATTEMPTS ]; then
echo "Failed after $MAX_ATTEMPTS attempts."
exit 1
fi
echo "Clone failed. Retrying in 15 seconds..."
sleep 15
done
- name: Cache vcpkg and Qt dependencies (MSVC)
uses: actions/cache@v4
id: cache-vcpkg
with:
path: |
./citron/build
~/.vcpkg/archives
${{ env.LOCALAPPDATA }}\vcpkg\archives
key: vcpkg-qt-cache-x64-${{ runner.os }}-${{ hashFiles('citron/vcpkg.json') }}-${{ hashFiles('citron/externals/vcpkg/.git/HEAD') }}
restore-keys: |
vcpkg-qt-cache-x64-${{ runner.os }}-${{ hashFiles('citron/vcpkg.json') }}-
- name: Get Version (MSVC)
id: version
working-directory: ./citron
shell: bash
run: |
git fetch --tags
VERSION=$(git rev-parse --short HEAD)
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
- name: Configure CMake (MSVC)
working-directory: ./citron
shell: cmd
run: |
cmake -B build -S . -G "Visual Studio 17 2022" -A x64 ^
-DCITRON_USE_BUNDLED_VCPKG=ON ^
-DCITRON_BUILD_TYPE=Release ^
-DCITRON_ENABLE_LTO=ON ^
-DCITRON_USE_BUNDLED_QT=ON ^
-DENABLE_QT6=ON ^
-DCITRON_TESTS=OFF ^
-DUSE_DISCORD_PRESENCE=ON ^
-DENABLE_WEB_SERVICE=ON ^
-DENABLE_OPENSSL=ON ^
-DCITRON_USE_AUTO_UPDATER=ON ^
-DCITRON_ENABLE_LIBARCHIVE=ON
- name: Build Citron (MSVC)
working-directory: ./citron
shell: cmd
run: cmake --build build --config Release --parallel
- name: Package Windows Build (MSVC)
shell: pwsh
run: |
mkdir dist
mkdir temp_package
Get-ChildItem ".\citron\build\bin\Release\" -Recurse | Where-Object { $_.Extension -ne ".pdb" } | ForEach-Object {
$relativePath = $_.FullName.Replace((Resolve-Path ".\citron\build\bin\Release\").Path, "").TrimStart('\')
$destPath = Join-Path ".\temp_package" $relativePath
$destDir = Split-Path $destPath -Parent
if (!(Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null }
Copy-Item $_.FullName $destPath -Force
}
Compress-Archive -Path ".\temp_package\*" -DestinationPath ".\dist\Citron-windows-nightly-${{ steps.version.outputs.VERSION }}-x64-msvc.zip"
Remove-Item ".\temp_package" -Recurse -Force
- name: Upload Windows Build (MSVC)
uses: actions/upload-artifact@v4
with:
name: Citron-Windows-Nightly-MSVC-x64
name: Citron-Windows-Nightly-Clangtron-x64
path: "dist/*.zip"
release:
if: ${{ github.ref_name == 'main' }}
name: "Release"
needs: [check-version, build-mingw, build-msvc]
needs: [check-version, build-clangtron]
permissions:
contents: write
runs-on: ubuntu-latest
@@ -422,9 +172,9 @@ jobs:
- name: Get Version from Filename
shell: bash
run: |
FILENAME=$(basename "$(ls ./release-artifacts/Citron-windows-nightly-*-x64-mingw.zip)")
FILENAME=$(basename "$(ls ./release-artifacts/Citron-windows-nightly-*-x64-clangtron.zip)")
VERSION=${FILENAME#Citron-windows-nightly-}
VERSION=${VERSION%-x64-mingw.zip}
VERSION=${VERSION%-x64-clangtron.zip}
echo "APP_VERSION=${VERSION}" >> $GITHUB_ENV
- name: Delete Previous Release
run: gh release delete "nightly-windows" --repo "${{ github.repository }}" --cleanup-tag -y || true
@@ -439,8 +189,7 @@ jobs:
tag_name: "nightly-windows"
prerelease: false
files: |
release-artifacts/*-x64-mingw.zip
release-artifacts/*-x64-msvc.zip
release-artifacts/*-x64-clangtron.zip
body: |
**Citron Upstream Commit:** [`${{ needs.check-version.outputs.new_hash }}`](https://github.com/citron-neo/emulator/commit/${{ needs.check-version.outputs.new_hash_full }})
@@ -448,7 +197,7 @@ jobs:
**Build Details:**
- Platform: Windows (x64)
- Toolchains: MinGW-w64 (MSYS2 UCRT64) + MSVC (Visual Studio 2022)
- Toolchain: Clangtron (Clang LTO cross-compiled from Linux)
- Build Type: Release
- Date: ${{ env.BUILD_DATE }}
- name: Update LATEST_VERSION
@@ -474,5 +223,5 @@ jobs:
exit 0
fi
curl -H "Content-Type: application/json" \
-d "{\"content\":\"🪟 **New Windows Builds Available!**\n\n📦 **Version:** \`${{ env.APP_VERSION }}\`\n📅 **Date:** ${DATE}\n🔧 **Toolchains:** MinGW-w64 (UCRT64) + MSVC\n🔗 **Download:** $DOWNLOAD_URL\"}" \
-d "{\"content\":\"🪟 **New Windows Build Available!**\n\n📦 **Version:** \`${{ env.APP_VERSION }}\`\n📅 **Date:** ${DATE}\n🔧 **Toolchain:** Clangtron (Clang LTO)\n🔗 **Download:** $DOWNLOAD_URL\"}" \
"$WEBHOOK_URL"
+172 -4
View File
@@ -645,12 +645,107 @@ jobs:
name: Citron-macOS-Nightly
path: "dist/*.dmg"
# ===========================================================================
# WINDOWS: MinGW + MSVC nightly builds and the nightly-windows GitHub Release
# are handled exclusively by .github/workflows/build-windows.yml (same cron).
# A duplicate release job here used to run after that workflow and recreate
# nightly-windows with only the MinGW zip, dropping the MSVC asset.
# WINDOWS (Clangtron)
# ===========================================================================
build-windows-clangtron:
name: "Citron Build (Windows Clangtron - x64)"
needs: [check-version]
if: needs.check-version.outputs.should_build == 'true'
runs-on: ubuntu-latest
timeout-minutes: 240
env:
CPM_SOURCE_CACHE: /home/runner/.cache/cpm
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Clone Citron Source (Clangtron)
run: |
ATTEMPT=0
MAX_ATTEMPTS=999
while true; do
ATTEMPT=$((ATTEMPT + 1))
echo "Attempt $ATTEMPT of $MAX_ATTEMPTS: Cloning Citron..."
rm -rf citron
if git clone "https://github.com/citron-neo/emulator.git" citron; then
echo "Clone successful on attempt $ATTEMPT."
break
fi
if [ $ATTEMPT -ge $MAX_ATTEMPTS ]; then
echo "Failed after $MAX_ATTEMPTS attempts."
exit 1
fi
echo "Clone failed. Retrying in 15 seconds..."
sleep 15
done
- name: Init required submodules
working-directory: ./citron
run: |
echo "CPM manages all dependencies — no submodules needed for Clangtron"
- name: Cache CPM and Toolchain (Clangtron)
uses: actions/cache@v4
with:
path: /home/runner/.cache/cpm
key: clangtron-cache-${{ runner.os }}-${{ hashFiles('citron/CMakeModules/dependencies.cmake', 'citron/build-clangtron-windows.sh') }}
restore-keys: |
clangtron-cache-${{ runner.os }}-
- name: Get Version (Clangtron)
id: version
working-directory: ./citron
run: |
git fetch --tags
VERSION=$(git rev-parse --short HEAD)
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
- name: Skip BOLT build (not needed for --pgo none)
run: |
echo '#!/bin/bash' | sudo tee /usr/local/bin/llvm-bolt-21
echo '#!/bin/bash' | sudo tee /usr/local/bin/merge-fdata-21
sudo chmod +x /usr/local/bin/llvm-bolt-21
sudo chmod +x /usr/local/bin/merge-fdata-21
- name: Setup Clangtron Build Environment
working-directory: ./citron
run: |
chmod +x build-clangtron-windows.sh
./build-clangtron-windows.sh setup
echo "${HOME}/.cache/cpm/llvm-mingw/bin" >> "$GITHUB_PATH"
- name: Build Citron (Clangtron LTO)
working-directory: ./citron
run: |
export CITRON_BUILD_TYPE=Nightly
./build-clangtron-windows.sh use --pgo none --lto full
- name: Package Windows Build (Clangtron)
run: |
mkdir -p dist
BIN_DIR="./citron/build/use-nopgo/bin"
if [ ! -d "$BIN_DIR" ]; then
echo "::error::Build output not found at $BIN_DIR"
exit 1
fi
cd "$BIN_DIR"
zip -r "${GITHUB_WORKSPACE}/dist/Citron-windows-nightly-${{ steps.version.outputs.VERSION }}-x64-clangtron.zip" .
- name: Upload Windows Build (Clangtron)
uses: actions/upload-artifact@v4
with:
name: Citron-Windows-Nightly-Clangtron-x64
path: "dist/*.zip"
# ===========================================================================
# RELEASE - Android
@@ -884,3 +979,76 @@ jobs:
curl -H "Content-Type: application/json" \
-d "{\"content\":\"🍎 **New macOS Nightly Build!**\n\n📦 **Version:** \`${{ env.APP_VERSION }}\`\n📅 **Date:** ${DATE}\n🔗 **Download:** $DOWNLOAD_URL\"}" \
"$WEBHOOK_URL"
# ===========================================================================
# RELEASE - Windows
# ===========================================================================
release-windows:
if: ${{ github.ref_name == 'main' }}
name: "Release Windows Nightly"
needs: [check-version, build-windows-clangtron]
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download Windows artifacts
uses: actions/download-artifact@v4
with:
pattern: Citron-Windows-Nightly-*
merge-multiple: true
path: .
- name: Get Version from Filename
shell: bash
run: |
FILENAME=$(ls Citron-windows-nightly-*-x64-clangtron.zip)
VERSION=${FILENAME#Citron-windows-nightly-}
VERSION=${VERSION%-x64-clangtron.zip}
echo "APP_VERSION=${VERSION}" >> $GITHUB_ENV
- name: Delete Previous Release
run: gh release delete "nightly-windows" --repo "${{ github.repository }}" --cleanup-tag -y || true
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set Build Date
run: echo "BUILD_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
- name: Release Artifacts
uses: softprops/action-gh-release@v2
with:
name: "Continuous Build (Windows Nightly: ${{ env.APP_VERSION }})"
tag_name: "nightly-windows"
prerelease: false
files: |
*-x64-clangtron.zip
body: |
**Citron Upstream Commit:** [`${{ needs.check-version.outputs.new_hash }}`](https://github.com/citron-neo/emulator/commit/${{ needs.check-version.outputs.new_hash_full }})
This build is based on the latest Citron emulator source code from the upstream repository.
**Build Details:**
- Platform: Windows (x64)
- Toolchain: Clangtron (Clang LTO cross-compiled from Linux)
- Build Type: Nightly
- Date: ${{ env.BUILD_DATE }}
- name: Update LATEST_VERSION
if: success()
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
echo "${{ env.APP_VERSION }}" > LATEST_VERSION
git add LATEST_VERSION
git commit -m "Update LATEST_VERSION to ${{ env.APP_VERSION }} [skip ci]" || exit 0
for i in {1..5}; do
git pull --rebase origin main && git push && break || sleep 2
done
- name: Post to Discord
if: success()
run: |
DOWNLOAD_URL="https://github.com/${{ github.repository }}/releases/tag/nightly-windows"
DATE=$(date +'%Y-%m-%d')
WEBHOOK_URL="${{ secrets.DISCORD_WEBHOOK }}"
if [ -z "$WEBHOOK_URL" ]; then echo "DISCORD_WEBHOOK is not set; skipping."; exit 0; fi
curl -H "Content-Type: application/json" \
-d "{\"content\":\"🪟 **New Windows Nightly Build!**\n\n📦 **Version:** \`${{ env.APP_VERSION }}\`\n📅 **Date:** ${DATE}\n🔧 **Toolchain:** Clangtron (Clang LTO)\n🔗 **Download:** $DOWNLOAD_URL\"}" \
"$WEBHOOK_URL"
+70 -104
View File
@@ -644,85 +644,63 @@ jobs:
name: Citron-macOS-Stable
path: "dist/*.dmg"
# ===========================================================================
# WINDOWS (MinGW)
# WINDOWS (Clangtron - Clang LTO cross-compiled from Ubuntu)
# ===========================================================================
build-windows:
name: "Citron Build (Windows MinGW - x64)"
build-windows-clangtron:
name: "Citron Build (Windows Clangtron - x64)"
needs: [check-version]
if: needs.check-version.outputs.should_build == 'true'
runs-on: windows-latest
timeout-minutes: 180
defaults:
run:
shell: msys2 {0}
runs-on: ubuntu-latest
timeout-minutes: 240
env:
CPM_SOURCE_CACHE: /home/runner/.cache/cpm
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: UCRT64
update: true
install: >-
mingw-w64-ucrt-x86_64-toolchain
mingw-w64-ucrt-x86_64-cmake
mingw-w64-ucrt-x86_64-ninja
mingw-w64-ucrt-x86_64-qt6-base
mingw-w64-ucrt-x86_64-qt6-tools
mingw-w64-ucrt-x86_64-qt6-multimedia
mingw-w64-ucrt-x86_64-qt6-translations
mingw-w64-ucrt-x86_64-SDL2
mingw-w64-ucrt-x86_64-vulkan-headers
mingw-w64-ucrt-x86_64-vulkan-loader
mingw-w64-ucrt-x86_64-vulkan-utility-libraries
mingw-w64-ucrt-x86_64-vulkan-memory-allocator
mingw-w64-ucrt-x86_64-openssl
mingw-w64-ucrt-x86_64-boost
mingw-w64-ucrt-x86_64-nlohmann-json
mingw-w64-ucrt-x86_64-zlib
mingw-w64-ucrt-x86_64-zstd
mingw-w64-ucrt-x86_64-lz4
mingw-w64-ucrt-x86_64-ffmpeg
mingw-w64-ucrt-x86_64-opus
mingw-w64-ucrt-x86_64-libusb
mingw-w64-ucrt-x86_64-openal
git
base-devel
- name: Clone Citron Source
- name: Clone Citron Source (Clangtron)
run: |
ATTEMPT=0
MAX_ATTEMPTS=999
while true; do
ATTEMPT=$((ATTEMPT + 1))
echo "Attempt $ATTEMPT of $MAX_ATTEMPTS: Cloning Citron..."
rm -rf citron
if git clone --recursive "https://github.com/citron-neo/emulator.git" citron; then
if git clone "https://github.com/citron-neo/emulator.git" citron; then
echo "Clone successful on attempt $ATTEMPT."
break
fi
if [ $ATTEMPT -ge $MAX_ATTEMPTS ]; then
echo "Failed after $MAX_ATTEMPTS attempts."; exit 1
echo "Failed after $MAX_ATTEMPTS attempts."
exit 1
fi
echo "Clone failed. Retrying in 15 seconds..."
sleep 15
done
- name: Cache build directory
uses: actions/cache@v4
id: cache-build
with:
path: ./citron/build
key: mingw-build-stable-${{ runner.os }}-${{ hashFiles('citron/CMakeLists.txt') }}
restore-keys: |
mingw-build-stable-${{ runner.os }}-
- name: Init required submodules
working-directory: ./citron
run: |
echo "CPM manages all dependencies — no submodules needed for Clangtron"
- name: Get Stable Version
- name: Cache CPM and Toolchain (Clangtron)
uses: actions/cache@v4
with:
path: /home/runner/.cache/cpm
key: clangtron-cache-stable-${{ runner.os }}-${{ hashFiles('citron/CMakeModules/dependencies.cmake', 'citron/build-clangtron-windows.sh') }}
restore-keys: |
clangtron-cache-stable-${{ runner.os }}-
- name: Get Version (Clangtron)
id: version
working-directory: ./citron
run: |
@@ -730,58 +708,42 @@ jobs:
VERSION=$(git rev-parse --short HEAD)
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
- name: Configure CMake
- name: Skip BOLT build (not needed for --pgo none)
run: |
echo '#!/bin/bash' | sudo tee /usr/local/bin/llvm-bolt-21
echo '#!/bin/bash' | sudo tee /usr/local/bin/merge-fdata-21
sudo chmod +x /usr/local/bin/llvm-bolt-21
sudo chmod +x /usr/local/bin/merge-fdata-21
- name: Setup Clangtron Build Environment
working-directory: ./citron
run: |
cmake -B build -S . -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCITRON_USE_BUNDLED_VCPKG=ON \
-DCITRON_USE_BUNDLED_QT=OFF \
-DCITRON_USE_BUNDLED_FFMPEG=OFF \
-DCITRON_USE_EXTERNAL_SDL2=ON \
-DCITRON_USE_EXTERNAL_VULKAN_HEADERS=ON \
-DCITRON_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES=ON \
-DCITRON_BUILD_TYPE=Stable \
-DCITRON_TESTS=OFF \
-DENABLE_QT=ON \
-DENABLE_QT6=ON \
-DENABLE_SDL2=ON \
-DENABLE_WEB_SERVICE=ON \
-DENABLE_OPENSSL=ON \
-DENABLE_CUBEB=OFF \
-DENABLE_OPENAL=ON \
-DENABLE_LIBUSB=ON \
-DUSE_DISCORD_PRESENCE=OFF \
-DCITRON_USE_AUTO_UPDATER=OFF \
-DCITRON_USE_PRECOMPILED_HEADERS=ON
chmod +x build-clangtron-windows.sh
./build-clangtron-windows.sh setup
echo "${HOME}/.cache/cpm/llvm-mingw/bin" >> "$GITHUB_PATH"
- name: Build Citron
- name: Build Citron (Clangtron LTO)
working-directory: ./citron
run: cmake --build build --config Release -j$(nproc)
- name: Package Windows Build
shell: pwsh
run: |
mkdir dist
mkdir temp_package
$binDir = ".\citron\build\bin"
if (Test-Path "$binDir\Release") { $binDir = "$binDir\Release" }
Get-ChildItem $binDir -Recurse | Where-Object {
$_.Extension -ne ".pdb" -and $_.Extension -ne ".a" -and $_.Extension -ne ".o"
} | ForEach-Object {
$relativePath = $_.FullName.Replace((Resolve-Path $binDir).Path, "").TrimStart('\')
$destPath = Join-Path ".\temp_package" $relativePath
$destDir = Split-Path $destPath -Parent
if (!(Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null }
Copy-Item $_.FullName $destPath -Force
}
Compress-Archive -Path ".\temp_package\*" -DestinationPath ".\dist\Citron-windows-stable-${{ steps.version.outputs.VERSION }}-x64-mingw.zip"
Remove-Item ".\temp_package" -Recurse -Force
export CITRON_BUILD_TYPE=Stable
./build-clangtron-windows.sh use --pgo none --lto full
- name: Upload Windows Build
- name: Package Windows Build (Clangtron)
run: |
mkdir -p dist
BIN_DIR="./citron/build/use-nopgo/bin"
if [ ! -d "$BIN_DIR" ]; then
echo "::error::Build output not found at $BIN_DIR"
exit 1
fi
cd "$BIN_DIR"
zip -r "${GITHUB_WORKSPACE}/dist/Citron-windows-stable-${{ steps.version.outputs.VERSION }}-x64-clangtron.zip" .
- name: Upload Windows Build (Clangtron)
uses: actions/upload-artifact@v4
with:
name: Citron-Windows-Stable-x64
name: Citron-Windows-Stable-Clangtron-x64
path: "dist/*.zip"
# ===========================================================================
@@ -1023,7 +985,7 @@ jobs:
release-windows:
if: ${{ github.ref_name == 'main' }}
name: "Release Windows Stable"
needs: [check-version, build-windows]
needs: [check-version, build-windows-clangtron]
permissions:
contents: write
runs-on: ubuntu-latest
@@ -1031,16 +993,18 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
- name: Download Windows artifacts
uses: actions/download-artifact@v4
with:
name: Citron-Windows-Stable-x64
pattern: Citron-Windows-Stable-*
merge-multiple: true
path: .
- name: Get Version from Filename
shell: bash
run: |
FILENAME=$(ls Citron-windows-stable-*-x64-mingw.zip)
FILENAME=$(ls Citron-windows-stable-*-x64-clangtron.zip)
VERSION=${FILENAME#Citron-windows-stable-}
VERSION=${VERSION%-x64-mingw.zip}
VERSION=${VERSION%-x64-clangtron.zip}
echo "APP_VERSION=${VERSION}" >> $GITHUB_ENV
- name: Delete Previous Release
run: gh release delete "stable-windows" --repo "${{ github.repository }}" --cleanup-tag -y || true
@@ -1054,7 +1018,8 @@ jobs:
name: "Stable Release (Windows Stable: ${{ env.APP_VERSION }})"
tag_name: "stable-windows"
prerelease: false
files: "*.zip"
files: |
*-x64-clangtron.zip
body: |
**Citron Upstream Commit:** [`${{ needs.check-version.outputs.new_hash }}`](https://github.com/citron-neo/emulator/commit/${{ needs.check-version.outputs.new_hash_full }})
@@ -1062,7 +1027,7 @@ jobs:
**Build Details:**
- Platform: Windows (x64)
- Toolchain: MinGW-w64 (MSYS2 UCRT64)
- Toolchain: Clangtron (Clang LTO cross-compiled from Linux)
- Build Type: Stable
- Date: ${{ env.BUILD_DATE }}
- name: Update LATEST_VERSION
@@ -1084,5 +1049,6 @@ jobs:
WEBHOOK_URL="${{ secrets.DISCORD_WEBHOOK }}"
if [ -z "$WEBHOOK_URL" ]; then echo "DISCORD_WEBHOOK is not set; skipping."; exit 0; fi
curl -H "Content-Type: application/json" \
-d "{\"content\":\"🪟 **New Windows Stable Release!**\n\n📦 **Version:** \`${{ env.APP_VERSION }}\`\n📅 **Date:** ${DATE}\n🔧 **Toolchain:** MinGW-w64 (UCRT64)\n🔗 **Download:** $DOWNLOAD_URL\"}" \
-d "{\"content\":\"🪟 **New Windows Stable Release!**\n\n📦 **Version:** \`${{ env.APP_VERSION }}\`\n📅 **Date:** ${DATE}\n🔧 **Toolchain:** Clangtron (Clang LTO)\n🔗 **Download:** $DOWNLOAD_URL\"}" \
"$WEBHOOK_URL"
+1 -1
View File
@@ -1 +1 @@
3866aa6b0
ff8d5c1
+1 -1
View File
@@ -1 +1 @@
0db11ed05
ff8d5c13f
+2 -4
View File
@@ -1,10 +1,8 @@
# 🍋 The Official Citron-CI
[![GitHub Downloads](https://img.shields.io/github/downloads/citron-neo/CI/total?logo=github&label=GitHub%20Downloads)](https://github.com/citron-neo/CI/releases/latest)
[![Build Citron (Android)](https://github.com/citron-neo/CI/actions/workflows/build-android.yml/badge.svg)](https://github.com/citron-neo/CI/actions/workflows/build-android.yml)
[![Build Citron (Windows)](https://github.com/citron-neo/CI/actions/workflows/build-windows.yml/badge.svg)](https://github.com/citron-neo/CI/actions/workflows/build-windows.yml)
[![Build Citron (Linux)](https://github.com/citron-neo/CI/actions/workflows/build-linux.yml/badge.svg)](https://github.com/citron-neo/CI/actions/workflows/build-linux.yml)
[![Build Citron (macOS)](https://github.com/citron-neo/CI/actions/workflows/build-macos.yml/badge.svg)](https://github.com/citron-neo/CI/actions/workflows/build-macos.yml)
[![Build Citron (Nightly)](https://github.com/citron-neo/CI/actions/workflows/build_nightly.yml/badge.svg)](https://github.com/citron-neo/CI/actions/workflows/build_nightly.yml)
[![Build Citron (Stable)](https://github.com/citron-neo/CI/actions/workflows/build_stable.yml/badge.svg)](https://github.com/citron-neo/CI/actions/workflows/build_stable.yml)
## Star History
+8 -5
View File
@@ -2,6 +2,7 @@
set -ex
ARCH="$(uname -m)"
EXTRA_PACKAGES="https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages/refs/heads/main/useful-tools/get-debloated-pkgs.sh"
pacman -Syu --noconfirm --needed \
base-devel \
@@ -13,34 +14,32 @@ pacman -Syu --noconfirm --needed \
curl \
enet \
fmt \
ffmpeg \
gamemode \
gcc \
git \
glslang \
glu \
hidapi \
libdecor \
libvpx \
libxi \
libxkbcommon-x11 \
libxss \
lld \
llvm \
mbedtls2 \
rapidjson \
mesa \
nasm \
ninja \
nlohmann-json \
numactl \
openal \
patchelf \
pulseaudio \
pulseaudio-alsa \
qt6-base \
qt6-networkauth \
qt6-multimedia \
qt6-svg \
qt6-tools \
qt6-wayland \
qt6-translations \
sdl2 \
unzip \
@@ -54,3 +53,7 @@ pacman -Syu --noconfirm --needed \
xorg-server-xvfb \
zip \
zsync
wget --retry-connrefused --tries=30 "$EXTRA_PACKAGES" -O ./get-debloated-pkgs.sh
chmod +x ./get-debloated-pkgs.sh
./get-debloated-pkgs.sh --add-mesa ffmpeg-mini qt6-base-mini libxml2-mini opus-mini icu-mini
+7 -49
View File
@@ -10,63 +10,21 @@ fi
# Construct unique names for the AppImage and tarball based on the build matrix.
OUTNAME_BASE="citron_nightly-${APP_VERSION}-linux-${ARCH}${ARCH_SUFFIX}"
export OUTNAME_APPIMAGE="${OUTNAME_BASE}.AppImage"
export OUTNAME_TAR="${OUTNAME_BASE}.tar.zst"
URUNTIME="https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages/refs/heads/main/useful-tools/uruntime2appimage.sh"
SHARUN="https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages/refs/heads/main/useful-tools/quick-sharun.sh"
export OUTNAME="${OUTNAME_BASE}.AppImage"
export OUTPATH="$PWD"/dist
export DESKTOP=/usr/share/applications/org.citron_emu.citron.desktop
export ICON=/usr/share/icons/hicolor/scalable/apps/org.citron_emu.citron.svg
export DEPLOY_OPENGL=1
export DEPLOY_VULKAN=1
export DEPLOY_PIPEWIRE=1
wget --retry-connrefused --tries=30 "$SHARUN" -O ./quick-sharun
chmod +x ./quick-sharun
./quick-sharun /usr/bin/citron* /usr/lib/libgamemode.so* /usr/lib/libpulse.so*
echo "Copying Qt translation files..."
mkdir -p ./AppDir/usr/share/qt6
cp -r /usr/share/qt6/translations ./AppDir/usr/share/qt6/
if [ "$DEVEL" = 'true' ]; then
sed -i 's|Name=citron|Name=citron nightly|' ./AppDir/*.desktop
export DEVEL_RELEASE=1
fi
echo 'SHARUN_ALLOW_SYS_VK_ICD=1' > ./AppDir/.env
echo "Creating tar.zst archive..."
(cd AppDir && tar -c --zstd -f ../"$OUTNAME_TAR" usr)
echo "Successfully created $OUTNAME_TAR"
wget --retry-connrefused --tries=30 "$URUNTIME" -O ./uruntime2appimage
chmod +x ./uruntime2appimage
# Run the AppImage creation tool and capture its output to a variable.
BUILD_OUTPUT=$(./uruntime2appimage)
# Print the captured output to the logs for debugging purposes.
echo "$BUILD_OUTPUT"
# Automatically find the AppImage path from the output, strip any ANSI color codes,
# and then use basename to get just the filename.
SOURCE_APPIMAGE=$(basename "$(echo "$BUILD_OUTPUT" | grep "All done! AppImage at:" | awk '{print $NF}' | sed 's/\x1b\[[0-9;]*m//g')")
echo "Discovered source AppImage: ${SOURCE_APPIMAGE}"
echo "Renaming to final suffixed name: ${OUTNAME_APPIMAGE}..."
# Now, use the dynamically discovered and cleaned filename for the move operations.
mv -v "${SOURCE_APPIMAGE}" "${OUTNAME_APPIMAGE}"
mv -v "${SOURCE_APPIMAGE}.zsync" "${OUTNAME_APPIMAGE}.zsync"
mkdir -p ./dist
mv -v ./*.AppImage* ./dist
mv -v ./*.tar.zst ./dist
wget --retry-connrefused --tries=30 "$SHARUN" -O ./quick-sharun
chmod +x ./quick-sharun
./quick-sharun /usr/bin/citron* /usr/lib/libgamemode.so*
./quick-sharun --make-appimage