From 814134331e812c722030ddf0bf4f95eaf44d7687 Mon Sep 17 00:00:00 2001 From: Sergio Ojeda Date: Mon, 3 Jun 2024 12:40:57 -0300 Subject: [PATCH] feature: Add issue and pull request templates + automation --- .github/ISSUE_TEMPLATE.md | 8 ++-- .github/PULL_REQUEST_TEMPLATE.md | 63 +++++++++++++++++++++------- .github/dependabot.yml | 22 ++++++++++ .github/labeler.yml | 42 +++++++++++++++++++ .github/review-label.yml | 3 ++ .github/workflows/labeler.yml | 20 +++++++++ .github/workflows/review-labeler.yml | 29 +++++++++++++ .github/workflows/set-pr-title.yml | 43 +++++++++++++++++++ 8 files changed, 210 insertions(+), 20 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/labeler.yml create mode 100644 .github/review-label.yml create mode 100644 .github/workflows/labeler.yml create mode 100644 .github/workflows/review-labeler.yml create mode 100644 .github/workflows/set-pr-title.yml diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 26b9553f..fe0cfc16 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -31,10 +31,10 @@ Please provide detailed steps for reproducing the issue. Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions. -- Firmware Version: -- Operating System: -- SDK version: -- Toolchain version: +* Firmware Version: +* Operating System: +* SDK version: +* Toolchain version: ## Failure Logs diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a9fe5f29..975c6fa7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,39 +1,70 @@ -# Light It Pull Request Template ⚡⚡⚡ +# ⚡ {0} - [{1}](https://app.clickup.com/t/{2}) ⚡ -_Resolve_: [closes -###](https://link-to-your-ticket) +## 💻 What type of change is this? -## Description and Requires ⭐ +- [{3}] 💎 Feature +- [{4}] 🐛 Bug Fix +- [ ] 📝 Documentation Update +- [ ] 🎨 Styling +- [ ] 🧑‍💻 Code Refactor +- [ ] 🔥 Performance Improvements +- [ ] ✅ Test +- [ ] 🤖 Build / CI + +## ⭐ Description -I've added support for authentication to implement Key Result 2 of OKR1. It includes -model, table, controller and test. For more background, see ticket #CU-834794. - -- [ ] This change requires a database update or migration -- [ ] This change requires a documentation update +For more background, see ticket **{1}[in-progress].** -## Proof of Test (optional) 📷 + -### How Has This Been Tested? ❓ +## 📷 Screenshots -- [ ] Test A -- [ ] Test B +### Before + +![image](https://github.com/Light-it-labs/lightranet/assets/17851841/f55f13c3-0f79-4d38-a6d9-51444daf3c81) + +### After -## Checklist ✅ +![image](https://github.com/Light-it-labs/lightranet/assets/17851841/38fd90e3-09e0-4af4-85e0-b8801d479f8c) + + +## 💬 Comments + + +## ✅ Checklist +### To review +- [ ] I have tested this change locally in multiple screen sizes - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes +- [ ] If my task include an endpoint, I add the endpoint to Hopscotch/Postman Project - [ ] Any dependent changes have been merged and published in downstream modules diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..9201f7d1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + + - package-ecosystem: "composer" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + + - package-ecosystem: "github-actions" + # Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.) + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000..deff9cc9 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,42 @@ +draft: + - changed-files: + - any-glob-to-any-file: '**' + +feature: + - head-branch: ['^feature', 'feature'] + +bugfix: + - head-branch: [ '^bugfix', 'bugfix' ] + +hotfix: + - head-branch: [ '^hotfix', 'hotfix' ] + +release: + - base-branch: 'main' + +have testing: + - changed-files: + - any-glob-to-any-file: tests/** + +migrations: + - changed-files: + - any-glob-to-any-file: database/migrations/** + +dependencies: + - changed-files: + - any-glob-to-any-file: ['composer.**', 'package.**', 'package-lock.**', 'yarn.lock', 'yarn.lock', 'pnpm-lock.**'] + +change env: + - changed-files: + - any-glob-to-any-file: '.env.**' + +include command: + - changed-files: + - any-glob-to-any-file: 'src/Shared/App/Console/**' + +documentation: + - changed-files: + - any-glob-to-any-file: ['README.**', 'docs/**'] + +refactor: + - head-branch: [ '^refactor', 'refactor' ] diff --git a/.github/review-label.yml b/.github/review-label.yml new file mode 100644 index 00000000..a57f31de --- /dev/null +++ b/.github/review-label.yml @@ -0,0 +1,3 @@ +needs review: + - changed-files: + - any-glob-to-any-file: '**' diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 00000000..b3f2bd5e --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,20 @@ +name: Labeler +on: + workflow_dispatch: + pull_request: + types: + - opened + +jobs: + label: + + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + steps: + - uses: actions/labeler@v5 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + diff --git a/.github/workflows/review-labeler.yml b/.github/workflows/review-labeler.yml new file mode 100644 index 00000000..77f2391c --- /dev/null +++ b/.github/workflows/review-labeler.yml @@ -0,0 +1,29 @@ +name: Review Labeler +on: + workflow_dispatch: + pull_request: + types: + - review_requested + +jobs: + label: + + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + steps: + - uses: actions/labeler@v5 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + configuration-path: ".github/review-label.yml" + + remove_label: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-ecosystem/action-remove-labels@v1 + with: + labels: draft + diff --git a/.github/workflows/set-pr-title.yml b/.github/workflows/set-pr-title.yml new file mode 100644 index 00000000..ca92bc2b --- /dev/null +++ b/.github/workflows/set-pr-title.yml @@ -0,0 +1,43 @@ +name: Set PR title + +on: + pull_request: + types: + - opened + +jobs: + set-title: + runs-on: ubuntu-latest + steps: + - name: Set PR title + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { owner, repo, number: pull_number } = context.issue; + const pr = context.payload.pull_request; + const body = pr.body; + const branchName = pr.head.ref; + const [type, id, description] = branchName.split('/'); + const title = `[${id}] ${description.split("-").join(' ')}`; + + const format = (str, ...args) => { + return str.replace(/{(\d+)}/g, (match, number) => { + return typeof args[number] !== 'undefined' ? args[number] : match; + }); + }; + + const templateTitle = description.split("-").join(' ').replace(/\b\w/g, function(l){ return l.toUpperCase() }); + const taskCode = id.split("CU-").join(''); + const isFeature = type === 'feature' ? 'x' : ' '; + const isBugfix = ["bugfix", "hotfix"].includes(type) ? 'x' : ' '; + + const updatedBody = format(body, templateTitle, id, taskCode, isFeature, isBugfix); + + await github.rest.pulls.update({ + owner, + repo, + pull_number, + title, + body: updatedBody + });