continuous-integration-workflow.yml 12 KB

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