diff --git a/.asf.yaml b/.asf.yaml index abeb08c0b8..1a8f27e5e0 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -46,7 +46,8 @@ github: - E2E - Docs - Frontend Build -# - "Mergeable: milestone-label-check" + - "Mergeable: milestone-label-check" + - "Title Validator" required_pull_request_reviews: dismiss_stale_reviews: true required_approving_review_count: 2 diff --git a/.github/workflows/mergeable.yml b/.github/workflows/mergeable.yml index 8b7bd8799c..835b34bf57 100644 --- a/.github/workflows/mergeable.yml +++ b/.github/workflows/mergeable.yml @@ -14,65 +14,50 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ---- -#version: 2 on: pull_request: + types: + - opened + - reopened + - synchronize + - labeled + - unlabeled + - milestoned + - demilestoned + name: "Mergeable" + jobs: result: name: "Mergeable: milestone-label-check" runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 10 steps: - - name: Status - run: | - echo "Temporary skipping this check" - -#mergeable: -# # we can not use `pull_request.*` which including event `pull_request.labeled`, according to https://github.com/mergeability/mergeable/issues/643, -# # otherwise mergeable will keep add or remove label endless, we just need this CI act like the default behavior as -# # GitHub action workflow `pull_requests` https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request like, -# # which only trigger runs when a pull_request event's activity type is opened, synchronize, or reopened -# - when: pull_request.opened, pull_request.reopened, pull_request.synchronize -# name: sync-sql-ddl -# validate: -# # Sql files must change synchronize -# - do: dependent -# files: -# - 'dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql' -# - 'dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql' -# - 'dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql' -# message: 'Sql files not change synchronize' -# # Add labels 'sql not sync' and comment to reviewers if Sql files not change synchronize -# fail: -# - do: comment -# payload: -# body: > -# :warning: This PR do not change database DDL synchronize. -# leave_old_comment: false -# - do: labels -# add: 'sql not sync' -# # Remove labels 'sql not sync' if pass -# pass: -# - do: labels -# delete: 'sql not sync' -# -# - when: pull_request.* -# name: milestone-label-check -# validate: -# - do: milestone -# no_empty: -# enabled: false # Cannot be empty when true. -# message: 'Milestone is required and cannot be empty.' -# - do: label -# and: -# - must_include: -# regex: 'feature|bug|improvement|document|chore|revert' -# message: 'Label must include one of the following: `feature`, `bug`, `improvement`, `document`, `chore`, `revert`' -# - must_include: -# regex: 'ready-to-merge' -# message: 'Please check if there are PRs that already have a `ready-to-merge` label and can be merged, if exists please merge them first.' + - name: Check milestone and labels + uses: actions/github-script@v7 + with: + script: | + const { data } = await github.request("GET /repos/{owner}/{repo}/pulls/{pr}", { + owner: context.repo.owner, + repo: context.repo.repo, + pr: context.payload.pull_request.number + }); + if (data.milestone) { + core.info(`This pull request has a milestone: ${data.milestone.title}`); + } else { + core.setFailed(`A maintainer needs to set the milestone for this pull request.`); + } + let labeledFlag = false; + for (const label of data.labels) { + if (['feature', 'bug', 'improvement', 'document', 'chore', 'DSIP', 'CI&CD', 'revert'].includes(label.name)) { + core.info(`This pull request has a valid label: ${label.name}`); + labeledFlag = true; + break; + } + } + if (!labeledFlag) { + core.setFailed(`A maintainer needs to set a valid label for this pull request.`); + }