Merge pull request #101 from dmcgowan/update-ci
Update CI project checks to use containerd project action
This commit is contained in:
commit
a362a1377f
109
.github/workflows/ci.yml
vendored
109
.github/workflows/ci.yml
vendored
@ -6,29 +6,74 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches: [ main ]
|
branches: [ main ]
|
||||||
|
|
||||||
jobs:
|
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:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-18.04, macos-10.15]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
name: ${{ matrix.os }}
|
name: ${{ matrix.os }}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
timeout-minutes: 5
|
timeout-minutes: 5
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Set up Go 1.15
|
- uses: actions/setup-go@v2
|
||||||
uses: actions/setup-go@v2
|
|
||||||
with:
|
with:
|
||||||
go-version: 1.15
|
go-version: '1.17'
|
||||||
id: go
|
|
||||||
|
|
||||||
- name: Setup Go binary path
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
|
|
||||||
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -36,46 +81,14 @@ jobs:
|
|||||||
path: src/github.com/containerd/ttrpc
|
path: src/github.com/containerd/ttrpc
|
||||||
fetch-depth: 25
|
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
|
- name: Test
|
||||||
working-directory: src/github.com/containerd/ttrpc
|
working-directory: src/github.com/containerd/ttrpc
|
||||||
run: |
|
run: |
|
||||||
go test -v -race -coverprofile=coverage.txt -covermode=atomic ./...
|
go test -v -race ./...
|
||||||
|
|
||||||
- name: Codecov
|
|
||||||
run: bash <(curl -s https://codecov.io/bash)
|
|
||||||
working-directory: src/github.com/containerd/ttrpc
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run Protobuild
|
||||||
|
#
|
||||||
protobuild:
|
protobuild:
|
||||||
name: Run Protobuild
|
name: Run Protobuild
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
|
54
.golangci.yml
Normal file
54
.golangci.yml
Normal file
@ -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
|
@ -123,7 +123,7 @@ func (c *Client) Call(ctx context.Context, service, method string, req, resp int
|
|||||||
}
|
}
|
||||||
|
|
||||||
if dl, ok := ctx.Deadline(); ok {
|
if dl, ok := ctx.Deadline(); ok {
|
||||||
creq.TimeoutNano = dl.Sub(time.Now()).Nanoseconds()
|
creq.TimeoutNano = time.Until(dl).Nanoseconds()
|
||||||
}
|
}
|
||||||
|
|
||||||
info := &UnaryClientInfo{
|
info := &UnaryClientInfo{
|
||||||
|
@ -62,7 +62,7 @@ func TestUserOnCloseWait(t *testing.T) {
|
|||||||
t.Fatalf("expected error %v, but got %v", context.DeadlineExceeded, err)
|
t.Fatalf("expected error %v, but got %v", context.DeadlineExceeded, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = <-dataCh
|
<-dataCh
|
||||||
|
|
||||||
if err := client.UserOnCloseWait(ctx); err != nil {
|
if err := client.UserOnCloseWait(ctx); err != nil {
|
||||||
t.Fatalf("expected error nil , but got %v", err)
|
t.Fatalf("expected error nil , but got %v", err)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
//go:build !linux
|
||||||
// +build !linux
|
// +build !linux
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -45,6 +45,6 @@ func (fn handshakerFunc) Handshake(ctx context.Context, conn net.Conn) (net.Conn
|
|||||||
return fn(ctx, 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
|
return conn, nil, nil
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ type UnaryServerInterceptor func(context.Context, Unmarshaler, *UnaryServerInfo,
|
|||||||
// UnaryClientInterceptor specifies the interceptor function for client request/response
|
// UnaryClientInterceptor specifies the interceptor function for client request/response
|
||||||
type UnaryClientInterceptor func(context.Context, *Request, *Response, *UnaryClientInfo, Invoker) error
|
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)
|
return method(ctx, unmarshal)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,16 +123,23 @@ func TestServer(t *testing.T) {
|
|||||||
go server.Serve(ctx, listener)
|
go server.Serve(ctx, listener)
|
||||||
defer server.Shutdown(ctx)
|
defer server.Shutdown(ctx)
|
||||||
|
|
||||||
const calls = 2
|
testCases := []string{"bar", "baz"}
|
||||||
results := make(chan callResult, 2)
|
results := make(chan callResult, len(testCases))
|
||||||
go roundTrip(ctx, t, tclient, "bar", results)
|
for _, tc := range testCases {
|
||||||
go roundTrip(ctx, t, tclient, "baz", results)
|
go func(expected string) {
|
||||||
|
results <- roundTrip(ctx, tclient, expected)
|
||||||
|
}(tc)
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < calls; i++ {
|
for i := 0; i < len(testCases); {
|
||||||
result := <-results
|
result := <-results
|
||||||
if !reflect.DeepEqual(result.received, result.expected) {
|
if result.err != nil {
|
||||||
t.Fatalf("unexpected response: %+#v != %+#v", result.received, result.expected)
|
t.Fatalf("(%s): %v", result.name, result.err)
|
||||||
}
|
}
|
||||||
|
if !reflect.DeepEqual(result.received, result.expected) {
|
||||||
|
t.Fatalf("(%s): unexpected response: %+#v != %+#v", result.name, result.received, result.expected)
|
||||||
|
}
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,29 +490,34 @@ func checkServerShutdown(t *testing.T, server *Server) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type callResult struct {
|
type callResult struct {
|
||||||
|
name string
|
||||||
|
err error
|
||||||
input *testPayload
|
input *testPayload
|
||||||
expected *testPayload
|
expected *testPayload
|
||||||
received *testPayload
|
received *testPayload
|
||||||
}
|
}
|
||||||
|
|
||||||
func roundTrip(ctx context.Context, t *testing.T, client *testingClient, value string, results chan callResult) {
|
func roundTrip(ctx context.Context, client *testingClient, name string) callResult {
|
||||||
t.Helper()
|
|
||||||
var (
|
var (
|
||||||
tp = &testPayload{
|
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)
|
resp, err := client.Test(ctx, tp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
return callResult{
|
||||||
|
name: name,
|
||||||
|
err: err,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
results <- callResult{
|
return callResult{
|
||||||
|
name: name,
|
||||||
input: tp,
|
input: tp,
|
||||||
expected: &testPayload{Foo: strings.Repeat(tp.Foo, 2), Metadata: "bar"},
|
expected: &testPayload{Foo: strings.Repeat(tp.Foo, 2), Metadata: name},
|
||||||
received: resp,
|
received: resp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
types.go
2
types.go
@ -51,8 +51,6 @@ func (r *StringList) Reset() { *r = StringList{} }
|
|||||||
func (r *StringList) String() string { return fmt.Sprintf("%+#v", r) }
|
func (r *StringList) String() string { return fmt.Sprintf("%+#v", r) }
|
||||||
func (r *StringList) ProtoMessage() {}
|
func (r *StringList) ProtoMessage() {}
|
||||||
|
|
||||||
func makeStringList(item ...string) StringList { return StringList{List: item} }
|
|
||||||
|
|
||||||
type KeyValue struct {
|
type KeyValue struct {
|
||||||
Key string `protobuf:"bytes,1,opt,name=key,proto3"`
|
Key string `protobuf:"bytes,1,opt,name=key,proto3"`
|
||||||
Value string `protobuf:"bytes,2,opt,name=value,proto3"`
|
Value string `protobuf:"bytes,2,opt,name=value,proto3"`
|
||||||
|
@ -29,7 +29,7 @@ import (
|
|||||||
|
|
||||||
type UnixCredentialsFunc func(*unix.Ucred) error
|
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)
|
uc, err := requireUnixSocket(conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: require unix socket: %w", err)
|
return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: require unix socket: %w", err)
|
||||||
@ -88,10 +88,6 @@ func UnixSocketRequireSameUser() UnixCredentialsFunc {
|
|||||||
return UnixSocketRequireUidGid(euid, egid)
|
return UnixSocketRequireUidGid(euid, egid)
|
||||||
}
|
}
|
||||||
|
|
||||||
func requireRoot(ucred *unix.Ucred) error {
|
|
||||||
return requireUidGid(ucred, 0, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
func requireUidGid(ucred *unix.Ucred, uid, gid int) error {
|
func requireUidGid(ucred *unix.Ucred, uid, gid int) error {
|
||||||
if (uid != -1 && uint32(uid) != ucred.Uid) || (gid != -1 && uint32(gid) != ucred.Gid) {
|
if (uid != -1 && uint32(uid) != ucred.Uid) || (gid != -1 && uint32(gid) != ucred.Gid) {
|
||||||
return fmt.Errorf("ttrpc: invalid credentials: %v", syscall.EPERM)
|
return fmt.Errorf("ttrpc: invalid credentials: %v", syscall.EPERM)
|
||||||
|
Loading…
Reference in New Issue
Block a user