For new contributors to the Notary project it is hard to understand the governance structure of the project, navigate the relevant repositories and understand the purpose for each repository and practices used for each piece of the project.
Few examples of the confusion are the following:
GOVERNANCE.md
documents) is available in the notary repository, which has the legacy Notary code. Other repositories have Code of Conduct, Contributing, and Release Management documents but those are inconsistent and introduce more confusion.This has impact on the branding, the communication as well as of the security of the project. To improve the governance of the project, I would like to propose the following.
We should clearly define the purpose of each repository under the organization and update the descriptions of the repositories to reflect that purpose. Also, if there are repositories that need to be archived, we should do that. For example, the notary and tuf have very little activity and may be good candidates for archival. Of course, we need to get the maintainers of the respective repositories to do that.
The rest of the repositories have the following purpose:
notation-core-go
and other libraries like oras-go
to do the signing and interact with the registries.For each repository, we should have the following documents:
See below for updates to those documents.
We need to have owners for the Organization as well as for each individual repository. Those do not necessarily need to be the same.
As an example, I am linking the Kubernetes Governance document. We may want to scale down as a smaller project but we need to at a minimum address the following questions in the GOVERNANCE.md document:
We can have a single GOVERNANCE.md document with all the content and separate GOVERNANCE.md documents in each repository that link to the full one and eventually outline any specifics for the respective repository.
This file describes who runs the theupdateframework/notary
which is where the notary repo was prior to the TOC resolution in July 2021
I am linking the Helm contribution guidelines as an example. Address the following questions in the CONTRIBUTING.md document:
Also, we need to make sure that each repository has the necessary templates for filing issues and feature requests.
This should be the document describing how to file security issues. I am linking the Helm security policy document as an example.
We should make sure that we use the GitHub Security Issues reporting process but we still need to have a document describing what the process for review of those issues are and what are the timelines to handle and respond to an issue or vulnerability. We should also have a place where we post the responses to those issues. Other things to cover here are:
We have a simple RELEASE_MANAGEMENT.md and RELEASE_CHECKLIST documents for notation (though, they can be combined in one). They address some of the points below. But in general, the release management should describe the process of release for each one of the sub-projects (CLI, libraries). As part of the release management process, we should address the following:
To increase the transparency, we should follow more strict notes-taking process. At a min, we should have the following:
Also, we need to make sure that meeting notes are not changed after they are completed. HackMD allows changing the notes but keeps versioning and audit trail for up to 10 changes for free users. To avoid the HackMD limitations, we may want to change the process we use HackMD. For example, using a new HackMD document for each meeting to avoid the perf issues with growing docs and linking to the documents from an MD document on GitHub.
The above process should be added to the responsibilities to the meeting chair.
For this we need to split the security in two parts: teams and branch security.
If we use the current organization and repo structure, I propose the following teams structure:
+ notaryproject (organization)
- notaryproject-org-maintainers (team)
+ notaryproject (repository)
+ notaryproject-repo-maintainers (team)
Note: Includes notaryproject-org-maintainers (team)
- Role: Admin
+ notaryproject-repo-release-managers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications
- Role: Maintain
+ notaryproject-repo-code-reviewers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications. This team should automatically be assigned for PR reviews
- Role: Write
+ notaryproject.dev (repository)
+ notaryproject.dev-repo-maintainers (team)
Note: Includes notaryproject-org-maintainers (team)
- Role: Admin
+ notaryproject.dev-repo-release-managers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications
- Role: Maintain
+ notaryproject.dev-repo-code-reviewers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications. This team should automatically be assigned for PR reviews
- Role: Write
+ notation (repository)
+ notation-repo-maintainers (team)
Note: Includes notaryproject-org-maintainers (team)
- Role: Admin
+ notation-repo-release-managers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications
- Role: Maintain
+ notation-repo-code-reviewers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications. This team should automatically be assigned for PR reviews
- Role: Write
+ notation-go (repository)
+ notation-go-repo-maintainers (team)
Note: Includes notaryproject-org-maintainers (team)
- Role: Admin
+ notation-go-repo-release-managers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications
- Role: Maintain
+ notation-go-repo-code-reviewers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications. This team should automatically be assigned for PR reviews
- Role: Write
+ notation-core-go (repository)
+ notation-core-go-repo-maintainers (team)
Note: Includes notaryproject-org-maintainers (team)
- Role: Admin
+ notation-core-go-repo-release-managers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications
- Role: Maintain
+ notation-core-go-repo-code-reviewers (team)
Note: Includes at least two of the leading members from different orgs participating in the development of the specifications. This team should automatically be assigned for PR reviews
- Role: Write
For the branch security, we should implement the following restrictions:
main
and release branches must have PR with at least 2 approvals. Direct pushes to main
and release branches must be disallowedMuch of the guidance here is based on the way the Open Service Mesh docs handle documentation updates, releases, and localization.
contributors.md
file in notaryproject.dev will define the contribution process, but, in short, contributors should fork the repo and have their PRs target the main
branch.main
branch, e.g. release-v1.0
, and published as a subdomain of the docs site, e.g. release-v1.0.notaryproject.dev/docs
main
after a release branch is publishednotaryproject.dev/docs
, will redirect to the latest release subdomainmain
can be published, but only for preview purposes. Offically published docs need to correspond to a release branchmain
. Localization scaffolds are intentionally empty in the main
branch