Skip to content
This repository was archived by the owner on Oct 24, 2024. It is now read-only.

Commit a35398d

Browse files
authored
Merge pull request #12 from kops-dev/release-v0.1.0
Release v0.1.0
2 parents 0f74f2d + 11f2efe commit a35398d

File tree

19 files changed

+971
-465
lines changed

19 files changed

+971
-465
lines changed

.github/workflows/cicd.yml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,24 @@ jobs:
1616
runs-on: ubuntu-latest
1717
strategy:
1818
matrix:
19-
go-version: ['1.21', '1.22']
19+
go-version: ['1.22', '1.21']
2020

2121
steps:
2222
- name: Checkout code into go module directory
2323
uses: actions/checkout@v4
24+
with:
25+
fetch-depth: 0
2426

2527
- name: Set up Go ${{ matrix.go-version }}
26-
uses: actions/setup-go@v4
28+
uses: actions/setup-go@v5
2729
with:
2830
go-version: ${{ matrix.go-version }}
2931
id: Go
3032

3133
- name: Get dependencies
3234
run: |
3335
go mod download
36+
go mod tidy
3437
3538
- name: Test
3639
run: |
@@ -51,13 +54,13 @@ jobs:
5154
- name: Checkout code
5255
uses: actions/checkout@v4
5356

54-
- name: Install Go 1.21
57+
- name: Install Go 1.22
5558
uses: actions/setup-go@v4
5659
with:
57-
go-version: 1.21
60+
go-version: 1.22
5861

5962
- name: golangci-lint
60-
uses: golangci/golangci-lint-action@v3
63+
uses: golangci/golangci-lint-action@v6
6164
with:
62-
version: v1.57.2
65+
version: v1.59.1
6366
args: --timeout=9m

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*.dll
55
*.so
66
*.dylib
7+
.DS_Store
78

89
# Test binary, built with `go test -c`
910
*.test
@@ -16,6 +17,8 @@ coverage.txt
1617
# Dependency directories (remove the comment below to include it)
1718
vendor/
1819

20+
test
21+
1922
# IDE cache and settings
2023
.idea
2124
.vscode

.golangci.yml

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
---
12
linters-settings:
23
dupl:
34
threshold: 100
@@ -8,7 +9,9 @@ linters-settings:
89
statements: 50
910
gci:
1011
sections:
11-
- prefix(kops.dev)
12+
- standard
13+
- default
14+
- localmodule
1215
goconst:
1316
min-len: 2
1417
min-occurrences: 2
@@ -28,10 +31,10 @@ linters-settings:
2831
gocyclo:
2932
min-complexity: 10
3033
goimports:
31-
local-prefixes: kops.dev
34+
local-prefixes: github.com/golangci/golangci-lint
3235
golint:
3336
min-confidence: 0
34-
gomnd:
37+
mnd:
3538
checks:
3639
- argument
3740
- case
@@ -40,6 +43,11 @@ linters-settings:
4043
govet:
4144
enable:
4245
- shadow
46+
settings:
47+
printf:
48+
funcs:
49+
- (gofr.dev/pkg/gofr/Logger).Logf
50+
- (gofr.dev/pkg/gofr/Logger).Errorf
4351
lll:
4452
line-length: 140
4553
maligned:
@@ -50,6 +58,38 @@ linters-settings:
5058
allow-unused: false # report any unused nolint directives
5159
require-explanation: true # require an explanation for nolint directives
5260
require-specific: true # require nolint directives to be specific about which linter is being skipped
61+
revive:
62+
rules:
63+
# default revive rules, they have to be present otherwise they are disabled
64+
- name: blank-imports
65+
- name: context-as-argument
66+
- name: context-keys-type
67+
- name: dot-imports
68+
- name: empty-block
69+
- name: error-naming
70+
- name: error-return
71+
- name: error-strings
72+
- name: errorf
73+
- name: increment-decrement
74+
- name: indent-error-flow
75+
- name: range
76+
- name: receiver-naming
77+
- name: redefines-builtin-id
78+
- name: superfluous-else
79+
- name: time-naming
80+
- name: unexported-return
81+
- name: unreachable-code
82+
- name: unused-parameter
83+
- name: var-declaration
84+
- name: var-naming
85+
# additional revive rules
86+
- name: bare-return
87+
- name: bool-literal-in-expr
88+
- name: comment-spacings
89+
- name: early-return
90+
- name: defer
91+
- name: deep-exit
92+
- name: unused-receiver
5393

5494
linters:
5595
# please, do not use `enable-all`: it's deprecated and will be removed soon.
@@ -60,7 +100,9 @@ linters:
60100
- bodyclose
61101
- dogsled
62102
- dupl
103+
- err113
63104
- errcheck
105+
- errorlint
64106
- exhaustive
65107
- exportloopref
66108
- funlen
@@ -71,17 +113,17 @@ linters:
71113
- gocritic
72114
- gocyclo
73115
- godot
74-
- goerr113
75116
- gofmt
76117
- goimports
77-
- gomnd
78118
- goprintffuncname
79119
- gosec
80120
- gosimple
81121
- govet
82122
- ineffassign
83123
- lll
124+
- mirror
84125
- misspell
126+
- mnd
85127
- nakedret
86128
- nestif
87129
- noctx
@@ -91,9 +133,11 @@ linters:
91133
- rowserrcheck
92134
- staticcheck
93135
- stylecheck
136+
- thelper
94137
- unconvert
95138
- unparam
96139
- unused
140+
- usestdlibvars
97141
- whitespace
98142
- wsl
99143

@@ -103,7 +147,7 @@ linters:
103147

104148

105149
service:
106-
golangci-lint-version: 1.58.x
150+
golangci-lint-version: 1.59.x
107151

108152
issues:
109153
# exclude-use-default: false

client/deploy/client.go

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package deploy
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"errors"
7+
"io"
8+
"mime/multipart"
9+
"net/http"
10+
"os"
11+
12+
"gofr.dev/pkg/gofr"
13+
14+
kopsClient "kops.dev/client"
15+
"kops.dev/models"
16+
)
17+
18+
const (
19+
imageZipName = "temp/image.zip"
20+
)
21+
22+
var (
23+
errUpdatingImage = errors.New("unable to update the image for your service via kops.dev services")
24+
)
25+
26+
type client struct {
27+
}
28+
29+
func New() kopsClient.ServiceDeployer {
30+
return &client{}
31+
}
32+
33+
func (*client) DeployImage(ctx *gofr.Context, img *models.Image) error {
34+
depSvc := ctx.GetHTTPService("deployment-service")
35+
36+
body, header, err := getForm(img)
37+
if err != nil {
38+
return err
39+
}
40+
41+
resp, err := depSvc.PostWithHeaders(ctx, "deploy", nil, body, header)
42+
if err != nil {
43+
return err
44+
}
45+
46+
defer resp.Body.Close()
47+
48+
if resp.StatusCode != http.StatusCreated {
49+
ctx.Logger.Errorf("error communicating with the deployment service, status code returned - %d", resp.StatusCode)
50+
51+
return errUpdatingImage
52+
}
53+
54+
return nil
55+
}
56+
57+
func getForm(img *models.Image) (bodyBytes []byte, headers map[string]string, err error) {
58+
file, err := os.Open(imageZipName)
59+
if err != nil {
60+
return nil, nil, err
61+
}
62+
63+
defer file.Close()
64+
65+
body := &bytes.Buffer{}
66+
writer := multipart.NewWriter(body)
67+
68+
defer writer.Close()
69+
70+
part, err := writer.CreateFormFile("image", imageZipName)
71+
if err != nil {
72+
return nil, nil, err
73+
}
74+
75+
_, err = io.Copy(part, file)
76+
if err != nil {
77+
return nil, nil, err
78+
}
79+
80+
err = addField(writer, "name", img.Name)
81+
err = addField(writer, "tag", img.Tag)
82+
err = addField(writer, "region", img.Region)
83+
err = addField(writer, "repository", img.Repository)
84+
err = addField(writer, "serviceID", img.ServiceID)
85+
err = addField(writer, "repository", img.Repository)
86+
err = addField(writer, "region", img.Region)
87+
err = addField(writer, "loginServer", img.LoginServer)
88+
err = addField(writer, "serviceName", img.ServiceName)
89+
err = addField(writer, "accountID", img.AccountID)
90+
err = addField(writer, "cloudProvider", img.CloudProvider)
91+
92+
creds, _ := writer.CreateFormField("serviceCreds")
93+
b, _ := json.Marshal(img.ServiceCreds)
94+
_, _ = creds.Write(b)
95+
96+
if err != nil {
97+
return nil, nil, err
98+
}
99+
100+
err = writer.Close()
101+
if err != nil {
102+
return nil, nil, err
103+
}
104+
105+
return body.Bytes(), map[string]string{
106+
"Content-Type": writer.FormDataContentType(),
107+
}, nil
108+
}
109+
110+
func addField(writer *multipart.Writer, key, value string) error {
111+
if value == "" {
112+
return nil
113+
}
114+
115+
return writer.WriteField(key, value)
116+
}

client/interface.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package client
2+
3+
import (
4+
"gofr.dev/pkg/gofr"
5+
"kops.dev/models"
6+
)
7+
8+
type ServiceDeployer interface {
9+
DeployImage(ctx *gofr.Context, img *models.Image) error
10+
}

0 commit comments

Comments
 (0)