build.yml 18 KB

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