@@ -24,6 +24,7 @@ import (
24
24
"github.com/containers/buildah/util"
25
25
config "github.com/containers/common/pkg/config"
26
26
cp "github.com/containers/image/v5/copy"
27
+ imagedirectory "github.com/containers/image/v5/directory"
27
28
imagedocker "github.com/containers/image/v5/docker"
28
29
"github.com/containers/image/v5/docker/reference"
29
30
"github.com/containers/image/v5/manifest"
@@ -985,10 +986,16 @@ func (s *StageExecutor) Execute(ctx context.Context, base string) (imgID string,
985
986
}
986
987
// logCachePulled produces build log for cases when `--cache-from`
987
988
// is used and a valid intermediate image is pulled from remote source.
988
- logCachePulled := func (cacheKey string , remote reference. Named ) {
989
+ logCachePulled := func (cacheKey string , remote types. ImageReference ) {
989
990
if ! s .executor .quiet {
990
991
cachePullMessage := "--> Cache pulled from remote"
991
- fmt .Fprintf (s .executor .out , "%s %s\n " , cachePullMessage , fmt .Sprintf ("%s:%s" , remote .String (), cacheKey ))
992
+ repo := ""
993
+ if remote .Transport ().Name () == imagedocker .Transport .Name () {
994
+ repo = remote .DockerReference ().String ()
995
+ } else {
996
+ repo = remote .StringWithinTransport ()
997
+ }
998
+ fmt .Fprintf (s .executor .out , "%s %s\n " , cachePullMessage , fmt .Sprintf ("%s:%s" , repo , cacheKey ))
992
999
}
993
1000
}
994
1001
// logCachePush produces build log for cases when `--cache-to`
@@ -1782,18 +1789,29 @@ func (s *StageExecutor) generateCacheKey(ctx context.Context, currNode *parser.N
1782
1789
1783
1790
// cacheImageReference is internal function which generates ImageReference from Named repo sources
1784
1791
// and a tag.
1785
- func cacheImageReferences (repos []reference. Named , cachekey string ) ([]types.ImageReference , error ) {
1792
+ func cacheImageReferences (repos []types. ImageReference , cachekey string ) ([]types.ImageReference , error ) {
1786
1793
var result []types.ImageReference
1787
1794
for _ , repo := range repos {
1788
- tagged , err := reference .WithTag (repo , cachekey )
1789
- if err != nil {
1790
- return nil , fmt .Errorf ("failed generating tagged reference for %q: %w" , repo , err )
1791
- }
1792
- dest , err := imagedocker .NewReference (tagged )
1793
- if err != nil {
1794
- return nil , fmt .Errorf ("failed generating docker reference for %q: %w" , tagged , err )
1795
+ if repo .Transport ().Name () == imagedocker .Transport .Name () {
1796
+ ref := repo .DockerReference ()
1797
+ tagged , err := reference .WithTag (ref , cachekey )
1798
+ if err != nil {
1799
+ return nil , fmt .Errorf ("failed generating tagged reference for %q: %w" , repo , err )
1800
+ }
1801
+ dest , err := imagedocker .NewReference (tagged )
1802
+ if err != nil {
1803
+ return nil , fmt .Errorf ("failed generating docker reference for %q: %w" , tagged , err )
1804
+ }
1805
+ result = append (result , dest )
1806
+ } else if repo .Transport ().Name () == imagedirectory .Transport .Name () {
1807
+ dirPath := repo .StringWithinTransport ()
1808
+ tagged := filepath .Join (dirPath , cachekey )
1809
+ dest , err := imagedirectory .NewReference (tagged )
1810
+ if err != nil {
1811
+ return nil , fmt .Errorf ("failed generating directory reference for %q: %w" , tagged , err )
1812
+ }
1813
+ result = append (result , dest )
1795
1814
}
1796
- result = append (result , dest )
1797
1815
}
1798
1816
return result , nil
1799
1817
}
@@ -1833,7 +1851,7 @@ func (s *StageExecutor) pushCache(ctx context.Context, src, cacheKey string) err
1833
1851
// or a newer version of cache was found in the upstream repo. If new
1834
1852
// image was pulled function returns image id otherwise returns empty
1835
1853
// string "" or error if any error was encontered while pulling the cache.
1836
- func (s * StageExecutor ) pullCache (ctx context.Context , cacheKey string ) (reference. Named , string , error ) {
1854
+ func (s * StageExecutor ) pullCache (ctx context.Context , cacheKey string ) (types. ImageReference , string , error ) {
1837
1855
srcList , err := cacheImageReferences (s .executor .cacheFrom , cacheKey )
1838
1856
if err != nil {
1839
1857
return nil , "" , err
@@ -1851,14 +1869,20 @@ func (s *StageExecutor) pullCache(ctx context.Context, cacheKey string) (referen
1851
1869
ReportWriter : nil ,
1852
1870
PullPolicy : define .PullIfNewer ,
1853
1871
}
1854
- id , err := buildah .Pull (ctx , src .DockerReference ().String (), options )
1872
+ srcString := ""
1873
+ if src .Transport ().Name () == imagedocker .Transport .Name () {
1874
+ srcString = src .DockerReference ().String ()
1875
+ } else if src .Transport ().Name () == imagedirectory .Transport .Name () {
1876
+ srcString = "dir://" + src .StringWithinTransport ()
1877
+ }
1878
+ id , err := buildah .Pull (ctx , srcString , options )
1855
1879
if err != nil {
1856
1880
logrus .Debugf ("failed pulling cache from source %s: %v" , src , err )
1857
1881
continue // failed pulling this one try next
1858
1882
//return "", fmt.Errorf("failed while pulling cache from %q: %w", src, err)
1859
1883
}
1860
1884
logrus .Debugf ("successfully pulled cache from repo %s: %s" , src , id )
1861
- return src . DockerReference () , id , nil
1885
+ return src , id , nil
1862
1886
}
1863
1887
return nil , "" , fmt .Errorf ("failed pulling cache from all available sources %q" , srcList )
1864
1888
}
0 commit comments