Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update CI project checks to use containerd project action #101

Merged
merged 3 commits into from
Jan 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 60 additions & 47 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,76 +6,89 @@ on:
pull_request:
branches: [ main ]

permissions:
contents: read
pull-requests: read

jobs:
#
# golangci-lint
#
linters:
name: Linters
runs-on: ${{ matrix.os }}
timeout-minutes: 10

strategy:
matrix:
go-version: [1.17]
os: [ubuntu-latest, macos-latest, windows-latest]

steps:
- uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.43.0
args: --timeout=5m
only-new-issues: true
- name: golangci-lint errors
run: golangci-lint run
if: ${{ failure() }}

#
# Project checks
#
project:
name: Project Checks
runs-on: ubuntu-18.04
timeout-minutes: 5

steps:
- uses: actions/setup-go@v2
with:
go-version: '1.17'

- uses: actions/checkout@v2
with:
path: src/github.com/containerd/ttrpc
fetch-depth: 25

- uses: containerd/project-checks@v1
with:
working-directory: src/github.com/containerd/ttrpc

#
# Build and Test project
#
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-18.04, macos-10.15]
os: [ubuntu-latest, macos-latest, windows-latest]
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 5
steps:

- name: Set up Go 1.15
uses: actions/setup-go@v2
- uses: actions/setup-go@v2
with:
go-version: 1.15
id: go

- name: Setup Go binary path
shell: bash
run: |
echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
go-version: '1.17'

- name: Check out code
uses: actions/checkout@v2
with:
path: src/github.com/containerd/ttrpc
fetch-depth: 25

- name: Checkout project
uses: actions/checkout@v2
with:
repository: containerd/project
path: src/github.com/containerd/project

- name: Install dependencies
env:
GO111MODULE: off
run: |
go get -u github.com/vbatts/git-validation
go get -u github.com/kunalkushwaha/ltag

- name: Check DCO/whitespace/commit message
env:
GITHUB_COMMIT_URL: ${{ github.event.pull_request.commits_url }}
DCO_VERBOSITY: "-q"
DCO_RANGE: ""
working-directory: src/github.com/containerd/ttrpc
run: |
if [ -z "${GITHUB_COMMIT_URL}" ]; then
DCO_RANGE=$(jq -r '.before +".."+ .after' ${GITHUB_EVENT_PATH})
else
DCO_RANGE=$(curl ${GITHUB_COMMIT_URL} | jq -r '.[0].parents[0].sha +".."+ .[-1].sha')
fi
../project/script/validate/dco

- name: Check file headers
run: ../project/script/validate/fileheader ../project/
working-directory: src/github.com/containerd/ttrpc

- name: Test
working-directory: src/github.com/containerd/ttrpc
run: |
go test -v -race -coverprofile=coverage.txt -covermode=atomic ./...

- name: Codecov
run: bash <(curl -s https://codecov.io/bash)
working-directory: src/github.com/containerd/ttrpc
go test -v -race ./...

#
# Run Protobuild
#
protobuild:
name: Run Protobuild
runs-on: ubuntu-20.04
Expand Down
54 changes: 54 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
linters:
enable:
- structcheck
- varcheck
- staticcheck
- unconvert
- gofmt
- goimports
- revive
- ineffassign
- vet
- unused
- misspell
disable:
- errcheck

linters-settings:
revive:
ignore-generated-headers: true
rules:
- name: blank-imports
- name: context-as-argument
- name: context-keys-type
- name: dot-imports
- name: error-return
- name: error-strings
- name: error-naming
- name: exported
- name: if-return
- name: increment-decrement
- name: var-naming
arguments: [["UID", "GID"], []]
- name: var-declaration
- name: package-comments
- name: range
- name: receiver-naming
- name: time-naming
- name: unexported-return
- name: indent-error-flow
- name: errorf
- name: empty-block
- name: superfluous-else
- name: unused-parameter
- name: unreachable-code
- name: redefines-builtin-id

issues:
include:
- EXC0002

run:
timeout: 8m
skip-dirs:
- example
2 changes: 1 addition & 1 deletion client.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ func (c *Client) Call(ctx context.Context, service, method string, req, resp int
}

if dl, ok := ctx.Deadline(); ok {
creq.TimeoutNano = dl.Sub(time.Now()).Nanoseconds()
creq.TimeoutNano = time.Until(dl).Nanoseconds()
}

info := &UnaryClientInfo{
Expand Down
2 changes: 1 addition & 1 deletion client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func TestUserOnCloseWait(t *testing.T) {
t.Fatalf("expected error %v, but got %v", context.DeadlineExceeded, err)
}

_ = <-dataCh
<-dataCh

if err := client.UserOnCloseWait(ctx); err != nil {
t.Fatalf("expected error nil , but got %v", err)
Expand Down
1 change: 1 addition & 0 deletions example/cmd/handshaker_other.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//go:build !linux
// +build !linux

/*
Expand Down
2 changes: 1 addition & 1 deletion handshake.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@ func (fn handshakerFunc) Handshake(ctx context.Context, conn net.Conn) (net.Conn
return fn(ctx, conn)
}

func noopHandshake(ctx context.Context, conn net.Conn) (net.Conn, interface{}, error) {
func noopHandshake(_ context.Context, conn net.Conn) (net.Conn, interface{}, error) {
return conn, nil, nil
}
2 changes: 1 addition & 1 deletion interceptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ type UnaryServerInterceptor func(context.Context, Unmarshaler, *UnaryServerInfo,
// UnaryClientInterceptor specifies the interceptor function for client request/response
type UnaryClientInterceptor func(context.Context, *Request, *Response, *UnaryClientInfo, Invoker) error

func defaultServerInterceptor(ctx context.Context, unmarshal Unmarshaler, info *UnaryServerInfo, method Method) (interface{}, error) {
func defaultServerInterceptor(ctx context.Context, unmarshal Unmarshaler, _ *UnaryServerInfo, method Method) (interface{}, error) {
return method(ctx, unmarshal)
}

Expand Down
38 changes: 25 additions & 13 deletions server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,16 +123,23 @@ func TestServer(t *testing.T) {
go server.Serve(ctx, listener)
defer server.Shutdown(ctx)

const calls = 2
results := make(chan callResult, 2)
go roundTrip(ctx, t, tclient, "bar", results)
go roundTrip(ctx, t, tclient, "baz", results)
testCases := []string{"bar", "baz"}
results := make(chan callResult, len(testCases))
for _, tc := range testCases {
go func(expected string) {
results <- roundTrip(ctx, tclient, expected)
}(tc)
}

for i := 0; i < calls; i++ {
for i := 0; i < len(testCases); {
result := <-results
if result.err != nil {
t.Fatalf("(%s): %v", result.name, result.err)
}
if !reflect.DeepEqual(result.received, result.expected) {
t.Fatalf("unexpected response: %+#v != %+#v", result.received, result.expected)
t.Fatalf("(%s): unexpected response: %+#v != %+#v", result.name, result.received, result.expected)
}
i++
}
}

Expand Down Expand Up @@ -483,29 +490,34 @@ func checkServerShutdown(t *testing.T, server *Server) {
}

type callResult struct {
name string
err error
input *testPayload
expected *testPayload
received *testPayload
}

func roundTrip(ctx context.Context, t *testing.T, client *testingClient, value string, results chan callResult) {
t.Helper()
func roundTrip(ctx context.Context, client *testingClient, name string) callResult {
var (
tp = &testPayload{
Foo: "bar",
Foo: name,
}
)

ctx = WithMetadata(ctx, MD{"foo": []string{"bar"}})
ctx = WithMetadata(ctx, MD{"foo": []string{name}})

resp, err := client.Test(ctx, tp)
if err != nil {
t.Fatal(err)
return callResult{
name: name,
err: err,
}
}

results <- callResult{
return callResult{
name: name,
input: tp,
expected: &testPayload{Foo: strings.Repeat(tp.Foo, 2), Metadata: "bar"},
expected: &testPayload{Foo: strings.Repeat(tp.Foo, 2), Metadata: name},
received: resp,
}
}
Expand Down
2 changes: 0 additions & 2 deletions types.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ func (r *StringList) Reset() { *r = StringList{} }
func (r *StringList) String() string { return fmt.Sprintf("%+#v", r) }
func (r *StringList) ProtoMessage() {}

func makeStringList(item ...string) StringList { return StringList{List: item} }

type KeyValue struct {
Key string `protobuf:"bytes,1,opt,name=key,proto3"`
Value string `protobuf:"bytes,2,opt,name=value,proto3"`
Expand Down
6 changes: 1 addition & 5 deletions unixcreds_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (

type UnixCredentialsFunc func(*unix.Ucred) error

func (fn UnixCredentialsFunc) Handshake(ctx context.Context, conn net.Conn) (net.Conn, interface{}, error) {
func (fn UnixCredentialsFunc) Handshake(_ context.Context, conn net.Conn) (net.Conn, interface{}, error) {
uc, err := requireUnixSocket(conn)
if err != nil {
return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: require unix socket: %w", err)
Expand Down Expand Up @@ -88,10 +88,6 @@ func UnixSocketRequireSameUser() UnixCredentialsFunc {
return UnixSocketRequireUidGid(euid, egid)
}

func requireRoot(ucred *unix.Ucred) error {
return requireUidGid(ucred, 0, 0)
}

func requireUidGid(ucred *unix.Ucred, uid, gid int) error {
if (uid != -1 && uint32(uid) != ucred.Uid) || (gid != -1 && uint32(gid) != ucred.Gid) {
return fmt.Errorf("ttrpc: invalid credentials: %v", syscall.EPERM)
Expand Down