From 1771b67e976e3bbddfcfd28f5c961e826f362325 Mon Sep 17 00:00:00 2001 From: vkumbhar94 Date: Sun, 30 Mar 2025 16:50:34 +0530 Subject: [PATCH] fix(skaffold.yaml): read multi-doc skaffold.yaml and push all resolve all pkgs --- deno.json | 2 +- deno.lock | 38 +++++++- fixtures/skaffold.yaml/multidoc/skaffold.yaml | 32 +++++++ src/sniff.test.ts | 10 +++ src/sniff.ts | 90 ++++++++++--------- 5 files changed, 130 insertions(+), 42 deletions(-) create mode 100644 fixtures/skaffold.yaml/multidoc/skaffold.yaml diff --git a/deno.json b/deno.json index 53089d5..f2c9b1f 100644 --- a/deno.json +++ b/deno.json @@ -11,7 +11,7 @@ "include": ["src/"] }, "imports": { - "libpkgx": "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.20.1/mod.ts", + "libpkgx": "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/mod.ts", "libpkgx/": "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.20.1/src/", "is-what": "https://deno.land/x/is_what@v4.1.15/src/index.ts", "outdent": "https://deno.land/x/outdent@v0.8.0/mod.ts" diff --git a/deno.lock b/deno.lock index 8d8f2d1..8576c98 100644 --- a/deno.lock +++ b/deno.lock @@ -161,6 +161,42 @@ "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.20.1/vendor/sqlite3@0.10.0/src/database.ts": "49569b0f279cfc3e42730002ae789a2694da74deb212e63a4b4e6640dc4d70ba", "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.20.1/vendor/sqlite3@0.10.0/src/ffi.ts": "ddffcee178b3e72c45be385efd8b4434f7196cafe45a0046ae68df9af307c7f3", "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.20.1/vendor/sqlite3@0.10.0/src/statement.ts": "2be7ffebbb72a031899dbf189972c5596aa73eabfc8a382a1bac9c5c111b0026", - "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.20.1/vendor/sqlite3@0.10.0/src/util.ts": "19815a492dd8f4c684587238dc20066de11782137de549cd4c9709d1b548247e" + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.20.1/vendor/sqlite3@0.10.0/src/util.ts": "19815a492dd8f4c684587238dc20066de11782137de549cd4c9709d1b548247e", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/mod.ts": "14a69905ffad8064444c02d146008efeb6a0ddf0fe543483839af18e01684f5a", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/deps.ts": "6941cfc0b926d256c067a0ce3546ff7bac5a043c10d64f3ab06fef99d373f49d", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useCache.ts": "9f3cc576fabae2caa6aedbf00ab12a59c732be1315471e5a475fef496c1e35ae", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useCellar.ts": "c1e264fcb732423734f8c113fc7cb80c97befe8f13ed9d24906328bc5526c72d", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useConfig.ts": "57ec8590b6d063a98932eb8f6ebb0e520c0be4e94c228f0d93ea87d01cb5c110", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useDownload.ts": "3f9133486008146809508783b977e3480d0a43238ace27f78565fb9679aa9906", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useFetch.ts": "ecf29342210b8eceed216e3bb73fcc7ea5b3ea5059686cf344ed190ca42ff682", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useInventory.ts": "f459d819ab676a7e3786522d856b7670e994e4a755b0d1609b53c8b4ebe0c959", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useMoustaches.ts": "e9166ddace759315782be0f570a4cd63c78e3b85592d59b75ddd33a0e401aa6b", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useOffLicense.ts": "1c41ef6882512b67a47fcd1d1c0ce459906d6981a59f6be86d982594a7c26058", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/usePantry.ts": "113f3ac7cb6565425eebc7f1bd1ee52217f074865b46b452db79cc72d82e4d4a", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useShellEnv.ts": "ae2388d3f15d2e03435df23a8392ace21d3d4f0c83b2575a9670ab7badc389c3", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useSync.ts": "ea605a0eaa43ab9988d36dd6150e16dd911c4be45b7b0f2add6b236636bd517c", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/hooks/useSyncCache.ts": "30891e9d923f2c2b28f1ba220923221195b8261a4aeea18ef2676d93bd5da10d", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/plumbing/hydrate.ts": "c75f151ed307532ce9c2bf62c61e6478bb1132f95a11b848e02ea2dec08c2ff3", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/plumbing/install.ts": "2a4e19fae70fef7ba0be454fd5b7efed4d7d19a5141d26d3b26124ab792007ed", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/plumbing/link.ts": "0ed6198de737ebeab1704d375c732c9264fb0cfa7f2aedddb90f51d100174a73", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/plumbing/resolve.ts": "9425e0d201ee440a8dc011940046f0bb6d94aa29cd738e1a8c39ca86e55aad41", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/plumbing/which.ts": "f918211e561e56aabf6909e06fa10fa3be06ffebd9e7cc28ce57efef4faff27d", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/porcelain/install.ts": "85caffe3842ab63bf6d59c6c5c9fb93fbc95a0d5652488d93b95d865722b67b9", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/porcelain/run.ts": "55cc9124dca732e2f5557a8c451daebecb109c86b2f4347fa1e433aedf35ab5a", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/types.ts": "dc1a4e6458d11454282f832909838c56f786a26eed54fb8ab5675d6691ebf534", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/Path.ts": "3ce5a1559219adeb65f7df18e2c29c26782a614bdaf635abe1d72a2ce92d2c94", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/error.ts": "b0d3130f5cdfc0cc8ea10f93fea0e7e97d4473ddc9bc527156b0fcf24c7b939c", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/flock.ts": "5fd77f6b53c3a90888cf20a7726e9047aad2c766e4ec2fbf7cf2f916b98d99a4", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/host.ts": "3b9e0d4cb05f9bde0ee8bcb0f8557b0a339f6ef56dfb1f08b2cfa63b44db91ee", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/misc.ts": "a4d7944da07066e5dd2ef289af436dc7f1032aed4272811e9b19ceeed60b8491", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/pkg.ts": "e737cc9a98cd6a2797668c6ef856128692290256a521cc3906bd538410925451", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/read-lines.ts": "6d947ccd5f8e48701ed9c5402b6ac5144df3fce60d666f19b6506edbc36c8367", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/src/utils/semver.ts": "84884902ec2dcc1d538960dc274a69931723d66252e0531759d2a43df2406b20", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/vendor/sqlite3@0.10.0/mod.ts": "7ce0a19f9cea3475cc94750ece61c20d857f1c3a279ad38cd029a3f8d9b7b03e", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/vendor/sqlite3@0.10.0/src/constants.ts": "85fd27aa6e199093f25f5f437052e16fd0e0870b96ca9b24a98e04ddc8b7d006", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/vendor/sqlite3@0.10.0/src/database.ts": "49569b0f279cfc3e42730002ae789a2694da74deb212e63a4b4e6640dc4d70ba", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/vendor/sqlite3@0.10.0/src/ffi.ts": "ddffcee178b3e72c45be385efd8b4434f7196cafe45a0046ae68df9af307c7f3", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/vendor/sqlite3@0.10.0/src/statement.ts": "2be7ffebbb72a031899dbf189972c5596aa73eabfc8a382a1bac9c5c111b0026", + "https://raw.githubusercontent.com/pkgxdev/libpkgx/refs/tags/v0.21.0/vendor/sqlite3@0.10.0/src/util.ts": "19815a492dd8f4c684587238dc20066de11782137de549cd4c9709d1b548247e" } } diff --git a/fixtures/skaffold.yaml/multidoc/skaffold.yaml b/fixtures/skaffold.yaml/multidoc/skaffold.yaml new file mode 100644 index 0000000..9c78ea6 --- /dev/null +++ b/fixtures/skaffold.yaml/multidoc/skaffold.yaml @@ -0,0 +1,32 @@ +apiVersion: v4beta7 +kind: Config +metadata: + name: skaffold-fixture +build: + local: + useDockerCLI: true +deploy: + kubeContext: minikube + docker: + images: [] +manifests: + kpt: [] + kustomize: {} + helm: + releases: [] + +profiles: + - name: skaffold-fixture +--- +apiVersion: v4beta7 +kind: Config +metadata: + name: skaffold-fixture +deploy: + kubectl: {} + helm: {} +manifests: + kustomize: {} + +profiles: + - name: skaffold-fixture \ No newline at end of file diff --git a/src/sniff.test.ts b/src/sniff.test.ts index ff85ff5..047996a 100644 --- a/src/sniff.test.ts +++ b/src/sniff.test.ts @@ -221,6 +221,16 @@ Deno.test("devenv.ts", async (runner) => { "kpt.dev", "kubernetes.io/kustomize", ], + [ + "skaffold.yaml/multidoc/skaffold.yaml", + "skaffold.dev", + "kubernetes.io/kubectl", + "helm.sh", + "kpt.dev", + "kubernetes.io/minikube", + "docker.com/cli", + "kubernetes.io/kustomize", + ], ]; for (const [keyfile, ...deps] of keyfiles) { diff --git a/src/sniff.ts b/src/sniff.ts index fba124e..f9242a9 100644 --- a/src/sniff.ts +++ b/src/sniff.ts @@ -260,47 +260,57 @@ export default async function (dir: Path) { } async function skaffold_yaml(path: Path) { - const yaml = await path.readYAML(); - if (!isPlainObject(yaml)) return; - if ( - yaml.build?.local?.useDockerCLI?.toString() === true || - yaml.deploy?.docker - ) { - pkgs.push({ - project: "docker.com/cli", - constraint: new semver.Range(`*`), - }); - } - if (yaml.deploy?.kubectl) { - pkgs.push({ - project: "kubernetes.io/kubectl", - constraint: new semver.Range(`*`), - }); - } - if (yaml.deploy?.kubeContext?.match("minikube")) { - pkgs.push({ - project: "kubernetes.io/minikube", - constraint: new semver.Range(`*`), - }); - } - if (yaml.deploy?.helm || yaml.manifests?.helm) { - pkgs.push({ - project: "helm.sh", - constraint: new semver.Range(`*`), - }); - } - if (yaml.deploy?.kpt || yaml.manifests?.kpt) { - pkgs.push({ - project: "kpt.dev", - constraint: new semver.Range(`*`), - }); - } - if (yaml.manifests?.kustomize) { - pkgs.push({ - project: "kubernetes.io/kustomize", - constraint: new semver.Range(`*`), - }); + const yamls = await path.readYAMLAll() as unknown as any[]; + const lpkgs: PackageRequirement[] = []; + + for (const yaml of yamls) { + if (!isPlainObject(yaml)) continue; + + if ( + yaml.build?.local?.useDockerCLI?.toString() === "true" || + yaml.deploy?.docker + ) { + lpkgs.push({ + project: "docker.com/cli", + constraint: new semver.Range(`*`), + }); + } + if (yaml.deploy?.kubectl) { + lpkgs.push({ + project: "kubernetes.io/kubectl", + constraint: new semver.Range(`*`), + }); + } + if (yaml.deploy?.kubeContext?.match("minikube")) { + lpkgs.push({ + project: "kubernetes.io/minikube", + constraint: new semver.Range(`*`), + }); + } + if (yaml.deploy?.helm || yaml.manifests?.helm) { + lpkgs.push({ + project: "helm.sh", + constraint: new semver.Range(`*`), + }); + } + if (yaml.deploy?.kpt || yaml.manifests?.kpt) { + lpkgs.push({ + project: "kpt.dev", + constraint: new semver.Range(`*`), + }); + } + if (yaml.manifests?.kustomize) { + lpkgs.push({ + project: "kubernetes.io/kustomize", + constraint: new semver.Range(`*`), + }); + } } + + const deduped = Array.from( + new Map(lpkgs.map(pkg => [pkg.project, pkg])).values() + ); + pkgs.push(...deduped) } async function github_actions(path: Path) {