Skip to content
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
Empty file removed .errcheck_excludes.txt
Empty file.
22 changes: 22 additions & 0 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Golangci-Lint

on:
pull_request:
push:
branches:
- main

jobs:
golangci-lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Run golangci-lint
run: ./hack/golangci-lint.sh
78 changes: 39 additions & 39 deletions .golangci.yaml
Original file line number Diff line number Diff line change
@@ -1,59 +1,59 @@
---
linters-settings:
errcheck:
exclude: ./.errcheck_excludes.txt
exhaustive:
default-signifies-exhaustive: true
gci:
sections:
- standard
- default

importas:
no-unaliased: true
alias:
# Kubernetes
- pkg: k8s.io/api/core/v1
alias: corev1
- pkg: k8s.io/apimachinery/pkg/apis/meta/v1
alias: metav1

misspell:
locale: "US"

version: "2"
linters:
disable-all: true
default: standard
enable:
- bodyclose
- copyloopvar
- errcheck
- errname
- exhaustive
- exportloopref
- gci
- gocritic
- godot
- goimports
- gomodguard
- gosec
- gosimple
- govet
- importas
- ineffassign
- misspell
- prealloc
- revive
- staticcheck
- typecheck
- unparam
- unused
- whitespace

issues:
exclude-rules:
- path: (_test\.go|testing\.go|testsupport|e2etests)
linters:
- gosec
- errcheck
- path: internal/mocks
linters:
- unparam
settings:
exhaustive:
default-signifies-exhaustive: true
importas:
alias:
- pkg: k8s.io/api/core/v1
alias: corev1
- pkg: k8s.io/apimachinery/pkg/apis/meta/v1
alias: metav1
no-unaliased: true
misspell:
locale: US
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
rules:
- linters:
- errcheck
- gosec
path: (_test\.go|testing\.go|testsupport|e2etests)
- linters:
- unparam
path: internal/mocks
formatters:
enable:
- gci
- goimports
settings:
gci:
sections:
- standard
- default
3 changes: 3 additions & 0 deletions hack/golangci-lint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
set -euo pipefail
exec go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.8.0 run ./...
2 changes: 1 addition & 1 deletion hcloud/cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func newHcloudClient(rootDir string) (*hcloud.Client, error) {
klog.V(1).Infof("reading Hetzner Cloud token from directory failed. Will try env var: %s", err.Error())
token = os.Getenv(hcloudTokenENVVar)
if token == "" {
return nil, fmt.Errorf("Either token from directory %q or environment variable %q is required", credentialsDir, hcloudTokenENVVar)
return nil, fmt.Errorf("either token from directory %q or environment variable %q is required", credentialsDir, hcloudTokenENVVar)
}
} else {
klog.V(1).Infof("reading Hetzner Cloud token from %q. The controller will reload the credentials, when the file changes", credentialsDir)
Expand Down
22 changes: 9 additions & 13 deletions hcloud/cloud_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func newTestEnv() testEnv {
client := hcloud.NewClient(
hcloud.WithEndpoint(server.URL),
hcloud.WithToken("jr5g7ZHpPptyhJzZyHw2Pqu4g9gTqDvEceYpngPf79jNZXCeTYQ4uArypFM3nh75"),
hcloud.WithBackoffFunc(func(_ int) time.Duration { return 0 }),
hcloud.WithRetryOpts(hcloud.RetryOpts{BackoffFunc: hcloud.ConstantBackoff(0), MaxRetries: 5}),
// hcloud.WithDebugWriter(os.Stdout),
)
robotClient := hrobot.NewBasicAuthClient("", "")
Expand All @@ -84,7 +84,7 @@ func TestNewCloud(t *testing.T) {
"HCLOUD_METRICS_ENABLED", "false",
)
defer resetEnv()
env.Mux.HandleFunc("/servers", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(
schema.ServerListResponse{
Servers: []schema.Server{},
Expand Down Expand Up @@ -135,7 +135,7 @@ func TestNewCloudInvalidToken(t *testing.T) {
"HCLOUD_METRICS_ENABLED", "false",
)
defer resetEnv()
env.Mux.HandleFunc("/servers", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusUnauthorized)
json.NewEncoder(w).Encode(
Expand Down Expand Up @@ -164,7 +164,7 @@ func TestCloud(t *testing.T) {
"ROBOT_PASSWORD", "pass123",
)
defer resetEnv()
env.Mux.HandleFunc("/servers", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(
schema.ServerListResponse{
Servers: []schema.Server{
Expand Down Expand Up @@ -193,7 +193,7 @@ func TestCloud(t *testing.T) {
},
)
})
env.Mux.HandleFunc("/networks/1", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/networks/1", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(
schema.NetworkGetResponse{
Network: schema.Network{
Expand Down Expand Up @@ -362,7 +362,6 @@ func TestLoadBalancerDefaultsFromEnv(t *testing.T) {
}

for _, c := range cases {
c := c // prevent scopelint from complaining
t.Run(c.name, func(t *testing.T) {
previousEnvVars := map[string]string{}
unsetEnvVars := []string{}
Expand Down Expand Up @@ -450,10 +449,7 @@ func Test_updateHcloudCredentials(t *testing.T) {
err = writeCredentials(credentialsDir, token2)
require.NoError(t, err)
start := time.Now()
for {
if credentials.GetHcloudReloadCounter() > oldCounter {
break
}
for credentials.GetHcloudReloadCounter() <= oldCounter {
if time.Since(start) > time.Second*3 {
t.Fatal("timeout waiting for reload")
}
Expand Down Expand Up @@ -485,7 +481,7 @@ func Test_EnsureLoadBalancer(t *testing.T) {
mux := http.NewServeMux()
server := httptest.NewServer(mux)

mux.HandleFunc("/servers", func(w http.ResponseWriter, r *http.Request) {
mux.HandleFunc("/servers", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(
schema.ServerListResponse{
Servers: []schema.Server{},
Expand All @@ -496,14 +492,14 @@ func Test_EnsureLoadBalancer(t *testing.T) {
ID: 0,
Name: "mylb",
}
mux.HandleFunc("/load_balancers", func(w http.ResponseWriter, r *http.Request) {
mux.HandleFunc("/load_balancers", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(
schema.LoadBalancerListResponse{
LoadBalancers: []schema.LoadBalancer{schemaLB},
},
)
})
mux.HandleFunc("/robot/server", func(w http.ResponseWriter, r *http.Request) {
mux.HandleFunc("/robot/server", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode([]models.ServerResponse{
{
Server: models.Server{
Expand Down
20 changes: 10 additions & 10 deletions hcloud/instances_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ import (
func TestInstances_InstanceExists(t *testing.T) {
env := newTestEnv()
defer env.Teardown()
env.Mux.HandleFunc("/servers/1", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers/1", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(schema.ServerGetResponse{
Server: schema.Server{
ID: 1,
Name: "foobar",
},
})
})
env.Mux.HandleFunc("/servers/2", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers/2", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusNotFound)
json.NewEncoder(w).Encode(schema.ErrorResponse{Error: schema.Error{Code: string(hcloud.ErrorCodeNotFound)}})
Expand All @@ -58,7 +58,7 @@ func TestInstances_InstanceExists(t *testing.T) {
json.NewEncoder(w).Encode(schema.ServerListResponse{Servers: servers})
})

env.Mux.HandleFunc("/robot/server/321", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/robot/server/321", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(models.ServerResponse{
Server: models.Server{
ServerIP: "123.123.123.123",
Expand All @@ -69,13 +69,13 @@ func TestInstances_InstanceExists(t *testing.T) {
})
})

env.Mux.HandleFunc("/robot/server/322", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/robot/server/322", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusNotFound)
json.NewEncoder(w).Encode(schema.ErrorResponse{Error: schema.Error{Code: string(models.ErrorCodeServerNotFound)}})
})

env.Mux.HandleFunc("/robot/server", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/robot/server", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode([]models.ServerResponse{
{
Server: models.Server{
Expand Down Expand Up @@ -176,7 +176,7 @@ func TestInstances_InstanceExists(t *testing.T) {
func TestInstances_InstanceShutdown(t *testing.T) {
env := newTestEnv()
defer env.Teardown()
env.Mux.HandleFunc("/servers/1", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers/1", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(schema.ServerGetResponse{
Server: schema.Server{
ID: 1,
Expand All @@ -185,7 +185,7 @@ func TestInstances_InstanceShutdown(t *testing.T) {
},
})
})
env.Mux.HandleFunc("/servers/2", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers/2", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(schema.ServerGetResponse{
Server: schema.Server{
ID: 2,
Expand All @@ -195,7 +195,7 @@ func TestInstances_InstanceShutdown(t *testing.T) {
})
})

env.Mux.HandleFunc("/robot/server/321", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/robot/server/321", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(models.ServerResponse{
Server: models.Server{
ServerIP: "123.123.123.123",
Expand Down Expand Up @@ -253,7 +253,7 @@ func TestInstances_InstanceShutdown(t *testing.T) {
func TestInstances_InstanceMetadata(t *testing.T) {
env := newTestEnv()
defer env.Teardown()
env.Mux.HandleFunc("/servers/1", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/servers/1", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(schema.ServerGetResponse{
Server: schema.Server{
ID: 1,
Expand Down Expand Up @@ -300,7 +300,7 @@ func TestInstances_InstanceMetadata(t *testing.T) {
func TestInstances_InstanceMetadataRobotServer(t *testing.T) {
env := newTestEnv()
defer env.Teardown()
env.Mux.HandleFunc("/robot/server/321", func(w http.ResponseWriter, r *http.Request) {
env.Mux.HandleFunc("/robot/server/321", func(w http.ResponseWriter, _ *http.Request) {
json.NewEncoder(w).Encode(models.ServerResponse{
Server: models.Server{
ServerIP: "123.123.123.123",
Expand Down
Loading