release-next-version.yml 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. release-next-version:
  14. name: Initiate Release If Scheduled
  15. if: env.RUN_JOBS == 'true'
  16. runs-on: ubuntu-latest
  17. steps:
  18. - id: checkout-source
  19. name: Checkout Source Code
  20. uses: actions/checkout@v2
  21. with:
  22. token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }}
  23. - id: setup-jdk
  24. name: Set up JDK 17
  25. uses: actions/setup-java@v1
  26. with:
  27. java-version: '17'
  28. - name: Setup gradle user name
  29. run: |
  30. mkdir -p ~/.gradle
  31. echo 'systemProp.user.name=spring-builds+github' >> ~/.gradle/gradle.properties
  32. - name: Setup Gradle
  33. uses: gradle/gradle-build-action@v2
  34. env:
  35. GRADLE_USER_HOME: ~/.gradle
  36. - id: check-release-due
  37. name: Check Release Due
  38. run: |
  39. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  40. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  41. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  42. ./gradlew gitHubCheckNextVersionDueToday
  43. echo "::set-output name=is_due_today::$(cat build/github/milestones/is-due-today)"
  44. - id: check-open-issues
  45. name: Check for open issues
  46. if: steps.check-release-due.outputs.is_due_today == true
  47. run: |
  48. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  49. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  50. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  51. ./gradlew gitHubCheckMilestoneHasNoOpenIssues
  52. echo "::set-output name=is_open_issues::$(cat build/github/milestones/is-open-issues)"
  53. - id: validate-release-state
  54. name: Validate State of Release
  55. if: steps.check-release-due.outputs.is_due_today == true && steps.check-release-due.outputs.is_open_issues == true
  56. run: |
  57. echo "The release is due today but there are open issues"
  58. exit 1
  59. - id: update-version-and-push
  60. name: Update version and push
  61. if: steps.check-release-due.outputs.is_due_today == true && steps.check-release-due.outputs.is_open_issues == false
  62. run: |
  63. export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER"
  64. export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD"
  65. export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY"
  66. git config user.name 'github-actions[bot]'
  67. git config user.email 'github-actions[bot]@users.noreply.github.com'
  68. ./gradlew :updateProjectVersion
  69. ./gradlew :spring-security-docs:antoraUpdateVersion
  70. updatedVersion=$(cat gradle.properties | grep "version=" | awk -F'=' '{print $2}')
  71. git commit -am "Release $updatedVersion"
  72. git tag $updatedVersion
  73. git push
  74. git push origin $updatedVersion
  75. - id: send-slack-notification
  76. name: Send Slack message
  77. if: failure()
  78. uses: Gamesight/slack-workflow-status@v1.0.1
  79. with:
  80. repo_token: ${{ secrets.GITHUB_TOKEN }}
  81. slack_webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
  82. channel: '#spring-security-ci'
  83. name: 'CI Notifier'