Merge pull request #27352 from rhatdan/artifact

Add CreatedAt format option to podman artifact ls
This commit is contained in:
openshift-merge-bot[bot]
2025-10-24 19:09:56 +00:00
committed by GitHub
3 changed files with 43 additions and 15 deletions

View File

@@ -38,12 +38,29 @@ type listFlagType struct {
}
type artifactListOutput struct {
Digest string
Repository string
Size string
Tag string
Created string
VirtualSize string
Digest string
Repository string
Size string
Tag string
created time.Time
VirtualSize string
virtualBytes int64
}
// Created returns human-readable elapsed time since artifact was created
func (a artifactListOutput) Created() string {
if a.created.IsZero() {
return ""
}
return units.HumanDuration(time.Since(a.created)) + " ago"
}
// CreatedAt returns the full timestamp string of when the artifact was created
func (a artifactListOutput) CreatedAt() string {
if a.created.IsZero() {
return ""
}
return a.created.String()
}
var (
@@ -109,23 +126,23 @@ func outputTemplate(cmd *cobra.Command, lrs []*entities.ArtifactListReport) erro
artifactHash = artifactDigest.Encoded()
}
var created string
var createdTime time.Time
createdAnnotation, ok := lr.Manifest.Annotations[imgspecv1.AnnotationCreated]
if ok {
createdTime, err := time.Parse(time.RFC3339Nano, createdAnnotation)
createdTime, err = time.Parse(time.RFC3339Nano, createdAnnotation)
if err != nil {
return err
}
created = units.HumanDuration(time.Since(createdTime)) + " ago"
}
artifacts = append(artifacts, artifactListOutput{
Digest: artifactHash,
Repository: named.Name(),
Size: units.HumanSize(float64(lr.Artifact.TotalSizeBytes())),
Tag: tag,
Created: created,
VirtualSize: fmt.Sprintf("%d", lr.Artifact.TotalSizeBytes()),
Digest: artifactHash,
Repository: named.Name(),
Size: units.HumanSize(float64(lr.Artifact.TotalSizeBytes())),
Tag: tag,
created: createdTime,
VirtualSize: fmt.Sprintf("%d", lr.Artifact.TotalSizeBytes()),
virtualBytes: lr.Artifact.TotalSizeBytes(),
})
}

View File

@@ -19,6 +19,7 @@ Print results with a Go template.
| **Placeholder** | **Description** |
|-----------------|------------------------------------------------|
| .Created | Elapsed time since the artifact was created |
| .CreatedAt | Full timestamp of when the artifact was created|
| .Digest | The computed digest of the artifact's manifest |
| .Repository | Repository name of the artifact |
| .Size | Size artifact in human readable units |

View File

@@ -88,6 +88,16 @@ var _ = Describe("Podman artifact", func() {
// Assuming the test runs less than a minute
humanReadableDurationRegexp := `^(Less than a second|1 second|\d+ seconds) ago$`
Expect(created).To(ContainElements(MatchRegexp(humanReadableDurationRegexp), MatchRegexp(humanReadableDurationRegexp)))
// Check if .CreatedAt is reported correctly
createdAtFormatSession := podmanTest.PodmanExitCleanly("artifact", "ls", "--format", "{{.CreatedAt}}")
createdAt := createdAtFormatSession.OutputToStringArray()
Expect(createdAt).To(HaveLen(2))
// Verify the timestamp format looks like "2025-10-23 12:34:56.789 +0000 UTC"
timestampRegexp := `^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(\.\d+)? \+\d{4} UTC$`
Expect(createdAt).To(ContainElements(MatchRegexp(timestampRegexp), MatchRegexp(timestampRegexp)))
})
It("podman artifact simple add", func() {