Skip to content

Commit

Permalink
feat: add golangci-lint
Browse files Browse the repository at this point in the history
golangci-lint runs many analysers, including staticcheck, which prevent
correctness issues and catch bugs.

https://golangci-lint.run/

Fixes: #160
  • Loading branch information
uhthomas committed May 9, 2024
1 parent 1d1bef4 commit 362d828
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 86 deletions.
27 changes: 27 additions & 0 deletions .github/workflows/golangci-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: golangci-lint
on:
push:
branches:
- main
pull_request:

permissions:
contents: read
# pull-requests: read
checks: write

jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.22"
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: latest
# only-new-issues: true
args: --timeout=5m
8 changes: 4 additions & 4 deletions internal/it/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func waitForDeploymentTobeReady(name string, namespace string) {
}

deployment := &v12.Deployment{}
k8sClient.Get(context.Background(), deploymentKey, deployment)
Expect(k8sClient.Get(context.Background(), deploymentKey, deployment)).Should(Succeed())
return int(deployment.Status.ReadyReplicas)
}, Timeout, Interval).Should(Equal(1))

Expand All @@ -73,7 +73,7 @@ func WaitForWireguardToBeReady(name string, namespace string) {
Name: name,
}
wg := &v1alpha1.Wireguard{}
k8sClient.Get(context.Background(), wgKey, wg)
Expect(k8sClient.Get(context.Background(), wgKey, wg)).Should(Succeed())
return wg.Status.Status
}, Timeout, Interval).Should(Equal(v1alpha1.Ready))

Expand All @@ -86,7 +86,7 @@ func WaitForPeerToBeReady(name string, namespace string) {
Name: name,
}
wg := &v1alpha1.WireguardPeer{}
k8sClient.Get(context.Background(), wgKey, wg)
Expect(k8sClient.Get(context.Background(), wgKey, wg)).Should(Succeed())
return wg.Status.Status
}, Timeout, Interval).Should(Equal(v1alpha1.Ready))

Expand Down Expand Up @@ -228,7 +228,7 @@ var _ = BeforeSuite(func() {
}

deployment := &v12.Deployment{}
k8sClient.Get(context.Background(), deploymentKey, deployment)
Expect(k8sClient.Get(context.Background(), deploymentKey, deployment)).Should(Succeed())
return int(deployment.Status.ReadyReplicas)
}, Timeout, Interval).Should(Equal(1))

Expand Down
120 changes: 78 additions & 42 deletions pkg/controllers/wireguard_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,18 +58,18 @@ func labelsForWireguard(name string) map[string]string {
return map[string]string{"app": "wireguard", "instance": name}
}

func (r *WireguardReconciler) ConfigmapForWireguard(m *v1alpha1.Wireguard, hostname string) *corev1.ConfigMap {
ls := labelsForWireguard(m.Name)
func (r *WireguardReconciler) ConfigmapForWireguard(m *v1alpha1.Wireguard, hostname string) (*corev1.ConfigMap, error) {
dep := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: m.Name + "-config",
Namespace: m.Namespace,
Labels: ls,
Labels: labelsForWireguard(m.Name),
},
}

ctrl.SetControllerReference(m, dep, r.Scheme)
return dep
if err := ctrl.SetControllerReference(m, dep, r.Scheme); err != nil {
return nil, fmt.Errorf("set controller reference: %w", err)
}
return dep, nil
}

func (r *WireguardReconciler) getWireguardPeers(ctx context.Context, req ctrl.Request) (*v1alpha1.WireguardPeerList, error) {
Expand Down Expand Up @@ -305,7 +305,11 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
err = r.Get(ctx, types.NamespacedName{Name: wireguard.Name + "-metrics-svc", Namespace: wireguard.Namespace}, svcFound)
if err != nil && errors.IsNotFound(err) {

svc := r.serviceForWireguardMetrics(wireguard)
svc, err := r.serviceForWireguardMetrics(wireguard)
if err != nil {
return ctrl.Result{}, fmt.Errorf("service for wireguard metrics: %w", err)
}

log.Info("Creating a new service", "service.Namespace", svc.Namespace, "service.Name", svc.Name)
err = r.Create(ctx, svc)
if err != nil {
Expand Down Expand Up @@ -351,7 +355,11 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (

err = r.Get(ctx, types.NamespacedName{Name: wireguard.Name + "-svc", Namespace: wireguard.Namespace}, svcFound)
if err != nil && errors.IsNotFound(err) {
svc := r.serviceForWireguard(wireguard, serviceType)
svc, err := r.serviceForWireguard(wireguard, serviceType)
if err != nil {
return ctrl.Result{}, fmt.Errorf("service for wireguard: %w", err)
}

log.Info("Creating a new service", "service.Namespace", svc.Namespace, "service.Name", svc.Name)
err = r.Create(ctx, svc)
if err != nil {
Expand Down Expand Up @@ -464,10 +472,15 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (

if !bytes.Equal(b, secret.Data["state.json"]) {
log.Info("Updating secret with new config")

publicKey := string(secret.Data["publicKey"])

err := r.Update(ctx, r.secretForWireguard(wireguard, b, privateKey, publicKey))
secret, err := r.secretForWireguard(wireguard, b, privateKey, publicKey)
if err != nil {
return ctrl.Result{}, fmt.Errorf("secret for wireguard: %w", err)
}

if err := r.Update(ctx, secret); err != nil {
log.Error(err, "Failed to update secret with new config")
return ctrl.Result{}, err
}
Expand Down Expand Up @@ -521,7 +534,10 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (

bytes.Equal(b, secret.Data["state"])

secret := r.secretForWireguard(wireguard, b, privateKey, publicKey)
secret, err := r.secretForWireguard(wireguard, b, privateKey, publicKey)
if err != nil {
return ctrl.Result{}, fmt.Errorf("secret for wireguard: %w", err)
}

log.Info("Creating a new secret", "secret.Namespace", secret.Namespace, "secret.Name", secret.Name)
err = r.Create(ctx, secret)
Expand All @@ -537,7 +553,10 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
return ctrl.Result{}, err
}

clientSecret := r.secretForClient(wireguard, clientKey.String(), clientKey.PublicKey().String())
clientSecret, err := r.secretForClient(wireguard, clientKey.String(), clientKey.PublicKey().String())
if err != nil {
return ctrl.Result{}, fmt.Errorf("secret for client: %w", err)
}

log.Info("Creating a new secret", "secret.Namespace", clientSecret.Namespace, "secret.Name", clientSecret.Name)
err = r.Create(ctx, clientSecret)
Expand All @@ -557,10 +576,14 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
configFound := &corev1.ConfigMap{}
err = r.Get(ctx, types.NamespacedName{Name: wireguard.Name + "-config", Namespace: wireguard.Namespace}, configFound)
if err != nil && errors.IsNotFound(err) {
config := r.ConfigmapForWireguard(wireguard, address)
log.Info("Creating a new config", "config.Namespace", config.Namespace, "config.Name", config.Name)
err = r.Create(ctx, config)
config, err := r.ConfigmapForWireguard(wireguard, address)
if err != nil {
return ctrl.Result{}, fmt.Errorf("config map for wireguard: %w", err)
}

log.Info("Creating a new config", "config.Namespace", config.Namespace, "config.Name", config.Name)

if err := r.Create(ctx, config); err != nil {
log.Error(err, "Failed to create new dep", "dep.Namespace", config.Namespace, "dep.Name", config.Name)
return ctrl.Result{}, err
}
Expand All @@ -578,7 +601,11 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
deploymentFound := &appsv1.Deployment{}
err = r.Get(ctx, types.NamespacedName{Name: wireguard.Name + "-dep", Namespace: wireguard.Namespace}, deploymentFound)
if err != nil && errors.IsNotFound(err) {
dep := r.deploymentForWireguard(wireguard)
dep, err := r.deploymentForWireguard(wireguard)
if err != nil {
return ctrl.Result{}, fmt.Errorf("deployment for wireguard: %w", err)
}

log.Info("Creating a new dep", "dep.Namespace", dep.Namespace, "dep.Name", dep.Name)
err = r.Create(ctx, dep)
if err != nil {
Expand All @@ -593,9 +620,12 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
}

if deploymentFound.Spec.Template.Spec.Containers[0].Image != r.AgentImage {
dep := r.deploymentForWireguard(wireguard)
err = r.Update(ctx, dep)
dep, err := r.deploymentForWireguard(wireguard)
if err != nil {
return ctrl.Result{}, fmt.Errorf("deployment for wireguard: %w", err)
}

if err := r.Update(ctx, dep); err != nil {
log.Error(err, "unable to update deployment image", "dep.Namespace", dep.Namespace, "dep.Name", dep.Name)
return ctrl.Result{}, err
}
Expand Down Expand Up @@ -628,10 +658,10 @@ func (r *WireguardReconciler) SetupWithManager(mgr ctrl.Manager) error {
Complete(r)
}

func (r *WireguardReconciler) serviceForWireguard(m *v1alpha1.Wireguard, serviceType corev1.ServiceType) *corev1.Service {
func (r *WireguardReconciler) serviceForWireguard(m *v1alpha1.Wireguard, serviceType corev1.ServiceType) (*corev1.Service, error) {
labels := labelsForWireguard(m.Name)

dep := &corev1.Service{
svc := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: m.Name + "-svc",
Namespace: m.Namespace,
Expand All @@ -650,14 +680,16 @@ func (r *WireguardReconciler) serviceForWireguard(m *v1alpha1.Wireguard, service
},
}

ctrl.SetControllerReference(m, dep, r.Scheme)
return dep
if err := ctrl.SetControllerReference(m, svc, r.Scheme); err != nil {
return nil, fmt.Errorf("set controller reference: %w", err)
}
return svc, nil
}

func (r *WireguardReconciler) serviceForWireguardMetrics(m *v1alpha1.Wireguard) *corev1.Service {
func (r *WireguardReconciler) serviceForWireguardMetrics(m *v1alpha1.Wireguard) (*corev1.Service, error) {
labels := labelsForWireguard(m.Name)

dep := &corev1.Service{
svc := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: m.Name + "-metrics-svc",
Namespace: m.Namespace,
Expand All @@ -675,46 +707,48 @@ func (r *WireguardReconciler) serviceForWireguardMetrics(m *v1alpha1.Wireguard)
},
}

ctrl.SetControllerReference(m, dep, r.Scheme)
return dep
if err := ctrl.SetControllerReference(m, svc, r.Scheme); err != nil {
return nil, fmt.Errorf("set controller reference: %w", err)
}
return svc, nil
}

func (r *WireguardReconciler) secretForWireguard(m *v1alpha1.Wireguard, state []byte, privateKey string, publicKey string) *corev1.Secret {

ls := labelsForWireguard(m.Name)
dep := &corev1.Secret{
func (r *WireguardReconciler) secretForWireguard(m *v1alpha1.Wireguard, state []byte, privateKey string, publicKey string) (*corev1.Secret, error) {
secret := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: m.Name,
Namespace: m.Namespace,
Labels: ls,
Labels: labelsForWireguard(m.Name),
},
Data: map[string][]byte{"state.json": state, "privateKey": []byte(privateKey), "publicKey": []byte(publicKey)},
}

ctrl.SetControllerReference(m, dep, r.Scheme)
if err := ctrl.SetControllerReference(m, secret, r.Scheme); err != nil {
return nil, fmt.Errorf("set controller reference: %w", err)
}

return dep
return secret, nil

}

func (r *WireguardReconciler) secretForClient(m *v1alpha1.Wireguard, privateKey string, publicKey string) *corev1.Secret {
ls := labelsForWireguard(m.Name)
dep := &corev1.Secret{
func (r *WireguardReconciler) secretForClient(m *v1alpha1.Wireguard, privateKey string, publicKey string) (*corev1.Secret, error) {
secret := &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: m.Name + "-client",
Namespace: m.Namespace,
Labels: ls,
Labels: labelsForWireguard(m.Name),
},
Data: map[string][]byte{"privateKey": []byte(privateKey), "publicKey": []byte(publicKey)},
}

ctrl.SetControllerReference(m, dep, r.Scheme)

return dep
if err := ctrl.SetControllerReference(m, secret, r.Scheme); err != nil {
return nil, fmt.Errorf("set controller reference: %w", err)
}
return secret, nil

}

func (r *WireguardReconciler) deploymentForWireguard(m *v1alpha1.Wireguard) *appsv1.Deployment {
func (r *WireguardReconciler) deploymentForWireguard(m *v1alpha1.Wireguard) (*appsv1.Deployment, error) {
ls := labelsForWireguard(m.Name)
replicas := int32(1)

Expand Down Expand Up @@ -831,6 +865,8 @@ func (r *WireguardReconciler) deploymentForWireguard(m *v1alpha1.Wireguard) *app
}
}

ctrl.SetControllerReference(m, dep, r.Scheme)
return dep
if err := ctrl.SetControllerReference(m, dep, r.Scheme); err != nil {
return dep, fmt.Errorf("set controller reference: %w", err)
}
return dep, nil
}
Loading

0 comments on commit 362d828

Please sign in to comment.