Skip to content

Commit

Permalink
Add --reproducible flag to flux push artifact
Browse files Browse the repository at this point in the history
This makes the pushed artifact have the exact same hash if the contents
are the same.

E.g
```
flux push artifact oci://repo/image:tag1 --source deploy --revision="test" --path=deploy --reproducible
flux push artifact oci://repo/image:tag2 --source deploy --revision="test" --path=deploy --reproducible
```

will both result in the same sha hash, tagged with `tag1` and `tag2`.

This is useful when producing flux artifacts in a monorepo setup where
you don't want to unnecessarily push new artifacts unless something has
actually changed.

Signed-off-by: frekw <[email protected]>
  • Loading branch information
frekw committed May 8, 2024
1 parent eaf1c0f commit 26109ee
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions cmd/flux/push_artifact.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,16 @@ The command can read the credentials from '~/.docker/config.json' but they can a
}

type pushArtifactFlags struct {
path string
source string
revision string
creds string
provider flags.SourceOCIProvider
ignorePaths []string
annotations []string
output string
debug bool
path string
source string
revision string
creds string
provider flags.SourceOCIProvider
ignorePaths []string
annotations []string
output string
debug bool
reproducible bool
}

var pushArtifactArgs = newPushArtifactFlags()
Expand All @@ -135,6 +136,7 @@ func init() {
pushArtifactCmd.Flags().StringVarP(&pushArtifactArgs.output, "output", "o", "",
"the format in which the artifact digest should be printed, can be 'json' or 'yaml'")
pushArtifactCmd.Flags().BoolVarP(&pushArtifactArgs.debug, "debug", "", false, "display logs from underlying library")
pushArtifactCmd.Flags().BoolVar(&pushArtifactArgs.reproducible, "reproducible", false, "ensure reproducible image digests by setting the created timestamp to '1970-01-01T00:00:00Z'")

pushCmd.AddCommand(pushArtifactCmd)
}
Expand Down Expand Up @@ -202,6 +204,11 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error {
Annotations: annotations,
}

if pushArtifactArgs.reproducible {
zeroTime := time.Unix(0, 0)
meta.Created = zeroTime.Format(time.RFC3339)
}

ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout)
defer cancel()

Expand Down

0 comments on commit 26109ee

Please sign in to comment.