* rework CI validation workflow and makefile * enable push * fix job names * fix license check * fix snapshot builds * fix acceptance tests * fix linting * disable pull request event * rework windows runner caching * disable release pipeline and add issue templates
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package export
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
diveImage "github.com/wagoodman/dive/dive/image"
|
|
)
|
|
|
|
type export struct {
|
|
Layer []layer `json:"layer"`
|
|
Image image `json:"image"`
|
|
}
|
|
|
|
func NewExport(analysis *diveImage.AnalysisResult) *export {
|
|
data := export{
|
|
Layer: make([]layer, len(analysis.Layers)),
|
|
Image: image{
|
|
InefficientFiles: make([]fileReference, len(analysis.Inefficiencies)),
|
|
SizeBytes: analysis.SizeBytes,
|
|
EfficiencyScore: analysis.Efficiency,
|
|
InefficientBytes: analysis.WastedBytes,
|
|
},
|
|
}
|
|
|
|
// export layers in order
|
|
for idx, curLayer := range analysis.Layers {
|
|
data.Layer[idx] = layer{
|
|
Index: curLayer.Index,
|
|
ID: curLayer.Id,
|
|
DigestID: curLayer.Digest,
|
|
SizeBytes: curLayer.Size,
|
|
Command: curLayer.Command,
|
|
}
|
|
}
|
|
|
|
// add file references
|
|
for idx := 0; idx < len(analysis.Inefficiencies); idx++ {
|
|
fileData := analysis.Inefficiencies[len(analysis.Inefficiencies)-1-idx]
|
|
|
|
data.Image.InefficientFiles[idx] = fileReference{
|
|
References: len(fileData.Nodes),
|
|
SizeBytes: uint64(fileData.CumulativeSize),
|
|
Path: fileData.Path,
|
|
}
|
|
}
|
|
|
|
return &data
|
|
}
|
|
|
|
func (exp *export) Marshal() ([]byte, error) {
|
|
return json.MarshalIndent(&exp, "", " ")
|
|
}
|