build.yml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  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. - name: Clean and download dependencies
  168. run: ./gradlew clean ${{ env.gradleArgs }}
  169. - run: >
  170. ./gradlew updateSnapshotVersion ${{ env.gradleArgs }}
  171. if: github.event.pusher && vars.RUN_MIRAI_SNAPSHOTS == 'true'
  172. env:
  173. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  174. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  175. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  176. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  177. MIRAI_BUILD_INDEX_AUTH_USERNAME: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_USERNAME }}
  178. MIRAI_BUILD_INDEX_AUTH_PASSWORD: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_PASSWORD }}
  179. - name: "Assemble"
  180. run: ./gradlew assemble ${{ env.gradleArgs }}
  181. - name: Publish Local Artifacts
  182. if: ${{ env.enableLocalPublishingTest == 'true' }}
  183. run: ./gradlew :mirai-deps-test:publishMiraiArtifactsToMavenLocal ${{ env.gradleArgs }} "-Dmirai.build.project.version=2.99.0-deps-test"
  184. - name: "Check"
  185. run: ./gradlew check ${{ env.gradleArgs }}
  186. - if: ${{ env.isMac == 'true' }}
  187. name: Ensure KDoc valid
  188. run: ./gradlew dokkaHtmlMultiModule ${{ env.gradleArgs }}
  189. - name: Release RAM
  190. run: node ci-release-helper/scripts/kill-java.js
  191. - name: Publish Snapshots
  192. if: ${{ github.event.pusher && env.isMac == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  193. run: ./gradlew publishAllPublicationsToMiraiRepoRepository ${{ env.gradleArgs }}
  194. env:
  195. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  196. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  197. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  198. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  199. build-mirai-core-native:
  200. name: "Native (${{ matrix.os }})"
  201. runs-on: ${{ matrix.os }}
  202. strategy:
  203. fail-fast: false
  204. matrix:
  205. os:
  206. - windows-2022
  207. - ubuntu-20.04
  208. # - ubuntu-18.04
  209. # - macos-12
  210. # - macos-11
  211. include:
  212. - os: windows-2022
  213. targetName: mingwX64
  214. - os: ubuntu-20.04
  215. targetName: linuxX64
  216. # - os: macos-12
  217. # targetName: macosX64
  218. # - os: macos-11
  219. # targetName: macosX64
  220. env:
  221. # FIXME there must be two or more targets, or we'll get error on `@OptionalExpectation`
  222. # > Declaration annotated with '@OptionalExpectation' can only be used in common module sources
  223. enableLocalPublishingTest: 'false'
  224. gradleArgs: --scan "-Dmirai.target=jvm;${{ matrix.targetName }};!other" "-Pkotlin.compiler.execution.strategy=in-process" "-Dorg.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8"
  225. isMac: ${{ startsWith(matrix.os, 'macos') }}
  226. isWindows: ${{ startsWith(matrix.os, 'windows') }}
  227. isUbuntu: ${{ startsWith(matrix.os, 'ubuntu') }}
  228. isUnix: ${{ startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') }}
  229. VCPKG_DEFAULT_BINARY_CACHE: ${{ startsWith(matrix.os, 'windows') && 'C:\vcpkg\binary_cache' || '/usr/local/share/vcpkg/binary_cache' }}
  230. steps:
  231. - uses: actions/checkout@v3
  232. with:
  233. submodules: 'recursive'
  234. - uses: actions/setup-java@v3
  235. with:
  236. distribution: 'adopt-openj9'
  237. java-version: '17'
  238. - name: Setup Gradle
  239. uses: gradle/gradle-build-action@v2
  240. - name: Cache konan
  241. uses: pat-s/[email protected]
  242. with:
  243. path: ~/.konan
  244. key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
  245. restore-keys: |
  246. ${{ runner.os }}-gradle-
  247. - name: Prepare to cache vcpkg
  248. if: ${{ env.isWindows == 'true' }}
  249. run: mkdir -p ${{ env.VCPKG_DEFAULT_BINARY_CACHE }}
  250. - name: Cache vcpkg
  251. if: ${{ env.isWindows == 'true' }}
  252. uses: pat-s/[email protected]
  253. with:
  254. path: ${{ env.VCPKG_DEFAULT_BINARY_CACHE }}
  255. key: ${{ runner.os }}-vcpkg-binary-cache-${{ github.job }}
  256. restore-keys: |
  257. ${{ runner.os }}-vcpkg-binary-cache-
  258. - if: ${{ env.isUnix == 'true' }}
  259. run: chmod -R 777 *
  260. # Prepare environment for linking on macOS
  261. - if: ${{ env.isMac == 'true' }}
  262. name: Install OpenSSL on Mac OS
  263. run: >
  264. git clone https://github.com/openssl/openssl.git --recursive &&
  265. cd openssl &&
  266. git checkout tags/openssl-3.0.3 &&
  267. ./Configure --prefix=/opt/openssl --openssldir=/usr/local/ssl &&
  268. make &&
  269. sudo make install
  270. # Prepare environment for linking on Ubuntu
  271. - if: ${{ env.isUbuntu == 'true' }}
  272. name: Install OpenSSL on Ubuntu
  273. run: sudo apt install libssl-dev -y
  274. # Prepare environment for linking on Windows
  275. - if: ${{ env.isWindows == 'true' }}
  276. name: Setup Memory Environment on Windows
  277. run: >
  278. wmic pagefileset where name="D:\\pagefile.sys" set InitialSize=1024,MaximumSize=9216 &
  279. net stop mongodb
  280. shell: cmd
  281. continue-on-error: true
  282. - if: ${{ env.isWindows == 'true' }}
  283. name: Install OpenSSL & cURL on Windows
  284. run: |
  285. echo "set(VCPKG_BUILD_TYPE release)" | Out-File -FilePath "$env:VCPKG_INSTALLATION_ROOT\triplets\x64-windows.cmake" -Encoding utf8 -Append
  286. vcpkg install openssl:x64-windows curl[core,ssl]:x64-windows
  287. 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
  288. 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
  289. 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
  290. echo "$env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
  291. - name: Clean and download dependencies
  292. run: ./gradlew clean ${{ env.gradleArgs }}
  293. - run: >
  294. ./gradlew updateSnapshotVersion ${{ env.gradleArgs }}
  295. if: github.event.pusher && vars.RUN_MIRAI_SNAPSHOTS == 'true'
  296. env:
  297. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  298. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  299. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  300. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  301. MIRAI_BUILD_INDEX_AUTH_USERNAME: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_USERNAME }}
  302. MIRAI_BUILD_INDEX_AUTH_PASSWORD: ${{ secrets.MIRAI_BUILD_INDEX_AUTH_PASSWORD }}
  303. - name: "Test mirai-core-utils for ${{ matrix.os }}"
  304. run: ./gradlew :mirai-core-utils:${{ matrix.targetName }}Test ${{ env.gradleArgs }}
  305. - name: "Test mirai-core-api for ${{ matrix.os }}"
  306. run: ./gradlew :mirai-core-api:${{ matrix.targetName }}Test ${{ env.gradleArgs }}
  307. - name: "Test mirai-core for ${{ matrix.os }}"
  308. run: ./gradlew :mirai-core:${{ matrix.targetName }}Test ${{ env.gradleArgs }}
  309. - name: Publish Local Artifacts
  310. if: ${{ env.enableLocalPublishingTest == 'true' }}
  311. run: ./gradlew :mirai-deps-test:publishMiraiArtifactsToMavenLocal ${{ env.gradleArgs }} "-Dmirai.build.project.version=2.99.0-deps-test"
  312. - name: Check Publication
  313. if: ${{ env.enableLocalPublishingTest == 'true' }}
  314. run: ./gradlew :mirai-deps-test:check ${{ env.gradleArgs }}
  315. # Publish native snapshots. Other artifacts are published in build-mirai-all
  316. - name: Release RAM
  317. run: node ci-release-helper/scripts/kill-java.js
  318. - name: Publish MingwX64 Snapshots
  319. if: ${{ github.event.pusher && env.isWindows == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  320. run: ./gradlew publishMingwX64PublicationToMiraiRepoRepository ${{ env.gradleArgs }}
  321. env:
  322. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  323. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  324. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  325. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  326. - name: Publish LinuxX64 Snapshots
  327. if: ${{ github.event.pusher && env.isUbuntu == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  328. run: ./gradlew publishLinuxX64PublicationToMiraiRepoRepository ${{ env.gradleArgs }}
  329. env:
  330. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  331. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  332. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  333. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}
  334. - name: Publish macOSX64 Snapshots
  335. if: ${{ github.event.pusher && env.isMac == 'true' && vars.RUN_MIRAI_SNAPSHOTS == 'true' }}
  336. run: ./gradlew publishMacosX64PublicationToMiraiRepoRepository ${{ env.gradleArgs }}
  337. env:
  338. MIRAI_IS_SNAPSHOTS_PUBLISHING: true
  339. SNAPSHOTS_PUBLISHING_USER: ${{ secrets.SNAPSHOTS_PUBLISHING_USER }}
  340. SNAPSHOTS_PUBLISHING_KEY: ${{ secrets.SNAPSHOTS_PUBLISHING_KEY }}
  341. SNAPSHOTS_PUBLISHING_URL: ${{ secrets.SNAPSHOTS_PUBLISHING_URL }}