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:
@@ -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:
|
||||||
-
|
-
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -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=. \
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user