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
2 changes: 1 addition & 1 deletion .github/workflows/qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
- uses: golangci/golangci-lint-action@4afd733a84b1f43292c63897423277bb7f4313a9 # v8.0.0
with:
# renovate: datasource=github-releases depName=golangci/golangci-lint
version: v2.1.6
version: v2.5.0

tests:
name: Run tests
Expand Down
40 changes: 34 additions & 6 deletions cmd/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ Otherwise, dib will create a new tag based on the previous tag.`
longHelp += "\n"
longHelp += "WARNING: `dib build` is not supported on Windows yet."
}

cmd := &cobra.Command{
Use: "build",
Short: "Run oci images builds",
Expand Down Expand Up @@ -103,6 +104,7 @@ func buildAction(cmd *cobra.Command, _ []string) error {
// Ping the buildkit host to ensure its availability.
// Based on the ping result, we may override the host (e.g., fallback to default buildkit host).
var err error

opts.BuildkitHost, err = getBuildkitHost(cmd)
if err != nil {
return err
Expand Down Expand Up @@ -131,10 +133,13 @@ func buildAction(cmd *cobra.Command, _ []string) error {
}
}

if err := doBuild(opts, buildArgs); err != nil {
err := doBuild(opts, buildArgs)
if err != nil {
return fmt.Errorf("build failed: %w", err)
}

logger.Infof("Build process completed")

return nil
}

Expand All @@ -146,6 +151,7 @@ func doBuild(opts dib.BuildOpts, buildArgs map[string]string) error {
case types.BackendKaniko:
logger.Warnf("The kaniko backend is deprecated and will be removed in a future release. " +
"Please use the buildkit backend instead.")

if opts.LocalOnly {
logger.Warnf("Using Backend \"kaniko\" with the --local-only flag is partially supported.")
}
Expand All @@ -157,10 +163,12 @@ func doBuild(opts dib.BuildOpts, buildArgs map[string]string) error {
logger.Infof("Building images in directory \"%s\"", buildPath)

logger.Debugf("Generate DAG")

graph, err := dib.GenerateDAG(buildPath, opts.RegistryURL, opts.HashListFilePath, buildArgs)
if err != nil {
return fmt.Errorf("cannot generate DAG: %w", err)
}

logger.Debugf("Generate DAG -- Done")

dibBuilder := dib.Builder{
Expand All @@ -175,7 +183,8 @@ func doBuild(opts dib.BuildOpts, buildArgs map[string]string) error {
return fmt.Errorf("cannot connect to registry: %w", err)
}

if err := dibBuilder.Plan(gcrRegistry); err != nil {
err = dibBuilder.Plan(gcrRegistry)
if err != nil {
return fmt.Errorf("cannot plan build: %w", err)
}

Expand All @@ -194,7 +203,9 @@ func doBuild(opts dib.BuildOpts, buildArgs map[string]string) error {
if err != nil {
return err
}

shell.Env = os.Environ()

builder, err = buildkit.NewBKBuilder(opts.Buildkit, shell, buildctlBinary, opts.LocalOnly)
if err != nil {
return err
Expand All @@ -206,11 +217,14 @@ func doBuild(opts dib.BuildOpts, buildArgs map[string]string) error {
res := dibBuilder.RebuildGraph(builder, ratelimit.NewChannelRateLimiter(opts.RateLimit), buildArgs)

res.Print()
if err := report.Generate(res, dibBuilder.Graph); err != nil {

err = report.Generate(res, dibBuilder.Graph)
if err != nil {
return fmt.Errorf("cannot generate report: %w", err)
}

if err := res.CheckError(); err != nil {
err = res.CheckError()
if err != nil {
return err
}

Expand All @@ -226,25 +240,30 @@ func doBuild(opts dib.BuildOpts, buildArgs map[string]string) error {
if err != nil {
return err
}

workerType, err := buildkit.GetBuildkitWorkerType(buildctlBinary, opts.BuildkitHost, shell)
if err != nil {
return fmt.Errorf("failed to detect buildkit worker type: %w", err)
}

switch workerType {
case buildkit.OciExecutorType:
logger.Warnf("Cannot retag the image with %s worker, please do it manually", buildkit.OciExecutorType)
case buildkit.ContainerdExecutorType:
//nolint:lll
logger.Warnf("Retag with %s worker is not yet implemented, please make a manual retag", buildkit.ContainerdExecutorType)
}

return nil
}

tagger = dockerBuilderTagger
} else {
tagger = gcrRegistry
}

if err := dib.Retag(graph, tagger, opts.PlaceholderTag, opts.Release); err != nil {
err = dib.Retag(graph, tagger, opts.PlaceholderTag, opts.Release)
if err != nil {
return fmt.Errorf("cannot retag images: %w", err)
}

Expand All @@ -266,12 +285,15 @@ func getBuildkitHost(cmd *cobra.Command) (string, error) {
return "", err
}
}
if err = buildkit.PingBKDaemon(buildkitHost); err != nil {

err = buildkit.PingBKDaemon(buildkitHost)
if err != nil {
return "", err
}

return buildkitHost, nil
}

return buildkit.GetBuildkitHostAdress()
}

Expand All @@ -295,6 +317,7 @@ func checkRequirements(opts dib.BuildOpts) {
}
}
}

preflight.RunPreflightChecks(requiredBinaries)
}

Expand All @@ -306,16 +329,20 @@ func getTestRunners(opts dib.BuildOpts, workingDir string) []types.TestRunner {
if err != nil {
logger.Fatalf("cannot create goss test runner: %v", err)
}

testRunners = append(testRunners, gossRunner)
}

if isTestRunnerEnabled(types.TestRunnerTrivy, enabledTestsRunner) {
trivyRunner, err := trivy.CreateTestRunner(opts.Trivy, opts.LocalOnly, workingDir)
if err != nil {
logger.Fatalf("cannot create trivy test runner: %v", err)
}

testRunners = append(testRunners, trivyRunner)
}
}

return testRunners
}

Expand All @@ -325,5 +352,6 @@ func isTestRunnerEnabled(runner string, list []string) bool {
return true
}
}

return false
}
1 change: 1 addition & 0 deletions cmd/build_internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

func TestBuildCommand(t *testing.T) {
t.Parallel()

cmd := buildCommand()

assert.NotNil(t, cmd)
Expand Down
3 changes: 2 additions & 1 deletion cmd/docgen.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ func docgenCommand() *cobra.Command {
}

func docgenAction(_ *cobra.Command, _ []string) error {
if err := os.MkdirAll(cmdDocPath, 0o750); err != nil {
err := os.MkdirAll(cmdDocPath, 0o750)
if err != nil {
return err
}

Expand Down
2 changes: 2 additions & 0 deletions cmd/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ func listAction(cmd *cobra.Command, _ []string) error {
}

buildArgs := map[string]string{}

for _, arg := range opts.BuildArg {
key, val, hasVal := strings.Cut(arg, "=")
if hasVal {
Expand All @@ -70,6 +71,7 @@ func listAction(cmd *cobra.Command, _ []string) error {
}

buildPath := path.Join(workingDir, opts.BuildPath)

graph, err := dib.GenerateDAG(buildPath, opts.RegistryURL, opts.HashListFilePath, buildArgs)
if err != nil {
return fmt.Errorf("cannot generate DAG: %w", err)
Expand Down
16 changes: 12 additions & 4 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ Dockerfiles are always valid (images can still be built even without using dib).
rootCmd.PersistentFlags().String("hash-list-file-path", "",
"Path to custom hash list file that will be used to humanize hash")

if err := viper.BindPFlags(rootCmd.PersistentFlags()); err != nil {
err := viper.BindPFlags(rootCmd.PersistentFlags())
if err != nil {
cobra.CheckErr(err)
}

Expand All @@ -77,6 +78,7 @@ Dockerfiles are always valid (images can still be built even without using dib).

func initConfig() {
var err error

workingDir, err = os.Getwd()
cobra.CheckErr(err)

Expand Down Expand Up @@ -115,7 +117,8 @@ func initConfig() {
viper.AutomaticEnv()

// If a config file is found, read it in.
if err := viper.ReadInConfig(); err != nil {
err = viper.ReadInConfig()
if err != nil {
// Non-blocking, because some command does not require config file, ie: docgen.
logger.Warnf("%s", err)
} else {
Expand All @@ -135,22 +138,27 @@ func preInitLogLevelFromFlags() {
if rootCmd == nil {
return
}

flag := rootCmd.PersistentFlags().Lookup("log-level")
if flag != nil && flag.Changed {
if val, err := rootCmd.PersistentFlags().GetString("log-level"); err == nil {
val, err := rootCmd.PersistentFlags().GetString("log-level")
if err == nil {
logger.SetLevel(&val)
return
}
}

if val, ok := os.LookupEnv("DIB_LOG_LEVEL"); ok && val != "" {
logger.SetLevel(&val)
}
}

func setConfigFile(name string) {
if _, err := os.Stat(name); err != nil {
_, err := os.Stat(name)
if err != nil {
cobra.CheckErr(fmt.Errorf("config file %q not found", name))
}

viper.SetConfigFile(name)
}

Expand Down
2 changes: 2 additions & 0 deletions cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ func versionCommand() *cobra.Command {

func versionAction(*cobra.Command, []string) {
goVersion := "unknown"

buildInfo, available := debug.ReadBuildInfo()
if available {
goVersion = buildInfo.GoVersion
Expand All @@ -42,6 +43,7 @@ func versionAction(*cobra.Command, []string) {
goVersion,
commit,
)

if available && buildInfo.Main.Sum != "" {
fmt.Printf("module version: %s, checksum: %q\n", buildInfo.Main.Version, buildInfo.Main.Sum)
}
Expand Down
8 changes: 8 additions & 0 deletions internal/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ func (l LogLevel) String() string {
case LogLevelFatal:
return "FATAL"
}

return "Unknown"
}

Expand Down Expand Up @@ -151,6 +152,7 @@ func Get() Logger {
if !ok {
panic("invalid logger")
}

return l
}

Expand All @@ -159,6 +161,7 @@ func Debugf(msg string, args ...any) {
if !ok {
panic("invalid logger")
}

l.log(LogLevelDebug, fmt.Sprintf(msg, args...))
}

Expand All @@ -167,6 +170,7 @@ func Infof(msg string, args ...any) {
if !ok {
panic("invalid logger")
}

l.log(LogLevelInfo, fmt.Sprintf(msg, args...))
}

Expand All @@ -175,6 +179,7 @@ func Warnf(msg string, args ...any) {
if !ok {
panic("invalid logger")
}

l.log(LogLevelWarn, fmt.Sprintf(msg, args...))
}

Expand All @@ -183,6 +188,7 @@ func Errorf(msg string, args ...any) {
if !ok {
panic("invalid logger")
}

l.log(LogLevelError, fmt.Sprintf(msg, args...))
}

Expand All @@ -191,7 +197,9 @@ func Fatalf(msg string, args ...any) {
if !ok {
panic("invalid logger")
}

l.log(LogLevelFatal, fmt.Sprintf(msg, args...))

if l.CanPrint(LogLevelFatal) {
os.Exit(1)
}
Expand Down
Loading