Skip to content

Commit

Permalink
Add --reprodicuble 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 <fredrik@warnsberg.se>
  • Loading branch information
frekw committed May 7, 2024
1 parent 7640afc commit ea12aa7
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 using fixed created at timestamps")

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 ea12aa7

Please sign in to comment.