forked from microsoft/hcsshim
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Lint common error wrapping issues, update README (microsoft#1969)
* Lint common error wrapping issues, update README Enable `errorlint` to catch common issues with wrapping and testing for errors. Wherever possible, switched to using `errors.Is` and `errors.As`. Exceptions: - function is defined in the same package and explicitly returns a know error variable - returns from functions in `io`, `binary`, `context`, `syscall`, `golang.org/x/sys/windows`, or `golang.org/x/sys/unix` that are (relatively) stable in error return value and type - conversion would interact with with `github.com/pkg/errors` - conversion would be non-trivial and require additional testing/validation - specifically, legacy code in `runhcs` and the root of the repo Rename `context` to `ctx` in `pkg\go-runhcs\*.go` to avoid overshadowing `context` package. Update `README.md`: - run markdown formatter (spaces around code blocks and headers, raw link URLS) - add section on linter and go generate (similar to go-winio's) Signed-off-by: Hamza El-Saawy <[email protected]> * PR: hcserrors(+tests), README Signed-off-by: Hamza El-Saawy <[email protected]> --------- Signed-off-by: Hamza El-Saawy <[email protected]>
- Loading branch information
Showing
118 changed files
with
522 additions
and
323 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,15 +9,18 @@ It is primarily used in the [Moby](https://github.com/moby/moby) and [Containerd | |
## Building | ||
|
||
While this repository can be used as a library of sorts to call the HCS apis, there are a couple binaries built out of the repository as well. The main ones being the Linux guest agent, and an implementation of the [runtime v2 containerd shim api](https://github.com/containerd/containerd/blob/master/runtime/v2/README.md). | ||
|
||
### Linux Hyper-V Container Guest Agent | ||
|
||
To build the Linux guest agent itself all that's needed is to set your GOOS to "Linux" and build out of ./cmd/gcs. | ||
|
||
```powershell | ||
C:\> $env:GOOS="linux" | ||
C:\> go build .\cmd\gcs\ | ||
``` | ||
|
||
or on a Linux machine | ||
|
||
```sh | ||
> go build ./cmd/gcs | ||
``` | ||
|
@@ -33,13 +36,15 @@ make all | |
``` | ||
|
||
If the build is successful, in the `./out` folder you should see: | ||
|
||
```sh | ||
> ls ./out/ | ||
delta.tar.gz initrd.img rootfs.tar.gz | ||
``` | ||
|
||
### Containerd Shim | ||
For info on the Runtime V2 API: https://github.com/containerd/containerd/blob/master/runtime/v2/README.md. | ||
|
||
For info on the [Runtime V2 API](https://github.com/containerd/containerd/blob/master/runtime/v2/README.md). | ||
|
||
Contrary to the typical Linux architecture of shim -> runc, the runhcs shim is used both to launch and manage the lifetime of containers. | ||
|
||
|
@@ -48,14 +53,17 @@ C:\> $env:GOOS="windows" | |
C:\> go build .\cmd\containerd-shim-runhcs-v1 | ||
``` | ||
|
||
Then place the binary in the same directory that Containerd is located at in your environment. A default Containerd configuration file can be generated by running: | ||
Then place the binary in the same directory that Containerd is located at in your environment. | ||
A default Containerd configuration file can be generated by running: | ||
|
||
```powershell | ||
.\containerd.exe config default | Out-File "C:\Program Files\containerd\config.toml" -Encoding ascii | ||
``` | ||
|
||
This config file will already have the shim set as the default runtime for cri interactions. | ||
|
||
To trial using the shim out with ctr.exe: | ||
|
||
```powershell | ||
C:\> ctr.exe run --runtime io.containerd.runhcs.v1 --rm mcr.microsoft.com/windows/nanoserver:2004 windows-test cmd /c "echo Hello World!" | ||
``` | ||
|
@@ -64,16 +72,69 @@ C:\> ctr.exe run --runtime io.containerd.runhcs.v1 --rm mcr.microsoft.com/window | |
|
||
This project welcomes contributions and suggestions. Most contributions require you to agree to a | ||
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us | ||
the rights to use your contribution. For details, visit https://cla.microsoft.com. | ||
the rights to use your contribution. For details, visit [Microsoft CLA](https://cla.microsoft.com). | ||
|
||
When you submit a pull request, a CLA-bot will automatically determine whether you need to provide | ||
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions | ||
provided by the bot. You will only need to do this once across all repos using our CLA. | ||
|
||
We also require that contributors [sign their commits](https://git-scm.com/docs/git-commit) using `git commit -s` or `git commit --signoff` to | ||
certify they either authored the work themselves or otherwise have permission to use it in this project. Please see https://developercertificate.org/ for | ||
more info, as well as to make sure that you can attest to the rules listed. Our CI uses the [DCO Github app](https://github.com/apps/dco) to ensure | ||
that all commits in a given PR are signed-off. | ||
We require that contributors sign their commits | ||
to certify they either authored the work themselves or otherwise have permission to use it in this project. | ||
|
||
We also require that contributors sign their commits using using [`git commit --signoff`][git-commit-s] | ||
to certify they either authored the work themselves or otherwise have permission to use it in this project. | ||
A range of commits can be signed off using [`git rebase --signoff`][git-rebase-s]. | ||
|
||
Please see [the developer certificate](https://developercertificate.org) for more info, | ||
as well as to make sure that you can attest to the rules listed. | ||
Our CI uses the [DCO Github app](https://github.com/apps/dco) to ensure that all commits in a given PR are signed-off. | ||
|
||
### Linting | ||
|
||
Code must pass a linting stage, which uses [`golangci-lint`][lint]. | ||
Since `./test` is a separate Go module, the linter is run from both the root and the | ||
`test` directories. Additionally, the linter is run with `GOOS` set to both `windows` and | ||
`linux`. | ||
|
||
The linting settings are stored in [`.golangci.yaml`](./.golangci.yaml), and can be run | ||
automatically with VSCode by adding the following to your workspace or folder settings: | ||
|
||
```json | ||
"go.lintTool": "golangci-lint", | ||
"go.lintOnSave": "package", | ||
``` | ||
|
||
Additional editor [integrations options are also available][lint-ide]. | ||
|
||
Alternatively, `golangci-lint` can be [installed][lint-install] and run locally: | ||
|
||
```shell | ||
# use . or specify a path to only lint a package | ||
# to show all lint errors, use flags "--max-issues-per-linter=0 --max-same-issues=0" | ||
> golangci-lint run | ||
``` | ||
|
||
To run across the entire repo for both `GOOS=windows` and `linux`: | ||
|
||
```powershell | ||
> foreach ( $goos in ('windows', 'linux') ) { | ||
foreach ( $repo in ('.', 'test') ) { | ||
pwsh -Command "cd $repo && go env -w GOOS=$goos && golangci-lint.exe run --verbose" | ||
} | ||
} | ||
``` | ||
|
||
### Go Generate | ||
|
||
The pipeline checks that auto-generated code, via `go generate`, are up to date. | ||
Similar to the [linting stage](#linting), `go generate` is run in both the root and test Go modules. | ||
|
||
This can be done via: | ||
|
||
```shell | ||
> go generate ./... | ||
> cd test && go generate ./... | ||
``` | ||
|
||
## Code of Conduct | ||
|
||
|
@@ -83,7 +144,7 @@ contact [[email protected]](mailto:[email protected]) with any additio | |
|
||
## Dependencies | ||
|
||
This project requires Golang 1.17 or newer to build. | ||
This project requires Golang 1.18 or newer to build. | ||
|
||
For system requirements to run this project, see the Microsoft docs on [Windows Container requirements](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/system-requirements). | ||
|
||
|
@@ -100,3 +161,10 @@ For additional details, see [Report a Computer Security Vulnerability](https://t | |
|
||
--------------- | ||
Copyright (c) 2018 Microsoft Corp. All rights reserved. | ||
|
||
[lint]: https://golangci-lint.run/ | ||
[lint-ide]: https://golangci-lint.run/usage/integrations/#editor-integration | ||
[lint-install]: https://golangci-lint.run/usage/install/#local-installation | ||
|
||
[git-commit-s]: https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--s | ||
[git-rebase-s]: https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---signoff |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.