diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7713a33..3315a3c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,4 +10,5 @@ updates: schedule: interval: weekly time: "04:00" + target-branch: "develop" open-pull-requests-limit: 10 diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index d4df3d3..a56ceed 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -1,102 +1,21 @@ -name: Version handling - +name: Release Process on: + push: + branches: ['release/**', 'release-*'] pull_request: - types: - - closed - branches: - - master + types: [closed] + branches: [master] jobs: - version-update: - # This version does not run on self-opened PRs - if: ${{ github.event.pull_request.merged == true && github.event.pull_request.user.login != 'github-actions[bot]' }} - runs-on: ubuntu-latest - steps: - - name: Checkout source code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - # Sets up Java version - - name: Set up Java - uses: actions/setup-java@v4 - with: - distribution: 'adopt' - java-package: jdk - java-version: '8' - # Semantic versioning - - name: Semantic versioning - id: versioning - uses: paulhatch/semantic-version@v5.4.0 - with: - tag_prefix: "" - # A string which, if present in a git commit, indicates that a change represents a - # major (breaking) change, supports regular expressions wrapped with '/' - major_pattern: "(MAJOR)" - # Same as above except indicating a minor change, supports regular expressions wrapped with '/' - minor_pattern: "(MINOR)" - # A string to determine the format of the version output - version_format: "${major}.${minor}.${patch}" - # Check, whether there is an existing branch "version_" or an open PR "version_" -> "master" - # and store the results as environment variables - - name: Check if branch and PR exist - # The second command was copied from https://stackoverflow.com/questions/73812503/github-action-stop-the-action-if-pr-already-exists - run: | - echo VERSION_BRANCH_EXISTS=$(git ls-remote --heads origin refs/heads/version_${{ steps.versioning.outputs.version }} | wc -l) >> $GITHUB_ENV - echo PR_EXISTS=$(gh pr list \ - --repo "$GITHUB_REPOSITORY" \ - --json baseRefName,headRefName \ - --jq ' - map(select(.baseRefName == "master" and .headRefName == "version_${{ steps.versioning.outputs.version }}")) - | length - ') >> $GITHUB_ENV - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # If the branch "version_" does not exist, create the branch and update the version in all files - - name: Create branch and update PathExpression version - if: ${{ env.VERSION_BRANCH_EXISTS == '0' }} - run: | - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git config --global user.name "github-actions[bot]" - git checkout -b version_${{ steps.versioning.outputs.version }} - mvn build-helper:parse-version versions:set -DnewVersion=\${{ steps.versioning.outputs.version }} versions:commit - git ls-files | grep 'pom.xml$' | xargs git add - git commit --allow-empty -am "Update PathExpression version to ${{ steps.versioning.outputs.version }}" - git push origin version_${{ steps.versioning.outputs.version }} - # If a PR "version_" -> "master" does not exist, create the PR - - name: Open pull request for version update - if: ${{ env.PR_EXISTS == '0' }} - run: | - gh pr create -B master -H version_${{ steps.versioning.outputs.version }} -t "Update PathExpression version to ${{ steps.versioning.outputs.version }}" -b "This PR was created by the version-update workflow. Please make sure to delete the branch after merging, otherwise future workflows might fail." - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - version-release: - # This job runs only on merged PRs, which were opened by the version-update job - if: ${{ github.event.pull_request.merged == true && github.event.pull_request.user.login == 'github-actions[bot]' }} + handle-version: runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write steps: - - name: Checkout source code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - # Semantic versioning - - name: Semantic versioning - id: versioning - uses: paulhatch/semantic-version@v5.4.0 + - uses: secure-software-engineering/actions/version@develop with: - tag_prefix: "" - # A string which, if present in a git commit, indicates that a change represents a - # major (breaking) change, supports regular expressions wrapped with '/' - major_pattern: "(MAJOR)" - # Same as above except indicating a minor change, supports regular expressions wrapped with '/' - minor_pattern: "(MINOR)" - # A string to determine the format of the version output - version_format: "${major}.${minor}.${patch}" - # Create a tag with the newest version to prepare a release - - name: Create tag for new version - run: | - git config --global user.email "${{ github.actor }}@users.noreply.github.com" - git config --global user.name "${{ github.actor }}" - git tag -a ${{ steps.versioning.outputs.version }} -m "PathExpression version ${{ steps.versioning.outputs.version }}" - git push origin ${{ steps.versioning.outputs.version }} \ No newline at end of file + token: ${{ secrets.GITHUB_TOKEN }} + java_version: '11' + java_distribution: 'temurin' + target_branch: 'master' \ No newline at end of file diff --git a/.github/workflows/zombie-mode.yml b/.github/workflows/zombie-mode.yml new file mode 100644 index 0000000..d0ded12 --- /dev/null +++ b/.github/workflows/zombie-mode.yml @@ -0,0 +1,46 @@ +name: Zombie Mode +on: + pull_request: + types: [opened] + branches: [develop] + schedule: + - cron: '0 9 * * MON' + workflow_dispatch: + +jobs: + auto-approve-dependabot: + if: github.actor == 'dependabot[bot]' + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - uses: secure-software-engineering/actions/dependabot@develop + with: + token: ${{ secrets.GITHUB_TOKEN }} + + zombie-release: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - uses: secure-software-engineering/actions/zombie-mode@develop + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + base-branch: 'develop' + auto-merge-days: '3' + version-file: 'pom.xml' + + auto-merge-aged: + runs-on: ubuntu-latest + permissions: + pull-requests: write + contents: write + steps: + - uses: secure-software-engineering/actions/zombie-mode/zombie-prs-merge@develop + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + age-days: '3' + merge-method: 'squash' + delete-branch: 'true' + zombie-label: 'zombie-mode' \ No newline at end of file