build.yml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. name: Build
  2. on:
  3. push:
  4. paths-ignore:
  5. - 'docs/**'
  6. - 'mirai-console/docs/**'
  7. - '**/*.md'
  8. pull_request:
  9. paths-ignore:
  10. - 'docs/**'
  11. - 'mirai-console/docs/**'
  12. - '**/*.md'
  13. jobs:
  14. build-mirai-jvm:
  15. name: "JVM (${{ matrix.os }})"
  16. runs-on: ${{ matrix.os }}
  17. strategy:
  18. fail-fast: false
  19. matrix:
  20. os: # You must use macos-12. Only macos-12 get 14GB memory while others have only 7GB.
  21. # - windows-2022
  22. - macos-12
  23. env:
  24. gradleArgs: --scan "-Dmirai.target=jvm;android;!other" "-Pkotlin.compiler.execution.strategy=in-process" "-Dorg.gradle.jvmargs=-Xmx6000m" "-Dfile.encoding=UTF-8"
  25. isMac: ${{ startsWith(matrix.os, 'macos') }}
  26. isWindows: ${{ startsWith(matrix.os, 'windows') }}
  27. isUbuntu: ${{ startsWith(matrix.os, 'ubuntu') }}
  28. isUnix: ${{ startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') }}
  29. steps:
  30. - uses: actions/checkout@v3
  31. with:
  32. submodules: 'recursive'
  33. - uses: actions/setup-java@v3
  34. with:
  35. distribution: 'temurin'
  36. java-version: '17'
  37. - name: Setup Gradle
  38. uses: gradle/gradle-build-action@v2
  39. - if: ${{ env.isUnix == 'true' }}
  40. run: chmod -R 777 *
  41. - if: ${{ env.isWindows == 'true' }}
  42. name: Setup Memory Environment on Windows
  43. run: >
  44. wmic pagefileset where name="D:\\pagefile.sys" set InitialSize=1024,MaximumSize=18432 &
  45. net stop mongodb
  46. shell: cmd
  47. continue-on-error: true
  48. - name: Clean and download dependencies
  49. run: ./gradlew clean ${{ env.gradleArgs }}
  50. - run: >
  51. ./gradlew updateSnapshotVersion ${{ env.gradleArgs }}
  52. if: github.event.pusher && vars.RUN_MIRAI_SNAPSHOTS == 'true'
  53. env:
  54. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  55. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  56. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  57. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  58. MIRAI_BUILD_INDEX_AUTH_USERNAME: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_USERNAME }}
  59. MIRAI_BUILD_INDEX_AUTH_PASSWORD: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_PASSWORD }}
  60. - name: "Assemble"
  61. run: ./gradlew assemble ${{ env.gradleArgs }}
  62. - name: Publish Local Artifacts
  63. if: ${{ env.enableLocalPublishingTest == 'true' }}
  64. run: ./gradlew :mirai-deps-test:publishMiraiArtifactsToMavenLocal ${{ env.gradleArgs }} "-Dmirai.build.project.version=2.99.0-deps-test"
  65. - name: "Check"
  66. run: ./gradlew check ${{ env.gradleArgs }}
  67. # Upload
  68. - name: Upload mirai-core-utils
  69. uses: actions/upload-artifact@v3
  70. with:
  71. name: mirai-core-utils
  72. path: mirai-core-utils/build/libs
  73. - name: Upload mirai-core-api
  74. uses: actions/upload-artifact@v3
  75. with:
  76. name: mirai-core-api
  77. path: mirai-core-api/build/libs
  78. - name: Upload mirai-core
  79. uses: actions/upload-artifact@v3
  80. with:
  81. name: mirai-core
  82. path: mirai-core/build/libs
  83. - name: Upload mirai-core-all
  84. uses: actions/upload-artifact@v3
  85. with:
  86. name: mirai-core-all
  87. path: mirai-core-all/build/libs
  88. - name: Upload mirai-console
  89. uses: actions/upload-artifact@v3
  90. with:
  91. name: mirai-console
  92. path: mirai-console/backend/mirai-console/build/libs
  93. - name: Upload mirai-console-terminal
  94. uses: actions/upload-artifact@v3
  95. with:
  96. name: mirai-console-terminal
  97. path: mirai-console/frontend/mirai-console-terminal/build/libs
  98. - name: Upload mirai-console-compiler-annotations
  99. uses: actions/upload-artifact@v3
  100. with:
  101. name: mirai-console-compiler-annotations
  102. path: mirai-console/tools/mirai-console-compiler-annotations/build/libs
  103. - name: Upload mirai-console-compiler-common
  104. uses: actions/upload-artifact@v3
  105. with:
  106. name: mirai-console-compiler-common
  107. path: mirai-console/tools/mirai-console-compiler-common/build/libs
  108. - name: Upload mirai-console-intellij
  109. uses: actions/upload-artifact@v3
  110. with:
  111. name: mirai-console-intellij
  112. path: mirai-console/tools/intelli-plugin/build/distribution
  113. - name: Upload mirai-logging-log4j2
  114. uses: actions/upload-artifact@v3
  115. with:
  116. name: mirai-logging-log4j2
  117. path: logging/mirai-logging-log4j2/build/libs
  118. - name: Upload mirai-logging-slf4j
  119. uses: actions/upload-artifact@v3
  120. with:
  121. name: mirai-logging-slf4j
  122. path: logging/mirai-logging-slf4j/build/libs
  123. - name: Upload mirai-logging-slf4j-logback
  124. uses: actions/upload-artifact@v3
  125. with:
  126. name: mirai-logging-slf4j-logback
  127. path: logging/mirai-logging-slf4j-logback/build/libs
  128. - name: Upload mirai-logging-slf4j-simple
  129. uses: actions/upload-artifact@v3
  130. with:
  131. name: mirai-logging-slf4j-simple
  132. path: logging/mirai-logging-slf4j-simple/build/libs
  133. build-mirai-all:
  134. name: "Everything (${{ matrix.os }})"
  135. runs-on: ${{ matrix.os }}
  136. strategy:
  137. fail-fast: false
  138. matrix:
  139. os:
  140. - macos-12
  141. env:
  142. enableLocalPublishingTest: 'false'
  143. gradleArgs: --scan
  144. isMac: ${{ startsWith(matrix.os, 'macos') }}
  145. isWindows: ${{ startsWith(matrix.os, 'windows') }}
  146. isUbuntu: ${{ startsWith(matrix.os, 'ubuntu') }}
  147. isUnix: ${{ startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') }}
  148. steps:
  149. - uses: actions/checkout@v3
  150. with:
  151. submodules: 'recursive'
  152. - uses: actions/setup-java@v3
  153. with:
  154. distribution: 'temurin'
  155. java-version: '17'
  156. - name: Setup Gradle
  157. uses: gradle/gradle-build-action@v2
  158. - name: Cache konan
  159. uses: pat-s/[email protected]
  160. with:
  161. path: ~/.konan
  162. key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
  163. restore-keys: |
  164. ${{ runner.os }}-gradle-
  165. - if: ${{ env.isUnix == 'true' }}
  166. run: chmod -R 777 *
  167. # Prepare environment for linking for macOS
  168. - if: ${{ env.isMac == 'true' }}
  169. name: Install OpenSSL
  170. run: >
  171. git clone https://github.com/openssl/openssl.git --recursive &&
  172. cd openssl &&
  173. git checkout tags/openssl-3.0.3 &&
  174. ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl &&
  175. make &&
  176. sudo make install
  177. - name: Clean and download dependencies
  178. run: ./gradlew clean ${{ env.gradleArgs }}
  179. - run: >
  180. ./gradlew updateSnapshotVersion ${{ env.gradleArgs }}
  181. if: github.event.pusher && vars.RUN_MIRAI_SNAPSHOTS == 'true'
  182. env:
  183. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  184. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  185. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  186. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  187. MIRAI_BUILD_INDEX_AUTH_USERNAME: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_USERNAME }}
  188. MIRAI_BUILD_INDEX_AUTH_PASSWORD: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_PASSWORD }}
  189. - name: "Assemble"
  190. run: ./gradlew assemble ${{ env.gradleArgs }}
  191. - name: Publish Local Artifacts
  192. if: ${{ env.enableLocalPublishingTest == 'true' }}
  193. run: ./gradlew :mirai-deps-test:publishMiraiArtifactsToMavenLocal ${{ env.gradleArgs }} "-Dmirai.build.project.version=2.99.0-deps-test"
  194. - name: "Check"
  195. run: ./gradlew check ${{ env.gradleArgs }}
  196. - if: ${{ env.isMac == 'true' }}
  197. name: Ensure KDoc valid
  198. run: ./gradlew dokkaHtmlMultiModule ${{ env.gradleArgs }}
  199. - name: Release RAM
  200. run: node ci-release-helper/scripts/kill-java.js
  201. - name: Publish Snapshots
  202. if: ${{ github.event.pusher && env.isMac == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  203. run: ./gradlew publishAllPublicationsToMiraiRepoRepository ${{ env.gradleArgs }}
  204. env:
  205. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  206. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  207. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  208. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  209. build-mirai-core-native:
  210. name: "Native (${{ matrix.os }})"
  211. runs-on: ${{ matrix.os }}
  212. strategy:
  213. fail-fast: false
  214. matrix:
  215. os:
  216. - windows-2022
  217. - ubuntu-20.04
  218. # - ubuntu-18.04
  219. # - macos-12
  220. # - macos-11
  221. include:
  222. - os: windows-2022
  223. targetName: mingwX64
  224. - os: ubuntu-20.04
  225. targetName: linuxX64
  226. # - os: macos-12
  227. # targetName: macosX64
  228. # - os: macos-11
  229. # targetName: macosX64
  230. env:
  231. # FIXME there must be two or more targets, or we'll get error on `@OptionalExpectation`
  232. # > Declaration annotated with '@OptionalExpectation' can only be used in common module sources
  233. enableLocalPublishingTest: 'false'
  234. gradleArgs: --scan "-Dmirai.target=jvm;${{ matrix.targetName }};!other" "-Pkotlin.compiler.execution.strategy=in-process" "-Dorg.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8"
  235. isMac: ${{ startsWith(matrix.os, 'macos') }}
  236. isWindows: ${{ startsWith(matrix.os, 'windows') }}
  237. isUbuntu: ${{ startsWith(matrix.os, 'ubuntu') }}
  238. isUnix: ${{ startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') }}
  239. VCPKG_DEFAULT_BINARY_CACHE: ${{ startsWith(matrix.os, 'windows') && 'C:\vcpkg\binary_cache' || '/usr/local/share/vcpkg/binary_cache' }}
  240. steps:
  241. - uses: actions/checkout@v3
  242. with:
  243. submodules: 'recursive'
  244. - uses: actions/setup-java@v3
  245. with:
  246. distribution: 'adopt-openj9'
  247. java-version: '17'
  248. - name: Setup Gradle
  249. uses: gradle/gradle-build-action@v2
  250. - name: Cache konan
  251. uses: pat-s/[email protected]
  252. with:
  253. path: ~/.konan
  254. key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
  255. restore-keys: |
  256. ${{ runner.os }}-gradle-
  257. - name: Prepare to cache vcpkg
  258. if: ${{ env.isWindows == 'true' }}
  259. run: mkdir -p ${{ env.VCPKG_DEFAULT_BINARY_CACHE }}
  260. - name: Cache vcpkg
  261. if: ${{ env.isWindows == 'true' }}
  262. uses: pat-s/[email protected]
  263. with:
  264. path: ${{ env.VCPKG_DEFAULT_BINARY_CACHE }}
  265. key: ${{ runner.os }}-vcpkg-binary-cache-${{ github.job }}
  266. restore-keys: |
  267. ${{ runner.os }}-vcpkg-binary-cache-
  268. - if: ${{ env.isUnix == 'true' }}
  269. run: chmod -R 777 *
  270. # Prepare environment for linking on macOS
  271. - if: ${{ env.isMac == 'true' }}
  272. name: Install OpenSSL on Mac OS
  273. run: >
  274. git clone https://github.com/openssl/openssl.git --recursive &&
  275. cd openssl &&
  276. git checkout tags/openssl-3.0.3 &&
  277. ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl &&
  278. make &&
  279. sudo make install
  280. # Prepare environment for linking on Ubuntu
  281. - if: ${{ env.isUbuntu == 'true' }}
  282. name: Install OpenSSL on Ubuntu
  283. run: sudo apt install libssl-dev -y
  284. # Prepare environment for linking on Windows
  285. - if: ${{ env.isWindows == 'true' }}
  286. name: Setup Memory Environment on Windows
  287. run: >
  288. wmic pagefileset where name="D:\\pagefile.sys" set InitialSize=1024,MaximumSize=9216 &
  289. net stop mongodb
  290. shell: cmd
  291. continue-on-error: true
  292. - if: ${{ env.isWindows == 'true' }}
  293. name: Install OpenSSL & cURL on Windows
  294. run: |
  295. echo "set(VCPKG_BUILD_TYPE release)" | Out-File -FilePath "$env:VCPKG_INSTALLATION_ROOT\triplets\x64-windows.cmake" -Encoding utf8 -Append
  296. vcpkg install openssl:x64-windows curl[core,ssl]:x64-windows
  297. New-Item -Path $env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\lib\crypto.lib -ItemType SymbolicLink -Value $env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\lib\libcrypto.lib
  298. New-Item -Path $env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\lib\ssl.lib -ItemType SymbolicLink -Value $env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\lib\libssl.lib
  299. New-Item -Path $env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\lib\curl.lib -ItemType SymbolicLink -Value $env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\lib\libcurl.lib
  300. echo "$env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
  301. - name: Clean and download dependencies
  302. run: ./gradlew clean ${{ env.gradleArgs }}
  303. - run: >
  304. ./gradlew updateSnapshotVersion ${{ env.gradleArgs }}
  305. if: github.event.pusher && vars.RUN_MIRAI_SNAPSHOTS == 'true'
  306. env:
  307. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  308. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  309. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  310. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  311. MIRAI_BUILD_INDEX_AUTH_USERNAME: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_USERNAME }}
  312. MIRAI_BUILD_INDEX_AUTH_PASSWORD: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_PASSWORD }}
  313. - name: "Test mirai-core-utils for ${{ matrix.os }}"
  314. run: ./gradlew :mirai-core-utils:${{ matrix.targetName }}Test ${{ env.gradleArgs }}
  315. - name: "Test mirai-core-api for ${{ matrix.os }}"
  316. run: ./gradlew :mirai-core-api:${{ matrix.targetName }}Test ${{ env.gradleArgs }}
  317. - name: "Test mirai-core for ${{ matrix.os }}"
  318. run: ./gradlew :mirai-core:${{ matrix.targetName }}Test ${{ env.gradleArgs }}
  319. - name: Publish Local Artifacts
  320. if: ${{ env.enableLocalPublishingTest == 'true' }}
  321. run: ./gradlew :mirai-deps-test:publishMiraiArtifactsToMavenLocal ${{ env.gradleArgs }} "-Dmirai.build.project.version=2.99.0-deps-test"
  322. - name: Check Publication
  323. if: ${{ env.enableLocalPublishingTest == 'true' }}
  324. run: ./gradlew :mirai-deps-test:check ${{ env.gradleArgs }}
  325. # Publish native snapshots. Other artifacts are published in build-mirai-all
  326. - name: Release RAM
  327. run: node ci-release-helper/scripts/kill-java.js
  328. - name: Publish MingwX64 Snapshots
  329. if: ${{ github.event.pusher && env.isWindows == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  330. run: ./gradlew publishMingwX64PublicationToMiraiRepoRepository ${{ env.gradleArgs }}
  331. env:
  332. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  333. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  334. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  335. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  336. - name: Publish LinuxX64 Snapshots
  337. if: ${{ github.event.pusher && env.isUbuntu == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  338. run: ./gradlew publishLinuxX64PublicationToMiraiRepoRepository ${{ env.gradleArgs }}
  339. env:
  340. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  341. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  342. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  343. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  344. - name: Publish macOSX64 Snapshots
  345. if: ${{ github.event.pusher && env.isMac == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  346. run: ./gradlew publishMacosX64PublicationToMiraiRepoRepository ${{ env.gradleArgs }}
  347. env:
  348. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  349. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  350. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  351. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}