diff --git a/.github/ISSUE_TEMPLATE/departure.md b/.github/ISSUE_TEMPLATE/departure.md new file mode 100644 index 0000000..85ffe3c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/departure.md @@ -0,0 +1,103 @@ +--- +name: Departure Notice +about: Formal notice for community members leaving the Dragonfly project +title: "Departure Notice: [Your Name]" +labels: ["departure", "community"] +--- + +This template is designed to help community members formally announce their departure from the Dragonfly project. We understand that circumstances change, and we want to ensure a smooth transition while maintaining the project's continuity. + +**Please fill out the relevant sections below. This helps us:** + +- Ensure proper handover of responsibilities +- Maintain project continuity +- Update community records +- Recognize your contributions + +## Basic Information + +**Name**: +**GitHub Account**: @ +**Current Role(s)**: +**Date of Notice**: +**Effective Departure Date**: + +## Reason for Departure (Optional) + +Please provide a brief explanation if you're comfortable sharing: + +- [ ] Career change/new job responsibilities +- [ ] Personal commitments +- [ ] Shift in technical interests +- [ ] Time constraints +- [ ] Prefer not to say +- [ ] Other: + +## Handover Responsibilities + +Please check all that apply and provide details where necessary: + +### Technical Responsibilities + +- [ ] Code review assignments +- [ ] Ongoing pull request ownership +- [ ] Feature development leadership +- [ ] Bug triage responsibilities +- [ ] Documentation maintenance +- [ ] Other: + +### Administrative Responsibilities + +- [ ] Repository access/permissions that need to be revoked +- [ ] Meeting facilitation roles +- [ ] Community management duties +- [ ] Release management responsibilities +- [ ] Other: + +## Future Involvement (Optional) + +- [ ] I would like to remain as a casual contributor when time permits +- [ ] I would like to be contacted for major project decisions +- [ ] I prefer a clean break with no future involvement +- [ ] I'm open to returning in the future if circumstances change +- [ ] Other: + +## Additional Notes + + + +--- + +## For Maintainers Only + +**Checklist for processing this departure:** + +- [ ] Remove repository access and permissions +- [ ] Update team memberships +- [ ] Reassign ongoing responsibilities +- [ ] Update documentation/contacts +- [ ] Announce in maintainer meeting if appropriate +- [ ] Send thank you message + +--- + +## Next Steps + +After submitting this issue: + +1. **Maintainer Review**: The maintainer team will review this notice and coordinate the transition +2. **Access Removal**: Repository access and permissions will be updated within 1 week +3. **Community Notification**: If you're comfortable, we may announce your departure in community channels +4. **Handover**: We'll work with you to ensure smooth handover of responsibilities + +## Contact Information + +If you have questions about the departure process: + +- **Maintainer Group**: +- **Community GitHub**: +- **Slack**: #dragonfly channel in CNCF Slack + +--- + +*Thank you for your contributions to the Dragonfly community. Your efforts have helped make the project better, and you will always be welcome back.* diff --git a/.github/ISSUE_TEMPLATE/election.md b/.github/ISSUE_TEMPLATE/election.md deleted file mode 100644 index f7c0649..0000000 --- a/.github/ISSUE_TEMPLATE/election.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -name: Election Process -about: Nominate a candidate for a community role -labels: election ---- - -## Community Role Nomination - -Use this template to nominate a candidate for a community role (e.g., Member, Approver, Maintainer). - - - -### Election Title - - - -### Nominator Information - -- **Nominator GitHub ID**: -- **Nominator Name**: -- **Nominator Email**: -- **Company/Organization**: - -### Nominee Information - -- **Nominee GitHub ID**: -- **Nominee Name**: -- **Nominee Email**: -- **Company/Organization**: - -### Nomination Period - - - -### Voting Period - - - -### Requirements for the Nominee - -- [ ] The nominee's GitHub account has 2FA enabled. (Check at https://github.com/settings/security) -- [ ] The nominee has attended at least one biweekly community meeting. -- [ ] The nominee has a history of contributions (e.g., code, reviews, issue discussions). -- [ ] The nominee is actively involved in at least one Dragonfly project or subproject. -- [ ] The nominee has read and agrees to the Dragonfly [Code of Conduct](https://github.com/dragonflyoss/community/blob/master/CODE_OF_CONDUCT.md). -- [ ] The nominee has read and understands the Dragonfly [Community Ladder](https://github.com/dragonflyoss/community/blob/master/COMMUNITY_LADDER.md). -- [ ] The nominee has read and understands the Dragonfly [Community Membership Guidelines](https://github.com/dragonflyoss/community/blob/master/COMMUNITY_MEMBERSHIP.md). - -### Nominator's Checklist - -- [ ] I have discussed this nomination with the nominee, and they have agreed to be nominated. -- [ ] This nomination has been brought up for discussion in a community meeting. - -### Endorsements (optional) - - - -## Candidate Overview - -### Current Role & Contributions - - - -### Motivation for Nomination - - - -### Candidate's Future Plans - - - -### Position - - - -## Vote Results - -| Voter | Vote | Comments | -| ------ | ------- | ----------------------------- | -| @user1 | Approve | Here is my comment for @user1 | -| @user2 | Approve | Here is my comment for @user2 | -| @user3 | Reject | Here is my comment for @user3 | - -- Total Votes: **0** -- Result: **Pending** - -_Last updated: [DATE]_ diff --git a/.github/ISSUE_TEMPLATE/nominate.md b/.github/ISSUE_TEMPLATE/nominate.md new file mode 100644 index 0000000..9613a4d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/nominate.md @@ -0,0 +1,81 @@ +--- +name: Nomination Process +about: Nominate a candidate for a community role +title: "Nomination: [Candidate's Name] for [Role]" +labels: ["nomination", "community"] +--- + +Use this template to nominate a candidate for a community role (e.g., Member, Approver, Maintainer). + + + +## Nomination Title + + +## Nominator Information + +- **GitHub ID**: +- **Name**: +- **Role in Community**: + +## Nominee Information + +- **GitHub ID**: +- **Name**: +- **Email**: +- **Company/Organization**: +- **Position Applied For**: + +## Nomination Period + + +## Requirements for the Nominee + +- [ ] Nominee's GitHub account has 2FA enabled +- [ ] Nominee has attended at least one biweekly community meeting +- [ ] Nominee has a history of contributions (code, reviews, issue discussions) +- [ ] Nominee is actively involved in at least one Dragonfly project or subproject +- [ ] Nominee has read and agrees to the Dragonfly [Code of Conduct](https://github.com/dragonflyoss/community/blob/master/CODE_OF_CONDUCT.md) +- [ ] Nominee has read and understands the Dragonfly [Community Ladder](https://github.com/dragonflyoss/community/blob/master/COMMUNITY_LADDER.md) +- [ ] Nominee has read and understands the Dragonfly [Community Membership Guidelines](https://github.com/dragonflyoss/community/blob/master/COMMUNITY_MEMBERSHIP.md) + +## Nominator's Checklist + +- [ ] I have discussed this nomination with the nominee, and they have agreed to be nominated +- [ ] This nomination will be brought up for discussion in a community meeting +- [ ] I confirm the nominee meets all the requirements listed above + +## Nominee Background + +### Technical Background and Experience + + +### Open Source Contribution Experience + + +### Contributions to Dragonfly + + +### Technical Skills + + +### Community Involvement + + +## Nomination Justification + +### Why This Candidate + + +### Future Plans and Expectations + + +### Values and Cultural Fit + + +## Endorsements (Optional) + + +--- + +**For more information, please refer to our Community Guidelines and Code of Conduct**: diff --git a/.gitvote.yml b/.gitvote.yml new file mode 100644 index 0000000..38cf936 --- /dev/null +++ b/.gitvote.yml @@ -0,0 +1,201 @@ +# GitVote configuration file +# +# GitVote will look for it in the following locations (in order of precedence): +# +# - At the root of the repository where the vote was created +# - At the root of the .github repository, for organization wide configuration +# + +# Automation (optional) +# +# Create votes automatically on PRs when any of the files affected by the PR +# match any of the patterns provided. Patterns must follow the gitignore +# format (https://git-scm.com/docs/gitignore#_pattern_format). +# +# Each automation rule must include a list of patterns and the profile to use +# when creating the vote. This allows creating votes automatically using the +# desired configuration based on the patterns matched. Rules are processed in +# the order provided, and the first match wins. +# +# automation: +# enabled: true +# rules: +# - patterns: +# - "README.md" +# - "*.txt" +# profile: default +# +# automation: +# enabled: false + +# Configuration profiles (required) +# +# A configuration profile defines some properties of a vote, like its duration, +# the pass threshold or the users who have a binding vote. It's possible to +# define multiple configuration profiles, each with a different set of settings. +# +profiles: + # Default configuration profile + # + # This profile will be used with votes created with the /vote command + # + # The default election role for Dragonfly project is member. + default: + # Voting duration (required) + # + # How long the vote will be open + # + # Units supported (can be combined as in 1hour 30mins): + # + # minutes | minute | mins | min | m + # hours | hour | hrs | hrs | h + # days | day | d + # weeks | week | w + # + duration: 7d + + # Pass threshold (required) + # + # Percentage of votes in favor required to pass the vote + # + # The percentage is calculated based on the number of votes in favor and the + # number of allowed voters (see allowed_voters field below for more details). + pass_threshold: 50 + + # Allowed voters (optional) + # + # List of GitHub teams and users who have binding votes + # + # If no teams or users are provided, all repository collaborators will be + # allowed to vote. For organization-owned repositories, the list of + # collaborators includes outside collaborators, organization members that + # are direct collaborators, organization members with access through team + # memberships, organization members with access through default organization + # permissions, and organization owners. + # + # By default, teams' members with the maintainer role are allowed to vote + # as well. By using the `exclude_team_maintainers` option, it's possible to + # modify this behavior so that only teams' members with the member role are + # considered allowed voters. Please note that this option only applies to + # the teams explicitly listed in `allowed_voters/teams`. + # + # Teams names must be provided without the organization prefix. + # + # allowed_voters: + # teams: + # - team1 + # users: + # - cynthia-sg + # - tegioz + # exclude_team_maintainers: false + # + allowed_voters: + teams: + - dragonfly-approvers + - dragonfly-maintainers + users: + - gaius-qi + - mingcheng + exclude_team_maintainers: false + + # Periodic status check + # + # GitVote allows checking the status of a vote in progress manually by + # calling the /check-vote command. The periodic status check option makes + # it possible to automate the execution of status checks periodically. The + # vote status will be published to the corresponding issue or pull request, + # the same way as if the /check-vote command would have been called + # manually. + # + # When this option is enabled, while the vote is open, a status check will + # be run automatically using the frequency configured. Please note that the + # hard limit of one status check per day still applies, so if the command + # has been called manually the automatic periodic run may be delayed. + # Automatic status checks won't be run if the vote will be closed within + # the next hour. + # + # Units supported: + # + # - day / days + # - week / weeks + # + # As an example, using a value of "5 days" would mean that 5 days after the + # vote was created, and every 5 days after that, an automatic status check + # will be run. + # + # periodic_status_check: "5 days" + # + periodic_status_check: "3 days" + + # Close on passing + # + # By default, votes remain open for the configured duration. Sometimes, + # specially on votes that stay open for a long time, it may be preferable + # to close a vote automatically once the passing threshold has been met. + # The close on passing feature makes this possible. Open votes where this + # feature has been enabled will be checked once daily and, if GitVote + # detects that the vote has passed, it will automatically close it. + # + # close_on_passing: true + # + close_on_passing: true + + # Close on passing minimum wait + # + # When the close on passing feature is activated, voting will conclude once + # the pass threshold is met. However, there may be instances where it is + # preferable to implement a minimum wait time, even if the vote would + # already pass. This allows participants sufficient opportunity to engage + # and reflect before the vote is automatically finalized. + # + # Units supported: + # + # - day / days + # - week / weeks + # + # close_on_passing_min_wait: "1 week" + # + close_on_passing_min_wait: null + + # Announcements + # + # GitVote can announce the results of a vote when it is closed on GitHub + # discussions. This feature won't be enabled if this configuration section + # is not provided. The slug of the category where the announcement will be + # posted to must be specified (i.e. announcements). + # + # announcements: + # discussions: + # category: announcements + # + # announcements: + # discussions: + # category: announcements + + # /vote-member + member: + duration: 7d + pass_threshold: 50 + allowed_voters: + teams: + - dragonfly-approvers + - dragonfly-maintainers + close_on_passing: true + + # /vote-approver + approver: + duration: 14d + pass_threshold: 50 + allowed_voters: + teams: + - dragonfly-maintainers + close_on_passing: true + + # /vote-maintainer + maintainer: + duration: 14d + pass_threshold: 65 + allowed_voters: + teams: + - dragonfly-maintainers + close_on_passing: true diff --git a/COMMUNITY_LADDER.md b/COMMUNITY_LADDER.md index 9a133e3..2f5a61a 100644 --- a/COMMUNITY_LADDER.md +++ b/COMMUNITY_LADDER.md @@ -33,8 +33,6 @@ The roles of Organization Member, Approver, or Maintainer are officially defined ## General Guidelines - - ### Everyone is Welcome We truly appreciate every contribution. You don't need a formal title to create or review pull requests, help with issues, or join in on discussions. Taking on a formal role is completely optional, so feel free to contribute in any way that works for you. @@ -49,7 +47,6 @@ Every time we merge a contribution, we're committing to maintaining it for the l Remember, _["no is temporary, yes is forever."](https://www.oreilly.com/library/view/hands-on-design-patterns/9781789135565/3f396314-dac8-446c-ab02-768ae91296fa.xhtml)_ 🙇‍♂️ - ### Continued Contributions If you're thinking about applying for one of the roles below, we hope it's because you plan to stay active at that level. If life gets in the way and you can't keep up with the responsibilities of your role, it's perfectly fine to step down. Members who are inactive for an extended period will be removed from the Dragonfly GitHub Organizations, but you can always go through the membership process again when you're ready. @@ -72,6 +69,8 @@ Our ladder has four main roles: **Contributor**, **Member**, **Approver**, and * Here's a quick look at the roles: + + | Role | Responsibilities | Qualifications | Privileges | | --------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------ | | **Contributor** | Follow our Code of Conduct & Contribution Guide | Anyone who participates in the community | Can be assigned issues and request reviews | @@ -79,6 +78,8 @@ Here's a quick look at the roles: | **Approver** | Review PRs in your area of expertise and maintain quality | A Member with a solid track record of high-quality reviews | Approve PRs in specific areas and recommend others for Approver | | **Maintainer** | Merge PRs, coordinate releases, and help shape the project's direction | Long-term contributions, leadership, and a deep understanding of the project | Merge code, represent the project publicly, and nominate new Maintainers | + + Each role is defined by three key things: - **Responsibilities**: The tasks and duties we expect from you at this level. @@ -91,24 +92,24 @@ As the project grows, these roles and responsibilities might change. The final s A **Contributor** is anyone who adds value to the project. This can be through code, but it doesn't have to be! This role is often where new or occasional contributors start. -* **Responsibilities**: - * Follow the project's [Code of Conduct](CODE_OF_CONDUCT.md). - * Stick to the [Contribution Guide](CONTRIBUTING.md). - -* **Qualifications**: - * Open to anyone who wants to be part of the community. - * Contributions can include things like: - * Joining in on community discussions. - * Reporting bugs or giving feedback. - * Testing new releases and sharing your thoughts. - * Helping out with documentation. - * Attending or speaking at community events. - * Submitting pull requests (PRs). - * Helping other users or answering questions. - * Spreading the word about the project. - -* **Privileges**: - * You can be assigned to issues and ask for reviews on your contributions. +- **Responsibilities**: + - Follow the project's [Code of Conduct](CODE_OF_CONDUCT.md). + - Stick to the [Contribution Guide](CONTRIBUTING.md). + +- **Qualifications**: + - Open to anyone who wants to be part of the community. + - Contributions can include things like: + - Joining in on community discussions. + - Reporting bugs or giving feedback. + - Testing new releases and sharing your thoughts. + - Helping out with documentation. + - Attending or speaking at community events. + - Submitting pull requests (PRs). + - Helping other users or answering questions. + - Spreading the word about the project. + +- **Privileges**: + - You can be assigned to issues and ask for reviews on your contributions. This is the first step to becoming a Member. @@ -116,89 +117,103 @@ This is the first step to becoming a Member. A **Member** is a consistent contributor who is actively involved in the project. They have more permissions in our repositories and are trusted to act in the community's best interest. -* **Responsibilities**: - * Make regular contributions to the project. - * Finish any tasks or initiatives you volunteer for. - -* **Qualifications**: - * A history of successful contributions, including at least one of these: - * Submitting or reviewing PRs. - * Fixing issues or bugs. - * Making other impactful contributions. - * You're actively contributing to an area of the project where Member privileges would be helpful. - * A track record of contributing (e.g., code, reviews, discussions) for at least 3 months. - * You consistently follow the project's Code of Conduct. - -* **Privileges**: - * You can trigger CI/CD pipelines. - * You can leave reviews and comments on PRs. - * You can recommend other Contributors to become Members. - * You can nominate yourself for higher roles as described in our project governance. - -* **How to Become a Member**: - 1. Submit a PR to the [members.yaml](ladder/members.yaml) file. - 2. Get a "LGTM" (Looks Good To Me) from at least two existing Members, and a final merge from a Maintainer. +- **Responsibilities**: + - Make regular contributions to the project. + - Finish any tasks or initiatives you volunteer for. + +- **Qualifications**: + - A history of successful contributions, including at least one of these: + - Submitting or reviewing PRs. + - Fixing issues or bugs. + - Making other impactful contributions. + - You're actively contributing to an area of the project where Member privileges would be helpful. + - A track record of contributing (e.g., code, reviews, discussions) for at least 3 months. + - You consistently follow the project's Code of Conduct. + +- **Privileges**: + - You can trigger CI/CD pipelines. + - You can leave reviews and comments on PRs. + - You can recommend other Contributors to become Members. + - You can nominate yourself for higher roles as described in our project governance. + +- **How to Become a Member**: + +The detailed process is placed in our project's [COMMUNITY_MEMBERSHIP.md](COMMUNITY_MEMBERSHIP.md#election-process) document. In summary: + + 1. Get nominated by an existing Member, Approver, or Maintainer. + 2. Document your contribution history and explain why you're a good fit for this role. + 3. Approval should be given by at least 50% simple majority of existing Approvers and Maintainers. + +The current Member list is maintained in the [MEMBERS.md](roles/Members.md) file. ### Approver An **Approver** is a Member who takes ownership of a specific part of the project (like code, docs, or tests). They play a key role in keeping our quality high by reviewing and approving changes in their area. -* **Responsibilities**: - * Handle all the responsibilities of a Member. - * Regularly review PRs in your area of expertise. - * Make sure changes meet our coding standards, don't introduce bugs, and are good for the project. - * Help other contributors become Approvers. - * Help triage issues. +- **Responsibilities**: + - Handle all the responsibilities of a Member. + - Regularly review PRs in your area of expertise. + - Make sure changes meet our coding standards, don't introduce bugs, and are good for the project. + - Help other contributors become Approvers. + - Help triage issues. -* **Qualifications**: - * You must already be a Member. - * Proven track record of high-quality reviews and contributions. - * Deep understanding of your specific area. - * Commitment to maintaining responsibility for your designated area. - * Supportive of new and occasional contributors, helping refine PRs for merging. +- **Qualifications**: + - You must already be a Member. + - Proven track record of high-quality reviews and contributions. + - Deep understanding of your specific area. + - Commitment to maintaining responsibility for your designated area. + - Supportive of new and occasional contributors, helping refine PRs for merging. -* **Privileges**: - * You'll have GitHub permissions to approve PRs and manage labels in your specific areas. - * You can recommend and review other Members for the Approver role. +- **Privileges**: + - You'll have GitHub permissions to approve PRs and manage labels in your specific areas. + - You can recommend and review other Members for the Approver role. -* **How to Become an Approver**: - 1. Submit a PR to the team or member management file for your specific review area. - 2. Get approval from at least two existing Maintainers. +- **How to Become an Approver**: -We have automated tools that may assign PRs to Approvers based on their designated areas of responsibility. + Based on the [Member selection process above](COMMUNITY_MEMBERSHIP.md#election-process), add additional requirements: + + 1. Get nominated by an existing Approver or Maintainer. + 2. Must document your contribution history and explain why you're suitable for this role, while listing the specific areas you want to be responsible for. + 3. Get approval should be given by at least 50% simple majority of existing Maintainers only. + +The current Approver list is maintained in the [APPROVERS.md](roles/Approvers.md) file. ### Maintainer A **Maintainer** is a highly trusted member of the project with the authority to merge code, vote on project matters, and help guide the project's direction. This role is for those who have shown a deep commitment to our community. -* **Responsibilities**: - * Fulfill all the responsibilities of an Approver. - * Merge PRs to the main branch. - * Maintain the codebase's overall quality, stability, and performance. - * Coordinate releases and update documentation. - * Shape the project's technical direction and roadmap. - * Mentor new contributors and Maintainers. - * Engage in strategic and policy discussions for the project. - * Participate in voting on key project decisions as per governance rules. - * Approve promotions to various roles within the project. - -* **Qualifications**: - * The specifics are detailed in our project's [governance document](./GOVERNANCE.md) under the commit access criteria. - * A history of long-term, high-quality contributions and leadership. - * In-depth understanding of the project’s architecture and design. - * Supportive of new contributors, aiding in refining contributions. - * Demonstrates independent judgment for the project’s benefit, beyond personal or employer interests. - * Actively mentors others in the community. - -* **Privileges**: - * You can merge code into the project repositories. - * You can vote on project-level decisions. - * You can represent the project in public. - * You can nominate new Maintainers. - -* **How to Become a Maintainer**: - 1. Get nominated by an existing Maintainer through a PR to the governance or member file. - 2. Be approved by a supermajority vote (e.g., 2/3 of active Maintainers), as defined in our project governance. - -Maintainers who contribute to the core code are automatically part of the project's Code Team, if one is defined. - +- **Responsibilities**: + - Fulfill all the responsibilities of an Approver. + - Merge PRs to the main branch. + - Maintain the codebase's overall quality, stability, and performance. + - Coordinate releases and update documentation. + - Shape the project's technical direction and roadmap. + - Mentor new contributors and Maintainers. + - Engage in strategic and policy discussions for the project. + - Participate in voting on key project decisions as per governance rules. + - Approve promotions to various roles within the project. + +- **Qualifications**: + - The specifics are detailed in our project's [governance document](./GOVERNANCE.md) under the commit access criteria. + - A history of long-term, high-quality contributions and leadership. + - In-depth understanding of the project’s architecture and design. + - Supportive of new contributors, aiding in refining contributions. + - Demonstrates independent judgment for the project’s benefit, beyond personal or employer interests. + - Actively mentors others in the community. + +- **Privileges**: + - You can merge code into the project repositories. + - You can vote on project-level decisions. + - You can represent the project in public. + - You can nominate new Maintainers. + +- **How to Become a Maintainer**: + + Based on the [Member selection process above](COMMUNITY_MEMBERSHIP.md#election-process), add additional requirements: + + 1. Must have been an Approver for at least 3 months. + 2. Demonstrate a strong commitment to the project. + 3. Get nominated by an existing Maintainer. + 4. Be approved by a supermajority vote (at least 65% of active Maintainers). + +The current Maintainer list is maintained in the [MAINTAINERS.md](roles/Maintainers.md) file. diff --git a/COMMUNITY_MEMBERSHIP.md b/COMMUNITY_MEMBERSHIP.md index 08b74bc..6e9bc55 100644 --- a/COMMUNITY_MEMBERSHIP.md +++ b/COMMUNITY_MEMBERSHIP.md @@ -2,12 +2,16 @@ - [How We Make Decisions](#how-we-make-decisions) - [Managing Membership](#managing-membership) - - [Adding New Members](#adding-new-members) - - [Removing Inactive Members](#removing-inactive-members) + - [Adding New Member/Approver/Maintainer](#adding-new-memberapprovermaintainer) + - [Removing Inactive Member/Approver/Maintainer](#removing-inactive-memberapprovermaintainer) - [Voluntary Departure](#voluntary-departure) - [Election Process](#election-process) - - [Maximum Representation](#maximum-representation) - - [Vacancies](#vacancies) + - [Demonstrating: Adding a New Member](#demonstrating-adding-a-new-member) + - [Step 1: Nomination](#step-1-nomination) + - [Step 2: Community Discussion](#step-2-community-discussion) + - [Step 3: Community Meeting and Voting Initiation](#step-3-community-meeting-and-voting-initiation) + - [Step 4: Voting Process](#step-4-voting-process) + - [Step 5: Results and Onboarding](#step-5-results-and-onboarding) As a proud member of the CNCF, the Dragonfly project follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). @@ -32,11 +36,13 @@ If we have fewer than seven active Maintainers, an issue can be merged if: - At least one active Maintainer comments "LGTM" (Looks Good To Me). - No other Maintainers object to the change. +For the purpose of this document, an "active Maintainer" is defined as a Maintainer who has participated in community activities (such as reviewing PRs, participating in meetings, or contributing to discussions) within the past 3 months. + Additionally, when we have fewer than seven active Maintainers, we might use a "lazy consensus period" for significant issues. This means that after an issue gets initial approval, we'll hold it for a set amount of time (like 7 days) to give everyone a final chance to discuss it. If no one objects, it can be closed. If issues come up, we'll resolve the concerns and then proceed and move forward. ## Managing Membership -Our Members share the responsibility for the project's success. In general, they: +Our Members (and Maintainers/Approvers) share the responsibility for the project's success. In general, they: - Are accountable for the project's outcomes. - Are invested in the long-term improvement of the project. @@ -46,27 +52,27 @@ Members often work hard behind the scenes, and their efforts aren't always visib ### Adding New Member/Approver/Maintainer -Member/Approver/Maintainer start out as dedicated contributors who are committed to the long-term success of the project. If you're aspiring to become a Member/Approver/Maintainer, you should be actively involved in resolving issues, contributing code, and reviewing proposals and pull requests for at least two months. +Member/Approver/Maintainer start out as dedicated contributors who are committed to the long-term success of the project. If you're aspiring to become a Member/Approver/Maintainer, you should be actively involved in resolving issues, contributing code, and reviewing proposals and pull requests for at least three months. Membership is built on trust, and that goes beyond just writing code. You earn the trust of the current Member/Approver/Maintainer by consistently acting in the best interest of the project. -New Member/Approver/Maintainer are nominated by an existing Member/Approver/Maintainer (through an issue) and need a supermajority vote from the current Maintainers to be approved. Similarly, Member/Approver/Maintainer can be removed by a supermajority vote, or they can choose to step down by creating an issue to let any other Member/Approver/Maintainer know. For details on how Member/Approver/Maintainer are selected and their terms, see the [Election Process](#election-process). +New Members are nominated by an existing Member/Approver/Maintainer (through an issue) and need a simple majority vote from the current Maintainers and Approvers to be approved. New Approvers need a simple majority vote from current Maintainers, while new Maintainers need a supermajority vote (at least 65%) from current Maintainers. Similarly, Member/Approver/Maintainer can be removed by appropriate voting thresholds, or they can choose to step down by creating an issue to let any other Member/Approver/Maintainer know. For details on how Member/Approver/Maintainer are selected and their terms, see the [Election Process](#election-process). ### Removing Inactive Member/Approver/Maintainer An existing Member/Approver/Maintainer can be removed from the active list if they are no longer meeting the expectations of the role. If a Member/Approver/Maintainer meets one of the following criteria, any other Member/Approver/Maintainer can propose their removal through a pull request: -- They haven't participated in community activities for more than three months. -- They have violated the governance rules more than twice. +- They haven't participated in community activities (such as reviewing PRs, participating in meetings, contributing to discussions, or submitting code) for more than three months. +- They have violated the governance rules more than twice, with documented evidence of violations. -Once the conditions are confirmed, the Member/Approver/Maintainer can be removed. If someone is removed, we'll add them to an alumni section in this document to recognize their past contributions. +Once the conditions are confirmed, the Member/Approver/Maintainer can be removed following the same voting thresholds as their election. The affected individual has the right to appeal the decision within 14 days by creating an issue in the community repository, which will trigger a review process by the current Maintainers. If someone is removed, we'll add them to an emeritus section in this document to recognize their past contributions. ### Voluntary Departure -If a Member wishes to voluntarily step down from their position, they may do so at any time by creating an issue in the community repository notifying the community of their departure. In this case: +If a Member (or Maintainer/Approver) wishes to voluntarily step down from their position, they may do so at any time by creating an issue in the community repository notifying the community of their departure. In this case: -1. Create a departure notice - - Post an issue in the community repository +1. Create a departure notice by following these steps: + - Post an issue in the community repository by following the [departure template](./.github/ISSUE_TEMPLATE/departure.md) - Notify at least 7 days before your last day - Specify your exact departure date 2. Provide transition details @@ -76,30 +82,99 @@ If a Member wishes to voluntarily step down from their position, they may do so The departure will be publicly announced and remain visible for at least 7 days. During this period: - No formal voting required -- The departing Member should include any relevant handover information in their notification +- The departing Member(or Maintainer/Approver) should include any relevant handover information in their notification - Other Members should acknowledge the departure with a thank you message -- The departing Member will be added to the alumni section of this document to honor their contributions +- The departing Member(or Maintainer/Approver) will be added to the emeritus section of this document to honor their contributions + +After the departure date, the Member(or Maintainer/Approver) and their GitHub ID will be moved to the emeritus section in the specific file to honor their contributions. And the Maintainer team will remove the departing Member(or Maintainer/Approver) from the Dragonfly GitHub Organization if necessary. -After the departure date, the Member and their GitHub ID will be moved to the emeritus section in the [MAINTAINERS.md](MAINTAINERS.md#emeritus-maintainers) file to honor their contributions. This process ensures proper handover and recognition while providing sufficient notice to the community. +Those processes ensure proper handover and recognition while providing sufficient notice to the community. ## Election Process The candidates in the election must explain their past contributions to the project and community, as well as their future plans, while also presenting their campaign reasons and clear intentions. -Dragonfly holds regular elections for Maintainer positions to ensure fair selection: +To become a Member, follow these steps: + +1. Contributors may create a nomination issue using the [nomination template](./.github/ISSUE_TEMPLATE/nominate.md) in the community repository. +2. (Optional) If you are not comfortable creating the nomination issue yourself, you can reach out to an existing Approver or Maintainer to help you with the nomination. The Approver and Maintainer lists can be found in the [APPROVERS.md](roles/Approvers.md) and [MAINTAINERS.md](roles/Maintainers.md) files. +3. While the nomination issue is open, the community can discuss the nomination in the issue comments. +4. The nomination issue remains open for 7 days for community discussion and feedback. +5. The nominee must attend our next bi-weekly community meeting with a quick self-introduction and provide a summary of their contributions. +6. If there are no objections from eligible voters during the discussion period and community meeting, the Maintainer Team starts the voting process in the nomination issue. +7. The member election is voted on by current Maintainers and Approvers in the issue, and a simple majority (more than 50%) is needed to pass the election. +8. If approved, a Maintainer creates a PR to update the [membership registry](roles/Members.md) list. +9. The PR must meet these requirements before merging: + - Link to the nomination and voting issue + - Get at least 2 "LGTM" reviews from existing Approvers or Maintainers +10. Once merged, the Maintainer team adds the new Member to the Dragonfly GitHub Organization. + +The process is similar for becoming an Approver or Maintainer, with additional requirements which are detailed in the [Contributor Ladder](COMMUNITY_LADDER.md). + +Furthermore, to ensure a fair and transparent election process, Dragonfly holds below elections for the specific roles: + + + +| Role | Nomination Period | Voting Period | Eligible Voters | Voting Requirements | +| ---------- | ----------------- | ------------- | --------------------------------- | ---------------------- | +| Member | 7 days | 7 days | Current Maintainers and Approvers | Simple majority (>50%) | +| Approver | 7 days | 14 days | Current Maintainers only | Simple majority (>50%) | +| Maintainer | 7 days | 14 days | Current Maintainers only | Supermajority (≥65%) | + + + +- **Nomination Period**: The nominator creates an issue that remains open for 7 days to allow community discussion. + +- **Discussion Phase**: The nomination issue remains open for community discussion and feedback during the nomination period. + +- **Voting Period**: After the discussion phase, the voting period begins. The vote must start by Maintainers. The vote must remain open for: + - Member election: 7 days + - Approver or Maintainer election: 14 days + +- **Voting Eligibility**: + - For Member Vote: Current Maintainers and Approvers may vote + - For Approver or Maintainer Vote: Only current Maintainers may vote + +- **Voting Requirements**: + - For Member Vote: Simple majority (more than 50%) of eligible voters required to pass + - For Approver Vote: Simple majority (more than 50%) of current Maintainers required to pass + - For Maintainer Vote: Supermajority (at least 65%) of current Maintainers required to pass + +- **Results and Implementation**: Votes are counted and the highest vote recipients are selected for the respective roles. Election outcomes are documented in meeting summaries, and new nominees will be added to the GitHub Organization by the Maintainers Team. + +- **Role List**: The list of current Members, Approvers, and Maintainers is maintained in the [Members.md](roles/Members.md), [Approvers.md](roles/Approvers.md), and [Maintainers.md](roles/Maintainers.md) files respectively. + +### Demonstrating: Adding a New Member + +**Background**: Jane Doe has been contributing to the Dragonfly project for 3 months, consistently submitting bug fixes, documentation improvements, and participating in community discussions. + +#### Step 1: Nomination + +- Jane creates a nomination issue herself using the [nomination template](./.github/ISSUE_TEMPLATE/nominate.md) in the community repository, or alternatively, existing Maintainer John Smith helps her create the nomination. + +#### Step 2: Community Discussion + +- The nomination issue remains open for 7 days for community discussion +- Community members provide feedback and ask questions in the issue comments +- Jane responds to questions about her commitment and future plans +- During this period, eligible voters (current Maintainers and Approvers) can raise any concerns or objections. -- **Bi-Weekly Meeting Discussion**: Each nomination is discussed in at least one bi-weekly community meeting for feedback and questions. -- **Nomination Period**: Existing Maintainers nominate candidates via issues, which remain open for at least 7 days. -- **Voting Period**: Active Maintainers vote on candidates over a 7-day period, with one vote per open position. -- **Counting and Announcement**: Votes are tallied, and top vote-getters become new Maintainers. -- **Documentation**: After elections, the results are documented in meeting summaries or official website, and the election issues are closed with appropriate references. +#### Step 3: Community Meeting and Voting Initiation -### Maximum Representation +- Jane attends the next bi-weekly community meeting for a quick self-introduction and provides a summary of her contributions. +- If there are no objections from eligible voters during the meeting, a Maintainer starts the voting process in the nomination issue. -To ensure balanced representation, no more than four active Maintainers may be from the same company. If more than four candidates from one company are elected, only the top four vote-getters will serve, with additional slots filled by the next highest vote recipients from other organizations. +#### Step 4: Voting Process -### Vacancies +- We use [gitvote](https://github.com/cncf/gitvote) for automated vote counting +- Eligible voters: Current Maintainers and Approvers for Member election +- Voting takes place for 7 days using GitHub issue reactions (👍 for yes, 👎 for no, 👀 for abstain) +- Simple majority (more than 50%) of eligible voters is required for approval -If an elected Maintainer leaves, the candidate with the next most votes from the previous election will be offered the seat. This continues until the seat is filled. +#### Step 5: Results and Onboarding -If this fails, a special election will be held using the eligible voters from the most recent election. A Maintainer elected in a special election serves the remainder of the term for the person they're replacing. +- Vote results are announced: 5 yes, 1 no, 1 abstain (71% approval - passes) +- Jane is officially welcomed as a new Dragonfly Community Member +- A Maintainer creates a pull request to update the `roles/Members.md` file and for the others to review +- Once the PR is merged, the Maintainer team adds Jane to the Dragonfly GitHub Organization with appropriate permissions +- A welcome message will post in the next community meeting summary. diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 7ccf0fa..9ed9a9c 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -23,7 +23,7 @@ We follow the [CNCF Code of Conduct](CODE_OF_CONDUCT.md) to ensure a safe and re ## Amending this Document -Any major changes to this governance document will be discussed among the Maintainer team and need a two-thirds majority vote to be approved. For minor tweaks and clarifications, maintainers can make changes after reaching a general agreement. +Any major changes to this governance document will be discussed among the Maintainer team and need a supermajority (at least 65%) vote to be approved. For minor tweaks and clarifications, maintainers can make changes after reaching a general agreement. ## Security Reporting diff --git a/MAINTAINERS.md b/MAINTAINERS.md deleted file mode 100644 index cdb8c9c..0000000 --- a/MAINTAINERS.md +++ /dev/null @@ -1,43 +0,0 @@ -# Maintainers - -This document lists the current maintainers of the Dragonfly community. The list is sorted alphabetically by name. For details on the maintainer role and responsibilities, see [COMMUNITY_MEMBERSHIP.md](./COMMUNITY_MEMBERSHIP.md#maintainer) and [COMMUNITY_LADDER.md](./COMMUNITY_LADDER.md#maintainer). For governance processes, see [GOVERNANCE.md](./GOVERNANCE.md). - - - -| GitHub ID | Name | Email | Company | -| :-----------------------------------------------: | :-------------: | :--------------------------: | :-----------------------------: | -| [akashhr](https://github.com/akashhr) | Akash HR | akashhr2021@gmail.com | Intel | -| [allencloud](https://github.com/allencloud) | Allen Sun | shlallen1990@gmail.com | Alibaba Group | -| [chlins](https://github.com/chlins) | Chlins Zhang | chlins.zhang@gmail.com | Ant Group | -| [fcgxz2003](https://github.com/fcgxz2003) | fcgxz2003 | 834756128@qq.com | Dalian University of Technology | -| [gaius-qi](https://github.com/gaius-qi) | Gaius Qi | gaius.qi@gmail.com | Ant Group | -| [CormickKneey](https://github.com/CormickKneey) | Han Jiang | cormick1080@gmail.com | Kuaishou | -| [jim3ma](https://github.com/jim3ma) | Jim Ma | majinjing3@gmail.com | Ant Group | -| [bergwolf](https://github.com/bergwolf) | Peng Tao | bergwolf@hyper.sh | Ant Group | -| [hyy0322](https://github.com/hyy0322) | Yiyang Huang | 691795636@qq.com | ByteDance | -| [yxxhero](https://github.com/yxxhero) | yxxhero | aiopsclub@163.com | Zhipu AI | -| [yyzai384](https://github.com/yyzai384) | Yuan Yang | qiguo.yy@alibaba-inc.com | Alibaba Group | -| [garfield009](https://github.com/garfield009) | Zuozheng Hu | zuozheng.hzz@alibaba-inc.com | Alibaba Group | -| [mingcheng](https://github.com/mingcheng) | Cheng Ming | mingcheng@apache.org | Apache | - - - -## Emeritus Maintainers - -Below is the list of emeritus (retired) maintainers. Thank them for their contribution to the project. The list is sorted alphabetically by name. - - - -| GitHub ID | Name | Email | Company | -| :-------------------------------------------------: | :------------: | :--------------------------: | :-----------: | -| [chenchaobing](https://github.com/chenchaobing) | Chen, Chaobing | chenchaobing@126.com | Meitu | -| [bigerous](https://github.com/bigerous) | Cui, Dajun | cuidajun.cdj@alibaba-inc.com | Alibaba Group | -| [inoc603](https://github.com/inoc603) | Huang, Eddie | inoc603@gmail.com | ByteDance | -| [Starnop](https://github.com/Starnop) | Liu, Yuxing | yuxing.lyx@alibaba-inc.com | Alibaba Group | -| [244372610](https://github.com/244372610) | Sun, Weipeng | weipeng.swp@alibaba-inc.com | Alibaba Group | -| [garen-wen](https://github.com/garen-wen) | Wen, Garen | wenmxiang@gmail.com | Baidu Group | -| [lowzj](https://github.com/lowzj) | Zhang, Jin | zj3142063@gmail.com | Alibaba Group | -| [zhouhaibing089](https://github.com/zhouhaibing089) | Zhou, Haibing | zhouhaibing089@gmail.com | eBay | -| [mfarooq](https://github.com/mfarooq) | Mohammed Farooq| mfarooq.ta@gmail.com | Intel | - - diff --git a/roles/Approvers.md b/roles/Approvers.md new file mode 100644 index 0000000..7f6bae3 --- /dev/null +++ b/roles/Approvers.md @@ -0,0 +1,17 @@ +# Approvers + +This file lists the current approvers of the Dragonfly community. The list is sorted alphabetically by name. For details on the approver role and responsibilities, see [COMMUNITY_MEMBERSHIP.md](../COMMUNITY_MEMBERSHIP.md#approver) and [COMMUNITY_LADDER.md](../COMMUNITY_LADDER.md#approver). For governance processes, see [GOVERNANCE.md](../GOVERNANCE.md). + + + +## Current Approvers + +| GitHub ID | Name | Email | Company or Organization | +| :-------: | :---: | :---: | :---------------------: | + +## Emeritus Approvers + +Below is the list of emeritus (retired) approvers. Thank them for their contribution to the project. The list is sorted alphabetically by name. + +| GitHub ID | Name | Email | Company or Organization | +| :-------: | :---: | :---: | :---------------------: | diff --git a/roles/Community-Managers.md b/roles/Community-Managers.md deleted file mode 100644 index 39684d8..0000000 --- a/roles/Community-Managers.md +++ /dev/null @@ -1,5 +0,0 @@ -# Community Managers - -The Community Managers requirements and responsibilities are listed in [COMMUNITY_MEMBERSHIP.md](https://github.com/dragonflyoss/community/blob/master/COMMUNITY_MEMBERSHIP.md#community-manager). The following are the current community managers: - -Please refer to: [dragonfly/OWNERS.md](https://github.com/dragonflyoss/dragonfly/blob/main/OWNERS.md). diff --git a/roles/Maintainers.md b/roles/Maintainers.md index 913a29b..96a918b 100644 --- a/roles/Maintainers.md +++ b/roles/Maintainers.md @@ -1,11 +1,45 @@ # Maintainers -The Maintainers requirements and responsibilities are listed in [COMMUNITY_MEMBERSHIP.md](https://github.com/dragonflyoss/community/blob/master/COMMUNITY_MEMBERSHIP.md#maintainer). The following are the current maintainers: +This document lists the current maintainers of the Dragonfly community. The list is sorted alphabetically by name. For details on the maintainer role and responsibilities, see [COMMUNITY_MEMBERSHIP.md](../COMMUNITY_MEMBERSHIP.md#maintainer) and [COMMUNITY_LADDER.md](../COMMUNITY_LADDER.md#maintainer). For governance processes, see [GOVERNANCE.md](../GOVERNANCE.md). -## Dragonfly-maintainers: Maintainers of [dragonflyoss/dragonfly](https://github.com/dragonflyoss/dragonfly/tree/main) + -Please refer to: [dragonfly/MAINTAINERS.md](https://github.com/dragonflyoss/dragonfly/blob/main/MAINTAINERS.md). +| GitHub ID | Name | Email | Company | +| :---------------------------------------------: | :----------: | :--------------------------: | :-----------------------------: | +| [akashhr](https://github.com/akashhr) | Akash HR | akashhr2021@gmail.com | Intel | +| [allencloud](https://github.com/allencloud) | Allen Sun | shlallen1990@gmail.com | Alibaba Group | +| [chlins](https://github.com/chlins) | Chlins Zhang | chlins.zhang@gmail.com | Ant Group | +| [fcgxz2003](https://github.com/fcgxz2003) | fcgxz2003 | 834756128@qq.com | Dalian University of Technology | +| [gaius-qi](https://github.com/gaius-qi) | Gaius Qi | gaius.qi@gmail.com | Ant Group | +| [CormickKneey](https://github.com/CormickKneey) | Han Jiang | cormick1080@gmail.com | Kuaishou | +| [jim3ma](https://github.com/jim3ma) | Jim Ma | majinjing3@gmail.com | Ant Group | +| [mingcheng](https://github.com/mingcheng) | mingcheng | mingcheng@apache.org | Apache Foundation | +| [bergwolf](https://github.com/bergwolf) | Peng Tao | bergwolf@hyper.sh | Ant Group | +| [yxxhero](https://github.com/yxxhero) | yxxhero | aiopsclub@163.com | Zhipu AI | +| [hyy0322](https://github.com/hyy0322) | Yiyang Huang | 691795636@qq.com | ByteDance | +| [yyzai384](https://github.com/yyzai384) | Yuan Yang | qiguo.yy@alibaba-inc.com | Alibaba Group | +| [garfield009](https://github.com/garfield009) | Zuozheng Hu | zuozheng.hzz@alibaba-inc.com | Alibaba Group | -## Nydus-maintainers: Maintainers of [dragonflyoss/nydus](https://github.com/dragonflyoss/nydus) + -Please refer to: [nydus/MAINTAINERS.md](https://github.com/dragonflyoss/nydus/blob/master/MAINTAINERS.md). +And the Nydus maintainers are also listed in the [main repository](https://github.com/dragonflyoss/nydus)'s [MAINTAINERS.md](https://github.com/dragonflyoss/nydus/blob/master/MAINTAINERS.md). + +## Emeritus Maintainers + +Below is the list of emeritus (retired) maintainers. Thank them for their contribution to the project. The list is sorted alphabetically by name. + + + +| GitHub ID | Name | Email | Company | +| :-------------------------------------------------: | :-------------: | :--------------------------: | :-----------: | +| [chenchaobing](https://github.com/chenchaobing) | Chen, Chaobing | chenchaobing@126.com | Meitu | +| [bigerous](https://github.com/bigerous) | Cui, Dajun | cuidajun.cdj@alibaba-inc.com | Alibaba Group | +| [inoc603](https://github.com/inoc603) | Huang, Eddie | inoc603@gmail.com | ByteDance | +| [Starnop](https://github.com/Starnop) | Liu, Yuxing | yuxing.lyx@alibaba-inc.com | Alibaba Group | +| [244372610](https://github.com/244372610) | Sun, Weipeng | weipeng.swp@alibaba-inc.com | Alibaba Group | +| [garen-wen](https://github.com/garen-wen) | Wen, Garen | wenmxiang@gmail.com | Baidu Group | +| [lowzj](https://github.com/lowzj) | Zhang, Jin | zj3142063@gmail.com | Alibaba Group | +| [zhouhaibing089](https://github.com/zhouhaibing089) | Zhou, Haibing | zhouhaibing089@gmail.com | eBay | +| [mfarooq](https://github.com/mfarooq) | Mohammed Farooq | mfarooq.ta@gmail.com | Intel | + + diff --git a/roles/Members.md b/roles/Members.md new file mode 100644 index 0000000..1edbaa2 --- /dev/null +++ b/roles/Members.md @@ -0,0 +1,18 @@ +# Members + +This document lists all current members of the Dragonfly community, along with their roles and contributions. Membership is open to anyone who actively contributes to the project and adheres to our [Code of Conduct](CODE_OF_CONDUCT.md). + + + +## Current Members + +| GitHub ID | Name | Email | Company or Organization | +| :-------: | :---: | :---: | :---------------------: | + +## Emeritus Members + +Below is the list of emeritus (retired) members. Thank them for their contribution to the project. The list is sorted alphabetically by name. + +| GitHub ID | Name | Email | Company or Organization | +| :-------: | :---: | :---: | :---------------------: | + diff --git a/roles/Security-Team.md b/roles/Security-Team.md index 2a81012..607ffc1 100644 --- a/roles/Security-Team.md +++ b/roles/Security-Team.md @@ -1,5 +1,23 @@ # Security Team -For the security policy of the security team, please refer to: [SECURITY.md](https://github.com/dragonflyoss/community/blob/master/SECURITY.md#security-response-team). +The Dragonfly Security Team is responsible for coordinating the response to security vulnerabilities and maintaining the security posture of the project. -For the current security team members, please refer to: [MAINTAINERS.md](https://github.com/dragonflyoss/dragonfly/blob/main/MAINTAINERS.md). +## Composition + +The Security Team consists of all current active Maintainers as defined in [Maintainers.md](Maintainers.md). All Maintainers are automatically members of the Security Team by virtue of their role. + +## Responsibilities + +- Review and respond to security vulnerability reports +- Coordinate with reporters and the community on security issues +- Develop and review security patches +- Manage the security disclosure process +- Maintain the project's security policy and procedures + +## Communication + +Security Team discussions take place on the private mailing list [dragonfly-maintainers@googlegroups.com](mailto:dragonfly-maintainers@googlegroups.com) to ensure confidentiality of security matters. + +## Security Policy + +For the complete security policy and reporting procedures, please refer to: [SECURITY.md](https://github.com/dragonflyoss/community/blob/master/SECURITY.md).