From 2c8d21d70048b367e7f7f89289d80b6ee7c1b94c Mon Sep 17 00:00:00 2001 From: David Trudgian Date: Tue, 1 Oct 2024 14:21:29 +0100 Subject: [PATCH] feat: ReplaceImage / ReplaceIndex Implement `ReplaceImage` / `ReplaceIndex` to replace manifests selected by a provided matcher with a new Image or ImageIndex. Fixes #85 --- .../TestReplace/ReplaceImageManifest.golden | Bin 0 -> 12335 bytes .../ReplaceImageManifestList.golden | Bin 0 -> 75510 bytes .../TestReplace/ReplaceImageNoMatch.golden | Bin 0 -> 17780 bytes .../TestReplace/ReplaceIndexManifest.golden | Bin 0 -> 12575 bytes .../ReplaceIndexManifestList.golden | Bin 0 -> 75750 bytes .../TestReplace/ReplaceIndexNoMatch.golden | Bin 0 -> 18020 bytes pkg/sif/update.go | 58 ++++++++++- pkg/sif/update_test.go | 92 ++++++++++++++++++ 8 files changed, 145 insertions(+), 5 deletions(-) create mode 100644 pkg/sif/testdata/TestReplace/ReplaceImageManifest.golden create mode 100644 pkg/sif/testdata/TestReplace/ReplaceImageManifestList.golden create mode 100644 pkg/sif/testdata/TestReplace/ReplaceImageNoMatch.golden create mode 100644 pkg/sif/testdata/TestReplace/ReplaceIndexManifest.golden create mode 100644 pkg/sif/testdata/TestReplace/ReplaceIndexManifestList.golden create mode 100644 pkg/sif/testdata/TestReplace/ReplaceIndexNoMatch.golden diff --git a/pkg/sif/testdata/TestReplace/ReplaceImageManifest.golden b/pkg/sif/testdata/TestReplace/ReplaceImageManifest.golden new file mode 100644 index 0000000000000000000000000000000000000000..a65026179bd67592607ab0c1516b83697814e691 GIT binary patch literal 12335 zcmeI2YiJx*6vsCYXthe}6G6dcTCkYy_RidSE-KNYHok33sVyPiXLf3KC(KTQNr)i` zQfvtb5n}z;MoVi;QHY{wL4$>UNmLNOC_=vYp)IUdkQ8)1lbI=n7LC-x2JUco&d%J& zIp=r(u*{sz<^K8D(fvg4vyVR6y)}pQ970zQzNxzZ*G8j}OYPcp#4Xv#^~sn1dsEw) z*tzy>fU=5!BA^H;0*Zhlpa>`eihv@Z2q*%IfFf|C39ReNG@B3x^WUO&El+Ya!ir zB_b|?3msqM1xM3l*xZ3E3#k=i%!KrGAqjYEtS&e*ds#r)o1>(=Y0jyTuxnD?bU86W zP=@2$#AVE|ZLTBNkfuWo+k-noxLkJx^(=>(29_3~RCw6sO_R@R3uIYHZ4h-Pq{+=m z3P)2RWpRIN7N#S0&mvf-I;KoI5)*_RizAy8DohJ;>|kj)29l0J33WYp zwe4Ti#CvlWXefTooC(R=lEii?4KcH;L`W7!OoEzBM;N*bzgCvbsEMU;1*XE5LNbP# z!Cm19KoL*`6ahs*5l{qf z1cCbxB>#?WZ=7HF@^}lmb4~r!r$2rFMMr-7Q&YG19a@+U-g{`mnSTG^c6{W_{zHcg zd_%{}tcfW1jsdw924tSG~-&Vi-+;b=QZ7a1dyfptyy|`HXas0wu zW9g66FTVE7>?a+)Q>Q=f*%LnS$d04mj(p&mYsQZ}R(^Z!#@CnbV9!@SoSpsVLR9_X z;mLQ--M7>`ad^|4m%iGN%QYG=d_LWtgUm)X60))%2^I~8LMv%nL1UpHk>GHF5Yjg< zx19);mfIc}Q1)w45Dsgly)b<+DhDBq4M~*;m11{=^of-$l6vW-uueKTo)%Opq8h=i z2)yK>k$kdpKJ}VM`9S7%ZLFuD1vMB5v%(;VBzzy$qTzu!i+(aJ!W#5&U&>yeL*HI4 zEfNWCn#_ZfC3NN?Dh;S7LcK`m#I~8M3sbi!l!!c?BPb^sg18pPmaXdy8Mbh>p0PO2 zs`UH7_jRDCIGQE|xV+*gA|uJEvu#UPxB_*GcekNFpe^lX`$KLS9ofnyeZ-~#CUPt`IF zIHaIsC9ELlB)DX^0DzRmh=j$y5q|&@P9im~73uXBh(Rp>d7A>}r!f607q4D{G~29L YR4YpR-?lo*94e7l@6q)ZqTb%7 literal 0 HcmV?d00001 diff --git a/pkg/sif/testdata/TestReplace/ReplaceImageManifestList.golden b/pkg/sif/testdata/TestReplace/ReplaceImageManifestList.golden new file mode 100644 index 0000000000000000000000000000000000000000..0dba8c6cf1d6a3cd543b1f365dfc8147fcd0d8aa GIT binary patch literal 75510 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