1
0
mirror of https://github.com/docker/docker-credential-helpers.git synced 2026-06-13 16:01:28 +05:30

lint gha job

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2022-08-21 15:33:48 +02:00
parent 5302241995
commit 9582eb6661
7 changed files with 79 additions and 42 deletions
+2 -1
View File
@@ -11,7 +11,7 @@ on:
env: env:
DESTDIR: ./bin DESTDIR: ./bin
GO_VERSION: 1.16.7 GO_VERSION: 1.18.5
jobs: jobs:
validate: validate:
@@ -20,6 +20,7 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
target: target:
- lint
- validate-vendor - validate-vendor
steps: steps:
- -
+35
View File
@@ -0,0 +1,35 @@
run:
timeout: 10m
modules-download-mode: vendor
linters:
enable:
- gofmt
- govet
- deadcode
- depguard
- goimports
- ineffassign
- misspell
- unused
- varcheck
- revive
- staticcheck
- typecheck
- structcheck
disable-all: true
linters-settings:
depguard:
list-type: blacklist
include-go-root: true
packages:
# The io/ioutil package has been deprecated.
# https://go.dev/doc/go1.16#ioutil
- io/ioutil
issues:
exclude-rules:
- linters:
- revive
text: "stutters"
+9
View File
@@ -3,6 +3,7 @@
ARG GO_VERSION=1.18.5 ARG GO_VERSION=1.18.5
ARG XX_VERSION=1.1.2 ARG XX_VERSION=1.1.2
ARG OSXCROSS_VERSION=11.3-r7-alpine ARG OSXCROSS_VERSION=11.3-r7-alpine
ARG GOLANGCI_LINT_VERSION=v1.47.3
ARG PKG=github.com/docker/docker-credential-helpers ARG PKG=github.com/docker/docker-credential-helpers
@@ -48,6 +49,14 @@ RUN --mount=type=bind,target=.,rw <<EOT
fi fi
EOT EOT
FROM golangci/golangci-lint:${GOLANGCI_LINT_VERSION}-alpine AS golangci-lint
FROM gobase AS lint
RUN apk add musl-dev gcc libsecret-dev pass
RUN --mount=type=bind,target=. \
--mount=type=cache,target=/root/.cache \
--mount=from=golangci-lint,source=/usr/bin/golangci-lint,target=/usr/bin/golangci-lint \
golangci-lint run ./...
FROM gobase AS version FROM gobase AS version
ARG PKG ARG PKG
RUN --mount=target=. \ RUN --mount=target=. \
+6 -27
View File
@@ -1,13 +1,9 @@
.PHONY: all deps osxkeychain secretservice test validate wincred pass deb .PHONY: all osxkeychain secretservice test lint validate-vendor fmt validate wincred pass deb vendor
TRAVIS_OS_NAME ?= linux
VERSION := $(shell grep 'const Version' credentials/version.go | awk -F'"' '{ print $$2 }') VERSION := $(shell grep 'const Version' credentials/version.go | awk -F'"' '{ print $$2 }')
all: test all: test
deps:
go get -u golang.org/x/lint/golint
clean: clean:
rm -rf bin rm -rf bin
rm -rf release rm -rf release
@@ -50,28 +46,16 @@ test:
# tests all packages except vendor # tests all packages except vendor
go test -v `go list ./... | grep -v /vendor/` go test -v `go list ./... | grep -v /vendor/`
vet: vet_$(TRAVIS_OS_NAME)
go vet ./credentials
vet_win:
go vet ./wincred
vet_osx:
go vet ./osxkeychain
vet_linux:
go vet ./secretservice
lint: lint:
for p in `go list ./... | grep -v /vendor/`; do \ docker buildx bake lint
golint $$p ; \
done validate-vendor:
docker buildx bake vendor-validate
fmt: fmt:
gofmt -s -l `ls **/*.go | grep -v vendor` gofmt -s -l `ls **/*.go | grep -v vendor`
validate: vet lint fmt validate: lint validate-vendor fmt
BUILDIMG:=docker-credential-secretservice-$(VERSION) BUILDIMG:=docker-credential-secretservice-$(VERSION)
deb: deb:
@@ -84,14 +68,9 @@ deb:
docker run --rm --net=none $(BUILDIMG) tar cf - /release | tar xf - docker run --rm --net=none $(BUILDIMG) tar cf - /release | tar xf -
docker rmi $(BUILDIMG) docker rmi $(BUILDIMG)
.PHONY: vendor
vendor: vendor:
$(eval $@_TMP_OUT := $(shell mktemp -d -t docker-output.XXXXXXXXXX)) $(eval $@_TMP_OUT := $(shell mktemp -d -t docker-output.XXXXXXXXXX))
docker buildx bake --set "*.output=type=local,dest=$($@_TMP_OUT)" vendor docker buildx bake --set "*.output=type=local,dest=$($@_TMP_OUT)" vendor
rm -rf ./vendor rm -rf ./vendor
cp -R "$($@_TMP_OUT)"/* . cp -R "$($@_TMP_OUT)"/* .
rm -rf "$($@_TMP_OUT)" rm -rf "$($@_TMP_OUT)"
.PHONY: validate-vendor
validate-vendor:
docker buildx bake vendor-validate
+6 -7
View File
@@ -4,7 +4,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"strings" "strings"
"testing" "testing"
@@ -32,7 +31,7 @@ type mockProgram struct {
// Output returns responses from the remote credentials helper. // Output returns responses from the remote credentials helper.
// It mocks those responses based in the input in the mock. // It mocks those responses based in the input in the mock.
func (m *mockProgram) Output() ([]byte, error) { func (m *mockProgram) Output() ([]byte, error) {
in, err := ioutil.ReadAll(m.input) in, err := io.ReadAll(m.input)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -108,8 +107,8 @@ func ExampleStore() {
func TestStore(t *testing.T) { func TestStore(t *testing.T) {
valid := []credentials.Credentials{ valid := []credentials.Credentials{
{validServerAddress, "foo", "bar"}, {ServerURL: validServerAddress, Username: "foo", Secret: "bar"},
{validServerAddress2, "<token>", "abcd1234"}, {ServerURL: validServerAddress2, Username: "<token>", Secret: "abcd1234"},
} }
for _, v := range valid { for _, v := range valid {
@@ -119,7 +118,7 @@ func TestStore(t *testing.T) {
} }
invalid := []credentials.Credentials{ invalid := []credentials.Credentials{
{invalidServerAddress, "foo", "bar"}, {ServerURL: invalidServerAddress, Username: "foo", Secret: "bar"},
} }
for _, v := range invalid { for _, v := range invalid {
@@ -142,8 +141,8 @@ func ExampleGet() {
func TestGet(t *testing.T) { func TestGet(t *testing.T) {
valid := []credentials.Credentials{ valid := []credentials.Credentials{
{validServerAddress, "foo", "bar"}, {ServerURL: validServerAddress, Username: "foo", Secret: "bar"},
{validServerAddress2, "<token>", "abcd1234"}, {ServerURL: validServerAddress2, Username: "<token>", Secret: "abcd1234"},
} }
for _, v := range valid { for _, v := range valid {
+9 -1
View File
@@ -22,15 +22,23 @@ group "default" {
} }
group "validate" { group "validate" {
targets = ["vendor-validate"] targets = ["lint", "vendor-validate"]
}
target "lint" {
inherits = ["_common"]
target = "lint"
output = ["type=cacheonly"]
} }
target "vendor-validate" { target "vendor-validate" {
inherits = ["_common"]
target = "vendor-validate" target = "vendor-validate"
output = ["type=cacheonly"] output = ["type=cacheonly"]
} }
target "vendor" { target "vendor" {
inherits = ["_common"]
target = "vendor-update" target = "vendor-update"
output = ["."] output = ["."]
} }
+12 -6
View File
@@ -9,7 +9,7 @@ import (
"encoding/base64" "encoding/base64"
"errors" "errors"
"fmt" "fmt"
"io/ioutil" "io/fs"
"os" "os"
"os/exec" "os/exec"
"path" "path"
@@ -20,7 +20,7 @@ import (
) )
// PASS_FOLDER contains the directory where credentials are stored // PASS_FOLDER contains the directory where credentials are stored
const PASS_FOLDER = "docker-credential-helpers" //nolint: golint const PASS_FOLDER = "docker-credential-helpers" //nolint:revive
// Pass handles secrets using Linux secret-service as a store. // Pass handles secrets using Linux secret-service as a store.
type Pass struct{} type Pass struct{}
@@ -116,16 +116,22 @@ func getPassDir() string {
func listPassDir(args ...string) ([]os.FileInfo, error) { func listPassDir(args ...string) ([]os.FileInfo, error) {
passDir := getPassDir() passDir := getPassDir()
p := path.Join(append([]string{passDir, PASS_FOLDER}, args...)...) p := path.Join(append([]string{passDir, PASS_FOLDER}, args...)...)
contents, err := ioutil.ReadDir(p) entries, err := os.ReadDir(p)
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
return []os.FileInfo{}, nil return []os.FileInfo{}, nil
} }
return nil, err return nil, err
} }
infos := make([]fs.FileInfo, 0, len(entries))
return contents, nil for _, entry := range entries {
info, err := entry.Info()
if err != nil {
return nil, err
}
infos = append(infos, info)
}
return infos, nil
} }
// Get returns the username and secret to use for a given registry server URL. // Get returns the username and secret to use for a given registry server URL.