From 7a5cae7e44f2b239f697765c690c565bc773b9c9 Mon Sep 17 00:00:00 2001 From: Oleg S <97077423+RobotSail@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:06:05 +0000 Subject: [PATCH] feat: add mergeify config This PR adds a mergeify config that will help automate merging code into the repo and doing PRs Signed-off-by: Oleg S <97077423+RobotSail@users.noreply.github.com> --- .github/workflows/lint.yml | 4 +- .github/workflows/mergify.yml | 179 ++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/mergify.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6d27f44e..d7fd25ea 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,7 +13,7 @@ on: - 'requirements*.txt' - 'tox.ini' - 'scripts/*.sh' - - '.github/**' + - '.github/workflows/lint.yml' pull_request: branches: - "main" @@ -24,7 +24,7 @@ on: - 'requirements*.txt' - 'tox.ini' - 'scripts/*.sh' - - '.github/**' + - '.github/workflows/lint.yml' env: PYTHON_VERSION: 3.11 diff --git a/.github/workflows/mergify.yml b/.github/workflows/mergify.yml new file mode 100644 index 00000000..9b2ddf71 --- /dev/null +++ b/.github/workflows/mergify.yml @@ -0,0 +1,179 @@ +pull_request_rules: +- name: auto-merge + description: automatic merge for main with >= 1 approved reviews, all requested reviews have given feedback, not held, and CI is successful + conditions: + - "#approved-reviews-by>=1" + - "#review-requested=0" + - "#changes-requested-reviews-by=0" + - or: + - base=main + - base~=^release- + - label!=hold + - label!=do-not-merge + - label!=needs-rebase + - check-success=DCO + + # The files conditions regex should match the globs in workflow files + # If workflow configuration files in .github/ are changed, the actionlint check must pass + - or: + - and: + - check-success=actionlint + - or: + - files~=^\.github/(actions|workflows)/.*\.ya?ml$ + - files~=^\.github/workflows/actionlint\. + - and: + - -files~=^\.github/(actions|workflows)/.*\.ya?ml$ + - -files~=^\.github/workflows/actionlint\. + + # e2e workflow + - or: + - and: + - check-success=e2e + - or: + - files~=\.py$ + - files=pyproject.toml + - files~=^requirements.*\.txt$ + - files=.github/workflows/e2e.yml + - and: + - -files~=\.py$ + - -files=pyproject.toml + - -files~=^requirements.*\.txt$ + - -files=.github/workflows/e2e.yml + + # lint must pass if files change that would trigger this job + - or: + - and: + - check-success=lint-workflow-complete + - or: + # see .github/workflows/lint.yml and test.yml + - files~=\.py$ + - files=pyproject.toml + - files~=^requirements.*\.txt$ + - files=tox.ini + - files~=^scripts/[^/]+\.sh$ + - files=.github/workflows/lint.yml + - and: + - -files~=\.py$ + - -files=pyproject.toml + - -files~=^requirements.*\.txt$ + - -files=tox.ini + - -files~=^scripts/[^/]+\.sh$ + - -files=.github/workflows/lint.yml + + + actions: + merge: + method: merge + delete_head_branch: + +- name: label-cicd + description: Automatically apply CI/CD label + conditions: + - or: + - files=.github/mergify.yml + - files~=^\.github/(actions|workflows)/ + - files=scripts/ruff.sh + - files=.pre-commit-config.yaml + - files=.pylintrc + - files~=^\.spellcheck[^/]+$ + - files=tox.ini + - files=.markdownlint-cli2.yaml + actions: + label: + add: + - CI/CD + +- name: label-documentation + description: Automatically apply documentation label + conditions: + - or: + - files~=^[^/]+\.md$ + actions: + label: + add: + - documentation + +- name: label-testing + description: Automatically apply testing label + conditions: + - or: + - files~=^tests/ + - files=tox.ini + actions: + label: + add: + - testing + +- name: ping author on conflicts and add 'needs-rebase' label + conditions: + - conflict + - -closed + actions: + label: + add: + - needs-rebase + comment: + message: | + This pull request has merge conflicts that must be resolved before it can be + merged. @{{author}} please rebase it. https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork + +- name: remove 'needs-rebase' label when conflict is resolved + conditions: + - -conflict + - -closed + actions: + label: + remove: + - needs-rebase + +- name: release-branch-label + description: Automatically apply the release-branch label to release branch PRs + conditions: + - base~=^release- + actions: + label: + add: + - release-branch + +- name: Apply ci-failure label if any CI checks have failed + conditions: + - "#check-failure>0" + actions: + label: + add: + - ci-failure + +- name: Remove ci-failure label if no failures are present + conditions: + - "#check-failure=0" + actions: + label: + remove: + - ci-failure + +- name: Apply 'one-approval' label if one of the maintainer approved the PR + conditions: + - "#approved-reviews-by=1" + actions: + label: + add: + - one-approval + +- name: Remove 'one-approval' label if the approval was reset + conditions: + - "#approved-reviews-by!=1" + actions: + label: + remove: + - one-approval + +- name: label-dependencies + description: Automatically apply dependencies label + conditions: + - or: + - files~=^requirements.*\.txt$ + - files~=^requirements/ + actions: + label: + add: + - dependencies \ No newline at end of file