Skip to content

Commit 256b67a

Browse files
committed
refactor: Adding back the build-dev function and some refactoring
Signed-off-by: NucleoFusion <lakshit.singh.mail@gmail.com> temp: removing publish dependency on testing Signed-off-by: NucleoFusion <lakshit.singh.mail@gmail.com> fix: binary build error Signed-off-by: NucleoFusion <lakshit.singh.mail@gmail.com> fix: not releasing erropr Signed-off-by: NucleoFusion <lakshit.singh.mail@gmail.com> fix: changing for goharbor/harbor-cli Signed-off-by: NucleoFusion <lakshit.singh.mail@gmail.com>
1 parent 5e4d753 commit 256b67a

File tree

9 files changed

+101
-16
lines changed

9 files changed

+101
-16
lines changed

.dagger/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ This command prepares the environment for pipeline development and local testing
4242
| `test-coverage-report` | Processes coverage data and returns a formatted Markdown report. |
4343
| `vulnerability-check` | Runs `govulncheck` to detect known vulnerabilities in dependencies. |
4444
| `vulnerability-check-report` | Runs `govulncheck` and saves results to a file (`vulnerability-check.report`). |
45+
| `build-dev` | Create build of Harbor CLI for local testing and development|
4546

4647
---
4748

@@ -50,6 +51,10 @@ This command prepares the environment for pipeline development and local testing
5051
Below are some common commands to run specific Dagger functions locally:
5152

5253
```bash
54+
# Development build for binaries
55+
56+
dagger call build-dev --source=. --platform="linux/amd64" export --path=bin/harbor-dev
57+
5358
# Print report to stdout
5459
dagger call lint
5560

.dagger/buildDev.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strings"
8+
"time"
9+
10+
"dagger/harbor-cli/internal/dagger"
11+
"dagger/harbor-cli/utils"
12+
)
13+
14+
// Create build of Harbor CLI for local testing and development
15+
func (m *HarborCli) BuildDev(ctx context.Context, source *dagger.Directory, platform string) *dagger.File {
16+
err := m.init(ctx, source)
17+
if err != nil {
18+
return nil
19+
}
20+
21+
fmt.Println("🛠️ Building Harbor-Cli with Dagger...")
22+
// Define the path for the binary output
23+
os, arch, err := parsePlatform(platform)
24+
if err != nil {
25+
log.Fatalf("Error parsing platform: %v", err)
26+
}
27+
28+
builder := dag.Container().
29+
From("golang:"+m.GoVersion).
30+
WithMountedCache("/go/pkg/mod", dag.CacheVolume("go-mod-"+m.GoVersion)).
31+
WithEnvVariable("GOMODCACHE", "/go/pkg/mod").
32+
WithMountedCache("/go/build-cache", dag.CacheVolume("go-build-"+m.GoVersion)).
33+
WithEnvVariable("GOCACHE", "/go/build-cache").
34+
WithMountedDirectory("/src", m.Source). // Ensure the source directory with go.mod is mounted
35+
WithWorkdir("/src").
36+
WithEnvVariable("GOOS", os).
37+
WithEnvVariable("GOARCH", arch)
38+
39+
gitCommit, _ := builder.WithExec([]string{"git", "rev-parse", "--short", "HEAD", "--always"}).Stdout(ctx)
40+
buildTime := time.Now().UTC().Format(time.RFC3339)
41+
42+
ldflagsArgs := utils.LDFlags(ctx, m.AppVersion, m.GoVersion, buildTime, gitCommit)
43+
44+
builder = builder.WithExec([]string{
45+
"go", "build", "-ldflags", ldflagsArgs, "-o", "/bin/harbor-cli", "/src/cmd/harbor/main.go",
46+
})
47+
return builder.File("/bin/harbor-cli")
48+
}
49+
50+
// Parse the platform string into os and arch
51+
func parsePlatform(platform string) (string, string, error) {
52+
parts := strings.Split(platform, "/")
53+
if len(parts) != 2 {
54+
return "", "", fmt.Errorf("invalid platform format: %s. Should be os/arch. E.g. darwin/amd64", platform)
55+
}
56+
57+
return parts[0], parts[1], nil
58+
}

.dagger/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ func (m *HarborCli) Pipeline(ctx context.Context, source *dagger.Directory, gith
2626
}
2727

2828
dist := dag.Directory()
29-
pipe := pipeline.InitPipeline(source, dag, m.AppVersion)
29+
pipe := pipeline.InitPipeline(source, dag, m.AppVersion, m.GoVersion)
3030

3131
// Building Binaries
32-
dist, err = pipe.Build(ctx, dist, m.GoVersion)
32+
dist, err = pipe.Build(ctx, dist)
3333
if err != nil {
3434
return nil, err
3535
}

.dagger/pipeline/build.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package pipeline
33
import (
44
"context"
55
"fmt"
6+
"time"
67

78
"dagger/harbor-cli/internal/dagger"
9+
"dagger/harbor-cli/utils"
810
)
911

10-
func (s *Pipeline) Build(ctx context.Context, dist *dagger.Directory, GO_VERSION string) (*dagger.Directory, error) {
12+
func (s *Pipeline) Build(ctx context.Context, dist *dagger.Directory) (*dagger.Directory, error) {
1113
goos := []string{"linux", "darwin", "windows"}
1214
goarch := []string{"amd64", "arm64"}
1315

@@ -20,19 +22,25 @@ func (s *Pipeline) Build(ctx context.Context, dist *dagger.Directory, GO_VERSION
2022
}
2123

2224
builder := s.dag.Container().
23-
From("golang:"+GO_VERSION).
24-
WithMountedCache("/go/pkg/mod", s.dag.CacheVolume("go-mod-"+GO_VERSION)).
25+
From("golang:"+s.goVersion).
26+
WithMountedCache("/go/pkg/mod", s.dag.CacheVolume("go-mod-"+s.goVersion)).
2527
WithEnvVariable("GOMODCACHE", "/go/pkg/mod").
26-
WithMountedCache("/go/build-cache", s.dag.CacheVolume("go-build-"+GO_VERSION)).
28+
WithMountedCache("/go/build-cache", s.dag.CacheVolume("go-build-"+s.goVersion)).
2729
WithEnvVariable("GOCACHE", "/go/build-cache").
2830
WithMountedDirectory("/src", s.source).
2931
WithWorkdir("/src").
3032
WithEnvVariable("GOOS", os).
31-
WithEnvVariable("GOARCH", arch).
32-
WithExec([]string{
33-
"go", "build", "-ldflags", "github.com/goharbor/harbor-cli/cmd/harbor/internal/version.Version=" + s.appVersion,
34-
"-o", "/bin/" + binName, "./cmd/harbor",
35-
})
33+
WithEnvVariable("GOARCH", arch)
34+
35+
gitCommit, _ := builder.WithExec([]string{"git", "rev-parse", "--short", "HEAD", "--always"}).Stdout(ctx)
36+
buildTime := time.Now().UTC().Format(time.RFC3339)
37+
38+
ldflagsArgs := utils.LDFlags(ctx, s.appVersion, s.goVersion, buildTime, gitCommit)
39+
40+
builder = builder.WithExec([]string{
41+
"bash", "-c",
42+
fmt.Sprintf(`set -ex && go env && go build -v -ldflags "%s" -o /bin/%s /src/cmd/harbor/main.go`, ldflagsArgs, binName),
43+
})
3644

3745
file := builder.File("/bin/" + binName) // Taking file from container
3846
dist = dist.WithFile(fmt.Sprintf("%s/%s", os, binName), file) // Adding file(bin) to dist directory

.dagger/pipeline/checksum.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import (
66
"strings"
77

88
"dagger/harbor-cli/internal/dagger"
9+
"dagger/harbor-cli/utils"
910
)
1011

1112
func (s *Pipeline) Checksum(ctx context.Context, dist *dagger.Directory) (*dagger.Directory, error) {
1213
sums := map[string]string{}
13-
bins, err := DistBinaries(ctx, s.dag, dist)
14+
bins, err := utils.DistBinaries(ctx, s.dag, dist)
1415
if err != nil {
1516
return nil, err
1617
}

.dagger/pipeline/pipeline.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ type Pipeline struct {
88
source *dagger.Directory
99
dag *dagger.Client
1010
appVersion string
11+
goVersion string
1112
GithubToken *dagger.Secret
1213
}
1314

14-
func InitPipeline(source *dagger.Directory, dag *dagger.Client, appVersion string) *Pipeline {
15+
func InitPipeline(source *dagger.Directory, dag *dagger.Client, appVersion string, goVersion string) *Pipeline {
1516
return &Pipeline{
1617
source: source,
1718
dag: dag,
19+
goVersion: goVersion,
1820
appVersion: appVersion,
1921
}
2022
}

.dagger/pipeline/release.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ import (
55
"fmt"
66

77
"dagger/harbor-cli/internal/dagger"
8+
"dagger/harbor-cli/utils"
89
)
910

1011
func (s *Pipeline) PublishRelease(ctx context.Context, dist *dagger.Directory, token *dagger.Secret) (string, error) {
11-
bins, err := DistBinaries(ctx, s.dag, dist)
12+
bins, err := utils.DistBinaries(ctx, s.dag, dist)
1213
if err != nil {
1314
return "", err
1415
}
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
package pipeline
1+
package utils
22

33
import (
44
"context"
5+
"fmt"
56
"path/filepath"
67
"strings"
78

@@ -33,3 +34,12 @@ func DistBinaries(ctx context.Context, s *dagger.Client, dist *dagger.Directory)
3334

3435
return files, nil
3536
}
37+
38+
func LDFlags(ctx context.Context, version, goVersion, buildTime, commit string) string {
39+
return fmt.Sprintf("-X github.com/goharbor/harbor-cli/cmd/harbor/internal/version.Version=%s "+
40+
"-X github.com/goharbor/harbor-cli/cmd/harbor/internal/version.GoVersion=%s "+
41+
"-X github.com/goharbor/harbor-cli/cmd/harbor/internal/version.BuildTime=%s "+
42+
"-X github.com/goharbor/harbor-cli/cmd/harbor/internal/version.GitCommit=%s",
43+
version, goVersion, buildTime, commit,
44+
)
45+
}

.github/workflows/default.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ jobs:
208208
publish-release:
209209
needs:
210210
- lint
211-
- test-code
211+
# - test-code
212212
permissions:
213213
contents: write
214214
packages: write

0 commit comments

Comments
 (0)