From d68add3a8fee66f83cb2d4d00736e8f7d89fa6af Mon Sep 17 00:00:00 2001 From: Michael Vincerra Date: Sat, 4 Apr 2020 12:35:49 -0700 Subject: [PATCH] docs: Add GitHub basic setup, best practices, workflows, & add links * Fixes #151 * Create 1-level depth of TOC to simplify * Add Contributor roles section w links * Replace longer examples of PR process w links to GitHub workflows * Reorganize and revise GitHub instructions in 3 new sections * GitHub basic setup, -best practices, and -workflows. * Abstracts most other GitHub refs to external links. * Revises process to use fork-and-clone method. * Removes comments; resolves w revisions; reformats notes. Signed-off-by: Michael Vincerra --- CONTRIBUTING.md | 874 +++++++++++++++++------------------------ fig1-ci-cd-failure.png | Bin 0 -> 34651 bytes fig2-ci-cd-log.png | Bin 0 -> 29317 bytes 3 files changed, 359 insertions(+), 515 deletions(-) create mode 100644 fig1-ci-cd-failure.png create mode 100644 fig2-ci-cd-log.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fd29c14e41..aa7a88e914 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,33 +1,19 @@ -# Contributing to the Kata Containers project +# Contribute to the Kata Containers project * [Code of Conduct](#code-of-conduct) +* [Pull requests](#pull-requests) * [Golang Coding Style](#golang-coding-style) * [Certificate of Origin](#certificate-of-origin) -* [Pull requests](#pull-requests) - * [Before starting work on a PR](#before-starting-work-on-a-pr) - * [Before submitting a PR](#before-submitting-a-pr) - * [Normal PR workflow](#normal-pr-workflow) - * [First PR example](#first-pr-example) - * [Updating your PR based on review comments](#updating-your-pr-based-on-review-comments) - * [Temporarily blocking a PR](#temporarily-blocking-a-pr) - * [Assisted PR workflow](#assisted-pr-workflow) - * [Re-vendor PRs](#re-vendor-prs) - * [Stable branch backports](#stable-branch-backports) +* [GitHub basic setup](#github-basic-setup) +* [GitHub best practices](#github-best-practices) +* [GitHub workflow](#github-workflow) +* [Re-vendor PRs](#re-vendor-prs) +* [Use static checks for validation](#use-static-checks-for-validation) * [Patch format](#patch-format) - * [General format](#general-format) - * [Subsystem](#subsystem) - * [Advice](#advice) - * [Verification](#verification) - * [Examples](#examples) - * [Main patch](#main-patch) - * [Supplementary patch](#supplementary-patch) * [Reviews](#reviews) - * [Review Examples](#review-examples) * [Continuous Integration](#continuous-integration) * [Contact](#contact) * [Project maintainers](#project-maintainers) -* [Issue tracking](#issue-tracking) -* [Closing issues](#closing-issues) The Kata Containers project is an open source project licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0). @@ -41,11 +27,44 @@ process documented here. All contributors must agree to the project [code of conduct](CODE_OF_CONDUCT.md). -## Golang Coding Style +## Pull requests -The usual Go style, enforced by `gofmt`, should be used. Additionally, the [Go -Code Review](https://github.com/golang/go/wiki/CodeReviewComments) document -contains a few common errors to be mindful of. +All the repositories accept contributions via [GitHub Pull requests (PR)](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests). Submit PRs by following the [GitHub workflow](#github-workflow). + +## GitHub basic setup + +To get started, complete the prerequisites below. + +### Prerequisites + +- Review [Contributor roles](#contributor-roles) that require special Git + configuration. + +- [Set up Git](https://help.github.com/en/github/getting-started-with-github/set-up-git). + + >**Note:** The email address you specify must match the email address you + >use to sign-off commits. + +- [Fork and Clone](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the relevant repository at the + [Kata Containers Project](https://github.com/kata-containers). + + Example: Your local clone should show `your-github-username`, as follows. + `https://github.com/${your-github-username}/community`. + +### Contributor roles + +Special Git configuration is required for these contributors: + +* [Golang coding style](#golang-coding-style) +* [Kata runtime static checks](#kata-runtime-static-checks) + +For all other contributor roles, follow the standard configuration, shown in +Prerequisites. + +### Golang coding style + +* Review [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) to avoid common `Golang` errors. +* Use `gofmt` to fix any mechanical style issues. ## Certificate of Origin @@ -53,301 +72,185 @@ In order to get a clear contribution chain of trust we use the [signed-off-by language](https://ltsi.linuxfoundation.org/software/signed-off-process/) used by the Linux kernel project. -## Pull requests +## GitHub best practices -All the repositories accept contributions by a GitHub Pull request (PR). +### Submit issues before PRs -### Before starting work on a PR +Raise a GitHub issue **before** starting work on a PR. -We welcome all contributions but to minimize the chance of multiple people -working on the same feature or bug fixes (yes, it has happened), we recommend -strongly that you raise a GitHub issue **before** you start working on a PR. +* Our process requires an issue to be associated with every PR (see [patch format](#patch-format)) -If you are a new contributor, you cannot assign the issue to yourself. In this -case, raise the issue and add a comment stating that you intend to work on the -issue yourself. This gives the team visibility of the work you plan to do. +* If you are a new contributor, create an issue and add a comment stating +that you intend to work on the issue. This notifies our team of the work you +plan to do. -The other advantage to raising the issue at the outset is that our process requires an -issue to be associated with every PR (see [patch format](#patch-format)). +### Issue tracking -### Before submitting a PR +To report a bug that is not already documented, please open a GitHub issue for the repository in question. -Kata Containers utilizes a number of [CI systems](https://en.wikipedia.org/wiki/Continuous_integration) -to automatically check every PR. As well as performing execution tests locally on -your PR before submission, you are strongly encouraged to also run the same suite of -[static checks](https://github.com/kata-containers/tests/blob/master/.ci/static-checks.sh) -the CI will execute. +If it is unclear which repository to raise your query against, first try to +get in [contact](#contact) with us. If in doubt, raise the issue +[here](https://github.com/kata-containers/community/issues/new) and we will +help you to handle the query by routing it to the correct area for resolution. -> **Note:** If working on `kata-runtime`, first ensure `make` and `make install` has been run in the `virtcontainers` subdirectory. (See [virtcontainers](https://github.com/kata-containers/runtime/blob/master/virtcontainers/documentation/Developers.md#testing) documentation for more information.) -> -> ```sh -> $ pushd runtime/virtcontainers -> $ make -> $ sudo -E PATH=$PATH make install -> $ popd -> ``` -> -> The final `popd` is required to return to the top-level directory from where other build rules can be executed. +### Closing issues -The easiest way to execute static checks in most of the repositories is to invoke the `Makefile` `check` and `test` rules, while developer mode is enabled. +Our tooling requires adding a `Fixes` comment to at least one commit in the PR, which triggers GitHub to automatically close the issue once the PR is merged: -```sh -$ export KATA_DEV_MODE=true -$ make check -$ make test +``` +pod: Remove token from Cmd structure + +The token and pid data will be hold by the new Process structure and +they are related to a container. + +Fixes #123 + +Signed-off-by: Sebastien Boeuf ``` -These should execute without errors. If errors are reported, fix them -before submitting your PR. +The issue is automatically closed by GitHub when the +[commit message](https://help.github.com/articles/closing-issues-via-commit-messages/) is parsed. -> **Note:** To ensure you replicate the static checks performed by the CI system, it is -recommended that you: -> * Ensure you have a "clean" source tree, as the checks will check all files present, and -might fail if you have extra files or your files are out of date in your tree. -> * Ensure that [`golangci-lint`](https://github.com/golangci/golangci-lint) is current or -has not been installed (the static check scripts will install it if necessary). Changes -in either the linters used or the Kata Containers code base can produce spurious errors -that do not fail inside the CI systems. +## GitHub workflow +Kata Containers employs certain augmentations to a +[standard GitHub workflow](https://guides.github.com/introduction/flow/). +In this section, we explain these augmentations in more detail. Follow these guidelines when contributing to Kata Containers repositories, except where noted below. -### Normal PR workflow +* Complete the [GitHub basic setup](#github-basic-setup) above before continuing. -GitHub has a basic introduction to the PR process -[here](https://help.github.com/articles/using-pull-requests/). +* Ensure each PR only covers one topic. If you mix up different items in + your patches or PR, they will likely need to be reworked. -When submitting your PR, treat the PR message the same -you would a patch message, including pre-fixing the title with a subsystem -name. +* Follow a [topic branch method](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-branches) for development. -By default, GitHub copies the message from your first patch, which is often -appropriate. However, ensure your message is accurate and complete for the -entire PR because it ends up in the Git log as the merge message. +* Follow carefully the [patch format](#patch-format) for PRs. -You should also assign any appropriate GitHub labels to your PR. This -is particularly relevant to maintain stable backports. See the -[Stable branch backports](#stable-branch-backports) section for more details. +* Apply the appropriate GitHub labels to your PR. This + is particularly relevant to maintain [Stable branch backports](#stable-branch-backports). See also [GitHub labels and keywords that block PRs](#github-labels-and-keywords-that-block-prs) -Your PR might get feedback and comments, and require rework. The recommended -procedure for reworking is to redo your branch to a clean state and "force -push" it to your GitHub branch. A "forced push" is adequate, which is -reflected in the online comment history. Do not pile patches on patches to -rework your branch. You should rework any relevant information from the GitHub -comment section into your patch set because your patches are documented in the -Git log, not the comment section. + >**Note:** External contributors should use keywords, explained in the + >link above. Labels may not be visible to external contributors. -Your PR can contain more than one patch. Use as many patches as necessary to -implement the request. Each PR should only cover one topic. If you mix up -different items in your patches or PR, they will likely need to be reworked. +* [Rebase](https://help.github.com/en/github/using-git/about-git-rebase) + commits on your branch and `force push` after each cycle of feedback. -#### First PR example +#### Configure your environment -This section guides you through the process to create your first PR. We will -create a branch and in that branch we will change *this document*, which lives -in the Kata Containers community repository: +Most [Kata Containers repositories](https://github.com/kata-containers) +contain code written in the [Go language (golang)](https://golang.org/). Go +requires all code to be put inside the directory specified by the `$GOPATH` +variable. Follow this example to put the code in the standard location. -- https://github.com/kata-containers/community +```sh +$ export GOPATH=${GOPATH:-$HOME/go} +$ mkdir -p "$GOPATH" +``` -This is the official location for this repository and is referred to as the -"upstream" repository. +For further details on `golang`, refer to the +[requirements section of the Kata Developer Guide](https://github.com/kata-containers/documentation/blob/master/Developer-Guide.md#requirements-to-build-individual-components). -> **Note:** This section assumes no previous `git(1)` setup or knowledge. +>*Note*: If you intend to make minor edits, it's acceptable +> to simply fork and clone without adding the GOPATH variable. -- Create a free GitHub account +##### Fork and clone - To raise PRs and create issues, you must have a GitHub account. +In this example, we configure a Git environment to contribute to this very +`Community` repo. We create a sample branch, incorporate reviewer feedback, and rebase our commits. -- Basic Git setup +1. Fork the [upstream repository](https://help.github.com/articles/cloning-a-repository): - First, install the `git` package for your distribution. Second, tell Git - your name and email address, if you haven't already, so they can be recorded - in your commits. +1. [Clone your forked copy of the upstream repository](https://help.github.com/articles/cloning-a-repository): - ```sh - $ git config --global user.email "you@example.com" - $ git config --global user.name "Your Name" - ``` +1. While on your *forked copy*, select the green button `Clone or download` + and copy the URL. - > **Note:** The email address you specify here must match your primary GitHub email address. +1. Run the commands below and **paste the copied URL** (previous step), + so your real GitHub user name replaces `your-github-username` below. + +```sh +$ dir="$GOPATH/src/github.com/kata-containers" +$ mkdir -p "$dir" +$ cd "$dir" +$ git clone https://github.com/{your-github-username}/community +$ cd community +``` + +>**Note:** Cloning a forked repository automatically gives a remote `origin`. -- Create your own copy of the repository +##### Configure the upstream remote - Click "fork" to create "your copy" of the repository you want to change on - https://github.com/kata-containers/community. This is an exact copy of the - upstream repository located at - `https://github.com/${your-github-username}/community` on the GitHub server. You - can make changes on this copy as we move through the example. +Next, add the remote `upstream`. Configuring this remote allows you to +synchronize your forked copy, `origin`, with the `upstream`. The +`upstream` URL varies by repository. We use the `upstream` from the Community for this example. -- Prepare your environment +1. Change directory into `community`. - > **Note:**: Most of the - > [Kata Containers repositories](https://github.com/kata-containers) - > contain code written in the - > [Go language (golang)](https://golang.org/). Go requires all code to be put - > inside the directory specified by the `$GOPATH` variable. Since this example PR - > is not using golang you do not need to - > [install golang](https://github.com/kata-containers/documentation/blob/master/Developer-Guide.md#requirements-to-build-individual-components). - > However it still makes sense to put the code in the standard location. +1. Set the remote `upstream` as follows. - ```sh - $ export GOPATH=${GOPATH:-$HOME/go} - $ mkdir -p "$GOPATH" - ``` + ```sh + $ git remote add upstream https://github.com/kata-containers/community + ``` - > **Note:** The code above is safe to run whether you have golang installed - > or not. - > For further details on golang, refer to the - > [requirements section of the Kata Developer Guide](https://github.com/kata-containers/documentation/blob/master/Developer-Guide.md#requirements-to-build-individual-components). +1. Run `git remote -v`. Your remotes should appear similar to these: + ``` + origin https://github.com/your-github-username/community.git (fetch) + origin https://github.com/your-github-username/community.git (push) + upstream https://github.com/kata-containers/community (fetch) + upstream https://github.com/kata-containers/community (push) + ``` -- [Clone the upstream repository](https://help.github.com/articles/cloning-a-repository): +For more details, see how to [set up a git remote](https://help.github.com/articles/configuring-a-remote-for-a-fork). - "Cloning" is a term that means to create a *local copy* of a Git repository - that generally lives on a remote server. +##### Create a topic branch - ```sh - $ dir="$GOPATH/src/github.com/kata-containers" - $ mkdir -p "$dir" - $ cd "$dir" - $ git clone https://github.com/kata-containers/community - $ cd community - ``` +1. Create a new "topic branch" to do your work on: - > **Note:** The previous Git command: - > - > - Creates a *local copy* of the upstream repository and switches to the - > `master` *branch*. - > - Creates an "alias" (name) for the upstream repository URL called `origin`. + ``` + $ git checkout -b fix-contrib-bugs + ``` - There are now *three* copies of the repository (all *exactly* the same): + >**Warning:** *Never* make changes directly to the `master` branch + >--*always* create a new "topic branch" for PR work. - - The original upstream one (https://github.com/kata-containers/community) +1. Make some editorial changes. In this example, we modify the file that + you are reading. - You do not (and cannot) make changes to this repository. PRs are a way of - allowing the project developers and administrators to review your work and - decide if they want to add your work to the upstream branch. + ``` + $ $EDITOR CONTRIBUTING.md + ``` - > **Note:** Don't worry - even if you make a mistake, - > you *cannot* do any damage to this repository. +1. Commit your changes to the current (`fix-contrib-bugs`) branch. Assure + you use the correct [patch format](#patch-format): - - Your fork (`https://github.com/${your-github-username}/community`) on GitHub + ``` + $ git commit -as + ``` - This is where you send or upload (`git push`) your PR branches. +1. Push your local `fix-contrib-bugs` branch to your remote fork: - - Your *local copy* of the upstream repository - (https://github.com/kata-containers/community) + ``` + $ git push -u origin fix-contrib-bugs + ``` - This is where you actually make changes to your private copy of the - repository. + >**Note:** The `-u` option tells `git` to "link" your local clone with + > your remote fork so that it knows from now on that the local repository + > and the remote fork refer to "the same" upstream repository. Strictly + >speaking, this option is only required the first time you call `git push` + >for a new clone. -- [Setup a "git remote"](https://help.github.com/articles/configuring-a-remote-for-a-fork): - - "What happened to my fork?". The following demonstrates where your fork is - and how you use it. - - Recall that your fork on the GitHub server is an *exact copy* of the - upstream repository that also lives on the GitHub server. That might not be - true moving forward because PRs are constantly merged into the upstream - repository. This means your fork will be out of date because it will not - contain the latest changes in the upstream repository. The same - problem also affects your local copy of the upstream repository. - - The way you keep your local copy up to date is to run `git pull` - periodically. This command downloads all the latest changes from "another - repository" into your local repository. - - You might ask how Git knows which repository to pull changes from. Simply, - it defaults to pull from the repository in which you ran `git clone` - previously. In Git terminology that default repository is given two names: - - - The URL for the default upstream repository is called the `origin`. - - - The local branch that Git puts the copy of the upstream repository into is - called `master`. - - If you run `git push`, Git will try to upload any of your local changes - into the default repository (i.e. the `origin`). This will not work because - the `origin` is the upstream repository that you do not have permission to - change. - - You need to tell Git that your changes should be uploaded to your fork on - the GitHub server when you `git push` This is done by adding what is called - a "remote": - - ```sh - $ user="your-github-username" - $ git remote add github https://github.com/${user}/community - ``` - - > **Note:** The previous command adds an alias (name) for the URL of the - > fork you created on the GitHub server. This makes using the fork easier. - -- Create a new "topic branch" to do your work on: - - ```sh - $ git checkout -b fix-doc-bugs - ``` - - > **Warning:** *Never* make changes directly to the `master` branch - - > *always* create a new "topic branch" for PR work. - -- Make some changes - - In this example we modify the file you are reading: - - ```sh - $ $EDITOR CONTRIBUTING.md - ``` - -- Commit your changes to the current (`fix-doc-bugs`) branch and make sure you - use the correct [patch format](#patch-format): - - ```sh - $ git commit -as - ``` - -- Push your local `fix-doc-bugs` branch to your remote fork: - - The following command uploads your changes to *your fork on the GitHub server*: - - ```sh - $ git push -u github - ``` - > **Note:** The `-u` option tells `git` to "link" your local clone with your - > remote fork so that it will know from now on that the local repository and - > the remote fork refer to "the same" upstream repository. Strictly, you - > only need to use this option the first time you call `git push` for a new - > clone. - -- Create the PR: +1. Create the PR: - Browse to https://github.com/kata-containers/community. - Click the "Compare & pull request" button that appears. - Click the "Create pull request" button. - > **Note:** You do not need to change any of the defaults on this page. + >**Note:** You do not need to change any of the defaults on this page. -The following is a summary of the components and terms we covered in this section: +##### Update your PR based on review comments -| Thing | Description | Summary | -|-|-|-| -| https://github.com/kata-containers/community | Official repository URL. | upstream | -| `https://github.com/${your-github-username}/community` | URL of your remote copy of the official repository. | fork | -| `$GOPATH/src/github.com/kata-containers/community` | Location of your local copy of the repository. | checkout or clone | -| `master` | Local *branch* containing a copy of the upstream. | `master` branch | -| `origin` | The "remote" name for the official repository. | `origin` remote | -| `github` | The "remote" name for your remote fork. | `github` remote | -| `fix-doc-bugs` | Local *branch* containing your PR changes. | `fix-doc-bugs` branch | - -You have setup your Git environment to do the following: - -| Branch | Operation | Description | -|-|-|-| -| `master` | `git pull` | Downloads changes from the `origin` remote (upstream repository) into the local `master` branch | -| `fix-doc-bugs` | `git push` | Uploads changes from your local PR branch to your fork on the GitHub server | - -##### Updating your PR based on review comments - -Let's say you received some review feedback that asked you to make some -changes to your PR. You have updated your local branch and committed those +Suppose you received some reviewer feedback that asked you to make some +changes to your PR. You updated your local branch and committed those review changes by creating three commits. There are now four commits in your local branch: the original commit you created for the PR and three other commits you created to apply the review changes to your branch. Your branch @@ -361,143 +264,105 @@ $ git log master.. --oneline --decorate=no 60e2b2b doh - missed one ``` -> **Note:** The `git log` command compares your current branch (`fix-doc-bugs`) -> with the `master` branch and lists all the commits, one per line. +>**Note:** The `git log` command compares your current branch +>(`fix-contrib-bugs`) with the `master` branch and lists all the commits, +>one per line. -Since all four commits are related to *the same change* to fix spelling mistakes -and break long lines up into shorter lines, it makes sense to combine all four -commits into a *single commit* on your PR. To do this, complete the following -steps: +##### Git rebase if multiple commits -- Update your branch +Since all four commits are related to *the same change*, it makes sense to +combine all four commits into a *single commit* on your PR. You need to +[git rebase](https://help.github.com/github/using-git/about-git-rebase) +multiple commits on your branch. Follow these steps. - You need to ensure your local copy of the upstream branch contains the - latest changes. +1. Update the `master` branch in your local copy of the upstream + repository: -- Rebase your changes against the `master` branch + ``` + $ cd $GOPATH/src/github.com/kata-containers/community + $ git checkout master + $ git pull --rebase upstream master + ``` - This operation might seem scary, but it is the way Git allows you to merge - all of your changes together. + The previous command downloads all the latest changes from the upstream + repository and adds them to your *local copy*. -- Squash all the commits together +1. Now, switch back to your PR branch: - "Squashing" means to combine all your commits into a single commit. All the - changes you made are saved and associated with a single commit, rather than - being spread across four commits. + ``` + $ git checkout fix-contrib-bugs + ``` -- Force-push the newly updated branch to your fork on GitHub +1. Rebase your changes against the `master` branch. - This updates your PR with your new (*single*) commit. + ```sh + $ git rebase -i master + ``` -Taking each step in turn: + Example output: -- Update your branch + ```sh + pick 2e335ac docs: Fix typos and fold long lines + pick 6d6deb0 apply review feedback changes + pick 23bc01d remove blank lines + pick 3a4ba3f doh - missed one + ``` - First, update the `master` branch in your local copy of the upstream - repository: +1. In your editor, read the comments at the bottom of the screen. + Do not modify the first line, `pick 2e335ac docs: Fix typos ...`. Instead, revise `pick` to `squash` at the start of all following lines. - ```sh - $ cd $GOPATH/src/github.com/kata-containers/community - $ git checkout master - $ git pull - ``` + Example output: - The previous command downloads all the latest changes from the upstream - repository and adds them to your *local copy*. + ```sh + pick 2e335ac docs: Fix typos and fold long lines + squash 6d6deb0 apply review feedback changes + squash 23bc01d remove blank lines + squash 3a4ba3f doh - missed one + ``` - Now, switch back to your PR branch: +1. Save your changes and quit the editor. Git puts you *back* into your + editor. You will see all the commit *messages*. - ```sh - $ git checkout fix-doc-bugs - ``` +1. At top is your first commit, which should be in the + [correct format](#patch-format). Keep your first commit and delete + all the following commits, as appropriate, based on + the review feedback. -- Start the rebase operation +1. Save the file and quit the editor. Once this operation completes, the four + commits will have been converted into a single new commit. Check this by + running the `git log` command again: - ```sh - $ git rebase -i master - ``` + ```sh + $ git log master.. --oneline --decorate=no + 3ea3aef docs: Fix typo + ``` - As an example, your editor window could appear as follows: +1. Force push your updated local `fix-contrib-bugs` branch to `origin` + remote: - ``` - pick 2e335ac docs: Fix typos and fold long lines - pick 6d6deb0 apply review feedback changes - pick 23bc01d remove blank lines - pick 3a4ba3f doh - missed one - ``` + ```sh + $ git push -f origin fix-contrib-bugs + ``` -- In your editor, read the comments at the bottom of the screen. Next, without - modifying the first line (`pick 2e335ac docs: Fix typos and fold long lines`), - change the "`pick`" at the start of all the other lines to "`squash`". +>**Note:** Not only does this command upload your changes to your fork, it +>also includes the *latest upstream changes* to your fork since you ran +>`git pull --rebase upstream master` on the master branch and then merged +>those changes into your PR branch. This ensures your fork is now "up to +>date" with the upstream repository. The `-f` option is a "force push". Since +>you created a new commit using `git rebase`, you must "overwrite" the old +>copy of your branch in your fork on GitHub. - As an example, your editor window could appear as follows: +Your PR is now updated on GitHub. To ensure team members are aware of this, +leave a message on the PR stating something like, "Review feedback applied". +This notification allows the team to once again review your PR more quickly. - ``` - pick 2e335ac docs: Fix typos and fold long lines - squash 6d6deb0 apply review feedback changes - squash 23bc01d remove blank lines - squash 3a4ba3f doh - missed one - ``` - - Next, save and quit the editor window and Git puts you *back* into your - editor. Now, instead of showing you all the one line commit summaries, you - will see all the commit *messages*. These messages are descriptions for all the - commits you created. At this point you can modify the file as you wish. Once - you save and exit the editor, Git uses whatever is left in the file as the - commit message for your "squashed" commit. - - If you followed the example [first PR](#first-pr-example), - your first commit ("`2e335ac docs: Fix typos and fold long lines`") - is already in the [correct format](#patch-format). You keep the text for - your first commit and delete everything else in the editor window and update - if appropriate based on the review feedback. - - Save the file and quit the editor. Once this operation completes, the four - commits will have been converted into a single new commit. Check this by - running the `git log` command again: - - ```sh - $ git log master.. --oneline --decorate=no - 3ea3aef docs: Fix typo - ``` - -- Force push your updated local `fix-doc-bugs` branch to your remote fork: - - ```sh - $ git push -f github - ``` - - > **Notes:** - > - > - Not only does this command upload your changes to your fork, it also - > includes the *latest upstream changes* to your fork since you - > ran `git pull` in the master branch and then merged those changes into - > your PR branch. This is exactly what you want as your fork is now "up to - > date" with the upstream repository. - > - > - The `-f` option is a "force push". Since you created a new commit using - > `git rebase`, you must "overwrite" the old copy of your branch in your - > fork on GitHub. This is similar to saving a file in your editor because - > you are overwriting the old version you no longer want. GitHub - > recommends a force push to handle an update to your PR. This also means - > you do not have to create a new PR on GitHub because a force push - > effectively re-uses the initial PR you raised and includes your latest - > changes. - > - > For more information on GitHub "force push" workflows see "[Why and how to - > correctly amend GitHub pull - > requests](http://blog.adamspiers.org/2015/03/24/why-and-how-to-correctly-amend-github-pull-requests/)". - -Your PR is now updated on GitHub. To ensure team member are aware of this, -leave a message on the PR stating something like, "review feedback applied". -Then, the team is notified and able to re-review your PR more quickly. - -### Temporarily blocking a PR +### GitHub labels and keywords that block PRs Kata Containers CI systems have two methods that allow marking -PRs to prevent them being merged. The methods are +PRs to prevent them being merged. This practice is often used during +development. The two methods are: 1) Use [GitHub labels](https://help.github.com/articles/about-labels/) -or keywords in the PR subject line. The keywords can appear anywhere +or; 2) Use keywords in the PR subject line. The keywords can appear anywhere in the subject line. The following table summarises some common scenarios and appropriate use @@ -514,86 +379,16 @@ of labels or keywords: If any of the values in the table above are set on a PR, it will be automatically blocked from merging. -> **Note:** Often during discussions the abbreviated and full terms are -> used interchangeably. For instance, often `DNM` is used -> in discussions as shorthand for `do-not-merge`. The CI systems only -> recognise the above phrases as shown. +>**Note:** Often during discussions, the abbreviated and full terms are +>used interchangeably. For instance, often `DNM` is used in discussions as +>shorthand for `do-not-merge`. The CI systems only recognise the above +>phrases as shown. -### Assisted PR workflow - -If your PR is deemed useful but you are struggling to update it based on -review feedback, or your PR appears to have been abandoned, the project -maintainers might suggest (or decide in your absence) that an assisted PR -workflow be employed. In that case, a new PR is created using your PR as a -base and applying fixes to it. - -The following steps outline the full Assisted PR workflow: - -1. A team member is assigned to handling the assisted PR. - -1. The team member adds a comment on the original PR explaining what is - about to happen: - - > Thank you for your contribution but we are unable to merge it until all - > review feedback has been applied and all CI checks have passed. - > - > Since we have not heard from you for a while, we assume you are unable to - > progress this PR. As such, we intend to create a new PR based on this - > one, and resolve the identified issues on the new PR. The new PR will - > reference this PR for tracking purposes. - > - > This PR will be marked `do-not-merge` and will be closed when our new PR - > has been merged. We will credit all authors of this PR on the new PR. - -1. The team member applies the `do-not-merge` label to the original PR. - -1. The team member creates a new PR based on the contents of the original - PR. - - The commits from the original PR should be retained where possible. - - At least one commit in the new PR should reference the old PR or its - associated issue. - - All authors of the new PR, which includes all authors of the original PR, - should be credited using a `Signed-off-by` comment for each author. - -1. The team updates the new PR to resolve the issues with the original PR. - - They might decide to collaborate on this work if it makes sense to do so. - In this scenario, multiple people push commits to the same PR branch. - - This approach might be adopted in the following scenarios: - - - The number of changes required is high. - - The changes can be split into logical and discrete groups. - - The PR requires input from multiple team members. - - The PR is urgent and needs to be resolved as soon as possible. For - example, with [documentation PRs](Documentation-Review-Process.md) - it is essential the documentation is correct. - -1. Once the creator of the new PR believes that all issues are resolved in the - original PR, they request a review of the new PR by the team - *and the original PR creator*. - - Once all the standard approvals are obtained, the new PR is merged. - - The original PR creator's approval is recommended, but optional. If they do - not respond in a timely fashion (generally a week, but this might be a much - shorter period for urgent PRs) the PR is merged regardless. - - If the original PR creator disagrees with the contents of the new PR after - it is merged, they can raise a PR to resolve the issues. - -1. When the new PR is merged, the team member closes the original PR. - -### Re-vendor PRs +## Re-vendor PRs If you raise a PR to update the vendored copy of one or more golang packages, after running the -[`dep`](https://github.com/kata-containers/community/blob/master/VENDORING.md) -command ensure you add any modified files under the `vendor/` directory to Git -before committing the changes: +[`dep`](https://github.com/kata-containers/community/blob/master/VENDORING.md) command, ensure you add any modified files under the `vendor/` directory to Git before committing the changes: ```sh $ git add vendor/ @@ -610,9 +405,9 @@ body: - The range of commits being added for these third-party packages. It is possible that re-vendoring a particular package will also result in - updates to other dependent packages. However, it is important to include the - commit range (even if it is big) for the primary package(s) the re-vendor PR - is raised for. + updates to other dependent packages. However, it is important to include + the commit range (even if it is big) for the primary package(s) the + re-vendor PR is raised for. These details allow for easier troubleshooting if the re-vendor PR introduces bug or behavioral changes. @@ -628,7 +423,7 @@ body: 1. Run the commands below: - ``` + ```bash $ go get -d -u github.com/opencontainers/runc $ cd $GOPATH/src/github.com/opencontainers/runc $ old_commit="..." @@ -644,15 +439,78 @@ body: For additional information on using the `dep` tool, see "[Performing vendoring for the Kata Containers project](https://github.com/kata-containers/community/blob/master/VENDORING.md)". +## Use static checks for validation + +* Kata Containers utilizes [Continuous Integration (CI)](#continuous-integration) to automatically check every PR. + +* We strongly encourage you to run the same CI tests on individual PRs, using [static checks](https://github.com/kata-containers/tests/blob/master/.ci/static-checks.sh) + +In repositories where a `Makefile` is present, you can execute +static checks for testing and development. To do so, invoke the `make check` and `make test` rules, after developer mode is enabled. + +```sh +$ export KATA_DEV_MODE=true +$ make check +$ make test +``` +Running these checks should result in **no errors**. If errors are reported, fix them before submitting your PR. + +To replicate the static checks performed by the CI system: + +- [x] Ensure you have a "clean" source tree, as the checks cover all files + present. Checks might fail if you have extra files or your files are out of date in your tree. + +- [x] Ensure [`golangci-lint`](https://github.com/golangci/golangci-lint) is +current or has not been previously installed (the static check scripts will +install it if necessary). Changing the linters used or the Kata +Containers code base can produce spurious errors that do not fail inside the +CI systems. + +### Fix failed static checks after submitting PRs + +Some submitted PRs fail to pass static checks. After such a PR fails, +view its build logs to determine the cause of failure. + +1. At the bottom of the PR, if a message appears, "Some checks were not + successful," select "Details", as shown below. + + ![Failed CI-CD](fig1-ci-cd-failure.png) + +1. Upon entering the Travis CI* web page, select the first number that + appears below "Build jobs." + +1. Scroll to the bottom of the build log and view the `ERROR` message(s). + In the example below, the `ERROR` reads: `... no + signed-off-by specified`. This is a requirement. To fix, use the signed-off-by method while pushing a commit. See [Patch format]( + #patch-format) for more details. + + ![Build log error messages](fig2-ci-cd-log.png) + +#### Kata runtime static checks + +If working on `kata-runtime`, first ensure you run `make` and `make install` +in the `virtcontainers` subdirectory, as shown below. For more information, +see [virtcontainers](https://github.com/kata-containers/runtime/blob/master/virtcontainers/documentation/Developers.md#testing). + +```bash +$ pushd runtime/virtcontainers +$ make +$ sudo -E PATH=$PATH make install +$ popd +``` + +>**Note:** The final `popd` is required to return to the top-level directory +>from where other build rules can be executed. + ### Stable branch backports -Kata Containers maintains a number of stable branch releases. Bug fixes to the -master branch are selectively applied to (or "backported") these stable branches. +Kata Containers maintains a number of stable branch releases. Bug fixes to +the master branch are selectively applied to (or "backported") these stable branches. -In order to aid identification of commits that potentially should be backported to -the stable branches, all PRs submitted must be labelled with one or more of the -following labels. At least one label that is *not* `stable-candidate` must -be included. +In order to aid identification of commits that potentially should be +backported to the stable branches, all PRs submitted must be labeled with +one or more of the following labels. At least one label that is *not* +`stable-candidate` must be included. | Label | Meaning | | ----- | ------- | @@ -662,11 +520,11 @@ be included. | `stable-candidate` | A PR selected for backporting - very likely a bug fix | | `vendor` | A golang vendor update. Might be considered for backport if the vendor update includes critical bug fixes | -In the event that a bug fix PR is selected for backporting to the stable branches, -the `stable-candidate` label is added if not already present, and the original author -of the PR is asked if they will submit the relevant backport PRs. For a quick guide -on how to perform and submit a backport, see the [Backport Guide](Backport-Guide.md) -in this repository. +In the event that a bug fix PR is selected for backporting to the stable +branches, the `stable-candidate` label is added if not already present, and +the original author of the PR is asked if they will submit the relevant +backport PRs. For a quick guide on how to perform and submit a backport, see +the [Backport Guide](Backport-Guide.md) in this repository. ## Patch format @@ -687,11 +545,28 @@ This comment is required for the main patch in a sequence. See the following exa Signed-off-by: ``` -The body of the message is not a continuation of the subject line and is not used to extend the subject line beyond its character limit. The subject line is a complete sentence and the body is a complete, standalone paragraph. +#### Pull request format + +As shown above, pull requests must adhere to these guidelines: + +* Preface the PR title with the appropriate keyword found in [Subsystem](#subsystem) + +* Ensure PR title length is 75 characters or fewer, including whichever + `subsystem` term is used. + +* Ensure the PR body line length is 72 characters or fewer. + +The body of the message is **not** a continuation of the subject line and is +not used to extend the subject line beyond its character limit. The subject +line is a complete sentence and the body is a complete, standalone paragraph. ### Subsystem -The "subsystem" describes the area of the code that the change applies to. It does not have to match a particular directory name in the source tree because it is a "hint" to the reader. The subsystem is generally a single word. Although the subsystem must be specified, it is not validated. The author decides what is a relevant subsystem for each patch. +The "subsystem" describes the area of the code that the change applies to. +It does not have to match a particular directory name in the source tree +because it is a "hint" to the reader. The subsystem is generally a single +word. Although the subsystem must be specified, it is not validated. The +author decides what is a relevant subsystem for each patch. Examples: @@ -709,13 +584,16 @@ To see the subsystem values chosen for existing commits: $ git log --no-merges --pretty="%s" | cut -d: -f1 | sort -u ``` -### Advice +### Best practices for patches -It is recommended that each of your patches fixes one thing. Smaller patches -are easier to review, more likely accepted and merged, and problems are more -likely to be identified during review. +We recommend that each patch fixes one thing. Smaller patches are easier to +review, more likely to be accepted and merged, and more conducive for +identifying problems during review. -A PR can contain multiple patches. These patches should generally be related to the [main patch](#main-patch) and the overall goal of the PR. However, it is also acceptable to include additional or [supplementary patches](#supplementary-patch) for things such as: +A PR can contain multiple patches. These patches should generally be related +to the [main patch](#main-patch) and the overall goal of the PR. However, it +is also acceptable to include additional or +[supplementary patches](#supplementary-patch) for things such as: - Formatting (or whitespace) fixes - Comment improvements @@ -761,20 +639,20 @@ variable name. Signed-off-by: James O. D. Hunt ``` - ## Reviews Before your PRs are merged into the main code base, they are reviewed. We encourage anybody to review any PR and leave feedback. -See the [PR review guide](PR-Review-Guide.md) for tips on performing a careful review. +See the [PR review guide](PR-Review-Guide.md) for tips on performing a +careful review. We use the GitHub [Required Reviews](https://help.github.com/articles/approving-a-pull-request-with-required-reviews/) system for reviewers to note if they agree or disagree with a PR. To have -an acknowledgement or "nack" registered with GitHub, you **must** use the +an acknowledgment or "nack" registered with GitHub, you **must** use the GitHub "Review changes" dialog to leave feedback. Notes left only in the comments fields, whilst sometimes useful, will not get registered -in the acknowledgement counting system. +in the acknowledgment counting system. Documentation PRs can sometimes use a modified process explained in the [Documentation Review Process](Documentation-Review-Process.md) guide. @@ -794,8 +672,7 @@ lgtm The Kata Containers project has a gating process to prevent introducing regressions. When your PR is submitted, a Continuous Integration (CI) system -will run different checks on different platforms upon your changes. Currently -Kata uses [Jenkins](http://jenkins.katacontainers.io) and +will run different checks on different platforms, based upon your changes. Currently Kata uses [Jenkins](http://jenkins.katacontainers.io) and [Travis CI](https://travis-ci.org/kata-containers/) for testing your changes. Some of the checks are: @@ -805,9 +682,9 @@ Some of the checks are: - Functional tests. - Integration tests. -The Travis job will be executed right after the PR is opened, while the Jenkins -jobs will wait to be triggered. A maintainer must add a `/test` comment -on the PR to let the CI jobs run. +The Travis job will be executed right after the PR is opened, while the +Jenkins jobs will wait to be triggered. A maintainer must add a `/test` +comment on the PR to let the CI jobs run. All CI jobs must pass in order to merge your PR. @@ -825,41 +702,8 @@ acknowledgement (or "ack") from an Approver counts towards the approval of a PR. Approvers are listed in GitHub teams, one for each repository. The project uses the [GitHub required status checks](https://help.github.com/en/articles/enabling-required-status-checks) -along with the [GitHub `CODEOWNERS` -file](https://help.github.com/en/articles/about-code-owners) to specify who -can approve PRs. All repositories are configured to require: +along with the [GitHub `CODEOWNERS`file](https://help.github.com/en/articles/about-code-owners) to specify who can approve PRs. All repositories are configured to require: - Two approvals from the repository-specific approval team. -- One [documentation team](https://github.com/orgs/kata-containers/teams/documentation/members) - approval if the PR modifies documentation. - -## Issue tracking - -To report a bug that is not already documented, please open a GitHub issue for -the repository in question. - -If it is unclear which repository to raise your query against, first try to -get in [contact](#contact) with us. If in doubt, raise the issue -[here](https://github.com/kata-containers/community/issues/new) and we will -help you to handle the query by routing it to the correct area for resolution. - -## Closing issues - -Our tooling requires adding a `Fixes` comment to at least one commit in the PR, -which triggers GitHub to automatically close the issue once the PR is merged: - -``` -pod: Remove token from Cmd structure - -The token and pid data will be hold by the new Process structure and -they are related to a container. - -Fixes #123 - -Signed-off-by: Sebastien Boeuf -``` - -The issue is automatically closed by GitHub when the [commit -message](https://help.github.com/articles/closing-issues-via-commit-messages/) -is parsed. +- One [documentation team](https://github.com/orgs/kata-containers/teams/documentation/members) approval if the PR modifies documentation. diff --git a/fig1-ci-cd-failure.png b/fig1-ci-cd-failure.png new file mode 100644 index 0000000000000000000000000000000000000000..9656aec3811d7224b90c6be493db2491aa308d0f GIT binary patch literal 34651 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 m%}GvC3T^!<4iO2u+3UE1Q&LX7?> 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 dofr5HgHF$i@V!ZJ|F(#y^h{N*