Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: begin adding logger to zarf dev #3163

Merged
merged 5 commits into from
Oct 31, 2024
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
21 changes: 19 additions & 2 deletions src/cmd/dev.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/zarf-dev/zarf/src/config"
"github.com/zarf-dev/zarf/src/config/lang"
"github.com/zarf-dev/zarf/src/pkg/lint"
"github.com/zarf-dev/zarf/src/pkg/logger"
"github.com/zarf-dev/zarf/src/pkg/message"
"github.com/zarf-dev/zarf/src/pkg/packager"
"github.com/zarf-dev/zarf/src/pkg/transform"
Expand Down Expand Up @@ -113,13 +114,17 @@ var devTransformGitLinksCmd = &cobra.Command{
return fmt.Errorf("unable to read the file %s: %w", fileName, err)
}

pkgConfig.InitOpts.GitServer.Address = host
gitServer := pkgConfig.InitOpts.GitServer
gitServer.Address = host

// Perform git url transformation via regex
text := string(content)
processedText := transform.MutateGitURLsInText(message.Warnf, pkgConfig.InitOpts.GitServer.Address, text, pkgConfig.InitOpts.GitServer.PushUsername)

// TODO(mkcp): Currently uses message for its log fn. Migrate to ctx and slog
processedText := transform.MutateGitURLsInText(message.Warnf, gitServer.Address, text, gitServer.PushUsername)

// Print the differences
// TODO(mkcp): Uses pterm to print text diffs. Decouple from pterm after we release logger.
dmp := diffmatchpatch.New()
diffs := dmp.DiffMain(text, processedText, true)
diffs = dmp.DiffCleanupSemantic(diffs)
Expand Down Expand Up @@ -160,6 +165,7 @@ var devSha256SumCmd = &cobra.Command{

if helpers.IsURL(fileName) {
message.Warn(lang.CmdDevSha256sumRemoteWarning)
logger.From(cmd.Context()).Warn("this is a remote source. If a published checksum is available you should use that rather than calculating it directly from the remote link")

fileBase, err := helpers.ExtractBasePathFromURL(fileName)
if err != nil {
Expand Down Expand Up @@ -251,8 +257,14 @@ var devFindImagesCmd = &cobra.Command{
defer pkgClient.ClearTempPaths()

_, err = pkgClient.FindImages(cmd.Context())

var lintErr *lint.LintError
if errors.As(err, &lintErr) {
// HACK(mkcp): Re-initializing PTerm with a stderr writer isn't great, but it lets us render these lint
// tables below for backwards compatibility
if logger.Enabled(cmd.Context()) {
message.InitializePTerm(logger.DestinationDefault)
}
common.PrintFindings(lintErr)
}
if err != nil {
Expand Down Expand Up @@ -299,6 +311,11 @@ var devLintCmd = &cobra.Command{
err := lint.Validate(cmd.Context(), pkgConfig.CreateOpts.BaseDir, pkgConfig.CreateOpts.Flavor, pkgConfig.CreateOpts.SetVariables)
var lintErr *lint.LintError
if errors.As(err, &lintErr) {
// HACK(mkcp): Re-initializing PTerm with a stderr writer isn't great, but it lets us render these lint
// tables below for backwards compatibility
if logger.Enabled(cmd.Context()) {
message.InitializePTerm(logger.DestinationDefault)
}
common.PrintFindings(lintErr)
// Do not return an error if the findings are all warnings.
if lintErr.OnlyWarnings() {
Expand Down
25 changes: 23 additions & 2 deletions src/pkg/packager/prepare.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import (
"context"
"errors"
"fmt"
"github.com/zarf-dev/zarf/src/pkg/logger"
"os"
"path/filepath"
"regexp"
"sort"
"strings"
"time"

"github.com/defenseunicorns/pkg/helpers/v2"
"github.com/goccy/go-yaml"
Expand Down Expand Up @@ -40,6 +42,7 @@ var imageFuzzyCheck = regexp.MustCompile(`(?mi)["|=]([a-z0-9\-.\/:]+:[\w.\-]*[a-

// FindImages iterates over a Zarf.yaml and attempts to parse any images.
func (p *Packager) FindImages(ctx context.Context) (map[string][]string, error) {
l := logger.From(ctx)
cwd, err := os.Getwd()
if err != nil {
return nil, err
Expand All @@ -48,12 +51,14 @@ func (p *Packager) FindImages(ctx context.Context) (map[string][]string, error)
// Return to the original working directory
if err := os.Chdir(cwd); err != nil {
message.Warnf("Unable to return to the original working directory: %s", err.Error())
l.Warn("unable to return to the original working directory", "error", err)
}
}()
if err := os.Chdir(p.cfg.CreateOpts.BaseDir); err != nil {
return nil, fmt.Errorf("unable to access directory %q: %w", p.cfg.CreateOpts.BaseDir, err)
}
message.Note(fmt.Sprintf("Using build directory %s", p.cfg.CreateOpts.BaseDir))
l.Info("using build directory", "path", p.cfg.CreateOpts.BaseDir)

c := creator.NewPackageCreator(p.cfg.CreateOpts, cwd)

Expand All @@ -67,6 +72,7 @@ func (p *Packager) FindImages(ctx context.Context) (map[string][]string, error)
}
for _, warning := range warnings {
message.Warn(warning)
l.Warn(warning)
}
p.cfg.Pkg = pkg

Expand All @@ -75,12 +81,15 @@ func (p *Packager) FindImages(ctx context.Context) (map[string][]string, error)

// TODO: Refactor to return output string instead of printing inside of function.
func (p *Packager) findImages(ctx context.Context) (map[string][]string, error) {
l := logger.From(ctx)
for _, component := range p.cfg.Pkg.Components {
if len(component.Repos) > 0 && p.cfg.FindImagesOpts.RepoHelmChartPath == "" {
message.Note("This Zarf package contains git repositories, " +
msg := "This Zarf package contains git repositories, " +
"if any repos contain helm charts you want to template and " +
"search for images, make sure to specify the helm chart path " +
"via the --repo-chart-path flag")
"via the --repo-chart-path flag"
message.Note(msg)
l.Info(msg)
break
}
}
Expand Down Expand Up @@ -260,6 +269,8 @@ func (p *Packager) findImages(ctx context.Context) (map[string][]string, error)
}
}

imgCompStart := time.Now()
l.Info("looking for images in component", "name", component.Name, "resourcesCount", len(resources))
spinner := message.NewProgressSpinner("Looking for images in component %q across %d resources", component.Name, len(resources))
defer spinner.Stop()

Expand Down Expand Up @@ -288,9 +299,11 @@ func (p *Packager) findImages(ctx context.Context) (map[string][]string, error)
if descriptor, err := crane.Head(image, images.WithGlobalInsecureFlag()...); err != nil {
// Test if this is a real image, if not just quiet log to debug, this is normal
message.Debugf("Suspected image does not appear to be valid: %#v", err)
l.Debug("suspected image does not appear to be valid", "error", err)
} else {
// Otherwise, add to the list of images
message.Debugf("Imaged digest found: %s", descriptor.Digest)
l.Debug("imaged digest found", "digest", descriptor.Digest)
validImages = append(validImages, image)
}
}
Expand All @@ -305,16 +318,23 @@ func (p *Packager) findImages(ctx context.Context) (map[string][]string, error)
}

spinner.Success()
l.Debug("done looking for images in component",
"name", component.Name,
"resourcesCount", len(resources),
"duration", time.Since(imgCompStart))

if !p.cfg.FindImagesOpts.SkipCosign {
// Handle cosign artifact lookups
if len(imagesMap[component.Name]) > 0 {
var cosignArtifactList []string
imgStart := time.Now()
spinner := message.NewProgressSpinner("Looking up cosign artifacts for discovered images (0/%d)", len(imagesMap[component.Name]))
defer spinner.Stop()
l.Info("looking up cosign artifacts for discovered images", "count", len(imagesMap[component.Name]))

for idx, image := range imagesMap[component.Name] {
spinner.Updatef("Looking up cosign artifacts for discovered images (%d/%d)", idx+1, len(imagesMap[component.Name]))
l.Debug("looking up cosign artifacts for image", "name", imagesMap[component.Name])
cosignArtifacts, err := utils.GetCosignArtifacts(image)
if err != nil {
return nil, fmt.Errorf("could not lookup the cosing artifacts for image %s: %w", image, err)
Expand All @@ -323,6 +343,7 @@ func (p *Packager) findImages(ctx context.Context) (map[string][]string, error)
}

spinner.Success()
l.Debug("done looking up cosign artifacts for discovered images", "count", len(imagesMap[component.Name]), "duration", time.Since(imgStart))

if len(cosignArtifactList) > 0 {
imagesMap[component.Name] = append(imagesMap[component.Name], cosignArtifactList...)
Expand Down
1 change: 1 addition & 0 deletions src/pkg/transform/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
package transform

// Log is a function that logs a message.
// TODO(mkcp): Remove Log and port over to logger once we remove message.
type Log func(string, ...any)