Merge pull request #3782 from nikhita/template-repo
Update repo creation process to use GitHub repo templates
This commit is contained in:
		
						commit
						399ea79a7c
					
				| 
						 | 
				
			
			@ -22,12 +22,8 @@ against the kubernetes/org repo.
 | 
			
		|||
- [Core Repositories](#core-repositories)
 | 
			
		||||
  * [Goals](#goals-2)
 | 
			
		||||
  * [Rules](#rules-1)
 | 
			
		||||
- [Creating Repositories](#creating-repositories)
 | 
			
		||||
  * [Non-staging repositories](#non-staging-repositories)
 | 
			
		||||
  * [Staging repositories](#staging-repositories)
 | 
			
		||||
- [Removing Repositories](#removing-repositories)
 | 
			
		||||
  * [Grounds for removal](#grounds-for-removal)
 | 
			
		||||
  * [Procedure for removal](#procedure-for-removal)
 | 
			
		||||
- [FAQ](#faq)
 | 
			
		||||
 | 
			
		||||
## Associated Repositories
 | 
			
		||||
| 
						 | 
				
			
			@ -137,64 +133,6 @@ ecosystem. Carries the endorsement of the Kubernetes community.
 | 
			
		|||
     Kubernetes steering committee elections. in the Kubernetes community
 | 
			
		||||
   * Repository must be approved by SIG-Architecture
 | 
			
		||||
 | 
			
		||||
## Creating Repositories
 | 
			
		||||
 | 
			
		||||
### Non-staging repositories
 | 
			
		||||
 | 
			
		||||
For non-staging repositories, suggestions on how to create
 | 
			
		||||
a new repository are described below.
 | 
			
		||||
 | 
			
		||||
  * Ensure that the repo creation request has appropriate approvals
 | 
			
		||||
  as per the rules mentioned above.
 | 
			
		||||
  * Using the organization and repository name mentioned in the repo creation
 | 
			
		||||
  request, create a new repo with default GitHub settings.
 | 
			
		||||
  * Set the description as per the repo creation request.
 | 
			
		||||
  * Clone the newly created repo locally.
 | 
			
		||||
  * Copy the latest contents of [kubernetes-template-project] and create an
 | 
			
		||||
  initial commit with the message *Initial commit from the
 | 
			
		||||
  kubernetes-template-project*.
 | 
			
		||||
  * Make the following changes in the next commit:
 | 
			
		||||
    * If the request references a GitHub team to be listed in the `OWNERS`
 | 
			
		||||
    file, update the `OWNERS_ALIASES` file to remove the steering-committee
 | 
			
		||||
    alias and add a new alias for the team with members populated as per the
 | 
			
		||||
    GitHub team. If the request does not reference a GitHub team, remove the
 | 
			
		||||
    `OWNERS_ALIASES` file.
 | 
			
		||||
    * Update the OWNERS file as per the request. If the repo is a
 | 
			
		||||
    [SIG Repository], add a labels entry for the SIG that the repo belongs to.
 | 
			
		||||
    * Update the `SECURITY_CONTACTS` file as per the request. Note that aliases
 | 
			
		||||
    cannot be used in this case so expand the GitHub team, if specified.
 | 
			
		||||
    * Create a new commit with the message *Update OWNERS, OWNERS_ALIASES and
 | 
			
		||||
    SECURITY_CONTACTS*.
 | 
			
		||||
  * Push the new commits directly to the master branch.
 | 
			
		||||
  * If the repo is a [SIG Repository], add a new topic of the form
 | 
			
		||||
  `k8s-sig-<sig-name-repo-belongs-to>` using the *Manage Topics* option.
 | 
			
		||||
  * Create a PR against [kubernetes/org] to add teams as per the [team guidance]
 | 
			
		||||
  for alloting repo admin and write access.
 | 
			
		||||
  * Once the above PR is merged and the postsubmit has run, the new GitHub teams
 | 
			
		||||
  will be created. In the *Collaborators and Teams* section in Settings,
 | 
			
		||||
  assign the new teams appropriate access to the repo.
 | 
			
		||||
  * Ask the author of the repo creation request to add the repo
 | 
			
		||||
  as a part of a subproject in [`sigs.yaml`](/sigs.yaml).
 | 
			
		||||
 | 
			
		||||
### Staging Repositories
 | 
			
		||||
 | 
			
		||||
If the repository is a staging repository, there are some deviations
 | 
			
		||||
from the above procedure:
 | 
			
		||||
 | 
			
		||||
  * The repository **must** have an initial empty commit. The contents of the
 | 
			
		||||
  repo will be populated from staging by the [publishing-bot].
 | 
			
		||||
  * Grant the [@kubernetes/stage-bots] team admin access to the repo.
 | 
			
		||||
  * Setup branch protection and enable access to the
 | 
			
		||||
  `stage-bots` team by adding the repo in
 | 
			
		||||
  [`prow/config.yaml`](https://git.k8s.io/test-infra/prow/config.yaml). See
 | 
			
		||||
  [kubernetes/test-infra#9292](https://github.com/kubernetes/test-infra/pull/9292)
 | 
			
		||||
  for an example.
 | 
			
		||||
  * Once the repo has been created, add the repo to
 | 
			
		||||
  [`hack/fetch-all-latest-and-push.sh`](https://git.k8s.io/publishing-bot/hack/fetch-all-latest-and-push.sh)
 | 
			
		||||
  in the [publishing-bot] repo.
 | 
			
		||||
 | 
			
		||||
<!-- TODO: Add suggestions for how to migrate existing repos -->
 | 
			
		||||
 | 
			
		||||
## Removing Repositories
 | 
			
		||||
 | 
			
		||||
As important as it is to add new repositories, it is equally important to prune
 | 
			
		||||
| 
						 | 
				
			
			@ -223,31 +161,6 @@ Associated repositories are much more loosely associated with the Kubernetes
 | 
			
		|||
project and are generally not subject to removal, except under exceptional
 | 
			
		||||
circumstances (e.g. a code of conduct violation).
 | 
			
		||||
 | 
			
		||||
### Procedure for removal
 | 
			
		||||
 | 
			
		||||
When a repository has been deemed eligible for removal, we take the following
 | 
			
		||||
steps:
 | 
			
		||||
 | 
			
		||||
  * Ownership of the repo is transferred to the [kubernetes-retired] GitHub
 | 
			
		||||
    organization
 | 
			
		||||
  * The repo description is edited to start with the phrase "[EOL]"
 | 
			
		||||
  * All open issues and PRs are closed
 | 
			
		||||
  * All external collaborators are removed
 | 
			
		||||
  * All webhooks, apps, integrations or services are removed
 | 
			
		||||
  * GitHub Pages are disabled
 | 
			
		||||
  * The repo is marked as archived using [GitHub's archive feature]
 | 
			
		||||
  * Remove all teams associated with the repo
 | 
			
		||||
  * Remove the repo from [sigs.yaml]
 | 
			
		||||
  * The removal is announced on the kubernetes-dev mailing list and community
 | 
			
		||||
    meeting
 | 
			
		||||
 | 
			
		||||
This maintains the complete record of issues, PRs and other contributions,
 | 
			
		||||
leaves the repository read-only, and makes it clear that the repository should
 | 
			
		||||
be considered retired and unmaintained.
 | 
			
		||||
 | 
			
		||||
In case a repository has only the initial commits adding template files
 | 
			
		||||
and no additional activity, it can be completely deleted.
 | 
			
		||||
 | 
			
		||||
## FAQ
 | 
			
		||||
 | 
			
		||||
**My project is currently in kubernetes-incubator, what is going to happen to
 | 
			
		||||
| 
						 | 
				
			
			@ -306,14 +219,3 @@ owned by the authors of Kubernetes.
 | 
			
		|||
 | 
			
		||||
Note that you should _never_ modify or remove a third party's copyright notice if
 | 
			
		||||
you are not authorized by them to do so.
 | 
			
		||||
 | 
			
		||||
[GitHub's archive feature]:
 | 
			
		||||
https://help.github.com/articles/archiving-a-github-repository/
 | 
			
		||||
[kubernetes-retired]: https://github.com/kubernetes-retired
 | 
			
		||||
[kubernetes-template-project]: https://github.com/kubernetes/kubernetes-template-project
 | 
			
		||||
[kubernetes/org]: https://github.com/kubernetes/org
 | 
			
		||||
[team guidance]: /github-management/org-owners-guide.md#team-guidance
 | 
			
		||||
[SIG Repository]: #sig-repositories
 | 
			
		||||
[publishing-bot]: https://github.com/kubernetes/publishing-bot
 | 
			
		||||
[@kubernetes/stage-bots]: https://github.com/orgs/kubernetes/teams/stage-bots
 | 
			
		||||
[sigs.yaml]: /sigs.yaml
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,7 +41,8 @@ managed by the Kubernetes project or use a different name.
 | 
			
		|||
 | 
			
		||||
Due to licensing and CLA issues, prior to transferring software into a
 | 
			
		||||
Kubernetes managed organization there is some due diligence that needs to occur.
 | 
			
		||||
Please contact the steering committee and CNCF prior to moving any code in.
 | 
			
		||||
If needed, please contact the steering committee and CNCF prior to moving any
 | 
			
		||||
code in.
 | 
			
		||||
 | 
			
		||||
It is easier to start new code in a Kubernetes organization than it is to
 | 
			
		||||
transfer in existing code.
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +138,97 @@ checking on all contributions. For more details on those please see the
 | 
			
		|||
Project](https://github.com/kubernetes/kubernetes-template-project), and the
 | 
			
		||||
[Repository Guidelines](kubernetes-repositories.md)
 | 
			
		||||
 | 
			
		||||
The process for creating and removing new repositories is detailed below.
 | 
			
		||||
 | 
			
		||||
### Creating Repositories
 | 
			
		||||
 | 
			
		||||
#### Non-staging repositories
 | 
			
		||||
 | 
			
		||||
For non-staging repositories, suggestions on how to create
 | 
			
		||||
a new repository are described below.
 | 
			
		||||
 | 
			
		||||
  * Ensure that the repo creation request has appropriate approvals
 | 
			
		||||
  as per the rules mentioned above.
 | 
			
		||||
  * Using the organization and repository name mentioned in the repo creation
 | 
			
		||||
  request, create a new repo with:
 | 
			
		||||
    * `Repository Template` as `kubernetes/kubernetes-template-project`
 | 
			
		||||
    * `Description` as mentioned in the repo creation request
 | 
			
		||||
  * Clone the newly created repo locally.
 | 
			
		||||
  * Make the following changes:
 | 
			
		||||
    * If the request references a team to be listed in the `OWNERS`
 | 
			
		||||
    file, update the `OWNERS_ALIASES` file to remove the steering-committee
 | 
			
		||||
    alias and add a new alias for the team with members populated as per the
 | 
			
		||||
    GitHub team. If the request does not reference a team, remove the
 | 
			
		||||
    `OWNERS_ALIASES` file.
 | 
			
		||||
    * Update the OWNERS file as per the request. If the repo is a
 | 
			
		||||
    [SIG Repository], add a labels entry for the SIG that the repo belongs to.
 | 
			
		||||
    * Update the `SECURITY_CONTACTS` file as per the request. Note that aliases
 | 
			
		||||
    cannot be used in this case so expand the team, if specified.
 | 
			
		||||
    * Create a new commit with the message *Update OWNERS, OWNERS_ALIASES and
 | 
			
		||||
    SECURITY_CONTACTS*.
 | 
			
		||||
  * Push the new commit directly to the master branch.
 | 
			
		||||
  * If the repo is a [SIG Repository], add a new topic of the form
 | 
			
		||||
  `k8s-sig-<sig-name-repo-belongs-to>` using the *Manage Topics* option.
 | 
			
		||||
  * Create a PR against [kubernetes/org] to add teams as per the [team guidance](#team-guidance)
 | 
			
		||||
  for alloting repo admin and write access.
 | 
			
		||||
  * Once the above PR is merged and the postsubmit has run, the new GitHub teams
 | 
			
		||||
  will be created. In the *Collaborators and Teams* section in Settings,
 | 
			
		||||
  assign the new teams appropriate access to the repo.
 | 
			
		||||
  * Ask the author of the repo creation request to add the repo
 | 
			
		||||
  as a part of a subproject in [`sigs.yaml`](/sigs.yaml).
 | 
			
		||||
 | 
			
		||||
#### Staging Repositories
 | 
			
		||||
 | 
			
		||||
If the repository is a staging repository, there are some deviations
 | 
			
		||||
from the above procedure:
 | 
			
		||||
 | 
			
		||||
  * The repository **must** have an initial empty commit. The contents of the
 | 
			
		||||
  repo will be populated from staging by the [publishing-bot].
 | 
			
		||||
  * Grant the [@kubernetes/stage-bots] team admin access to the repo.
 | 
			
		||||
  * Setup branch protection and enable access to the
 | 
			
		||||
  `stage-bots` team by adding the repo in
 | 
			
		||||
  [`prow/config.yaml`](https://git.k8s.io/test-infra/prow/config.yaml). See
 | 
			
		||||
  [kubernetes/test-infra#9292](https://github.com/kubernetes/test-infra/pull/9292)
 | 
			
		||||
  for an example.
 | 
			
		||||
  * Once the repo has been created, add the repo to
 | 
			
		||||
  [`hack/fetch-all-latest-and-push.sh`](https://git.k8s.io/publishing-bot/hack/fetch-all-latest-and-push.sh)
 | 
			
		||||
  in the [publishing-bot] repo.
 | 
			
		||||
 | 
			
		||||
<!-- TODO: Add suggestions for how to migrate existing repos -->
 | 
			
		||||
 | 
			
		||||
### Removing Repositories
 | 
			
		||||
 | 
			
		||||
When a repository has been deemed eligible for removal, we take the following
 | 
			
		||||
steps:
 | 
			
		||||
 | 
			
		||||
  * Ownership of the repo is transferred to the [kubernetes-retired] GitHub
 | 
			
		||||
    organization
 | 
			
		||||
  * The repo description is edited to start with the phrase "[EOL]"
 | 
			
		||||
  * All open issues and PRs are closed
 | 
			
		||||
  * All external collaborators are removed
 | 
			
		||||
  * All webhooks, apps, integrations or services are removed
 | 
			
		||||
  * GitHub Pages are disabled
 | 
			
		||||
  * Remove all teams associated with the repo
 | 
			
		||||
  * The repo is marked as archived using [GitHub's archive feature]
 | 
			
		||||
  * Remove the repo from [sigs.yaml]
 | 
			
		||||
  * The removal is announced on the kubernetes-dev mailing list and community
 | 
			
		||||
    meeting
 | 
			
		||||
 | 
			
		||||
This maintains the complete record of issues, PRs and other contributions,
 | 
			
		||||
leaves the repository read-only, and makes it clear that the repository should
 | 
			
		||||
be considered retired and unmaintained.
 | 
			
		||||
 | 
			
		||||
In case a repository has only the initial commits adding template files
 | 
			
		||||
and no additional activity, it can be completely deleted.
 | 
			
		||||
 | 
			
		||||
[GitHub Administration Team]:
 | 
			
		||||
/github-management/README.md#github-administration-team
 | 
			
		||||
[GitHub's archive feature]:
 | 
			
		||||
https://help.github.com/articles/archiving-a-github-repository/
 | 
			
		||||
[@kubernetes/owners]: https://github.com/orgs/kubernetes/teams/owners
 | 
			
		||||
[kubernetes/org]: https://github.com/kubernetes/org
 | 
			
		||||
[publishing-bot]: https://github.com/kubernetes/publishing-bot
 | 
			
		||||
[@kubernetes/stage-bots]: https://github.com/orgs/kubernetes/teams/stage-bots
 | 
			
		||||
[kubernetes-retired]: https://github.com/kubernetes-retired
 | 
			
		||||
[kubernetes-template-project]: https://github.com/kubernetes/kubernetes-template-project
 | 
			
		||||
[SIG Repository]: /github-management/kubernetes-repositories.md##sig-repositories
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue