Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package apko for openSUSE:Factory checked in 
at 2025-05-08 18:22:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apko (Old)
 and      /work/SRC/openSUSE:Factory/.apko.new.30101 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apko"

Thu May  8 18:22:29 2025 rev:49 rq:1275352 version:0.27.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/apko/apko.changes        2025-05-06 
16:42:13.330181609 +0200
+++ /work/SRC/openSUSE:Factory/.apko.new.30101/apko.changes     2025-05-08 
18:25:02.748643577 +0200
@@ -1,0 +2,21 @@
+Wed May 07 18:52:31 UTC 2025 - Johannes Kastl 
<opensuse_buildserv...@ojkastl.de>
+
+- Update to version 0.27.3:
+  * Fix build_repositories for layered images (#1663)
+  * README: fix url typo (#1661)
+  * build(deps): bump golang.org/x/sys from 0.32.0 to 0.33.0
+    (#1655)
+  * build(deps): bump google.golang.org/api from 0.229.0 to 0.231.0
+    (#1647)
+  * build(deps): bump golang.org/x/oauth2 from 0.29.0 to 0.30.0
+    (#1656)
+  * build(deps): bump github.com/go-git/go-git/v5 from 5.14.0 to
+    5.16.0 (#1626)
+  * build(deps): bump sigstore/cosign-installer from 3.8.1 to 3.8.2
+    (#1639)
+  * build(deps): bump github/codeql-action from 3.28.14 to 3.28.17
+    (#1652)
+  * build(deps): bump golang.org/x/sync from 0.13.0 to 0.14.0
+    (#1657)
+
+-------------------------------------------------------------------

Old:
----
  apko-0.27.2.obscpio

New:
----
  apko-0.27.3.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ apko.spec ++++++
--- /var/tmp/diff_new_pack.Whdgi8/_old  2025-05-08 18:25:03.608679452 +0200
+++ /var/tmp/diff_new_pack.Whdgi8/_new  2025-05-08 18:25:03.608679452 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           apko
-Version:        0.27.2
+Version:        0.27.3
 Release:        0
 Summary:        Build OCI images from APK packages directly without Dockerfile
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.Whdgi8/_old  2025-05-08 18:25:03.668681955 +0200
+++ /var/tmp/diff_new_pack.Whdgi8/_new  2025-05-08 18:25:03.672682122 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/chainguard-dev/apko</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v0.27.2</param>
+    <param name="revision">v0.27.3</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Whdgi8/_old  2025-05-08 18:25:03.692682956 +0200
+++ /var/tmp/diff_new_pack.Whdgi8/_new  2025-05-08 18:25:03.696683123 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/chainguard-dev/apko</param>
-              <param 
name="changesrevision">e85ed818320f793afaff25b3e1b691f5b966be39</param></service></servicedata>
+              <param 
name="changesrevision">69318398424b487291ee519e29fe1c1c29e54288</param></service></servicedata>
 (No newline at EOF)
 

++++++ apko-0.27.2.obscpio -> apko-0.27.3.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/README.md new/apko-0.27.3/README.md
--- old/apko-0.27.2/README.md   2025-05-05 18:56:34.000000000 +0200
+++ new/apko-0.27.3/README.md   2025-05-07 20:06:32.000000000 +0200
@@ -130,7 +130,7 @@
 Tutorials and guides for apko can be found at the [Chainguard 
Academy](https://edu.chainguard.dev/open-source/apko/).
 
 For support, please find us on the [Kubernetes 
Slack](https://kubernetes.slack.com/) in the #apko
-channel or [open an issue](https://github.com/chainguard-dev/apko/issue).
+channel or [open an issue](https://github.com/chainguard-dev/apko/issues).
 
 ## Related Work and Resources
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/go.mod new/apko-0.27.3/go.mod
--- old/apko-0.27.2/go.mod      2025-05-05 18:56:34.000000000 +0200
+++ new/apko-0.27.3/go.mod      2025-05-07 20:06:32.000000000 +0200
@@ -6,7 +6,7 @@
        chainguard.dev/sdk v0.1.31
        github.com/chainguard-dev/clog v1.7.0
        github.com/charmbracelet/log v0.4.1
-       github.com/go-git/go-git/v5 v5.14.0
+       github.com/go-git/go-git/v5 v5.16.0
        github.com/google/go-cmp v0.7.0
        github.com/google/go-containerregistry v0.20.3
        github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
@@ -25,11 +25,11 @@
        go.opentelemetry.io/otel v1.35.0
        go.opentelemetry.io/otel/trace v1.35.0
        go.step.sm/crypto v0.60.0
-       golang.org/x/oauth2 v0.29.0
-       golang.org/x/sync v0.13.0
-       golang.org/x/sys v0.32.0
+       golang.org/x/oauth2 v0.30.0
+       golang.org/x/sync v0.14.0
+       golang.org/x/sys v0.33.0
        golang.org/x/time v0.11.0
-       google.golang.org/api v0.229.0
+       google.golang.org/api v0.231.0
        gopkg.in/ini.v1 v1.67.0
        gopkg.in/yaml.v3 v3.0.1
        k8s.io/apimachinery v0.32.3
@@ -38,13 +38,13 @@
 
 require (
        chainguard.dev/go-grpc-kit v0.17.7 // indirect
-       cloud.google.com/go/auth v0.16.0 // indirect
+       cloud.google.com/go/auth v0.16.1 // indirect
        cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
        cloud.google.com/go/compute/metadata v0.6.0 // indirect
        dario.cat/mergo v1.0.1 // indirect
        filippo.io/edwards25519 v1.1.0 // indirect
        github.com/Microsoft/go-winio v0.6.2 // indirect
-       github.com/ProtonMail/go-crypto v1.1.5 // indirect
+       github.com/ProtonMail/go-crypto v1.1.6 // indirect
        github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
        github.com/bahlo/generic-list-go v0.2.0 // indirect
        github.com/beorn7/perks v1.0.1 // indirect
@@ -52,7 +52,7 @@
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/charmbracelet/lipgloss v1.0.0 // indirect
        github.com/charmbracelet/x/ansi v0.4.2 // indirect
-       github.com/cloudflare/circl v1.6.0 // indirect
+       github.com/cloudflare/circl v1.6.1 // indirect
        github.com/common-nighthawk/go-figure 
v0.0.0-20210622060536-734e95fb86be // indirect
        github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
        github.com/cyphar/filepath-securejoin v0.4.1 // indirect
@@ -122,8 +122,8 @@
        golang.org/x/net v0.39.0 // indirect
        golang.org/x/text v0.24.0 // indirect
        google.golang.org/genproto/googleapis/api 
v0.0.0-20250303144028-a0af3efb3deb // indirect
-       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250414145226-207652e42e2e // indirect
-       google.golang.org/grpc v1.71.1 // indirect
+       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250425173222-7b384671a197 // indirect
+       google.golang.org/grpc v1.72.0 // indirect
        google.golang.org/protobuf v1.36.6 // indirect
        gopkg.in/warnings.v0 v0.1.2 // indirect
        gotest.tools/v3 v3.5.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/go.sum new/apko-0.27.3/go.sum
--- old/apko-0.27.2/go.sum      2025-05-05 18:56:34.000000000 +0200
+++ new/apko-0.27.3/go.sum      2025-05-07 20:06:32.000000000 +0200
@@ -3,8 +3,8 @@
 chainguard.dev/sdk v0.1.31 h1:Blvpa0Ji/tC1VVV8/l8UyQe022LoRxZLfgasyFE1EhQ=
 chainguard.dev/sdk v0.1.31/go.mod 
h1:/zqikqbDCBAAlhIDuBl8V4bR9nmB1qLEIn2w9FxzNwI=
 cloud.google.com/go v0.26.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go/auth v0.16.0 
h1:Pd8P1s9WkcrBE2n/PhAwKsdrR35V3Sg2II9B+ndM3CU=
-cloud.google.com/go/auth v0.16.0/go.mod 
h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI=
+cloud.google.com/go/auth v0.16.1 
h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU=
+cloud.google.com/go/auth v0.16.1/go.mod 
h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI=
 cloud.google.com/go/auth/oauth2adapt v0.2.8 
h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
 cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod 
h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
 cloud.google.com/go/compute/metadata v0.6.0 
h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
@@ -19,8 +19,8 @@
 github.com/Microsoft/go-winio v0.5.2/go.mod 
h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
 github.com/Microsoft/go-winio v0.6.2 
h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
 github.com/Microsoft/go-winio v0.6.2/go.mod 
h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/ProtonMail/go-crypto v1.1.5 
h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4=
-github.com/ProtonMail/go-crypto v1.1.5/go.mod 
h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
+github.com/ProtonMail/go-crypto v1.1.6 
h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
+github.com/ProtonMail/go-crypto v1.1.6/go.mod 
h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be 
h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod 
h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 
h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
@@ -49,8 +49,8 @@
 github.com/charmbracelet/x/ansi v0.4.2 
h1:0JM6Aj/g/KC154/gOP4vfxun0ff6itogDYk41kof+qk=
 github.com/charmbracelet/x/ansi v0.4.2/go.mod 
h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
 github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cloudflare/circl v1.6.0 
h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk=
-github.com/cloudflare/circl v1.6.0/go.mod 
h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
+github.com/cloudflare/circl v1.6.1 
h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
+github.com/cloudflare/circl v1.6.1/go.mod 
h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod 
h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be 
h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ=
 github.com/common-nighthawk/go-figure 
v0.0.0-20210622060536-734e95fb86be/go.mod 
h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w=
@@ -101,8 +101,8 @@
 github.com/go-git/go-billy/v5 v5.6.2/go.mod 
h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
 github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 
h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
 github.com/go-git/go-git-fixtures/v4 
v4.3.2-0.20231010084843-55a94097c399/go.mod 
h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
-github.com/go-git/go-git/v5 v5.14.0 
h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=
-github.com/go-git/go-git/v5 v5.14.0/go.mod 
h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
+github.com/go-git/go-git/v5 v5.16.0 
h1:k3kuOEpkc0DeY7xlL6NaaNg39xdgQbtH5mwCafHO9AQ=
+github.com/go-git/go-git/v5 v5.16.0/go.mod 
h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
 github.com/go-jose/go-jose/v3 v3.0.4 
h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY=
 github.com/go-jose/go-jose/v3 v3.0.4/go.mod 
h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
 github.com/go-kit/log v0.1.0/go.mod 
h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
@@ -346,8 +346,8 @@
 golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
 golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod 
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
-golang.org/x/oauth2 v0.29.0/go.mod 
h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
+golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
+golang.org/x/oauth2 v0.30.0/go.mod 
h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -355,8 +355,8 @@
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
-golang.org/x/sync v0.13.0/go.mod 
h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
+golang.org/x/sync v0.14.0/go.mod 
h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -375,8 +375,8 @@
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
-golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
+golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -413,8 +413,8 @@
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.229.0 h1:p98ymMtqeJ5i3lIBMj5MpR9kzIIgzpHHh8vQ+vgAzx8=
-google.golang.org/api v0.229.0/go.mod 
h1:wyDfmq5g1wYJWn29O22FDWN48P7Xcz0xz+LBpptYvB0=
+google.golang.org/api v0.231.0 h1:LbUD5FUl0C4qwia2bjXhCMH65yz1MLPzA/0OYEsYY7Q=
+google.golang.org/api v0.231.0/go.mod 
h1:H52180fPI/QQlUc0F4xWfGZILdv09GCWKt2bcsn164A=
 google.golang.org/appengine v1.1.0/go.mod 
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -422,16 +422,16 @@
 google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod 
h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
 google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb 
h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950=
 google.golang.org/genproto/googleapis/api 
v0.0.0-20250303144028-a0af3efb3deb/go.mod 
h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250414145226-207652e42e2e 
h1:ztQaXfzEXTmCBvbtWYRhJxW+0iJcz2qXfd38/e9l7bA=
-google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250414145226-207652e42e2e/go.mod 
h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 
h1:29cjnHVylHwTzH66WfFZqgSQgnxzvWE+jvBwpZCLRxY=
+google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250425173222-7b384671a197/go.mod 
h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/grpc v1.18.0/go.mod 
h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.23.0/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.25.1/go.mod 
h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.27.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.29.1/go.mod 
h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI=
-google.golang.org/grpc v1.71.1/go.mod 
h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
+google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM=
+google.golang.org/grpc v1.72.0/go.mod 
h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
 google.golang.org/protobuf v1.36.6 
h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
 google.golang.org/protobuf v1.36.6/go.mod 
h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/internal/cli/publish_test.go 
new/apko-0.27.3/internal/cli/publish_test.go
--- old/apko-0.27.2/internal/cli/publish_test.go        2025-05-05 
18:56:34.000000000 +0200
+++ new/apko-0.27.3/internal/cli/publish_test.go        2025-05-07 
20:06:32.000000000 +0200
@@ -17,20 +17,25 @@
 import (
        "context"
        "fmt"
+       "io"
+       "io/fs"
        "net/http"
        "net/http/httptest"
        "net/url"
        "os"
        "path/filepath"
+       "strings"
        "testing"
 
        "github.com/google/go-containerregistry/pkg/name"
        "github.com/google/go-containerregistry/pkg/registry"
+       "github.com/google/go-containerregistry/pkg/v1/mutate"
        "github.com/google/go-containerregistry/pkg/v1/remote"
        "github.com/google/go-containerregistry/pkg/v1/validate"
        "github.com/stretchr/testify/require"
 
        "chainguard.dev/apko/internal/cli"
+       "chainguard.dev/apko/internal/tarfs"
        "chainguard.dev/apko/pkg/build"
        "chainguard.dev/apko/pkg/build/types"
        "chainguard.dev/apko/pkg/sbom"
@@ -162,7 +167,7 @@
 
        // This test will fail if we ever make a change in apko that changes 
the image.
        // Sometimes, this is intentional, and we need to change this and bump 
the version.
-       want := 
"sha256:316b607c2d30e686d9170edcefa9bc07aae922e4c20c06cc85bd6e4c0ed85f25"
+       want := 
"sha256:d5fe88a41005bc378fc42d3066d4762b2c082e528cd2856e27f4e005031bfd35"
        require.Equal(t, want, digest.String())
 
        im, err := idx.IndexManifest()
@@ -176,5 +181,20 @@
                require.NoError(t, err)
 
                require.Equal(t, 2, len(cm.Layers))
+
+               tr := mutate.Extract(child)
+               tmp, err := os.CreateTemp(t.TempDir(), "")
+               require.NoError(t, err)
+               size, err := io.Copy(tmp, tr)
+               require.NoError(t, err)
+               fsys, err := tarfs.New(tmp, size)
+               require.NoError(t, err)
+
+               b, err := fs.ReadFile(fsys, "etc/apk/repositories")
+               require.NoError(t, err)
+
+               if strings.Contains(string(b), "./packages") {
+                       t.Errorf("etc/apk/repositories contains 
build_repositories entry %q", "./packages")
+               }
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/internal/cli/testdata/layering.yaml 
new/apko-0.27.3/internal/cli/testdata/layering.yaml
--- old/apko-0.27.2/internal/cli/testdata/layering.yaml 2025-05-05 
18:56:34.000000000 +0200
+++ new/apko-0.27.3/internal/cli/testdata/layering.yaml 2025-05-07 
20:06:32.000000000 +0200
@@ -1,6 +1,8 @@
 contents:
   keyring:
     - ./testdata/melange.rsa.pub
+  build_repositories:
+    - ./packages
   repositories:
     - ./testdata/packages
   packages:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/internal/tarfs/tarfs.go 
new/apko-0.27.3/internal/tarfs/tarfs.go
--- old/apko-0.27.2/internal/tarfs/tarfs.go     1970-01-01 01:00:00.000000000 
+0100
+++ new/apko-0.27.3/internal/tarfs/tarfs.go     2025-05-07 20:06:32.000000000 
+0200
@@ -0,0 +1,276 @@
+// Copyright 2023 Chainguard, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package tarfs
+
+import (
+       "archive/tar"
+       "bufio"
+       "cmp"
+       "errors"
+       "fmt"
+       "io"
+       "io/fs"
+       "path"
+       "slices"
+       "sync"
+       "time"
+)
+
+var readerPool = sync.Pool{
+       New: func() interface{} {
+               return bufio.NewReaderSize(nil, 1<<20)
+       },
+}
+
+func pooledBufioReader(r io.Reader) *bufio.Reader {
+       br := readerPool.Get().(*bufio.Reader)
+       br.Reset(r)
+       return br
+}
+
+type Entry struct {
+       Header tar.Header
+       Offset int64
+
+       dir string
+       fi  fs.FileInfo
+}
+
+func (e Entry) Name() string {
+       return e.fi.Name()
+}
+
+func (e Entry) Size() int64 {
+       return e.Header.Size
+}
+
+func (e Entry) Type() fs.FileMode {
+       return e.fi.Mode()
+}
+
+func (e Entry) Info() (fs.FileInfo, error) {
+       return e.fi, nil
+}
+
+func (e Entry) IsDir() bool {
+       return e.fi.IsDir()
+}
+
+type File struct {
+       fsys  *FS
+       sr    *io.SectionReader
+       Entry *Entry
+}
+
+func (f *File) Stat() (fs.FileInfo, error) {
+       return f.Entry.fi, nil
+}
+
+func (f *File) Read(p []byte) (int, error) {
+       return f.sr.Read(p)
+}
+
+func (f *File) Seek(offset int64, whence int) (int64, error) {
+       return f.sr.Seek(offset, whence)
+}
+
+func (f *File) ReadAt(p []byte, off int64) (int, error) {
+       return f.sr.ReadAt(p, off)
+}
+
+func (f *File) Close() error {
+       return nil
+}
+
+type FS struct {
+       ra    io.ReaderAt
+       files []*Entry
+       index map[string]int
+       dirs  map[string][]fs.DirEntry
+}
+
+func (fsys *FS) Readlink(name string) (string, error) {
+       i, ok := fsys.index[name]
+       if !ok {
+               return "", fs.ErrNotExist
+       }
+
+       e := fsys.files[i]
+
+       switch e.Header.Typeflag {
+       case tar.TypeSymlink, tar.TypeLink:
+               return e.Header.Linkname, nil
+       }
+
+       return "", fmt.Errorf("Readlink(%q): file is not a link", name)
+}
+
+const maxHops = 64
+
+// open follows symlinks up to [maxHops] times.
+func (fsys *FS) open(name string, hops int) (fs.File, error) {
+       if hops > maxHops {
+               return nil, fmt.Errorf("Open(%q): chased too many (%d) 
symlinks", name, maxHops)
+       }
+
+       i, ok := fsys.index[name]
+       if !ok {
+               return nil, fs.ErrNotExist
+       }
+
+       e := fsys.files[i]
+
+       switch e.Header.Typeflag {
+       case tar.TypeSymlink, tar.TypeLink:
+               link := e.Header.Linkname
+               if path.IsAbs(link) {
+                       return fsys.open(link, hops+1)
+               }
+
+               return fsys.open(path.Join(e.dir, link), hops+1)
+       }
+
+       f := &File{
+               fsys:  fsys,
+               Entry: e,
+       }
+
+       f.sr = io.NewSectionReader(fsys.ra, e.Offset, e.Header.Size)
+
+       return f, nil
+}
+
+// Open implements fs.FS.
+func (fsys *FS) Open(name string) (fs.File, error) {
+       return fsys.open(name, 0)
+}
+
+func (fsys *FS) Entries() []*Entry {
+       return fsys.files
+}
+
+type root struct{}
+
+func (r root) Name() string       { return "." }
+func (r root) Size() int64        { return 0 }
+func (r root) Mode() fs.FileMode  { return fs.ModeDir }
+func (r root) ModTime() time.Time { return time.Unix(0, 0) }
+func (r root) IsDir() bool        { return true }
+func (r root) Sys() any           { return nil }
+
+func (fsys *FS) Stat(name string) (fs.FileInfo, error) {
+       if i, ok := fsys.index[name]; ok {
+               return fsys.files[i].fi, nil
+       }
+
+       // fs.WalkDir expects "." to return a root entry to bootstrap the walk.
+       // If we didn't find it above, synthesize one.
+       if name == "." {
+               return root{}, nil
+       }
+
+       return nil, fs.ErrNotExist
+}
+
+func (fsys *FS) ReadDir(name string) ([]fs.DirEntry, error) {
+       dirs, ok := fsys.dirs[name]
+       if !ok {
+               return []fs.DirEntry{}, nil
+       }
+
+       return dirs, nil
+}
+
+type countReader struct {
+       r io.Reader
+       n int64
+}
+
+func (cr *countReader) Read(p []byte) (int, error) {
+       n, err := cr.r.Read(p)
+       cr.n += int64(n)
+       return n, err
+}
+
+func New(ra io.ReaderAt, size int64) (*FS, error) {
+       fsys := &FS{
+               ra:    ra,
+               files: []*Entry{},
+               index: map[string]int{},
+               dirs:  map[string][]fs.DirEntry{},
+       }
+
+       // Number of entries in a given directory, so we know how large of a 
slice to allocate.
+       dirCount := map[string]int{}
+
+       // TODO: Consider caching this across builds.
+       r := io.NewSectionReader(ra, 0, size)
+
+       br := pooledBufioReader(r)
+       defer readerPool.Put(br)
+
+       cr := &countReader{br, 0}
+       tr := tar.NewReader(cr)
+       for {
+               hdr, err := tr.Next()
+               if errors.Is(err, io.EOF) {
+                       break
+               }
+               if err != nil {
+                       return nil, err
+               }
+               dir := path.Dir(hdr.Name)
+               fsys.index[hdr.Name] = len(fsys.files)
+               fsys.files = append(fsys.files, &Entry{
+                       Header: *hdr,
+                       Offset: cr.n,
+                       dir:    dir,
+                       fi:     hdr.FileInfo(),
+               })
+
+               dirCount[dir]++
+       }
+
+       // Pre-generate the results of ReadDir so we don't allocate a ton if 
fs.WalkDir calls us.
+       // TODO: Consider doing this lazily in a sync.Once the first time we 
see a ReadDir.
+       for dir, count := range dirCount {
+               fsys.dirs[dir] = make([]fs.DirEntry, 0, count)
+       }
+
+       for _, f := range fsys.files {
+               fsys.dirs[f.dir] = append(fsys.dirs[f.dir], f)
+       }
+
+       for _, files := range fsys.dirs {
+               slices.SortFunc(files, func(a, b fs.DirEntry) int {
+                       return cmp.Compare(a.Name(), b.Name())
+               })
+       }
+
+       return fsys, nil
+}
+
+func (fsys *FS) Close() error {
+       if fsys == nil {
+               return nil
+       }
+
+       closer, ok := fsys.ra.(io.Closer)
+       if !ok {
+               return nil
+       }
+
+       return closer.Close()
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/pkg/apk/apk/implementation.go 
new/apko-0.27.3/pkg/apk/apk/implementation.go
--- old/apko-0.27.2/pkg/apk/apk/implementation.go       2025-05-05 
18:56:34.000000000 +0200
+++ new/apko-0.27.3/pkg/apk/apk/implementation.go       2025-05-07 
20:06:32.000000000 +0200
@@ -51,10 +51,10 @@
        "golang.org/x/sys/unix"
        "gopkg.in/ini.v1"
 
+       "chainguard.dev/apko/internal/tarfs"
        "chainguard.dev/apko/pkg/apk/auth"
        "chainguard.dev/apko/pkg/apk/expandapk"
        apkfs "chainguard.dev/apko/pkg/apk/fs"
-       "chainguard.dev/apko/pkg/apk/internal/tarfs"
        "chainguard.dev/apko/pkg/paths"
 
        "github.com/chainguard-dev/clog"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/pkg/apk/apk/install.go 
new/apko-0.27.3/pkg/apk/apk/install.go
--- old/apko-0.27.2/pkg/apk/apk/install.go      2025-05-05 18:56:34.000000000 
+0200
+++ new/apko-0.27.3/pkg/apk/apk/install.go      2025-05-07 20:06:32.000000000 
+0200
@@ -29,7 +29,7 @@
 
        "go.opentelemetry.io/otel"
 
-       "chainguard.dev/apko/pkg/apk/internal/tarfs"
+       "chainguard.dev/apko/internal/tarfs"
 )
 
 // writeOneFile writes one file from the APK given the tar header and tar 
reader.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/pkg/apk/expandapk/expandapk.go 
new/apko-0.27.3/pkg/apk/expandapk/expandapk.go
--- old/apko-0.27.2/pkg/apk/expandapk/expandapk.go      2025-05-05 
18:56:34.000000000 +0200
+++ new/apko-0.27.3/pkg/apk/expandapk/expandapk.go      2025-05-07 
20:06:32.000000000 +0200
@@ -22,7 +22,7 @@
        "strings"
        "sync"
 
-       "chainguard.dev/apko/pkg/apk/internal/tarfs"
+       "chainguard.dev/apko/internal/tarfs"
        "github.com/klauspost/compress/gzip"
 
        "go.opentelemetry.io/otel"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/pkg/apk/internal/tarfs/tarfs.go 
new/apko-0.27.3/pkg/apk/internal/tarfs/tarfs.go
--- old/apko-0.27.2/pkg/apk/internal/tarfs/tarfs.go     2025-05-05 
18:56:34.000000000 +0200
+++ new/apko-0.27.3/pkg/apk/internal/tarfs/tarfs.go     1970-01-01 
01:00:00.000000000 +0100
@@ -1,276 +0,0 @@
-// Copyright 2023 Chainguard, Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package tarfs
-
-import (
-       "archive/tar"
-       "bufio"
-       "cmp"
-       "errors"
-       "fmt"
-       "io"
-       "io/fs"
-       "path"
-       "slices"
-       "sync"
-       "time"
-)
-
-var readerPool = sync.Pool{
-       New: func() interface{} {
-               return bufio.NewReaderSize(nil, 1<<20)
-       },
-}
-
-func pooledBufioReader(r io.Reader) *bufio.Reader {
-       br := readerPool.Get().(*bufio.Reader)
-       br.Reset(r)
-       return br
-}
-
-type Entry struct {
-       Header tar.Header
-       Offset int64
-
-       dir string
-       fi  fs.FileInfo
-}
-
-func (e Entry) Name() string {
-       return e.fi.Name()
-}
-
-func (e Entry) Size() int64 {
-       return e.Header.Size
-}
-
-func (e Entry) Type() fs.FileMode {
-       return e.fi.Mode()
-}
-
-func (e Entry) Info() (fs.FileInfo, error) {
-       return e.fi, nil
-}
-
-func (e Entry) IsDir() bool {
-       return e.fi.IsDir()
-}
-
-type File struct {
-       fsys  *FS
-       sr    *io.SectionReader
-       Entry *Entry
-}
-
-func (f *File) Stat() (fs.FileInfo, error) {
-       return f.Entry.fi, nil
-}
-
-func (f *File) Read(p []byte) (int, error) {
-       return f.sr.Read(p)
-}
-
-func (f *File) Seek(offset int64, whence int) (int64, error) {
-       return f.sr.Seek(offset, whence)
-}
-
-func (f *File) ReadAt(p []byte, off int64) (int, error) {
-       return f.sr.ReadAt(p, off)
-}
-
-func (f *File) Close() error {
-       return nil
-}
-
-type FS struct {
-       ra    io.ReaderAt
-       files []*Entry
-       index map[string]int
-       dirs  map[string][]fs.DirEntry
-}
-
-func (fsys *FS) Readlink(name string) (string, error) {
-       i, ok := fsys.index[name]
-       if !ok {
-               return "", fs.ErrNotExist
-       }
-
-       e := fsys.files[i]
-
-       switch e.Header.Typeflag {
-       case tar.TypeSymlink, tar.TypeLink:
-               return e.Header.Linkname, nil
-       }
-
-       return "", fmt.Errorf("Readlink(%q): file is not a link", name)
-}
-
-const maxHops = 64
-
-// open follows symlinks up to [maxHops] times.
-func (fsys *FS) open(name string, hops int) (fs.File, error) {
-       if hops > maxHops {
-               return nil, fmt.Errorf("Open(%q): chased too many (%d) 
symlinks", name, maxHops)
-       }
-
-       i, ok := fsys.index[name]
-       if !ok {
-               return nil, fs.ErrNotExist
-       }
-
-       e := fsys.files[i]
-
-       switch e.Header.Typeflag {
-       case tar.TypeSymlink, tar.TypeLink:
-               link := e.Header.Linkname
-               if path.IsAbs(link) {
-                       return fsys.open(link, hops+1)
-               }
-
-               return fsys.open(path.Join(e.dir, link), hops+1)
-       }
-
-       f := &File{
-               fsys:  fsys,
-               Entry: e,
-       }
-
-       f.sr = io.NewSectionReader(fsys.ra, e.Offset, e.Header.Size)
-
-       return f, nil
-}
-
-// Open implements fs.FS.
-func (fsys *FS) Open(name string) (fs.File, error) {
-       return fsys.open(name, 0)
-}
-
-func (fsys *FS) Entries() []*Entry {
-       return fsys.files
-}
-
-type root struct{}
-
-func (r root) Name() string       { return "." }
-func (r root) Size() int64        { return 0 }
-func (r root) Mode() fs.FileMode  { return fs.ModeDir }
-func (r root) ModTime() time.Time { return time.Unix(0, 0) }
-func (r root) IsDir() bool        { return true }
-func (r root) Sys() any           { return nil }
-
-func (fsys *FS) Stat(name string) (fs.FileInfo, error) {
-       if i, ok := fsys.index[name]; ok {
-               return fsys.files[i].fi, nil
-       }
-
-       // fs.WalkDir expects "." to return a root entry to bootstrap the walk.
-       // If we didn't find it above, synthesize one.
-       if name == "." {
-               return root{}, nil
-       }
-
-       return nil, fs.ErrNotExist
-}
-
-func (fsys *FS) ReadDir(name string) ([]fs.DirEntry, error) {
-       dirs, ok := fsys.dirs[name]
-       if !ok {
-               return []fs.DirEntry{}, nil
-       }
-
-       return dirs, nil
-}
-
-type countReader struct {
-       r io.Reader
-       n int64
-}
-
-func (cr *countReader) Read(p []byte) (int, error) {
-       n, err := cr.r.Read(p)
-       cr.n += int64(n)
-       return n, err
-}
-
-func New(ra io.ReaderAt, size int64) (*FS, error) {
-       fsys := &FS{
-               ra:    ra,
-               files: []*Entry{},
-               index: map[string]int{},
-               dirs:  map[string][]fs.DirEntry{},
-       }
-
-       // Number of entries in a given directory, so we know how large of a 
slice to allocate.
-       dirCount := map[string]int{}
-
-       // TODO: Consider caching this across builds.
-       r := io.NewSectionReader(ra, 0, size)
-
-       br := pooledBufioReader(r)
-       defer readerPool.Put(br)
-
-       cr := &countReader{br, 0}
-       tr := tar.NewReader(cr)
-       for {
-               hdr, err := tr.Next()
-               if errors.Is(err, io.EOF) {
-                       break
-               }
-               if err != nil {
-                       return nil, err
-               }
-               dir := path.Dir(hdr.Name)
-               fsys.index[hdr.Name] = len(fsys.files)
-               fsys.files = append(fsys.files, &Entry{
-                       Header: *hdr,
-                       Offset: cr.n,
-                       dir:    dir,
-                       fi:     hdr.FileInfo(),
-               })
-
-               dirCount[dir]++
-       }
-
-       // Pre-generate the results of ReadDir so we don't allocate a ton if 
fs.WalkDir calls us.
-       // TODO: Consider doing this lazily in a sync.Once the first time we 
see a ReadDir.
-       for dir, count := range dirCount {
-               fsys.dirs[dir] = make([]fs.DirEntry, 0, count)
-       }
-
-       for _, f := range fsys.files {
-               fsys.dirs[f.dir] = append(fsys.dirs[f.dir], f)
-       }
-
-       for _, files := range fsys.dirs {
-               slices.SortFunc(files, func(a, b fs.DirEntry) int {
-                       return cmp.Compare(a.Name(), b.Name())
-               })
-       }
-
-       return fsys, nil
-}
-
-func (fsys *FS) Close() error {
-       if fsys == nil {
-               return nil
-       }
-
-       closer, ok := fsys.ra.(io.Closer)
-       if !ok {
-               return nil
-       }
-
-       return closer.Close()
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.27.2/pkg/build/layers.go 
new/apko-0.27.3/pkg/build/layers.go
--- old/apko-0.27.2/pkg/build/layers.go 2025-05-05 18:56:34.000000000 +0200
+++ new/apko-0.27.3/pkg/build/layers.go 2025-05-07 20:06:32.000000000 +0200
@@ -49,6 +49,18 @@
                return nil, fmt.Errorf("building filesystem: %w", err)
        }
 
+       // We don't pass around repositories cleanly between apko and the 
library
+       // formerly known as go-apk. Instead, we write stuff to bc.fs directly
+       // and the library formerly known as go-apk reads from bc.fs to know
+       // which repositories it can fetch packages from. We need to call this
+       // to overwrite etc/apk/repositories with _only_ runtime repositories
+       // and not runtime + build repositories.
+       //
+       // TODO: Clean this up when time permits.
+       if err := bc.postBuildSetApk(ctx); err != nil {
+               return nil, err
+       }
+
        // Use our layering strategy to partition packages into a set of Budget 
groups.
        groups, err := groupByOriginAndSize(pkgs, bc.ic.Layering.Budget)
        if err != nil {

++++++ apko.obsinfo ++++++
--- /var/tmp/diff_new_pack.Whdgi8/_old  2025-05-08 18:25:04.072698808 +0200
+++ /var/tmp/diff_new_pack.Whdgi8/_new  2025-05-08 18:25:04.076698975 +0200
@@ -1,5 +1,5 @@
 name: apko
-version: 0.27.2
-mtime: 1746464194
-commit: e85ed818320f793afaff25b3e1b691f5b966be39
+version: 0.27.3
+mtime: 1746641192
+commit: 69318398424b487291ee519e29fe1c1c29e54288
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/apko/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.apko.new.30101/vendor.tar.gz differ: char 13, line 1

Reply via email to