keptn / lifecycle-toolkit

Toolkit for cloud-native application lifecycle management
https://keptn.sh
Apache License 2.0
288 stars 118 forks source link

Issue assignment self-service bot #2823

Open mowies opened 7 months ago

mowies commented 7 months ago

Goal

The goal is to create a self-service issue assignment bot for GitHub contributors who would like to work on issues. The bot should be able to check if the user is part of the organization, examine if the pre-conditions for self-assignment are met (configurable labels or rules about number of issues already assigned/PRs opened), and assign the issue. Additionally, the bot should be able to track the state of the issue by adding/removing specific labels. The bot should be part of the CI and executed as an action on an issue change.

Details

Set up a GitHub action workflow that acts upon an issue comment containing /assign or /assign <some-gh-user>. The action should support multiple roles, which are configurable, including a default role as a fallback. Additionally, there should be a possibility to define a set of rules to each role via configuration file. The configuration file allows the admin to define status labels for the supported states to track the status of the issue. Additionally, a GitHub token will be supplied as an input secret for the action so that it is authorised to access the needed GitHub APIs.

The states should be:

The bot should accept a maintainers.yaml file with a list of users and their roles.

An example of configuration yaml file defining the set of rules for a role:

admin:
   max-assigned-issues: value
   max-opened-prs: value
   unassign-others: true
maintainer:
   max-assigned-issues: value
   max-opened-prs: value
   unassign-others: false
developer:
   max-assigned-issues: value
   max-opened-prs: value
   unassign-others: false
default:
   max-assigned-issues: value
   max-opened-prs: value
   unassign-others: false

states:
   ready-for-assignment: help-wanted
   assigned: taken
   in progress: worked on
   in-review: review
   done: closed

An example of a maintainers.yaml file with a list of users and their roles. Any user that's not in one of the roles will get the fallback configuration applied.

admin:
  - user-1

maintainer:
  - user-2

developer:
  - user-3

The possible configurable rules for each role for the bot should be:

According to the configuration file, the action should be also able to track the state of the issue just by adding/removing labels. The action should support at least the following states:

The bot should be able to unassign the issue by /unassign of unassign <name>.

The bot can be implemented by using Golang or TypeScript.

DoD

Useful links

mowies commented 7 months ago

An option would be to take kubernetes prow and somehow put it into a composite github action https://github.com/kubernetes/test-infra/tree/master/prow There's also such a project out there already: https://github.com/jpmcb/prow-github-actions/tree/main

sambhavgupta0705 commented 7 months ago

@mowies can I try setting up the action

mowies commented 7 months ago

this ticket is still work-in-progress and not ready for development yet

UtkarshUmre commented 6 months ago

Hey @mowies I'm interested in this project for Google Summer of Code. At the moment, I'm researching and thinking about ideas, and I'm also writing a proposal. I believe this bot could be very useful for Keptn, making it easier for new people to join in and also helping to keep track of issues.

Let me know if you have any thoughts! I'm eager to hear your thoughts and suggestions on how we can move forward with this

mowies commented 6 months ago

Awesome that you want to apply! We're open for anybody to apply but keep in mind that you will not be the only one ;)

kirtanchandak commented 6 months ago

Hey, @mowies, I'm interested in applying for this project for the summer of code term. I would love to work on this project and be mentored by you. I will draft the proposal and send it to you for review in the forthcoming weeks. Thank you :)

YashPimple commented 6 months ago

Hey! I am interested in working on this issue and I've already started diving into the details and researching the approach to implement the self-service issue assignment bot for GitHub contributors. Moreover, I'm really interested in applying for this project for the summer of code term. I believe it's a fantastic opportunity to contribute meaningfully to the community. Thank you!

cc: @mowies @odubajDT @bacherfl

SohamRatnaparkhi commented 6 months ago

Hello @mowies ,

I'm super interested in contributing to this project idea during GSoC'24. With a decent background in utilizing the GitHub API, I believe my experience equips me well to build this bot under your guidance.

Thank you!

tesla59 commented 5 months ago

Hi @mowies I have a few questions regarding the bot

  1. Configuration: Should the bot store the configuration inside workflow.yaml or something else? We can pass the configs like max_issue_per_contributor and max_pr_per_contributor inside the workflow to interactively change the configuration.

  2. Command Structure: Are we looking at predefined commands such as /lgtm and /assign or should they be set in workflow.yaml (as done in prow)

  3. Future Scope: Is this project designed specifically for Keptn organisation, or are we keeping in mind adaptability for open source community with similar needs as well?

About Language preference: Although the exact data needs intensive benchmarking between TypeScript and Golang, I think Golang would be an ideal choice for this purpose because Golang is generally believed to be faster than TS and in this case where a workflow is triggered every comment, every ms of CPU usage matters

mowies commented 5 months ago
  1. Configuration: Should the bot store the configuration inside workflow.yaml or something else? We can pass the configs like max_issue_per_contributor and max_pr_per_contributor inside the workflow to interactively change the configuration.

For the MVP I would go for configuration directly in the workflow.yml file, if there's more time, I would add something like a yml file in the root of the repo as an option for users.

  1. Command Structure: Are we looking at predefined commands such as /lgtm and /assign or should they be set in workflow.yaml (as done in prow)

I think predefined commands are good enough, no need for extra configuration options here.

  1. Future Scope: Is this project designed specifically for Keptn organisation, or are we keeping in mind adaptability for open source community with similar needs as well?

It will be designed for Keptn but the problem that it solves is a more general one, so other projects can definitely also use it and contribute to it.

About Language preference: Although the exact data needs intensive benchmarking between TypeScript and Golang, I think Golang would be an ideal choice for this purpose because Golang is generally believed to be faster than TS and in this case where a workflow is triggered every comment, every ms of CPU usage matters

I really don't think that speed it very important. Also, there's no official API library for Go. I would go with one of the supported languages.

jaydee029 commented 5 months ago

I really don't think that speed it very important. Also, there's no official API library for Go. I would go with one of the supported languages.

about the official API library , google seems to have a very popular library called go-github , for writing github bots in go, seems pretty reliable to me. Although it still requires a third party sdk for github actions.

rizul2108 commented 5 months ago

@mowies Actually I want to ask on what basis we will be deciding the issue is a draft and what will be the basis for issue to be labelled as ready-for-refinement?

mowies commented 5 months ago

draft is put on an issue manually when it's not ready for any other pairs of eyes yet. When an issue is done being described, the ready-for-refinement label is put on manually to pick it up in one of the following community meetings and refine and estimate it.

rizul2108 commented 5 months ago

So the bot should be able to add/delete these issues automatically or these will be added/removed manually only and the bot should just track if the issue is draft or read-for-refinement?

mowies commented 5 months ago

We will refine the issue definition further and then get back to you with some more and better answers, hope that's ok :)

rizul2108 commented 5 months ago

Yes that's not an issue.

mowies commented 5 months ago

We refined the description of the issue again, please check if it makes sense. I hope that this will clear up some things.

UtkarshUmre commented 5 months ago

Thanks for the update. It helps a lot and makes the issue easier to understand.

VALASALARAKESH commented 5 months ago

Hello @mowies

I hope this message finds you well. My name is Rakesh Valasala, and I am writing to express my keen interest in contributing to the development of the Self-Service Issue Assignment Bot project.

Having recently discovered your project on GitHub, I found the goals and challenges outlined to be remarkably aligned with my experience and ongoing work. Currently, I am deeply involved in the development of COMMSPACE, a project that shares similar objectives in terms of GitHub API integration and workflow automation.

Relevant Experience:

GitHub API Integration: My hands-on experience in working with GitHub APIs and webhooks has been honed through the ongoing development of COMMSPACE. This proficiency positions me well for contributing to the self-service issue assignment bot. Configuration Management: As part of the COMMSPACE project, I actively engage in configuring and managing applications using YAML files. This experience directly translates into my ability to handle the configuration needs outlined in your project. Workflow Automation: Our ongoing efforts with COMMSPACE involve setting up workflows and actions, giving me a strong understanding of GitHub Action workflows and their seamless integration with continuous integration (CI) processes. Language Proficiency: I am proficient with TypeScript, providing flexibility in language choice for implementing the bot. This proficiency has been pivotal in the development of COMMSPACE, contributing to the success of the project.

COMMSCAPE Overview: COMMSCAPE is a dynamic collaboration platform that seamlessly integrates Discord's communication features with robust GitHub repository management. This project harnesses the power of Discord's familiar environment, providing chat, voice channels, and more, alongside advanced GitHub integration features. Users can effortlessly manage GitHub repositories, track issues, and collaborate seamlessly within a unified space. The project is currently in the development stage, with a focus on refining the user experience, enhancing collaboration, and ensuring robust GitHub integration.

In the coming weeks, I plan to share the final work of the COMMSCAPE project, providing insights into the unique features and advancements achieved during its development.

I am excited about the prospect of contributing to your project and sharing insights gained from the ongoing development of COMMSPACE. Please let me know if there are any specific next steps or tasks to get involved in the Self-Service Issue Assignment Bot project.

Thank you for considering my interest, and I am eager to contribute to the success of the Self-Service Issue Assignment Bot.

Best regards, Rakesh Valasala valasalarakesh1254@gmail.com

mowies commented 5 months ago

As a result of the New Contributor Meeting on March 11th, I added some more information that was asked there. Specifically, information about the GitHub token needed for authorization and a default configuration for external users who don't have a role assigned.

jaydee029 commented 5 months ago

@mowies Right , I think I forgot to put an alert for yesterday's meeting , do you by chance record these? Thanks.

mowies commented 5 months ago

Yes, there's a recording. You can expect it to be uploaded to our youtube channel in the coming days

VALASALARAKESH commented 5 months ago

Hey @mowies I am interested in contributing to the issue and work with the cncf organization to develop innovative cloud native tools in the open-source. I am participate in GSoC 2024. I have given a my past work in the above message.

mowies commented 5 months ago

Great that you're interested! You will need to submit your application directly with GSoC when the time comes. Application period will start March 18th (source).

timilehin2000 commented 5 months ago

Hi @mowies I am interested in contributing and being mentored. Please, how do i go about this

odubajDT commented 5 months ago

Hi @timilehin2000, we are very happy to hear that! You should be able to submit a contributor proposal to the GSoC 2024. The deadline is April 2nd. For more information about the neccessary steps please go to the official GSoC page https://summerofcode.withgoogle.com/

bupd commented 5 months ago

I had seen a similar bot like this => zulipbot written in JS.

itsaviral2609 commented 4 months ago

Hi @mowies

Apologies for commenting on this late! I was working on this project proposal behind the scenes and would like to get mentored in GSoC 2024. I will submit the proposal before the mentioned deadline :)