Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add information about project governance and team #231

Open
wants to merge 5 commits into
base: production
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions _data/governance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
leaders:
# Order is consistent with the order of projects in the top menu.
sebersole:
- orm
marko-bekhta:
- search
- validator
DavideD:
- reactive
koentsje:
- tools
roles:
gavinking:
- '<a href="https://github.com/orgs/commonhaus/teams/cf-egc">Project Representative to the CommonHaus Foundation for Hibernate</a>'
10 changes: 5 additions & 5 deletions _layouts/community/community-contributors.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ layout: community-standard

%p &nbsp;

.text-center#contributor-loader
.text-center#list-loader
%i.notched.circle.loading.icon.massive

#contributor-list(style="display:none")
#list.contributor-list(style="display:none")

:javascript
$(document).ready(function() {
Expand All @@ -38,8 +38,8 @@ layout: community-standard
);
});

$( '#contributor-list' ).append( items );
$( '#contributor-loader' ).hide();
$( '#contributor-list' ).fadeIn();
$( '#list' ).append( items );
$( '#list-loader' ).hide();
$( '#list' ).fadeIn();
});
});
12 changes: 12 additions & 0 deletions _partials/menu/desktop-left-community.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
%i.grid.icon.users
Community

- href = "/community/governance/"
- active = (href == current_path)
%a.item{:href => href, :class => "#{(active ? "active" : "")}"}
%i.grid.icon.university
Governance

.ui.dropdown.link.item{:class => "#{(current_path.start_with?( '/community/commonhaus/' ) ? "selected" : "")}"}
Commonhaus
%i.icon.dropdown
Expand Down Expand Up @@ -35,6 +41,12 @@
%a.item{:href => href, :class => "#{(current_path.start_with?( href ) ? "selected" : "")}"}
Build Hibernate ORM

- href = "/community/team/"
- active = (href == current_path)
%a.item{:href => href, :class => "#{(active ? "active" : "")}"}
%i.grid.icon.id.badge
Team

.ui.dropdown.link.item{:class => "#{(current_path.start_with?( '/community/contributors/' ) ? "selected" : "")}"}
Contributors
%i.icon.dropdown
Expand Down
8 changes: 8 additions & 0 deletions _partials/menu/mobile-section-community.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
%a.item(href="/community/"){:class => "#{(item_active ? "active" : "")}"}
%i.grid.icon.users
Community
- href = "/community/governance/"
%a.item{:href => href, :class => "#{(current_path == href ? "active" : "")}"}
%i.grid.icon.university
Governance
- href = "/community/commonhaus/"
%a.item{:href => href, :class => "#{(current_path == href ? "active" : "")}"}
Commonhaus - Membership
Expand All @@ -30,6 +34,10 @@
- href = "/community/contribute/build-hibernate-orm/"
%a.item{:href => href, :class => "#{(current_path.start_with?( href ) ? "active" : "")}"}
Contribute - Build Hibernate ORM
- href = "/community/team/"
%a.item{:href => href, :class => "#{(current_path == href ? "active" : "")}"}
%i.grid.icon.id.badge
Team
- item_active = (current_path == '/community/contributors/orm/')
%a.item(href="/community/contributors/orm/"){:class => "#{(item_active ? "active" : "")}"}
%i.grid.icon.database
Expand Down
86 changes: 86 additions & 0 deletions community/governance.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
= Governance
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file is based on the Commonhaus template, with some heavy changes to better match what (I think) is the current governance model in the Hibernate team.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note iteration 2 involves even heavier changes, the decision-making process is quite different.

:toc:
:awestruct-layout: community-standard

This document outlines the governance model for Hibernate projects.
This governance model is designed to uphold the principles of transparency, open collaboration, and community involvement.

[[roles]]
== Roles and Responsibilities

- **Contributors:** Anyone who contributes to Hibernate projects in any form.
- **Members:** Contributors eligible for write access to a Hibernate code repository.
Responsible for reviewing and merging contributions in their area of expertise.
- **Project Leaders:** Members (at most one per code repository) with higher decision power whenever the project they lead is affected.
Responsible for steering project direction, and for enforcing compliance with requirements of the Commonhaus Foundation.

Small or inactive projects may not have a leader,
in which case Members interested in the project will steer the project direction.
marko-bekhta marked this conversation as resolved.
Show resolved Hide resolved

[[decision-making]]
== Decision-Making

Hibernate projects follow a common decision-making process.

Consensus-seeking (lazy consensus)::
Hibernate projects primarily aim for a consensus-based decision-making process,
where Members and active contributors discuss and come to an agreement.
+
In practice, this involves:
+
* Discussing matters openly, to facilitate others joining the discussions and expressing concerns.
* Taking into account every contributor's opinion, regardless of their role.

+
Actual implementation of consensus decision-making is up to Members and can vary based on the audience and criticality of the discussion.
Inspiration may be found in
the https://community.apache.org/committers/decisionMaking.html[Lazy Consensus model as defined by the Apache Foundation],
and in https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1825&context=sociologyfacpub[Martha's Rules].
Conflict Resolution::
If conflicts arise, Members are responsible for facilitating a resolution.
+
Project Leaders hold the power to make the final decision, be it individually for the project they lead,
or collectively for cross-project matters.
+
As a last resort, in particular in case of disagreement about the decision-making process,
the https://www.commonhaus.org/bylaws/cf-council.html[Commonhaus Foundation Council] (CFC) can be asked to mediate the discussion.

[[role-granting-revoking]]
== Role granting/revoking

The role of Member or Project Leader is granted or revoked through the <<decision-making,decision-making process>>,
with additional restrictions:

1. The discussion must happen on the Hibernate development mailing list, as listed in the link:/community[Community page on this website].
// This prevents a Project Leader overruling their own revocation, in particular.
2. The opinion of the Members or Project Leader whose role is being discussed does not factor into the decision.
// This is long on purpose, to eliminates the risk of a decision being taken "in absentia" during e.g. holidays.
// The assumption is that decisions around the project can be taken collectively, or by the previous leader, in the interim.
3. Discussions regarding the role of Project Leader may not last less than 30 days.
Comment on lines +20 to +59
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@emmanuelbernard (and others) due to concerns around the voting system, I removed any mention of votes in order to better reflect the existing process.
I guess we can add voting later if "enlightened dictatorship" proves to be a real dealbreaker for some prospective contributors -- though I'm not sure how we'd ever hear about that.

This is where most changes are, but see the second commit for detailed changes.


Eligible candidates are:

For the role of Member::
Any contributor.
For the role of Project Leader::
Any contributor to the project they will lead, provided the candidate is a Commonhaus Foundation member,
yrodiere marked this conversation as resolved.
Show resolved Hide resolved
and agrees to become a Signatory of the https://www.commonhaus.org/policies/fiscal-sponsorship/[Commonhaus Fiscal Sponsorship Agreement] before taking on their new role.

Members and Project Leaders keep their role indefinitely, unless they resign or a new decision revokes their role.

The list of Members and Project Leaders is kept up-to-date on the link:/community/team["Team" page] of this website.

[[code-of-conduct]]
== Code of Conduct

All participants in Hibernate projects are expected to adhere to the https://www.commonhaus.org/policies/code-of-conduct/[Commonhaus Foundation Code of Conduct]. Please ensure you are familiar with its guidelines and expectations, as it's essential for maintaining a positive and collaborative environment.

[[trademark-policy]]
== Trademark Policy

The Hibernate logos, icons, and domain names are protected by trademark rights. Usage of these trademarks must adhere to the https://www.commonhaus.org/policies/trademark-policy/[Commonhaus Foundation Trademark Policy].
yrodiere marked this conversation as resolved.
Show resolved Hide resolved

[[contributing]]
== Contributing

We welcome all forms of contribution, from code improvements to documentation and design. For details on how to contribute and the process your contributions will follow, please read our link:/community/contribute/[Contributing Guidelines].
76 changes: 76 additions & 0 deletions community/team.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
layout: community-standard
title: Hibernate Team
---

%h2{:id => "leaders"} Project Leaders

.ui.icon.message
%i.icon.id.badge
.content
This is a list of all
%a(href="/community/governance/#roles")
Hibernate Project Leaders
\.

.contributor-list.leader-list
- site.governance.leaders.each do |login, project_names|
- project_names_joined = project_names.map { |key| site.projects[key].name } .join( ', ' )
.ui.card.contributor{:"data-github-login" => login, :"data-project-names" => project_names_joined}
.content
.header
%a{:href => "https://github.com/#{login}"}
#{login}
.extra.content
Leader of #{project_names_joined}.

%h2{:id => "members"} Members

.ui.icon.message
%i.icon.id.badge
.content
This is a list of all
%a(href="/community/governance/#roles")
Hibernate Members
who decided to make their membership public on GitHub.
Copy link
Member Author

@yrodiere yrodiere Jan 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oddly, some very active members have made their membership private... Maybe by mistake?

If you read this, and you're not on this page, please check your membership's visibility. See https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership


%p &nbsp;

.text-center#list-loader
%i.notched.circle.loading.icon.massive

#list.contributor-list(style="display:none")

:javascript
$(document).ready(function() {
var contributorsNameMapping = #{site.data_json['contributors-name-mapping']}
var governance = #{site.data_json['governance']}
// https://docs.github.com/en/rest/orgs/members?apiVersion=2022-11-28#list-public-organization-members
$.getJSON( "https://api.github.com/orgs/hibernate/public_members?per_page=100", function( data ) {
var items = [];
data.forEach( function( member ) {
var memberName = contributorsNameMapping[member.login] ? contributorsNameMapping[member.login] : member.login;

var item = $( '<div class="ui card contributor"/>' )
.append( $( '<div class="image"/>' ).append( $('<img src="' + member.avatar_url + '" />' ) ) )
.append( $( '<div class="content" />' ).append( $( '<div class="header" />' ).append( $( '<a href="' + member.html_url + '" />' ).text( memberName ) ) ) )

var roles = governance.roles[member.login]
if ( roles ) {
item.append( $( '<div class="extra content" />' ).html( roles.join(', ') + '.' ) );
}

var leaderItem = $( '.leader-list [data-github-login=' + member.login + ']' )
if ( leaderItem.length ) {
item.append( $( '<div class="extra content" />' ).text( 'Leader of ' + leaderItem.data( 'project-names' ) + '.' ) );
leaderItem.replaceWith( item.clone() );
}

items.push(item);
});

$( '#list' ).append( items );
$( '#list-loader' ).hide();
$( '#list' ).fadeIn();
});
});
2 changes: 1 addition & 1 deletion stylesheets/styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -729,7 +729,7 @@ pre .comment .conum {
}
}

#contributor-list {
.contributor-list {
display: grid;
grid-auto-rows: 1fr;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
Expand Down