release-next-version.yml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. name: Release Next Version
  2. on:
  3. schedule:
  4. - cron: '0 17 * * MON' # Every Monday at 5pm UTC
  5. workflow_dispatch: # Manual trigger
  6. env:
  7. SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
  8. GRADLE_ENTERPRISE_CACHE_USER: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }}
  9. GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }}
  10. GRADLE_ENTERPRISE_SECRET_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }}
  11. RUN_JOBS: ${{ github.repository == 'spring-projects/spring-security' }}
  12. jobs:
  13. prerequisites:
  14. name: Pre-requisites for building
  15. runs-on: ubuntu-latest
  16. outputs:
  17. runjobs: ${{ steps.continue.outputs.runjobs }}
  18. steps:
  19. - id: continue
  20. name: Determine if should continue
  21. if: env.RUN_JOBS == 'true'
  22. run: echo "::set-output name=runjobs::true"
  23. check_release_due:
  24. name: Check if the release is due today
  25. needs: [prerequisites]
  26. runs-on: ubuntu-latest
  27. if: needs.prerequisites.outputs.runjobs
  28. steps:
  29. - uses: actions/checkout@v2
  30. - name: Set up JDK 17
  31. uses: actions/setup-java@v1
  32. with:
  33. java-version: '17'
  34. - name: Setup gradle user name
  35. run: |
  36. mkdir -p ~/.gradle
  37. echo 'systemProp.user.name=spring-builds+github' >> ~/.gradle/gradle.properties
  38. - name: Setup Gradle
  39. uses: gradle/gradle-build-action@v2
  40. env:
  41. GRADLE_USER_HOME: ~/.gradle
  42. - name: Check release
  43. run: |
  44. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  45. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  46. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  47. ./gradlew gitHubCheckNextVersionDueToday
  48. check_open_issues:
  49. name: Ensure there are no open issues
  50. needs: [check_release_due]
  51. runs-on: ubuntu-latest
  52. steps:
  53. - uses: actions/checkout@v2
  54. - name: Set up JDK 17
  55. uses: actions/setup-java@v1
  56. with:
  57. java-version: '17'
  58. - name: Setup gradle user name
  59. run: |
  60. mkdir -p ~/.gradle
  61. echo 'systemProp.user.name=spring-builds+github' >> ~/.gradle/gradle.properties
  62. - name: Setup Gradle
  63. uses: gradle/gradle-build-action@v2
  64. env:
  65. GRADLE_USER_HOME: ~/.gradle
  66. - name: Check for open issues
  67. run: |
  68. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  69. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  70. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  71. ./gradlew gitHubCheckMilestoneHasNoOpenIssues
  72. release:
  73. name: Release next version
  74. needs: [check_release_due, check_open_issues]
  75. runs-on: ubuntu-latest
  76. steps:
  77. - uses: actions/checkout@v2
  78. with:
  79. token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }}
  80. - name: Set up JDK
  81. uses: actions/setup-java@v1
  82. with:
  83. java-version: '17'
  84. - name: Setup gradle user name
  85. run: |
  86. mkdir -p ~/.gradle
  87. echo 'systemProp.user.name=spring-builds+github' >> ~/.gradle/gradle.properties
  88. - name: Setup Gradle
  89. uses: gradle/gradle-build-action@v2
  90. env:
  91. GRADLE_USER_HOME: ~/.gradle
  92. - name: Setup git config
  93. run: |
  94. git config user.name 'github-actions[bot]'
  95. git config user.email 'github-actions[bot]@users.noreply.github.com'
  96. - name: Update version and push
  97. # antoraUpdateVersion can only be run after updateProjectVersion completes, in order get the updated project version
  98. run: |
  99. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  100. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  101. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  102. ./gradlew :updateProjectVersion
  103. ./gradlew :spring-security-docs:antoraUpdateVersion
  104. updatedVersion=$(cat gradle.properties | grep "version=" | awk -F'=' '{print $2}')
  105. git commit -am "Release $updatedVersion"
  106. git tag $updatedVersion
  107. git push
  108. notify_result:
  109. name: Check for failures
  110. needs: [release]
  111. if: failure()
  112. runs-on: ubuntu-latest
  113. steps:
  114. - name: Send Slack message
  115. uses: Gamesight/slack-workflow-status@v1.0.1
  116. with:
  117. repo_token: ${{ secrets.GITHUB_TOKEN }}
  118. slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
  119. channel: '#spring-security-ci'
  120. name: 'CI Notifier'