mirror of https://github.com/docker/compose.git
Add `make lint` and run it on CI
This commit is contained in:
parent
6feedaf939
commit
4e9a4185af
|
@ -11,23 +11,17 @@ jobs:
|
||||||
name: Build
|
name: Build
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Set up Go 1.13
|
- name: Set up Go 1.14
|
||||||
uses: actions/setup-go@v1
|
uses: actions/setup-go@v1
|
||||||
with:
|
with:
|
||||||
go-version: 1.13
|
go-version: 1.14
|
||||||
id: go
|
id: go
|
||||||
|
|
||||||
- name: Checkout code into the Go module directory
|
- name: Checkout code into the Go module directory
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Install Protoc
|
- name: Lint
|
||||||
uses: arduino/setup-protoc@master
|
run: make lint
|
||||||
|
|
||||||
- name: Get dependencies
|
|
||||||
run: ./scripts/setup/install-go-gen
|
|
||||||
|
|
||||||
- name: Protos
|
|
||||||
run: make protos
|
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: make cli
|
run: make cli
|
||||||
|
|
|
@ -30,4 +30,6 @@ linters-settings:
|
||||||
lll:
|
lll:
|
||||||
line-length: 200
|
line-length: 200
|
||||||
issues:
|
issues:
|
||||||
exclude-use-default: false
|
# golangci hides some golint warnings (the warning about exported things
|
||||||
|
# withtout documentation for example), this will make it show them anyway.
|
||||||
|
exclude-use-default: false
|
||||||
|
|
10
Dockerfile
10
Dockerfile
|
@ -13,9 +13,9 @@ RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||||
protobuf-compiler \
|
protobuf-compiler \
|
||||||
libprotobuf-dev
|
libprotobuf-dev
|
||||||
|
|
||||||
RUN go get github.com/golang/protobuf/protoc-gen-go && \
|
RUN go get github.com/golang/protobuf/protoc-gen-go@v1.4.1 && \
|
||||||
go get golang.org/x/tools/cmd/goimports && \
|
go get golang.org/x/tools/cmd/goimports && \
|
||||||
go get gotest.tools/gotestsum && \
|
go get gotest.tools/gotestsum@v0.4.2 && \
|
||||||
go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.26.0
|
go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.26.0
|
||||||
|
|
||||||
WORKDIR ${PWD}
|
WORKDIR ${PWD}
|
||||||
|
@ -37,13 +37,13 @@ RUN --mount=type=cache,target=/root/.cache/go-build \
|
||||||
make -f builder.Makefile cross
|
make -f builder.Makefile cross
|
||||||
|
|
||||||
FROM scratch AS protos
|
FROM scratch AS protos
|
||||||
COPY --from=make-protos /go/src/github.com/docker/api .
|
COPY --from=make-protos /api .
|
||||||
|
|
||||||
FROM scratch AS cli
|
FROM scratch AS cli
|
||||||
COPY --from=make-cli /go/src/github.com/docker/api/bin/* .
|
COPY --from=make-cli /api/bin/* .
|
||||||
|
|
||||||
FROM scratch AS cross
|
FROM scratch AS cross
|
||||||
COPY --from=make-cross /go/src/github.com/docker/api/bin/* .
|
COPY --from=make-cross /api/bin/* .
|
||||||
|
|
||||||
FROM make-protos as test
|
FROM make-protos as test
|
||||||
RUN make -f builder.Makefile test
|
RUN make -f builder.Makefile test
|
||||||
|
|
4
Makefile
4
Makefile
|
@ -54,8 +54,8 @@ cache-clear: # Clear the builder cache
|
||||||
@docker builder prune --force --filter type=exec.cachemount --filter=unused-for=24h
|
@docker builder prune --force --filter type=exec.cachemount --filter=unused-for=24h
|
||||||
|
|
||||||
lint: ## run linter(s)
|
lint: ## run linter(s)
|
||||||
@echo "Linting..."
|
@docker build . \
|
||||||
golangci-lint run --timeout 10m0s ./...
|
--target lint
|
||||||
|
|
||||||
help: ## Show help
|
help: ## Show help
|
||||||
@echo Please specify a build target. The choices are:
|
@echo Please specify a build target. The choices are:
|
||||||
|
|
12
README.md
12
README.md
|
@ -4,7 +4,17 @@
|
||||||
|
|
||||||
## Dev Setup
|
## Dev Setup
|
||||||
|
|
||||||
Make sure you have Docker installed and running.
|
The recommended way is to use the main `Makefile` that runs everything inside a container.
|
||||||
|
|
||||||
|
If you don't have or want to use Docker for building you need to make sure you have all the needed tools installed locally:
|
||||||
|
|
||||||
|
* go 1.14
|
||||||
|
* `go get github.com/golang/protobuf/protoc-gen-go@v1.4.1`
|
||||||
|
* `go get golang.org/x/tools/cmd/goimports`
|
||||||
|
* `go get gotest.tools/gotestsum@v0.4.2`
|
||||||
|
* `go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.26.0`
|
||||||
|
|
||||||
|
And then you can call the same make targets but you need to pass it the `builder.Makefile` (`make -f builder.Makefile`).
|
||||||
|
|
||||||
## Building the project
|
## Building the project
|
||||||
|
|
||||||
|
|
33
azure/aci.go
33
azure/aci.go
|
@ -30,7 +30,10 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func createACIContainers(ctx context.Context, aciContext store.AciContext, groupDefinition containerinstance.ContainerGroup) (c containerinstance.ContainerGroup, err error) {
|
func createACIContainers(ctx context.Context, aciContext store.AciContext, groupDefinition containerinstance.ContainerGroup) (c containerinstance.ContainerGroup, err error) {
|
||||||
containerGroupsClient := getContainerGroupsClient(aciContext.SubscriptionID)
|
containerGroupsClient, err := getContainerGroupsClient(aciContext.SubscriptionID)
|
||||||
|
if err != nil {
|
||||||
|
return c, errors.Wrapf(err, "cannot get container group client")
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the container group already exists
|
// Check if the container group already exists
|
||||||
_, err = containerGroupsClient.Get(ctx, aciContext.ResourceGroup, *groupDefinition.Name)
|
_, err = containerGroupsClient.Get(ctx, aciContext.ResourceGroup, *groupDefinition.Name)
|
||||||
|
@ -94,7 +97,10 @@ func createACIContainers(ctx context.Context, aciContext store.AciContext, group
|
||||||
}
|
}
|
||||||
|
|
||||||
func execACIContainer(ctx context.Context, aciContext store.AciContext, command, containerGroup string, containerName string) (c containerinstance.ContainerExecResponse, err error) {
|
func execACIContainer(ctx context.Context, aciContext store.AciContext, command, containerGroup string, containerName string) (c containerinstance.ContainerExecResponse, err error) {
|
||||||
containerClient := getContainerClient(aciContext.SubscriptionID)
|
containerClient, err := getContainerClient(aciContext.SubscriptionID)
|
||||||
|
if err != nil {
|
||||||
|
return c, errors.Wrapf(err, "cannot get container client")
|
||||||
|
}
|
||||||
rows, cols := getTermSize()
|
rows, cols := getTermSize()
|
||||||
containerExecRequest := containerinstance.ContainerExecRequest{
|
containerExecRequest := containerinstance.ContainerExecRequest{
|
||||||
Command: to.StringPtr(command),
|
Command: to.StringPtr(command),
|
||||||
|
@ -199,7 +205,10 @@ func exec(ctx context.Context, address string, password string, reader io.Reader
|
||||||
}
|
}
|
||||||
|
|
||||||
func getACIContainerLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string) (string, error) {
|
func getACIContainerLogs(ctx context.Context, aciContext store.AciContext, containerGroupName, containerName string) (string, error) {
|
||||||
containerClient := getContainerClient(aciContext.SubscriptionID)
|
containerClient, err := getContainerClient(aciContext.SubscriptionID)
|
||||||
|
if err != nil {
|
||||||
|
return "", errors.Wrapf(err, "cannot get container client")
|
||||||
|
}
|
||||||
|
|
||||||
logs, err := containerClient.ListLogs(ctx, aciContext.ResourceGroup, containerGroupName, containerName, nil)
|
logs, err := containerClient.ListLogs(ctx, aciContext.ResourceGroup, containerGroupName, containerName, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -208,16 +217,22 @@ func getACIContainerLogs(ctx context.Context, aciContext store.AciContext, conta
|
||||||
return *logs.Content, err
|
return *logs.Content, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getContainerGroupsClient(subscriptionID string) containerinstance.ContainerGroupsClient {
|
func getContainerGroupsClient(subscriptionID string) (containerinstance.ContainerGroupsClient, error) {
|
||||||
auth, _ := auth.NewAuthorizerFromCLI()
|
auth, err := auth.NewAuthorizerFromCLI()
|
||||||
|
if err != nil {
|
||||||
|
return containerinstance.ContainerGroupsClient{}, err
|
||||||
|
}
|
||||||
containerGroupsClient := containerinstance.NewContainerGroupsClient(subscriptionID)
|
containerGroupsClient := containerinstance.NewContainerGroupsClient(subscriptionID)
|
||||||
containerGroupsClient.Authorizer = auth
|
containerGroupsClient.Authorizer = auth
|
||||||
return containerGroupsClient
|
return containerGroupsClient, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getContainerClient(subscriptionID string) containerinstance.ContainerClient {
|
func getContainerClient(subscriptionID string) (containerinstance.ContainerClient, error) {
|
||||||
auth, _ := auth.NewAuthorizerFromCLI()
|
auth, err := auth.NewAuthorizerFromCLI()
|
||||||
|
if err != nil {
|
||||||
|
return containerinstance.ContainerClient{}, err
|
||||||
|
}
|
||||||
containerClient := containerinstance.NewContainerClient(subscriptionID)
|
containerClient := containerinstance.NewContainerClient(subscriptionID)
|
||||||
containerClient.Authorizer = auth
|
containerClient.Authorizer = auth
|
||||||
return containerClient
|
return containerClient, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,10 @@ cross:
|
||||||
test:
|
test:
|
||||||
@gotestsum ./...
|
@gotestsum ./...
|
||||||
|
|
||||||
|
lint:
|
||||||
|
golangci-lint run --timeout 10m0s ./...
|
||||||
|
|
||||||
|
|
||||||
FORCE:
|
FORCE:
|
||||||
|
|
||||||
.PHONY: all protos cli cross test
|
.PHONY: all protos cli cross test lint
|
||||||
|
|
|
@ -43,7 +43,7 @@ func runServe(ctx context.Context, opts serveOpts) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "listen unix socket")
|
return errors.Wrap(err, "listen unix socket")
|
||||||
}
|
}
|
||||||
// nolint
|
// nolint errcheck
|
||||||
defer listener.Close()
|
defer listener.Close()
|
||||||
|
|
||||||
p := proxy.NewContainerAPI()
|
p := proxy.NewContainerAPI()
|
||||||
|
|
|
@ -46,7 +46,7 @@ func LoadConfigFile(configDir string, configFileName string) (*ConfigFile, error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("can't read %s: %w", filename, err)
|
return nil, fmt.Errorf("can't read %s: %w", filename, err)
|
||||||
}
|
}
|
||||||
// nolint
|
// nolint errcheck
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
err = json.NewDecoder(file).Decode(&configFile)
|
err = json.NewDecoder(file).Decode(&configFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -47,7 +47,7 @@ type Flags struct {
|
||||||
Context string
|
Context string
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddFlags adds persistent (globa) flags
|
// AddFlags adds persistent (global) flags
|
||||||
func (c *Flags) AddFlags(flags *pflag.FlagSet) {
|
func (c *Flags) AddFlags(flags *pflag.FlagSet) {
|
||||||
flags.StringVar(&c.Config, "config", filepath.Join(home(), configFileDir), "Location of the client config files `DIRECTORY`")
|
flags.StringVar(&c.Config, "config", filepath.Join(home(), configFileDir), "Location of the client config files `DIRECTORY`")
|
||||||
flags.StringVarP(&c.Context, "context", "c", os.Getenv("DOCKER_CONTEXT"), "context")
|
flags.StringVarP(&c.Context, "context", "c", os.Getenv("DOCKER_CONTEXT"), "context")
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -1,6 +1,6 @@
|
||||||
module github.com/docker/api
|
module github.com/docker/api
|
||||||
|
|
||||||
go 1.13
|
go 1.14
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Azure/azure-sdk-for-go v42.0.0+incompatible
|
github.com/Azure/azure-sdk-for-go v42.0.0+incompatible
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
go get -u github.com/gogo/protobuf/proto
|
|
||||||
go get -u github.com/gogo/protobuf/jsonpb
|
|
||||||
go get -u github.com/golang/protobuf/protoc-gen-go
|
|
||||||
go get -u github.com/stevvooe/protobuild
|
|
||||||
go get -u gotest.tools/gotestsum
|
|
|
@ -1,61 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright The containerd Authors.
|
|
||||||
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
#
|
|
||||||
# Downloads and installs protobuf
|
|
||||||
#
|
|
||||||
set -eu -o pipefail
|
|
||||||
|
|
||||||
PROTOBUF_VERSION=3.11.4
|
|
||||||
GOARCH=$(go env GOARCH)
|
|
||||||
GOOS=$(go env GOOS)
|
|
||||||
PROTOBUF_DIR=$(mktemp -d)
|
|
||||||
|
|
||||||
case $GOARCH in
|
|
||||||
|
|
||||||
arm64)
|
|
||||||
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-linux-aarch64.zip"
|
|
||||||
unzip $PROTOBUF_DIR/protobuf -d /usr/local
|
|
||||||
;;
|
|
||||||
|
|
||||||
amd64 | 386)
|
|
||||||
if [ "$GOOS" = windows ]; then
|
|
||||||
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-win32.zip"
|
|
||||||
elif [ "$GOOS" = linux ]; then
|
|
||||||
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-linux-x86_64.zip"
|
|
||||||
elif [ "$GOOS" = darwin ]; then
|
|
||||||
curl -Lo $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-osx-x86_64.zip"
|
|
||||||
fi
|
|
||||||
unzip $PROTOBUF_DIR/protobuf -x readme.txt -d /usr/local
|
|
||||||
;;
|
|
||||||
|
|
||||||
ppc64le)
|
|
||||||
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-linux-ppcle_64.zip"
|
|
||||||
unzip $PROTOBUF_DIR/protobuf -d /usr/local
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-cpp-$PROTOBUF_VERSION.zip"
|
|
||||||
unzip $PROTOBUF_DIR/protobuf -d /usr/src/protobuf
|
|
||||||
cd /usr/src/protobuf/protobuf-$PROTOBUF_VERSION
|
|
||||||
./autogen.sh
|
|
||||||
./configure --disable-shared
|
|
||||||
make
|
|
||||||
make check
|
|
||||||
make install
|
|
||||||
ldconfig
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
rm -rf $PROTOBUF_DIR
|
|
Loading…
Reference in New Issue