mirror of https://github.com/containers/podman.git
build: implement --cache-to,--cache-from and --cache-ttl
[NO NEW TESTS NEEDED] [NO TESTS NEEDED] Signed-off-by: Aditya R <arajan@redhat.com>
This commit is contained in:
parent
7bd8864800
commit
59cb410fe2
|
|
@ -18,6 +18,7 @@ import (
|
|||
"github.com/containers/common/pkg/auth"
|
||||
"github.com/containers/common/pkg/completion"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
encconfig "github.com/containers/ocicrypt/config"
|
||||
enchelpers "github.com/containers/ocicrypt/helpers"
|
||||
"github.com/containers/podman/v4/cmd/podman/common"
|
||||
|
|
@ -184,7 +185,6 @@ func buildFlags(cmd *cobra.Command) {
|
|||
flags.SetNormalizeFunc(buildahCLI.AliasFlags)
|
||||
if registry.IsRemote() {
|
||||
_ = flags.MarkHidden("disable-content-trust")
|
||||
_ = flags.MarkHidden("cache-from")
|
||||
_ = flags.MarkHidden("sign-by")
|
||||
_ = flags.MarkHidden("signature-policy")
|
||||
_ = flags.MarkHidden("tls-verify")
|
||||
|
|
@ -519,6 +519,27 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *buil
|
|||
}
|
||||
}
|
||||
}
|
||||
var cacheTo reference.Named
|
||||
var cacheFrom reference.Named
|
||||
if c.Flag("cache-to").Changed {
|
||||
cacheTo, err = parse.RepoNameToNamedReference(flags.CacheTo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to parse value provided `%s` to --cache-to: %w", flags.CacheTo, err)
|
||||
}
|
||||
}
|
||||
if c.Flag("cache-from").Changed {
|
||||
cacheFrom, err = parse.RepoNameToNamedReference(flags.CacheFrom)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to parse value provided `%s` to --cache-from: %w", flags.CacheTo, err)
|
||||
}
|
||||
}
|
||||
var cacheTTL time.Duration
|
||||
if c.Flag("cache-ttl").Changed {
|
||||
cacheTTL, err = time.ParseDuration(flags.CacheTTL)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to parse value provided %q as --cache-ttl: %w", flags.CacheTTL, err)
|
||||
}
|
||||
}
|
||||
|
||||
opts := buildahDefine.BuildOptions{
|
||||
AddCapabilities: flags.CapAdd,
|
||||
|
|
@ -529,6 +550,9 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *buil
|
|||
Args: args,
|
||||
BlobDirectory: flags.BlobCache,
|
||||
BuildOutput: flags.BuildOutput,
|
||||
CacheFrom: cacheFrom,
|
||||
CacheTo: cacheTo,
|
||||
CacheTTL: cacheTTL,
|
||||
CommonBuildOpts: commonOpts,
|
||||
Compression: compression,
|
||||
ConfigureNetwork: networkPolicy,
|
||||
|
|
|
|||
|
|
@ -120,8 +120,43 @@ The value of [name] is matched with the following priority order:
|
|||
|
||||
#### **--cache-from**
|
||||
|
||||
Images to utilize as potential cache sources. Podman does not currently support
|
||||
caching so this is a NOOP. (This option is not available with the remote Podman client, including Mac and Windows (excluding WSL2) machines)
|
||||
Repository to utilize as a potential cache source. When specified, Buildah will try to look for
|
||||
cache images in the specified repository and will attempt to pull cache images instead of actually
|
||||
executing the build steps locally. Buildah will only attempt to pull previously cached images if they
|
||||
are considered as valid cache hits.
|
||||
|
||||
Use the `--cache-to` option to populate a remote repository with cache content.
|
||||
|
||||
Example
|
||||
|
||||
```bash
|
||||
# populate a cache and also consult it
|
||||
buildah build -t test --layers --cache-to registry/myrepo/cache --cache-from registry/myrepo/cache .
|
||||
```
|
||||
|
||||
Note: `--cache-from` option is ignored unless `--layers` is specified.
|
||||
|
||||
#### **--cache-to**
|
||||
|
||||
Set this flag to specify a remote repository that will be used to store cache images. Buildah will attempt to
|
||||
push newly built cache image to the remote repository.
|
||||
|
||||
Note: Use the `--cache-from` option in order to use cache content in a remote repository.
|
||||
|
||||
Example
|
||||
|
||||
```bash
|
||||
# populate a cache and also consult it
|
||||
buildah build -t test --layers --cache-to registry/myrepo/cache --cache-from registry/myrepo/cache .
|
||||
```
|
||||
|
||||
Note: `--cache-to` option is ignored unless `--layers` is specified.
|
||||
|
||||
#### **--cache-ttl**
|
||||
|
||||
Limit the use of cached images to only consider images with created timestamps less than *duration* ago.
|
||||
For example if `--cache-ttl=1h` is specified, Buildah will only consider intermediate cache images which are created
|
||||
under the duration of one hour, and intermediate cache images outside this duration will be ignored.
|
||||
|
||||
#### **--cap-add**=*CAP\_xxx*
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
"github.com/containers/buildah"
|
||||
buildahDefine "github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/pkg/parse"
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/containers/podman/v4/libpod"
|
||||
"github.com/containers/podman/v4/pkg/api/handlers/utils"
|
||||
|
|
@ -78,6 +79,8 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
|
|||
AppArmor string `schema:"apparmor"`
|
||||
BuildArgs string `schema:"buildargs"`
|
||||
CacheFrom string `schema:"cachefrom"`
|
||||
CacheTo string `schema:"cacheto"`
|
||||
CacheTTL string `schema:"cachettl"`
|
||||
CgroupParent string `schema:"cgroupparent"`
|
||||
Compression uint64 `schema:"compression"`
|
||||
ConfigureNetwork string `schema:"networkmode"`
|
||||
|
|
@ -386,6 +389,31 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
}
|
||||
|
||||
var cacheFrom reference.Named
|
||||
if _, found := r.URL.Query()["cachefrom"]; found {
|
||||
cacheFrom, err = parse.RepoNameToNamedReference(query.CacheFrom)
|
||||
if err != nil {
|
||||
utils.BadRequest(w, "cacheFrom", query.CacheFrom, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
var cacheTo reference.Named
|
||||
if _, found := r.URL.Query()["cacheto"]; found {
|
||||
cacheTo, err = parse.RepoNameToNamedReference(query.CacheTo)
|
||||
if err != nil {
|
||||
utils.BadRequest(w, "cacheto", query.CacheTo, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
var cacheTTL time.Duration
|
||||
if _, found := r.URL.Query()["cachettl"]; found {
|
||||
cacheTTL, err = time.ParseDuration(query.CacheTTL)
|
||||
if err != nil {
|
||||
utils.BadRequest(w, "cachettl", query.CacheTTL, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
var buildArgs = map[string]string{}
|
||||
if _, found := r.URL.Query()["buildargs"]; found {
|
||||
if err := json.Unmarshal([]byte(query.BuildArgs), &buildArgs); err != nil {
|
||||
|
|
@ -578,6 +606,9 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
|
|||
AdditionalTags: additionalTags,
|
||||
Annotations: annotations,
|
||||
CPPFlags: cppflags,
|
||||
CacheFrom: cacheFrom,
|
||||
CacheTo: cacheTo,
|
||||
CacheTTL: cacheTTL,
|
||||
Args: buildArgs,
|
||||
AllPlatforms: query.AllPlatforms,
|
||||
CommonBuildOpts: &buildah.CommonBuildOptions{
|
||||
|
|
|
|||
|
|
@ -224,6 +224,15 @@ func Build(ctx context.Context, containerFiles []string, options entities.BuildO
|
|||
if len(options.Manifest) > 0 {
|
||||
params.Set("manifest", options.Manifest)
|
||||
}
|
||||
if options.CacheFrom != nil {
|
||||
params.Set("cachefrom", options.CacheFrom.String())
|
||||
}
|
||||
if options.CacheTo != nil {
|
||||
params.Set("cacheto", options.CacheTo.String())
|
||||
}
|
||||
if int64(options.CacheTTL) != 0 {
|
||||
params.Set("cachettl", options.CacheTTL.String())
|
||||
}
|
||||
if memSwap := options.CommonBuildOpts.MemorySwap; memSwap > 0 {
|
||||
params.Set("memswap", strconv.Itoa(int(memSwap)))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue