2
0

continuous-integration-workflow.yml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. name: CI
  2. on:
  3. push:
  4. branches:
  5. - master
  6. schedule:
  7. - cron: '0 10 * * *' # Once per day at 10am UTC
  8. env:
  9. SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
  10. GRADLE_ENTERPRISE_CACHE_USER: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }}
  11. GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }}
  12. GRADLE_ENTERPRISE_SECRET_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }}
  13. COMMIT_OWNER: ${{ github.event.pusher.name }}
  14. COMMIT_SHA: ${{ github.sha }}
  15. jobs:
  16. initiate_error_tracking:
  17. name: Initiate job-level error tracking
  18. runs-on: ubuntu-latest
  19. steps:
  20. - uses: actions/checkout@v2
  21. - name: Initiate error tracking
  22. uses: spring-projects/track-build-errors-action@v1
  23. with:
  24. job-name: "initiate-error-tracking"
  25. - name: Export errors file
  26. uses: actions/upload-artifact@v2
  27. with:
  28. name: errors
  29. path: job-initiate-error-tracking.txt
  30. build_jdk_8:
  31. name: Build JDK 8
  32. runs-on: ubuntu-latest
  33. steps:
  34. - uses: actions/checkout@v2
  35. - name: Set up JDK 8
  36. uses: actions/setup-java@v1
  37. with:
  38. java-version: '8'
  39. - name: Cache Gradle packages
  40. uses: actions/cache@v2
  41. with:
  42. path: ~/.gradle/caches
  43. key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
  44. - name: Build with Gradle
  45. run: |
  46. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  47. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  48. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  49. ./gradlew clean build --continue
  50. - name: Track error step
  51. uses: spring-projects/track-build-errors-action@v1
  52. if: ${{ failure() }}
  53. with:
  54. job-name: ${{ github.job }}
  55. - name: Export errors file
  56. uses: actions/upload-artifact@v2
  57. if: ${{ failure() }}
  58. with:
  59. name: errors
  60. path: job-${{ github.job }}.txt
  61. test_alternate_jdks:
  62. name: Test JDK 11 and 12
  63. runs-on: ubuntu-latest
  64. strategy:
  65. matrix:
  66. jdk: [11, 12]
  67. fail-fast: false
  68. steps:
  69. - uses: actions/checkout@v2
  70. - name: Set up JDK ${{ matrix.jdk }}
  71. uses: actions/setup-java@v1
  72. with:
  73. java-version: ${{ matrix.jdk }}
  74. - name: Cache Gradle packages
  75. uses: actions/cache@v2
  76. with:
  77. path: ~/.gradle/caches
  78. key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
  79. - name: Test with Gradle
  80. run: |
  81. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  82. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  83. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  84. ./gradlew test --stacktrace
  85. - name: Track error step
  86. uses: spring-projects/track-build-errors-action@v1
  87. if: ${{ failure() }}
  88. with:
  89. job-name: ${{ github.job }}-${{ matrix.jdk }}
  90. - name: Export errors file
  91. uses: actions/upload-artifact@v2
  92. if: ${{ failure() }}
  93. with:
  94. name: errors
  95. path: job-${{ github.job }}-${{ matrix.jdk }}.txt
  96. snapshot_tests:
  97. name: Test against snapshots
  98. runs-on: ubuntu-latest
  99. steps:
  100. - uses: actions/checkout@v2
  101. - name: Set up JDK
  102. uses: actions/setup-java@v1
  103. with:
  104. java-version: '8'
  105. - name: Snapshot Tests
  106. run: |
  107. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  108. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  109. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  110. ./gradlew test --refresh-dependencies -PforceMavenRepositories=snapshot -PspringVersion='5.+' -PreactorVersion='20+' -PspringDataVersion='Neumann-BUILD-SNAPSHOT' -PrsocketVersion=1.1.0-SNAPSHOT -PspringBootVersion=2.4.0-SNAPSHOT -PlocksDisabled --stacktrace
  111. - name: Track error step
  112. uses: spring-projects/track-build-errors-action@v1
  113. if: ${{ failure() }}
  114. with:
  115. job-name: ${{ github.job }}
  116. - name: Export errors file
  117. uses: actions/upload-artifact@v2
  118. if: ${{ failure() }}
  119. with:
  120. name: errors
  121. path: job-${{ github.job }}.txt
  122. sonar_analysis:
  123. name: Static Code Analysis
  124. runs-on: ubuntu-latest
  125. env:
  126. SONAR_URL: ${{ secrets.SONAR_URL }}
  127. SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
  128. steps:
  129. - uses: actions/checkout@v2
  130. - name: Set up JDK
  131. uses: actions/setup-java@v1
  132. with:
  133. java-version: '8'
  134. - name: Run Sonar on given (non-master) branch
  135. if: ${{ github.ref != 'refs/heads/master' }}
  136. run: |
  137. export BRANCH=${GITHUB_REF#refs/heads/}
  138. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  139. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  140. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  141. ./gradlew sonarqube -PexcludeProjects='**/samples/**' -Dsonar.projectKey="spring-security-${GITHUB_REF#refs/heads/}" -Dsonar.projectName="spring-security-${GITHUB_REF#refs/heads/}" -Dsonar.host.url="$SONAR_URL" -Dsonar.login="$SONAR_TOKEN" --stacktrace
  142. - name: Run Sonar on master
  143. if: ${{ github.ref == 'refs/heads/master' }}
  144. run: |
  145. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  146. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  147. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  148. ./gradlew sonarqube -PexcludeProjects='**/samples/**' -Dsonar.host.url="$SONAR_URL" -Dsonar.login="$SONAR_TOKEN" --stacktrace
  149. - name: Track error step
  150. uses: spring-projects/track-build-errors-action@v1
  151. if: ${{ failure() }}
  152. with:
  153. job-name: ${{ github.job }}
  154. - name: Export errors file
  155. uses: actions/upload-artifact@v2
  156. if: ${{ failure() }}
  157. with:
  158. name: errors
  159. path: job-${{ github.job }}.txt
  160. deploy_artifacts:
  161. name: Deploy Artifacts
  162. needs: [build_jdk_8, test_alternate_jdks, snapshot_tests, sonar_analysis]
  163. runs-on: ubuntu-latest
  164. steps:
  165. - uses: actions/checkout@v2
  166. - name: Set up JDK
  167. uses: actions/setup-java@v1
  168. with:
  169. java-version: '8'
  170. - name: Deploy artifacts
  171. run: |
  172. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  173. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  174. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  175. export VERSION_HEADER=$'Version: GnuPG v2\n\n'
  176. export ORG_GRADLE_PROJECT_signingKey=${GPG_PRIVATE_KEY#"$VERSION_HEADER"}
  177. export ORG_GRADLE_PROJECT_signingPassword="$GPG_PASSPHRASE"
  178. ./gradlew deployArtifacts -PossrhUsername="$OSSRH_TOKEN_USERNAME" -PossrhPassword="$OSSRH_TOKEN_PASSWORD" -PartifactoryUsername="$ARTIFACTORY_USERNAME" -PartifactoryPassword="$ARTIFACTORY_PASSWORD" --stacktrace --no-parallel
  179. ./gradlew finalizeDeployArtifacts -PossrhUsername="$OSSRH_TOKEN_USERNAME" -PossrhPassword="$OSSRH_TOKEN_PASSWORD" -PartifactoryUsername="$ARTIFACTORY_USERNAME" -PartifactoryPassword="$ARTIFACTORY_PASSWORD" --stacktrace --no-parallel
  180. env:
  181. GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
  182. GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
  183. OSSRH_TOKEN_USERNAME: ${{ secrets.OSSRH_TOKEN_USERNAME }}
  184. OSSRH_TOKEN_PASSWORD: ${{ secrets.OSSRH_TOKEN_PASSWORD }}
  185. ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }}
  186. ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }}
  187. - name: Track error step
  188. uses: spring-projects/track-build-errors-action@v1
  189. if: ${{ failure() }}
  190. with:
  191. job-name: ${{ github.job }}
  192. - name: Export errors file
  193. uses: actions/upload-artifact@v2
  194. if: ${{ failure() }}
  195. with:
  196. name: errors
  197. path: job-${{ github.job }}.txt
  198. deploy_docs:
  199. name: Deploy Docs
  200. needs: [build_jdk_8, test_alternate_jdks, snapshot_tests, sonar_analysis]
  201. runs-on: ubuntu-latest
  202. steps:
  203. - uses: actions/checkout@v2
  204. - name: Set up JDK
  205. uses: actions/setup-java@v1
  206. with:
  207. java-version: '8'
  208. - name: Deploy Docs
  209. run: |
  210. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  211. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  212. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  213. ./gradlew deployDocs -PdeployDocsSshKey="$DOCS_SSH_KEY" -PdeployDocsSshUsername="$DOCS_USERNAME" -PdeployDocsHost="$DOCS_HOST" --stacktrace
  214. env:
  215. DOCS_USERNAME: ${{ secrets.DOCS_USERNAME }}
  216. DOCS_SSH_KEY: ${{ secrets.DOCS_SSH_KEY }}
  217. DOCS_HOST: ${{ secrets.DOCS_HOST }}
  218. - name: Track error step
  219. uses: spring-projects/track-build-errors-action@v1
  220. if: ${{ failure() }}
  221. with:
  222. job-name: ${{ github.job }}
  223. - name: Export errors file
  224. uses: actions/upload-artifact@v2
  225. if: ${{ failure() }}
  226. with:
  227. name: errors
  228. path: job-${{ github.job }}.txt
  229. deploy_schema:
  230. name: Deploy Schema
  231. needs: [build_jdk_8, test_alternate_jdks, snapshot_tests, sonar_analysis]
  232. runs-on: ubuntu-latest
  233. steps:
  234. - uses: actions/checkout@v2
  235. - name: Set up JDK
  236. uses: actions/setup-java@v1
  237. with:
  238. java-version: '8'
  239. - name: Deploy Schema
  240. run: |
  241. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  242. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  243. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  244. ./gradlew deploySchema -PdeployDocsSshKey="$DOCS_SSH_KEY" -PdeployDocsSshUsername="$DOCS_USERNAME" -PdeployDocsHost="$DOCS_HOST" --stacktrace --info
  245. env:
  246. DOCS_USERNAME: ${{ secrets.DOCS_USERNAME }}
  247. DOCS_SSH_KEY: ${{ secrets.DOCS_SSH_KEY }}
  248. DOCS_HOST: ${{ secrets.DOCS_HOST }}
  249. - name: Track error step
  250. uses: spring-projects/track-build-errors-action@v1
  251. if: ${{ failure() }}
  252. with:
  253. job-name: ${{ github.job }}
  254. - name: Export errors file
  255. uses: actions/upload-artifact@v2
  256. if: ${{ failure() }}
  257. with:
  258. name: errors
  259. path: job-${{ github.job }}.txt
  260. notify_result:
  261. name: Check for failures
  262. needs: [build_jdk_8, test_alternate_jdks, snapshot_tests, sonar_analysis, deploy_artifacts, deploy_docs, deploy_schema]
  263. if: always()
  264. runs-on: ubuntu-latest
  265. steps:
  266. - uses: actions/checkout@v2
  267. - name: Download errors folder
  268. uses: actions/download-artifact@v2
  269. with:
  270. name: errors
  271. - name: Send Slack message
  272. uses: spring-projects/notify-slack-errors-action@v1
  273. with:
  274. slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
  275. branch-name: ${{ github.ref }}
  276. commit-sha: ${{ github.sha }}
  277. commit-owner: ${{ github.actor }}
  278. repo-name: ${{ github.repository }}
  279. run-id: ${{ github.run_id }}