Skip to content

Commit

Permalink
Add information about project governance and team
Browse files Browse the repository at this point in the history
  • Loading branch information
yrodiere committed Jan 17, 2025
1 parent fb4da47 commit 340ce51
Show file tree
Hide file tree
Showing 9 changed files with 215 additions and 11 deletions.
11 changes: 11 additions & 0 deletions _data/governance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
leaders:
# Order is consistent with the order of projects in the top menu.
sebersole:
- orm
marko-bekhta:
- search
- validator
DavideD:
- reactive
koentsje:
- tools
24 changes: 24 additions & 0 deletions _ext/governance_file_parser.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
require 'fileutils'

module Awestruct
module Extensions
# Parses _data/governance.yml and makes it available under site.governance
class GovernanceFileParser

def initialize(data_dir="_data")
@data_dir = data_dir
end

def watch(watched_dirs)
watched_dirs << @data_dir
end

def execute(site)
# keep reference to site
@site = site

@site.governance = @site.engine.load_yaml( "#{site.dir}/#{@data_dir}/governance.yml" )
end
end
end
end
2 changes: 2 additions & 0 deletions _ext/pipeline.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
require 'relative'
require 'releases'
require 'release_file_parser'
require 'governance_file_parser'
require 'redirect_creator'
require 'directory_listing'
require 'links'
Expand Down Expand Up @@ -45,6 +46,7 @@

# register extensions and transformers
extension Awestruct::Extensions::ReleaseFileParser.new
extension Awestruct::Extensions::GovernanceFileParser.new
transformer Awestruct::Extensions::JsMinifier.new
transformer Awestruct::Extensions::CssMinifier.new
transformer Awestruct::Extensions::HtmlMinifier.new
Expand Down
15 changes: 5 additions & 10 deletions _layouts/community/community-contributors.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +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")

:javascript
$(document).ready(function() {
});

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

:javascript
$(document).ready(function() {
Expand All @@ -45,9 +40,9 @@ 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
80 changes: 80 additions & 0 deletions community/governance.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
= Governance
: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:** Elected members (at most one per code repository) with higher decision power whenever the project they lead is directly 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.

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

Hibernate projects follow the https://www.commonhaus.org/bylaws/decision-making.html[Commonhaus decision-making process], with one additional provision.

Consensus-seeking (lazy consensus)::
Projects primarily aims for a consensus-based decision-making process, where Members and active contributors discuss and come to an agreement.
Voting::
In situations where consensus cannot be reached, decisions may be made through a simple majority vote among Members.
Conflict Resolution::
If conflicts arise, Members are responsible for facilitating a resolution. The https://www.commonhaus.org/bylaws/cf-council.html[Commonhaus Foundation Council] (CFC) can be asked to mediate the discussion, if necessary.
Overruling _(Hibernate-specific)_::
Project Leaders hold the power to overrule any decision directly affecting the project they lead.
This allows swift decisions on urgent or critical matters.
Appeal to such overruling follows conflict resolution rules described above.
// This is intended to balance the very extensive power of project leaders.
In extreme cases, abuse of this power may result in the role of Project Leader being revoked (see below).

[[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, or arbitrarily instating/revoking others.
2. Project Leaders may not use their overruling power.
// This is consistent with Commonhaus' own processes, which use supermajority for critical decisions.
3. If consensus cannot be reached,
the ensuing vote requires supermajority approval by two-thirds of voting Members, instead of simple majority.
// 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.
4. Discussions regarding the role of Project Leader may not last less than 30 days.

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,
// TODO update link upon the PR getting merged.
and agrees to become a Signatory of the https://github.com/commonhaus/foundation/pull/219/files#diff-64f58a8e70e16b011f35a30256797c538e6a951da4e9985943b55f4abe6e94b1[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].

[[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].
72 changes: 72 additions & 0 deletions community/team.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
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.

%p &nbsp;

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

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

:javascript
$(document).ready(function() {
var contributorsNameMapping;
$.getJSON( "/community/contributors/contributors-name-mapping.json", function( data ) {
contributorsNameMapping = data;
$.getJSON( "https://api.github.com/orgs/hibernate/public_members", function( data ) {
var items = [];
data.forEach( function( member ) {
var memberName = contributorsNameMapping ? (contributorsNameMapping[member.login] ? contributorsNameMapping[member.login] : 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 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

0 comments on commit 340ce51

Please sign in to comment.