diff --git a/.flox/env/manifest.lock b/.flox/env/manifest.lock index 72a5a2de0dc..693d10423e4 100644 --- a/.flox/env/manifest.lock +++ b/.flox/env/manifest.lock @@ -1,68 +1,649 @@ { "lockfile-version": 1, "manifest": { - "schema-version": "1.11.0", + "schema-version": "1.14.0", "install": { + "actionlint": { + "pkg-path": "actionlint", + "pkg-group": "actionlint", + "version": "1.7.12" + }, + "diffutils": { + "pkg-path": "diffutils" + }, + "findutils": { + "pkg-path": "findutils" + }, + "gnumake": { + "pkg-path": "gnumake" + }, "gnutar": { "pkg-path": "gnutar" }, + "gum": { + "pkg-path": "gum" + }, + "helm-docs": { + "pkg-path": "helm-docs", + "pkg-group": "helm-docs", + "version": "1.14.2" + }, + "kubeconform": { + "pkg-path": "kubeconform", + "pkg-group": "kubeconform", + "version": "0.6.7" + }, + "kubernetes-helm": { + "pkg-path": "kubernetes-helm", + "pkg-group": "kubernetes-helm", + "version": "4.2.3" + }, + "nodejs": { + "pkg-path": "nodejs_22", + "pkg-group": "node", + "version": "22.23.2" + }, "open-policy-agent": { "pkg-path": "open-policy-agent", - "pkg-group": "tools", + "pkg-group": "open-policy-agent", "version": "1.8.0" }, "osv-scanner": { "pkg-path": "osv-scanner", - "pkg-group": "tools" + "pkg-group": "osv-scanner", + "version": "2.3.3" }, - "python3": { - "pkg-path": "python3" + "shellcheck": { + "pkg-path": "shellcheck", + "pkg-group": "actionlint", + "version": "0.11.0" }, "uv": { "pkg-path": "uv", - "version": "~0.9" + "pkg-group": "uv", + "version": "0.9.14" + }, + "yq-go": { + "pkg-path": "yq-go" } }, - "hook": {}, - "profile": {}, - "options": {} + "vars": { + "ALIGN": "center", + "BORDER": "double", + "BORDER_FOREGROUND": "#76B900", + "COREPACK_HOME": "${FLOX_ENV_CACHE}/corepack", + "COREPACK_SHIMS": "${FLOX_ENV_CACHE}/corepack/bin", + "FOREGROUND": "#76B900", + "GUM_LOG_MESSAGE_FOREGROUND": "#76B900", + "MARGIN": "1 2", + "PADDING": "1 2", + "PNPM_VERSION": "10.34.5", + "UV_CACHE_DIR": "${FLOX_ENV_CACHE}/uv-cache", + "UV_MANAGED_PYTHON": "1", + "UV_PYTHON": "3.12", + "UV_PYTHON_INSTALL_DIR": "${FLOX_ENV_CACHE}/python", + "UV_VENV_SEED": "1", + "WIDTH": "50" + }, + "hook": { + "on-activate": " set -euo pipefail\n\n export VIRTUAL_ENV=\"$PWD/.venv\"\n export PATH=\"$VIRTUAL_ENV/bin:$PATH\"\n\n if uv sync --frozen --all-packages --check; then\n return 0\n fi\n\n echo \"Python environment is out of sync; synchronizing...\"\n uv sync --frozen --all-packages\n\n set -euo pipefail\n mkdir -p \"$COREPACK_SHIMS\"\n if ! test -x \"$COREPACK_SHIMS/pnpm\" || ! \"$COREPACK_SHIMS/pnpm\" --version | grep -Fxq \"$PNPM_VERSION\"; then\n corepack install --global \"pnpm@$PNPM_VERSION\"\n corepack enable --install-directory \"$COREPACK_SHIMS\"\n fi\n export PATH=\"$COREPACK_SHIMS:$PATH\"\n" + }, + "profile": { + "common": " export PATH=\"$COREPACK_SHIMS:$PATH\"\n\n test -f .git/hooks/pre-commit || pre-commit install\n\n gum style \"NeMo Platform\"\n" + }, + "options": { + "systems": [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-linux" + ] + } }, "packages": [ { - "attr_path": "open-policy-agent", + "attr_path": "actionlint", "broken": false, - "derivation": "/nix/store/x6pblvx2vksr0j7x1fn64za35ydpna5m-open-policy-agent-1.8.0.drv", - "description": "General-purpose policy engine", - "install_id": "open-policy-agent", + "derivation": "/nix/store/aqhd6izblgch4grnjs8mk0cjnz4dk28m-actionlint-1.7.12.drv", + "description": "Static checker for GitHub Actions workflow files", + "install_id": "actionlint", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "actionlint-1.7.12", + "pname": "actionlint", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:54:50.166513Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.7.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/l88fm1fh4i2nv2f3nx1gsyf92g4fma0i-actionlint-1.7.12" + }, + "system": "aarch64-darwin", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "actionlint", + "broken": false, + "derivation": "/nix/store/86vnhwncf9gafha0hmsxaij4cg7s8qwc-actionlint-1.7.12.drv", + "description": "Static checker for GitHub Actions workflow files", + "install_id": "actionlint", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "actionlint-1.7.12", + "pname": "actionlint", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:08.683543Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.7.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/ng89mfyl4bkykgnvqcnzl2pyisybhkzd-actionlint-1.7.12" + }, + "system": "aarch64-linux", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "actionlint", + "broken": false, + "derivation": "/nix/store/04jlrff52fd02k094cv0vyvsl27yj0iq-actionlint-1.7.12.drv", + "description": "Static checker for GitHub Actions workflow files", + "install_id": "actionlint", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "actionlint-1.7.12", + "pname": "actionlint", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:23.436596Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.7.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/gsa888rwb1bbicfw87y6bsvbfcxcl073-actionlint-1.7.12" + }, + "system": "x86_64-linux", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "shellcheck", + "broken": false, + "derivation": "/nix/store/isq6nc6kjss0wbhghdmiw2fr36fi70r1-shellcheck-0.11.0.drv", + "description": "Shell script analysis tool", + "install_id": "shellcheck", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "shellcheck-0.11.0", + "pname": "shellcheck", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:56:41.028386Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "0.11.0", + "outputs_to_install": [ + "bin", + "doc", + "man" + ], + "outputs": { + "bin": "/nix/store/bpnm0dhzawhjfwf2ckrrcdlfvdsw95ph-shellcheck-0.11.0-bin", + "doc": "/nix/store/qp04zg74kp3mwh04c018g25fbm3frpai-shellcheck-0.11.0-doc", + "man": "/nix/store/khakyjg0yw4sys480wm881nvqysz3d5v-shellcheck-0.11.0-man", + "out": "/nix/store/fy98rkywpazyxvk8h7gp0fv6rql89g52-shellcheck-0.11.0" + }, + "system": "aarch64-darwin", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "shellcheck", + "broken": false, + "derivation": "/nix/store/41dxgbbdhnzjiph0qv6nyhqljb69k15n-shellcheck-0.11.0.drv", + "description": "Shell script analysis tool", + "install_id": "shellcheck", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "shellcheck-0.11.0", + "pname": "shellcheck", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:26:34.827878Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "0.11.0", + "outputs_to_install": [ + "bin", + "doc", + "man" + ], + "outputs": { + "bin": "/nix/store/rhw0nfijvbqxcal3d8qb5l29pvzh4r9j-shellcheck-0.11.0-bin", + "doc": "/nix/store/gb8cs9ywrvlfhbj0gc8v3a5g3qwiwkyj-shellcheck-0.11.0-doc", + "man": "/nix/store/9j5y0hx7rpcnw62gxqiljz29dw7czr2q-shellcheck-0.11.0-man", + "out": "/nix/store/9lckd2wgr97qga5sdzhfza0yi36ndrhd-shellcheck-0.11.0" + }, + "system": "aarch64-linux", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "shellcheck", + "broken": false, + "derivation": "/nix/store/qxapd8dlf851c9kq0g5lb5cam0hm0yn0-shellcheck-0.11.0.drv", + "description": "Shell script analysis tool", + "install_id": "shellcheck", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "shellcheck-0.11.0", + "pname": "shellcheck", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T06:00:56.199596Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "0.11.0", + "outputs_to_install": [ + "bin", + "doc", + "man" + ], + "outputs": { + "bin": "/nix/store/zmhypak4grhrashgl04sxkga3drsm2nm-shellcheck-0.11.0-bin", + "doc": "/nix/store/fhd1gdv56sjbmh3is1y4w1hd6pn45xfk-shellcheck-0.11.0-doc", + "man": "/nix/store/h8552kbc86rddm2skwiaqvmqp2ff1jci-shellcheck-0.11.0-man", + "out": "/nix/store/mzfla28ba85v252h0gya6is1pn45bl6a-shellcheck-0.11.0" + }, + "system": "x86_64-linux", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "helm-docs", + "broken": false, + "derivation": "/nix/store/y91aqsk2pipz2vx62rdxbs5zdra3xxry-helm-docs-1.14.2.drv", + "description": "Tool for automatically generating markdown documentation for Helm charts", + "install_id": "helm-docs", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "helm-docs-1.14.2", + "pname": "helm-docs", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:55:06.299662Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.14.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/0i1kal44yygaycd4s287hxsj1prg35a3-helm-docs-1.14.2" + }, + "system": "aarch64-darwin", + "group": "helm-docs", + "priority": 5 + }, + { + "attr_path": "helm-docs", + "broken": false, + "derivation": "/nix/store/bqlkqal7i3n8ysx86a4464qpsjy8wsgw-helm-docs-1.14.2.drv", + "description": "Tool for automatically generating markdown documentation for Helm charts", + "install_id": "helm-docs", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "helm-docs-1.14.2", + "pname": "helm-docs", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:28.058381Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.14.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/p2cvfmi5h311fg503nq0fi2dmihsgbcp-helm-docs-1.14.2" + }, + "system": "aarch64-linux", + "group": "helm-docs", + "priority": 5 + }, + { + "attr_path": "helm-docs", + "broken": false, + "derivation": "/nix/store/4mp8lw4dhpk6s09y63w61p122daba7ml-helm-docs-1.14.2.drv", + "description": "Tool for automatically generating markdown documentation for Helm charts", + "install_id": "helm-docs", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "helm-docs-1.14.2", + "pname": "helm-docs", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:43.732862Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.14.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/68b6nv2gc1j7g6js3wj2plj2dsvx2vnx-helm-docs-1.14.2" + }, + "system": "x86_64-linux", + "group": "helm-docs", + "priority": 5 + }, + { + "attr_path": "kubeconform", + "broken": false, + "derivation": "/nix/store/9s4snw6sv1rxkppb2vh77mfx8y8w3dk0-kubeconform-0.6.7.drv", + "description": "FAST Kubernetes manifests validator, with support for Custom Resources!", + "install_id": "kubeconform", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", - "name": "open-policy-agent-1.8.0", - "pname": "open-policy-agent", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", - "rev_count": 866707, - "rev_date": "2025-09-24T05:06:22Z", - "scrape_date": "2025-09-26T03:42:58.943863Z", + "locked_url": "https://github.com/flox/nixpkgs?rev=979daf34c8cacebcd917d540070b52a3c2b9b16e", + "name": "kubeconform-0.6.7", + "pname": "kubeconform", + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", + "rev_count": 793735, + "rev_date": "2025-05-04T03:14:55Z", + "scrape_date": "2025-05-05T04:19:29.834897Z", "stabilities": [ - "unstable", "staging", - "stable" + "unstable" ], "unfree": false, - "version": "1.8.0", + "version": "0.6.7", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/28vvl32vygjxdalfprxjqvnwpbsp2j7i-open-policy-agent-1.8.0" + "out": "/nix/store/39nyhvxm0fj2bqpy1hb0wp1mj6drgw6k-kubeconform-0.6.7" + }, + "system": "aarch64-darwin", + "group": "kubeconform", + "priority": 5 + }, + { + "attr_path": "kubeconform", + "broken": false, + "derivation": "/nix/store/lq4z544sl9s1g771v8si3pa54zk39x4h-kubeconform-0.6.7.drv", + "description": "FAST Kubernetes manifests validator, with support for Custom Resources!", + "install_id": "kubeconform", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=979daf34c8cacebcd917d540070b52a3c2b9b16e", + "name": "kubeconform-0.6.7", + "pname": "kubeconform", + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", + "rev_count": 793735, + "rev_date": "2025-05-04T03:14:55Z", + "scrape_date": "2025-05-05T04:37:22.795766Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.6.7", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/dl336sgplkl83x7hgq9vchnwia92rllx-kubeconform-0.6.7" + }, + "system": "aarch64-linux", + "group": "kubeconform", + "priority": 5 + }, + { + "attr_path": "kubeconform", + "broken": false, + "derivation": "/nix/store/7sn96dgwl0lkghawlg88557cr9nr88y4-kubeconform-0.6.7.drv", + "description": "FAST Kubernetes manifests validator, with support for Custom Resources!", + "install_id": "kubeconform", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=979daf34c8cacebcd917d540070b52a3c2b9b16e", + "name": "kubeconform-0.6.7", + "pname": "kubeconform", + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", + "rev_count": 793735, + "rev_date": "2025-05-04T03:14:55Z", + "scrape_date": "2025-05-05T05:15:57.921277Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.6.7", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/8cmvaf9s4h36rz1464kwwn5a9pifgf56-kubeconform-0.6.7" + }, + "system": "x86_64-linux", + "group": "kubeconform", + "priority": 5 + }, + { + "attr_path": "kubernetes-helm", + "broken": false, + "derivation": "/nix/store/h27s9phbjyisaq14bdrh1hc6v1bmh1kh-kubernetes-helm-4.2.3.drv", + "description": "Package manager for kubernetes", + "install_id": "kubernetes-helm", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "kubernetes-helm-4.2.3", + "pname": "kubernetes-helm", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:55:08.760008Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.2.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/zxlrdn6fsss4s2i496np7kdrwy92261j-kubernetes-helm-4.2.3" + }, + "system": "aarch64-darwin", + "group": "kubernetes-helm", + "priority": 5 + }, + { + "attr_path": "kubernetes-helm", + "broken": false, + "derivation": "/nix/store/w61scb5zj8c4dmckwlmrxf8m2ma263fl-kubernetes-helm-4.2.3.drv", + "description": "Package manager for kubernetes", + "install_id": "kubernetes-helm", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "kubernetes-helm-4.2.3", + "pname": "kubernetes-helm", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:32.211235Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.2.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/3m7a0rmsr6k5hs0xl2ym6kiv4iqgwypj-kubernetes-helm-4.2.3" + }, + "system": "aarch64-linux", + "group": "kubernetes-helm", + "priority": 5 + }, + { + "attr_path": "kubernetes-helm", + "broken": false, + "derivation": "/nix/store/qkhmnhnv2j5zql42fylj3vs4h8f4p35z-kubernetes-helm-4.2.3.drv", + "description": "Package manager for kubernetes", + "install_id": "kubernetes-helm", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "kubernetes-helm-4.2.3", + "pname": "kubernetes-helm", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:48.065333Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.2.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/wkb6xckn077grj4jqb6z6wgmwzj7g1xr-kubernetes-helm-4.2.3" + }, + "system": "x86_64-linux", + "group": "kubernetes-helm", + "priority": 5 + }, + { + "attr_path": "nodejs_22", + "broken": false, + "derivation": "/nix/store/98iw9769gchj4vs8vkfvkdnxczaarami-nodejs-22.23.2.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "nodejs-22.23.2", + "pname": "nodejs_22", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:55:15.826463Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "22.23.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/s0qzknz77k3lzikgywx2piilfp8w0581-nodejs-22.23.2" }, "system": "aarch64-darwin", - "group": "tools", + "group": "node", + "priority": 5 + }, + { + "attr_path": "nodejs_22", + "broken": false, + "derivation": "/nix/store/i9h6nligglciwssrc0zdri9zji0hx20c-nodejs-22.23.2.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "nodejs-22.23.2", + "pname": "nodejs_22", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:46.217099Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "22.23.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/i7dq81ramvcyrzasgv8qbf07rgfiqiai-nodejs-22.23.2" + }, + "system": "aarch64-linux", + "group": "node", + "priority": 5 + }, + { + "attr_path": "nodejs_22", + "broken": false, + "derivation": "/nix/store/1x2rjyk2j93jmsl6myl8nrv7b95viv21-nodejs-22.23.2.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "nodejs-22.23.2", + "pname": "nodejs_22", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:59:03.273842Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "22.23.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/3vm4j8im8bzdal3dsgmhv9gb5kvanbp1-nodejs-22.23.2" + }, + "system": "x86_64-linux", + "group": "node", "priority": 5 }, { "attr_path": "open-policy-agent", "broken": false, - "derivation": "/nix/store/07baqszwy9ldr487q9z6svwcsn7d73px-open-policy-agent-1.8.0.drv", + "derivation": "/nix/store/x6pblvx2vksr0j7x1fn64za35ydpna5m-open-policy-agent-1.8.0.drv", "description": "General-purpose policy engine", "install_id": "open-policy-agent", "license": "Apache-2.0", @@ -72,11 +653,11 @@ "rev": "e643668fd71b949c53f8626614b21ff71a07379d", "rev_count": 866707, "rev_date": "2025-09-24T05:06:22Z", - "scrape_date": "2025-09-26T04:12:13.305775Z", + "scrape_date": "2025-09-26T03:42:58.943863Z", "stabilities": [ - "unstable", + "stable", "staging", - "stable" + "unstable" ], "unfree": false, "version": "1.8.0", @@ -84,16 +665,16 @@ "out" ], "outputs": { - "out": "/nix/store/i98fklmmf7xcqlmm1hdzkcw4wvyf92my-open-policy-agent-1.8.0" + "out": "/nix/store/28vvl32vygjxdalfprxjqvnwpbsp2j7i-open-policy-agent-1.8.0" }, - "system": "aarch64-linux", - "group": "tools", + "system": "aarch64-darwin", + "group": "open-policy-agent", "priority": 5 }, { "attr_path": "open-policy-agent", "broken": false, - "derivation": "/nix/store/x7smjn0d496p62ckf6jcvp0i4qb9gzqv-open-policy-agent-1.8.0.drv", + "derivation": "/nix/store/07baqszwy9ldr487q9z6svwcsn7d73px-open-policy-agent-1.8.0.drv", "description": "General-purpose policy engine", "install_id": "open-policy-agent", "license": "Apache-2.0", @@ -103,11 +684,11 @@ "rev": "e643668fd71b949c53f8626614b21ff71a07379d", "rev_count": 866707, "rev_date": "2025-09-24T05:06:22Z", - "scrape_date": "2025-09-26T04:39:57.100020Z", + "scrape_date": "2025-09-26T04:12:13.305775Z", "stabilities": [ - "unstable", + "stable", "staging", - "stable" + "unstable" ], "unfree": false, "version": "1.8.0", @@ -115,10 +696,10 @@ "out" ], "outputs": { - "out": "/nix/store/mby5spqsadnhrbdc20h01b5fbf7938vl-open-policy-agent-1.8.0" + "out": "/nix/store/i98fklmmf7xcqlmm1hdzkcw4wvyf92my-open-policy-agent-1.8.0" }, - "system": "x86_64-darwin", - "group": "tools", + "system": "aarch64-linux", + "group": "open-policy-agent", "priority": 5 }, { @@ -136,9 +717,9 @@ "rev_date": "2025-09-24T05:06:22Z", "scrape_date": "2025-09-26T05:11:19.422384Z", "stabilities": [ - "unstable", + "stable", "staging", - "stable" + "unstable" ], "unfree": false, "version": "1.8.0", @@ -149,528 +730,982 @@ "out": "/nix/store/v3nqh59l69bpq739pa2amj427h1isc5d-open-policy-agent-1.8.0" }, "system": "x86_64-linux", - "group": "tools", + "group": "open-policy-agent", "priority": 5 }, { "attr_path": "osv-scanner", "broken": false, - "derivation": "/nix/store/2ddz5rl2cg9nfpy2465fbwcrpd34l1yh-osv-scanner-2.2.2.drv", + "derivation": "/nix/store/0csc0zgfhcfsx2l3nzclxz2bqssyja5b-osv-scanner-2.3.3.drv", "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", "install_id": "osv-scanner", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", - "name": "osv-scanner-2.2.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "osv-scanner-2.3.3", "pname": "osv-scanner", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", - "rev_count": 866707, - "rev_date": "2025-09-24T05:06:22Z", - "scrape_date": "2025-09-26T03:42:59.393464Z", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:55:20.984870Z", "stabilities": [ - "unstable", - "staging", - "stable" + "unstable" ], "unfree": false, - "version": "2.2.2", + "version": "2.3.3", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/26wh6j075c2ja715gin101n3vic20g92-osv-scanner-2.2.2" + "out": "/nix/store/i3w3vaymszfimwcj21j4y9k43ijblg0p-osv-scanner-2.3.3" }, "system": "aarch64-darwin", - "group": "tools", + "group": "osv-scanner", "priority": 5 }, { "attr_path": "osv-scanner", "broken": false, - "derivation": "/nix/store/2mv1gpg13bjisqdr1jiybpr5y2kql4hv-osv-scanner-2.2.2.drv", + "derivation": "/nix/store/2rar9pkzk4s60n1rpgidqs2lzarwr81n-osv-scanner-2.3.3.drv", "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", "install_id": "osv-scanner", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", - "name": "osv-scanner-2.2.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "osv-scanner-2.3.3", "pname": "osv-scanner", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", - "rev_count": 866707, - "rev_date": "2025-09-24T05:06:22Z", - "scrape_date": "2025-09-26T04:12:14.182935Z", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:53.780562Z", "stabilities": [ - "unstable", - "staging", - "stable" + "unstable" ], "unfree": false, - "version": "2.2.2", + "version": "2.3.3", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/3bn0dv4wba1jkz3x61jxfyavk75yj8yp-osv-scanner-2.2.2" + "out": "/nix/store/vqbgw2a9wcanqmxzykjn9y9z7z2n7n1y-osv-scanner-2.3.3" }, "system": "aarch64-linux", - "group": "tools", + "group": "osv-scanner", "priority": 5 }, { "attr_path": "osv-scanner", "broken": false, - "derivation": "/nix/store/a9d5nlnbvl0yaw75x9dr1p753dqwl7ss-osv-scanner-2.2.2.drv", + "derivation": "/nix/store/b1wxrwhwz7xi87706w2zc9girrrbbqla-osv-scanner-2.3.3.drv", "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", "install_id": "osv-scanner", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", - "name": "osv-scanner-2.2.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "osv-scanner-2.3.3", "pname": "osv-scanner", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", - "rev_count": 866707, - "rev_date": "2025-09-24T05:06:22Z", - "scrape_date": "2025-09-26T04:39:57.558517Z", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:59:10.848863Z", "stabilities": [ - "unstable", - "staging", - "stable" + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/khy3lac3zv5sasphfxzihpgrksrax41r-osv-scanner-2.3.3" + }, + "system": "x86_64-linux", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/7lxvn9pyy7nz2s8qj0bdzqjj31nph3mw-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:54:50.934972Z", + "stabilities": [ + "unstable" ], "unfree": false, - "version": "2.2.2", + "version": "3.12", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/mivgza1fjrcg1mzlp4868lfg8a1fr051-osv-scanner-2.2.2" + "info": "/nix/store/vjyzq43a5nqpma7wj8lysi9ylpprh8km-diffutils-3.12-info", + "out": "/nix/store/l0ww0x9n8h84hybx2m6ahg3xlqxy8858-diffutils-3.12" }, - "system": "x86_64-darwin", - "group": "tools", + "system": "aarch64-darwin", + "group": "toplevel", "priority": 5 }, { - "attr_path": "osv-scanner", + "attr_path": "diffutils", "broken": false, - "derivation": "/nix/store/hhrm279m6xlr10hh4xhxmhznqnb1kvp4-osv-scanner-2.2.2.drv", - "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", - "install_id": "osv-scanner", - "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", - "name": "osv-scanner-2.2.2", - "pname": "osv-scanner", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", - "rev_count": 866707, - "rev_date": "2025-09-24T05:06:22Z", - "scrape_date": "2025-09-26T05:11:20.395916Z", + "derivation": "/nix/store/bbak4vwxqpsnp3lj04a4137702fw75j0-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:09.611958Z", "stabilities": [ - "unstable", - "staging", - "stable" + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/q2kfvac14x3w38v0ddznfnp8kcl43hyq-diffutils-3.12-info", + "out": "/nix/store/kwzgx6v7i5d9vz7hh3jfy5jf6kmlr3v2-diffutils-3.12" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/x3xgjkib7gpi191y501yy1gskawlzdhm-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:24.484311Z", + "stabilities": [ + "unstable" ], "unfree": false, - "version": "2.2.2", + "version": "3.12", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/dwj2i6qhz1pv0331h704swc656fhhbjs-osv-scanner-2.2.2" + "info": "/nix/store/7mqzvypci85daks0fhkz3hqbn0vd53np-diffutils-3.12-info", + "out": "/nix/store/38r3gawmdqhmbgxipqy39rw1csszfnl9-diffutils-3.12" }, "system": "x86_64-linux", - "group": "tools", + "group": "toplevel", "priority": 5 }, { - "attr_path": "gnutar", + "attr_path": "findutils", "broken": false, - "derivation": "/nix/store/srhxmpzbdjkzx49sxfv4gdgik8hjpb3l-gnutar-1.35.drv", - "description": "GNU implementation of the `tar' archiver", - "install_id": "gnutar", + "derivation": "/nix/store/7i8kp9zi61nff679dm6vnlp5qs58nap7-findutils-4.11.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "gnutar-1.35", - "pname": "gnutar", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T04:35:55.625459Z", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "findutils-4.11.0", + "pname": "findutils", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:54:51.293705Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, - "version": "1.35", + "version": "4.11.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/n2njn4zy6if2z4xrwa3wkrm27n004s25-findutils-4.11.0-info", + "locate": "/nix/store/vhswp9x19iavfzsln67grwgifc64j43n-findutils-4.11.0-locate", + "out": "/nix/store/p9fdf1h73x6wwiy52vw69jxiq14i7dcn-findutils-4.11.0" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/7s3pmn6pjjp2sslq5p0llarhb993ljgj-findutils-4.11.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "findutils-4.11.0", + "pname": "findutils", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:10.140515Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.11.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/nbv2c5jrq1x8gihsqpnixdzsmqvqibnh-findutils-4.11.0-info", + "locate": "/nix/store/jxmivgd8wqgp5xy9n7x7aaqi48sq68yx-findutils-4.11.0-locate", + "out": "/nix/store/2mj9fbglfqvfizz274hrd8bgvlwv1n0y-findutils-4.11.0" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/9r7d46zm511wiswj14h7p54c9krvhyb4-findutils-4.11.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "findutils-4.11.0", + "pname": "findutils", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:25.078827Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.11.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/7743lb28jvffmjxk6vdd9hkq4jvcgwi1-findutils-4.11.0-info", + "locate": "/nix/store/04j3c6c4lyk57alhv5hzl4q32vv897pv-findutils-4.11.0-locate", + "out": "/nix/store/fcqbwp5hx5wh3lzf0457wmf0divknz7y-findutils-4.11.0" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/qxcs4yj3adil6cjc4hhhmyfkiarhr2pn-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:54:51.732254Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.4.1", "outputs_to_install": [ - "out", - "out", + "man", "out" ], "outputs": { - "info": "/nix/store/vmm74jf3h3h4w8kz0bnk6vgn0ixyfyyk-gnutar-1.35-info", - "out": "/nix/store/4jhz97mvip61gn146avpanb60glazgz4-gnutar-1.35" + "doc": "/nix/store/qpb2zaah86v6z1b0f40y90m6kf42hy3i-gnumake-4.4.1-doc", + "info": "/nix/store/dw5r16j2bsfpznbnzk3bbgxi3czy0rvn-gnumake-4.4.1-info", + "man": "/nix/store/av26gjivcsjdhq68pg6wb1l9f0ixakbv-gnumake-4.4.1-man", + "out": "/nix/store/rhw2r5z1rbp9msj03kf8i4rq1hygnm0f-gnumake-4.4.1" }, "system": "aarch64-darwin", "group": "toplevel", "priority": 5 }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/vjf8rbgy9y4pdxnjwjrk6vvf3xl9ri05-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:11.345598Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "debug": "/nix/store/fc4qn0vswxpj2qmprk0p0nvill18z7hb-gnumake-4.4.1-debug", + "doc": "/nix/store/ffz5ypa2rwi78c6c9syncnpwhhdhaqr1-gnumake-4.4.1-doc", + "info": "/nix/store/kj5yr5dpvzij2x83ig9y0bp3dbvgsyic-gnumake-4.4.1-info", + "man": "/nix/store/fa0k4ps7a35yxf902shfzz8gmd8a9x2g-gnumake-4.4.1-man", + "out": "/nix/store/wadg45zgfyi9a4dcm5fy3qvlas76cr2z-gnumake-4.4.1" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/hzkdjha05s9h4zsqax3q475mzl8vxb7w-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:26.401299Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "debug": "/nix/store/1a2srjw3r7sif10sh4zl3k0zin0f09xm-gnumake-4.4.1-debug", + "doc": "/nix/store/15y7ym18qm8dk03b7fnpc9bvccccm33q-gnumake-4.4.1-doc", + "info": "/nix/store/p18m4dcs9wylvddhprcczaaqqns2sb1d-gnumake-4.4.1-info", + "man": "/nix/store/8ayxbdiddzn28damz1f9gb0asx1j409b-gnumake-4.4.1-man", + "out": "/nix/store/r60jpv4jr5h50f0rj1k5adlwic2vgldn-gnumake-4.4.1" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, { "attr_path": "gnutar", "broken": false, - "derivation": "/nix/store/9hzp7c9vng5dc9x747bspkvbmcsab11g-gnutar-1.35.drv", - "description": "GNU implementation of the `tar' archiver", + "derivation": "/nix/store/bivi3p32c14xpkwsyhx2hfdk0vjymdps-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", "install_id": "gnutar", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", "name": "gnutar-1.35", "pname": "gnutar", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T05:05:24.904605Z", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:54:51.740324Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, "version": "1.35", "outputs_to_install": [ - "out", - "out", - "out", "out" ], "outputs": { - "info": "/nix/store/chjh1afhyda3vli9lwnfaiz39pb7n39p-gnutar-1.35-info", - "out": "/nix/store/p83mlijcdg429fj17frdcxv7jj9jnsqv-gnutar-1.35" + "info": "/nix/store/zagqcasfksiqzdwfag0k0kj9nq03nkwy-gnutar-1.35-info", + "out": "/nix/store/92ly70drj8f24zadkk8jl4ld19rvkdcg-gnutar-1.35" }, - "system": "aarch64-linux", + "system": "aarch64-darwin", "group": "toplevel", "priority": 5 }, { "attr_path": "gnutar", "broken": false, - "derivation": "/nix/store/rg7qpn90a3ijqj1i2fq9m0jy6sqy0jq6-gnutar-1.35.drv", - "description": "GNU implementation of the `tar' archiver", + "derivation": "/nix/store/jznds1mr4cgqbch5b1dnvq4f3jbr0m7x-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", "install_id": "gnutar", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", "name": "gnutar-1.35", "pname": "gnutar", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T05:33:33.880310Z", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:11.359922Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, "version": "1.35", "outputs_to_install": [ - "out", "out" ], "outputs": { - "info": "/nix/store/kyc01mpv5sizdndi7w7b3ks2gq9s6bcz-gnutar-1.35-info", - "out": "/nix/store/s3pyki0jss8gkxa935xwc4hzh93ly2z6-gnutar-1.35" + "info": "/nix/store/q19mmghrf5nx584lrq71kaw7a4rji0l8-gnutar-1.35-info", + "out": "/nix/store/zlh7j5jw0knf0famz6xl5lh022y9wfk2-gnutar-1.35" }, - "system": "x86_64-darwin", + "system": "aarch64-linux", "group": "toplevel", "priority": 5 }, { "attr_path": "gnutar", "broken": false, - "derivation": "/nix/store/zs2p03ld9jhdx4wrdi8qk9adl9crkb3v-gnutar-1.35.drv", - "description": "GNU implementation of the `tar' archiver", + "derivation": "/nix/store/77j40lplqzr9ic7djj5vfarsg0vbx8j7-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", "install_id": "gnutar", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", "name": "gnutar-1.35", "pname": "gnutar", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T06:05:47.954880Z", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:26.416164Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, "version": "1.35", "outputs_to_install": [ - "out", - "out", - "out", - "out", - "out", - "out", - "out", "out" ], "outputs": { - "info": "/nix/store/ax6j94gib9m7ni9pfv3qmm5l8fi1hlz2-gnutar-1.35-info", - "out": "/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35" + "info": "/nix/store/41qpycy19bvckfx0i1dnz1c6r3qfhfw1-gnutar-1.35-info", + "out": "/nix/store/3cp4kw4376flmhlxxi4w2jkancv3irp8-gnutar-1.35" }, "system": "x86_64-linux", "group": "toplevel", "priority": 5 }, { - "attr_path": "python3", + "attr_path": "gum", "broken": false, - "derivation": "/nix/store/2f9f2hcw24ncf86i63v9apf9s0k2fgyz-python3-3.13.11.drv", - "description": "High-level dynamically-typed programming language", - "install_id": "python3", - "license": "Python-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "python3-3.13.11", - "pname": "python3", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T04:36:33.164594Z", + "derivation": "/nix/store/qbnsslqpy1phwqia82fnkhnqkz0rlgx3-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:54:51.971342Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, - "version": "3.13.11", + "version": "0.17.0", "outputs_to_install": [ - "out", - "out", - "out", - "out", - "out", "out" ], "outputs": { - "out": "/nix/store/qzgxkh5rnlswnj5ywhag0djwvn83kr3r-python3-3.13.11" + "out": "/nix/store/hzl05lvbcfa8g936qwx356dp9a0qs4xr-gum-0.17.0" }, "system": "aarch64-darwin", "group": "toplevel", "priority": 5 }, { - "attr_path": "python3", + "attr_path": "gum", "broken": false, - "derivation": "/nix/store/cadmaxzh2h1i0id6zfa5zq0mjpr9qqda-python3-3.13.11.drv", - "description": "High-level dynamically-typed programming language", - "install_id": "python3", - "license": "Python-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "python3-3.13.11", - "pname": "python3", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T05:06:19.681973Z", + "derivation": "/nix/store/73w98v13q7hia83p3km11n725fwfnc35-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:11.746504Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, - "version": "3.13.11", + "version": "0.17.0", "outputs_to_install": [ - "out", - "out", - "out", - "out", "out" ], "outputs": { - "debug": "/nix/store/bzb0vriv1a1kaz9zv6lzv62zkcvvm88r-python3-3.13.11-debug", - "out": "/nix/store/ygzfhw5nxrn7qqfqmz2s9p6cikcjqqkh-python3-3.13.11" + "out": "/nix/store/jz1z0g2q1vd3fk2q729c90jg1akjn8gz-gum-0.17.0" }, "system": "aarch64-linux", "group": "toplevel", "priority": 5 }, { - "attr_path": "python3", + "attr_path": "gum", "broken": false, - "derivation": "/nix/store/dk525f5vnsqf4c5m90rhm2hazww34xmx-python3-3.13.11.drv", - "description": "High-level dynamically-typed programming language", - "install_id": "python3", - "license": "Python-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "python3-3.13.11", - "pname": "python3", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T05:34:11.664697Z", + "derivation": "/nix/store/6i3fykxwsrm3srr5l343wcvwiyy9drdx-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:26.827422Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, - "version": "3.13.11", + "version": "0.17.0", "outputs_to_install": [ - "out", - "out", "out" ], "outputs": { - "out": "/nix/store/5wy2gaa1kaskq3j63zwl1jw6a0ffllx5-python3-3.13.11" + "out": "/nix/store/gbylyxgkksvzijjsamymlfifn27131jq-gum-0.17.0" }, - "system": "x86_64-darwin", + "system": "x86_64-linux", "group": "toplevel", "priority": 5 }, { - "attr_path": "python3", + "attr_path": "yq-go", "broken": false, - "derivation": "/nix/store/bmlsz2bfdg16dr10k8rm3hmkq09h06nr-python3-3.13.11.drv", - "description": "High-level dynamically-typed programming language", - "install_id": "python3", - "license": "Python-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "python3-3.13.11", - "pname": "python3", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T06:06:47.427720Z", + "derivation": "/nix/store/1vp45f21wks9v3lizarl7a9sjhak9lf0-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:57:42.736898Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, - "version": "3.13.11", + "version": "4.53.3", "outputs_to_install": [ - "out", - "out", - "out", - "out", - "out", - "out", "out" ], "outputs": { - "debug": "/nix/store/gvhg8py0jr9v83ysqb86rr2s1yidppca-python3-3.13.11-debug", - "out": "/nix/store/slhpx9glq7vl99bwi93bgrhn3syv98s1-python3-3.13.11" + "out": "/nix/store/ka1kvl4b0zhcz16kb6amn86qjjqglw3z-yq-go-4.53.3" }, - "system": "x86_64-linux", + "system": "aarch64-darwin", "group": "toplevel", "priority": 5 }, { - "attr_path": "uv", + "attr_path": "yq-go", "broken": false, - "derivation": "/nix/store/v9837hla896n3pjv9hmx3ii4sk30p0r9-uv-0.9.28.drv", - "description": "Extremely fast Python package installer and resolver, written in Rust", - "install_id": "uv", - "license": "[ Apache-2.0, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "uv-0.9.28", - "pname": "uv", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T04:38:13.753987Z", + "derivation": "/nix/store/wc0dhpccp56xhf3ps639l6727a0qvsxb-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:27:56.770711Z", "stabilities": [ - "unstable", - "staging" + "unstable" ], "unfree": false, - "version": "0.9.28", + "version": "4.53.3", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/rnci0wgac6r47gr09bhb6x5fyc507i43-uv-0.9.28" + "out": "/nix/store/f3mpc2r89qqvqz9sya611fr5lf4qawb5-yq-go-4.53.3" }, - "system": "aarch64-darwin", + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/lwg011rsxbv2yki46cqxhcsda6nk52gf-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T06:02:21.179190Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/pyy2agrvaazs49lkpn75dibpvz45pwkm-yq-go-4.53.3" + }, + "system": "x86_64-linux", "group": "toplevel", "priority": 5 }, { "attr_path": "uv", "broken": false, - "derivation": "/nix/store/dlp3p1pzksliq0pli84ff5ifbvh13211-uv-0.9.28.drv", + "derivation": "/nix/store/5xdn711qjgkkady64ywrxq6mhbi9nz9h-uv-0.9.14.drv", "description": "Extremely fast Python package installer and resolver, written in Rust", "install_id": "uv", "license": "[ Apache-2.0, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "uv-0.9.28", + "locked_url": "https://github.com/flox/nixpkgs?rev=418468ac9527e799809c900eda37cbff999199b6", + "name": "uv-0.9.14", "pname": "uv", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T05:08:27.505844Z", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "rev_count": 905402, + "rev_date": "2025-12-02T09:27:49Z", + "scrape_date": "2025-12-04T02:56:01.692648Z", "stabilities": [ - "unstable", - "staging" + "staging", + "unstable" ], "unfree": false, - "version": "0.9.28", + "version": "0.9.14", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/r6g6avldk8dlj30dmk2p2971akkmw9h3-uv-0.9.28" + "out": "/nix/store/zbg4ksfcdcmqbw8x0f0xlla16g2lhxgy-uv-0.9.14" }, - "system": "aarch64-linux", - "group": "toplevel", + "system": "aarch64-darwin", + "group": "uv", "priority": 5 }, { "attr_path": "uv", "broken": false, - "derivation": "/nix/store/1dxxxb7ia28b4fcvn00vvc2xmal3kamm-uv-0.9.28.drv", + "derivation": "/nix/store/8z6dv3xfq2mc9hw87w37sw2hs1jlchyg-uv-0.9.14.drv", "description": "Extremely fast Python package installer and resolver, written in Rust", "install_id": "uv", "license": "[ Apache-2.0, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "uv-0.9.28", + "locked_url": "https://github.com/flox/nixpkgs?rev=418468ac9527e799809c900eda37cbff999199b6", + "name": "uv-0.9.14", "pname": "uv", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T05:35:52.717277Z", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "rev_count": 905402, + "rev_date": "2025-12-02T09:27:49Z", + "scrape_date": "2025-12-04T03:05:28.971221Z", "stabilities": [ - "unstable", - "staging" + "staging", + "unstable" ], "unfree": false, - "version": "0.9.28", + "version": "0.9.14", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/vrzvbvds4vvj5989w838m562vavqzd4w-uv-0.9.28" + "out": "/nix/store/2k74mawzpjihb1jpyxlmbhaz7wflbhyb-uv-0.9.14" }, - "system": "x86_64-darwin", - "group": "toplevel", + "system": "aarch64-linux", + "group": "uv", "priority": 5 }, { "attr_path": "uv", "broken": false, - "derivation": "/nix/store/b88x7x44g3gj9mfw2ql683lfcxqjil95-uv-0.9.28.drv", + "derivation": "/nix/store/16j8ajlaksqd7pv1pnp12v22bb79wsl8-uv-0.9.14.drv", "description": "Extremely fast Python package installer and resolver, written in Rust", "install_id": "uv", "license": "[ Apache-2.0, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "name": "uv-0.9.28", + "locked_url": "https://github.com/flox/nixpkgs?rev=418468ac9527e799809c900eda37cbff999199b6", + "name": "uv-0.9.14", "pname": "uv", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", - "rev_count": 940249, - "rev_date": "2026-02-04T09:32:58Z", - "scrape_date": "2026-02-06T06:09:00.313627Z", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "rev_count": 905402, + "rev_date": "2025-12-02T09:27:49Z", + "scrape_date": "2025-12-04T03:23:20.097970Z", "stabilities": [ - "unstable", - "staging" + "staging", + "unstable" ], "unfree": false, - "version": "0.9.28", + "version": "0.9.14", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/jddcqyx0099mynb7gxr0dd66hkpqqs2r-uv-0.9.28" + "out": "/nix/store/483pf97g9l0l3rh0988ghffcppm4001a-uv-0.9.14" }, "system": "x86_64-linux", - "group": "toplevel", + "group": "uv", "priority": 5 } - ] + ], + "compose": { + "composer": { + "schema-version": "1.14.0", + "profile": { + "common": " export PATH=\"$COREPACK_SHIMS:$PATH\"\n\n test -f .git/hooks/pre-commit || pre-commit install\n\n gum style \"NeMo Platform\"\n" + }, + "options": { + "systems": [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-linux" + ] + }, + "include": { + "environments": [ + { + "dir": "tools/common" + }, + { + "dir": "tools/helm" + }, + { + "dir": "tools/actionlint" + }, + { + "dir": "tools/python" + }, + { + "dir": "tools/nodejs" + }, + { + "dir": "tools/osv-scanner" + }, + { + "dir": "tools/open-policy-agent" + } + ] + } + }, + "include": [ + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "diffutils": { + "pkg-path": "diffutils" + }, + "findutils": { + "pkg-path": "findutils" + }, + "gnumake": { + "pkg-path": "gnumake" + }, + "gnutar": { + "pkg-path": "gnutar" + }, + "gum": { + "pkg-path": "gum" + }, + "yq-go": { + "pkg-path": "yq-go" + } + }, + "vars": { + "ALIGN": "center", + "BORDER": "double", + "BORDER_FOREGROUND": "#76B900", + "FOREGROUND": "#76B900", + "GUM_LOG_MESSAGE_FOREGROUND": "#76B900", + "MARGIN": "1 2", + "PADDING": "1 2", + "WIDTH": "50" + }, + "options": {} + }, + "name": "common", + "descriptor": { + "dir": "tools/common" + } + }, + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "helm-docs": { + "pkg-path": "helm-docs", + "pkg-group": "helm-docs", + "version": "1.14.2" + }, + "kubeconform": { + "pkg-path": "kubeconform", + "pkg-group": "kubeconform", + "version": "0.6.7" + }, + "kubernetes-helm": { + "pkg-path": "kubernetes-helm", + "pkg-group": "kubernetes-helm", + "version": "4.2.3" + } + }, + "options": { + "systems": [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-linux" + ] + } + }, + "name": "helm", + "descriptor": { + "dir": "tools/helm" + } + }, + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "actionlint": { + "pkg-path": "actionlint", + "pkg-group": "actionlint", + "version": "1.7.12" + }, + "shellcheck": { + "pkg-path": "shellcheck", + "pkg-group": "actionlint", + "version": "0.11.0" + } + }, + "options": {} + }, + "name": "actionlint", + "descriptor": { + "dir": "tools/actionlint" + } + }, + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "uv": { + "pkg-path": "uv", + "pkg-group": "uv", + "version": "0.9.14" + } + }, + "vars": { + "UV_CACHE_DIR": "${FLOX_ENV_CACHE}/uv-cache", + "UV_MANAGED_PYTHON": "1", + "UV_PYTHON": "3.12", + "UV_PYTHON_INSTALL_DIR": "${FLOX_ENV_CACHE}/python", + "UV_VENV_SEED": "1" + }, + "hook": { + "on-activate": " set -euo pipefail\n\n export VIRTUAL_ENV=\"$PWD/.venv\"\n export PATH=\"$VIRTUAL_ENV/bin:$PATH\"\n\n if uv sync --frozen --all-packages --check; then\n return 0\n fi\n\n echo \"Python environment is out of sync; synchronizing...\"\n uv sync --frozen --all-packages\n" + }, + "options": {} + }, + "name": "nemo-platform-python", + "descriptor": { + "dir": "tools/python" + } + }, + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "nodejs": { + "pkg-path": "nodejs_22", + "pkg-group": "node", + "version": "22.23.2" + } + }, + "vars": { + "COREPACK_HOME": "${FLOX_ENV_CACHE}/corepack", + "COREPACK_SHIMS": "${FLOX_ENV_CACHE}/corepack/bin", + "PNPM_VERSION": "10.34.5" + }, + "hook": { + "on-activate": " set -euo pipefail\n mkdir -p \"$COREPACK_SHIMS\"\n if ! test -x \"$COREPACK_SHIMS/pnpm\" || ! \"$COREPACK_SHIMS/pnpm\" --version | grep -Fxq \"$PNPM_VERSION\"; then\n corepack install --global \"pnpm@$PNPM_VERSION\"\n corepack enable --install-directory \"$COREPACK_SHIMS\"\n fi\n export PATH=\"$COREPACK_SHIMS:$PATH\"\n" + }, + "options": { + "systems": [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-linux" + ] + } + }, + "name": "nemo-platform-nodejs", + "descriptor": { + "dir": "tools/nodejs" + } + }, + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "osv-scanner": { + "pkg-path": "osv-scanner", + "pkg-group": "osv-scanner", + "version": "2.3.3" + } + }, + "options": {} + }, + "name": "osv-scanner", + "descriptor": { + "dir": "tools/osv-scanner" + } + }, + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "open-policy-agent": { + "pkg-path": "open-policy-agent", + "pkg-group": "open-policy-agent", + "version": "1.8.0" + } + }, + "options": {} + }, + "name": "open-policy-agent", + "descriptor": { + "dir": "tools/open-policy-agent" + } + } + ], + "warnings": [ + { + "warning": { + "Overriding": [ + "options", + "systems" + ] + }, + "higher_priority_name": "nemo-platform-nodejs" + }, + { + "warning": { + "Overriding": [ + "options", + "systems" + ] + }, + "higher_priority_name": "Current manifest" + } + ] + } } diff --git a/.flox/env/manifest.toml b/.flox/env/manifest.toml index bb5382538ba..57e97781d90 100644 --- a/.flox/env/manifest.toml +++ b/.flox/env/manifest.toml @@ -1,26 +1,24 @@ -schema-version = "1.11.0" +schema-version = "1.14.0" +[profile] +common = ''' + export PATH="$COREPACK_SHIMS:$PATH" -[install] -# Python -python3.pkg-path = "python3" -uv.pkg-path = "uv" -uv.version = "~0.9" - -# Utilities -gnutar.pkg-path = "gnutar" + test -f .git/hooks/pre-commit || pre-commit install -# Tools -open-policy-agent.pkg-path = "open-policy-agent" -open-policy-agent.version = "1.8.0" -open-policy-agent.pkg-group = "tools" -osv-scanner.pkg-path = "osv-scanner" -osv-scanner.pkg-group = "tools" + gum style "NeMo Platform" +''' -[vars] -[hook] -[profile] -[services] [include] -[build] +environments = [ + { dir = "tools/common" }, + { dir = "tools/helm" }, + { dir = "tools/actionlint" }, + { dir = "tools/python" }, + { dir = "tools/nodejs" }, + { dir = "tools/osv-scanner" }, + { dir = "tools/open-policy-agent" }, +] + [options] +systems = ["aarch64-darwin", "aarch64-linux", "x86_64-linux"] diff --git a/.github/actions/build-nemo-platform-wheel/action.yaml b/.github/actions/build-nemo-platform-wheel/action.yaml index bef4631bf42..4fb5ef1132a 100644 --- a/.github/actions/build-nemo-platform-wheel/action.yaml +++ b/.github/actions/build-nemo-platform-wheel/action.yaml @@ -73,9 +73,9 @@ runs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: ${{ inputs.python-version }} enable-cache: true - version-file: ${{ inputs.source-root }}/pyproject.toml cache-dependency-glob: ${{ inputs.source-root }}/uv.lock # Resolve early, before pnpm/node setup, so bad cadence/label/timestamp @@ -121,7 +121,7 @@ runs: if: inputs.package == 'nemo-platform' uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: ${{ inputs.source-root }}/.nvmrc - name: Install pnpm via Corepack if: inputs.package == 'nemo-platform' @@ -163,7 +163,7 @@ runs: if: inputs.package == 'nemo-platform' uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: ${{ inputs.source-root }}/.nvmrc cache: pnpm cache-dependency-path: ${{ inputs.source-root }}/${{ inputs.studio-web-root }}/pnpm-lock.yaml diff --git a/.github/actions/build-policy-wasm/action.yaml b/.github/actions/build-policy-wasm/action.yaml index d7a44538bc2..f41d59d2935 100644 --- a/.github/actions/build-policy-wasm/action.yaml +++ b/.github/actions/build-policy-wasm/action.yaml @@ -1,42 +1,19 @@ name: Build OPA policy WASM description: > - Installs OPA and builds the authorization policy WASM asset at + Installs Flox, activates the OPA environment, and builds the authorization + policy WASM asset at services/core/auth/src/nmp/core/auth/assets/policy.wasm. Assumes the - repository has already been checked out. This is used in two locations, so - keeping it here prevents version drift, etc. + repository has already been checked out. runs: using: composite steps: - # build_policy_wasm.sh already prefers a cached binary at .cache/opa// before reaching - # out to openpolicyagent.org, but nothing ever populated that directory in CI, so every run - # depended on that download — and it has repeatedly failed, taking a required job down with it. - # Restoring the cache means the fetch is only needed the first time a pinned version is seen. - - name: Resolve pinned OPA version - id: opa - shell: bash - env: - REPO_ROOT: ${{ github.action_path }}/../../.. - run: | - # Parse rather than source: the script builds the WASM on execution, so sourcing it here - # would do the work twice (and before the cache is restored). - version="$(sed -n 's/^OPA_VERSION="\${OPA_VERSION:-\([^}]*\)}"/\1/p' "${REPO_ROOT}/script/build_policy_wasm.sh" | head -1)" - if [ -z "${version}" ]; then - echo "Could not parse the pinned OPA version from script/build_policy_wasm.sh" >&2 - echo "If the OPA_VERSION line moved, update this step — a wrong cache key silently disables caching." >&2 - exit 1 - fi - echo "version=${version}" >> "${GITHUB_OUTPUT}" - echo "Pinned OPA version: ${version}" - - - name: Cache the pinned OPA binary - uses: actions/cache@v4 + - name: Install Flox + uses: flox/install-flox-action@c94e7e1ab56ae14fe98bae4fd84384fd135f0c2a # v2.4.0 with: - path: .cache/opa - key: opa-${{ runner.os }}-${{ runner.arch }}-${{ steps.opa.outputs.version }} - + disable-metrics: "true" - name: Build policy WASM - shell: bash - env: - REPO_ROOT: ${{ github.action_path }}/../../.. - run: "${REPO_ROOT}/script/build_policy_wasm.sh" + uses: flox/activate-action@410568008895a0f2e09a34bbd9523f8ef1f2d292 # v1.1.0 + with: + dir: ./tools/open-policy-agent + command: ./script/build_policy_wasm.sh diff --git a/.github/actions/changes/action.yaml b/.github/actions/changes/action.yaml index 89ebd575527..b5b111428a8 100644 --- a/.github/actions/changes/action.yaml +++ b/.github/actions/changes/action.yaml @@ -89,6 +89,10 @@ runs: - 'pyproject.toml' - 'uv.lock' - '.pre-commit-config.yaml' + - '.flox/**' + - 'tools/common/**' + - 'tools/osv-scanner/**' + - 'tools/python/**' fabric: - 'packages/nemo_evaluator_sdk/src/nemo_evaluator_sdk/agent_eval/runtimes/fabric/**' - 'packages/nemo_evaluator_sdk/tests/agent_eval/test_fabric_*.py' @@ -104,6 +108,8 @@ runs: - 'tools/**' web-studio: - 'web/**' + - '.nvmrc' + - 'tools/nodejs/**' docker: - 'docker-bake.hcl' - 'docker/**' @@ -114,6 +120,7 @@ runs: helm: - 'k8s/**' - 'tools/lint/lint-helm.sh' + - 'tools/helm/**' - '.github/workflows/ci.yaml' - '.github/actions/changes/action.yaml' - '.pre-commit-config.yaml' diff --git a/.github/actions/insights-testbed-prep/action.yml b/.github/actions/insights-testbed-prep/action.yml index 587cef001ec..53f6455b2de 100644 --- a/.github/actions/insights-testbed-prep/action.yml +++ b/.github/actions/insights-testbed-prep/action.yml @@ -13,6 +13,7 @@ runs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} working-directory: nemo-platform - name: Sync + judge repoint shell: bash diff --git a/.github/actions/setup-kind-cluster/action.yaml b/.github/actions/setup-kind-cluster/action.yaml index 3c9b207e01e..225a9ac2143 100644 --- a/.github/actions/setup-kind-cluster/action.yaml +++ b/.github/actions/setup-kind-cluster/action.yaml @@ -104,9 +104,9 @@ runs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.13" enable-cache: true - version-file: pyproject.toml cache-dependency-glob: uv.lock - name: Start kind cluster diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4e45c75c05e..0965d1779ad 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,10 +30,10 @@ concurrency: cancel-in-progress: ${{ github.event_name == 'pull_request' }} env: - # Jobs here provision their own toolchain (astral-sh/setup-uv reads the same - # required-version out of pyproject.toml, actions/setup-node pins Node), so - # the Makefile should call those rather than a mise it never installed. - NMP_SKIP_MISE: 1 + # Keep the CI uv binary aligned with the Flox development environment. + UV_VERSION: "0.9.14" + # Jobs here provision their own toolchain, so Make bypasses Flox activation. + TOOLCHAIN: system jobs: changes: @@ -70,20 +70,15 @@ jobs: uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - - name: Install actionlint - shell: bash - run: | - mkdir -p "${RUNNER_TEMP}/actionlint" - curl -fsSL \ - -o "${RUNNER_TEMP}/actionlint.tar.gz" \ - "https://github.com/rhysd/actionlint/releases/download/v1.7.12/actionlint_1.7.12_linux_amd64.tar.gz" - echo "8aca8db96f1b94770f1b0d72b6dddcb1ebb8123cb3712530b08cc387b349a3d8 ${RUNNER_TEMP}/actionlint.tar.gz" \ - | sha256sum -c - - tar -xzf "${RUNNER_TEMP}/actionlint.tar.gz" -C "${RUNNER_TEMP}/actionlint" + - name: Install Flox + uses: flox/install-flox-action@c94e7e1ab56ae14fe98bae4fd84384fd135f0c2a # v2.4.0 + with: + disable-metrics: "true" - name: Lint GitHub workflows and actions - shell: bash - run: | - "${RUNNER_TEMP}/actionlint/actionlint" + uses: flox/activate-action@410568008895a0f2e09a34bbd9523f8ef1f2d292 # v1.1.0 + with: + dir: ./tools/actionlint + command: actionlint ngc-metadata-test: name: Test NGC metadata sync @@ -101,7 +96,7 @@ jobs: - name: Set up uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: - version-file: pyproject.toml + version: ${{ env.UV_VERSION }} enable-cache: false - name: Run NGC metadata unit tests run: uv run --no-cache .github/scripts/tests/test_ngc_metadata.py @@ -118,7 +113,7 @@ jobs: - name: Install platform uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: - version: "0.9.14" + version: ${{ env.UV_VERSION }} enable-cache: false python-version: "3.12" @@ -128,8 +123,8 @@ jobs: - name: Check lock with platform uv run: bash script/uv-lock.sh --check - uv-latest-compatibility: - name: Check latest uv compatibility + uv-compatibility: + name: Check configured uv compatibility runs-on: ubuntu-latest steps: - name: Checkout code @@ -137,16 +132,17 @@ jobs: with: persist-credentials: false - - name: Install latest uv + - name: Install configured uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} enable-cache: false python-version: "3.12" - name: Show uv version run: uv --version - - name: Check sync with latest uv + - name: Check sync with configured uv run: uv sync --frozen --all-packages docker-bake-graph: @@ -287,7 +283,7 @@ jobs: if: steps.fastembed-cache.outputs.cache-hit != 'true' uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: - version-file: pyproject.toml + version: ${{ env.UV_VERSION }} cache-dependency-glob: uv.lock - name: Populate fastembed model cache @@ -594,41 +590,20 @@ jobs: env: HELM_FOLDER: k8s/helm HELM_RELEASE_NAME: nemo-platform - KUBECONFORM_VERSION: v0.6.7 steps: - name: Checkout code uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - - name: Install Helm - uses: azure/setup-helm@dda3372f752e03dde6b3237bc9431cdc2f7a02a2 # v5.0.0 - - name: Install kubeconform - shell: bash - run: | - set -euo pipefail - - mkdir -p "${RUNNER_TEMP}/kubeconform" - kubeconform_archive="kubeconform-linux-amd64.tar.gz" - curl -fsSL \ - -o "${RUNNER_TEMP}/kubeconform.tar.gz" \ - "https://github.com/yannh/kubeconform/releases/download/${KUBECONFORM_VERSION}/${kubeconform_archive}" - curl -fsSL \ - -o "${RUNNER_TEMP}/kubeconform.CHECKSUMS" \ - "https://github.com/yannh/kubeconform/releases/download/${KUBECONFORM_VERSION}/CHECKSUMS" - grep " ${kubeconform_archive}$" "${RUNNER_TEMP}/kubeconform.CHECKSUMS" \ - | sed "s# ${kubeconform_archive}# ${RUNNER_TEMP}/kubeconform.tar.gz#" \ - | sha256sum -c - - tar -xzf "${RUNNER_TEMP}/kubeconform.tar.gz" -C "${RUNNER_TEMP}/kubeconform" kubeconform - chmod +x "${RUNNER_TEMP}/kubeconform/kubeconform" - echo "${RUNNER_TEMP}/kubeconform" >> "${GITHUB_PATH}" - - name: Add NVIDIA Helm repo - shell: bash - run: | - helm repo add nvidia https://helm.ngc.nvidia.com/nvidia - helm repo update + - name: Install Flox + uses: flox/install-flox-action@c94e7e1ab56ae14fe98bae4fd84384fd135f0c2a # v2.4.0 + with: + disable-metrics: "true" - name: Lint and validate Helm chart - shell: bash - run: tools/lint/lint-helm.sh + uses: flox/activate-action@410568008895a0f2e09a34bbd9523f8ef1f2d292 # v1.1.0 + with: + dir: ./tools/helm + command: tools/lint/lint-helm.sh - name: Upload Helm lint artifacts if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 @@ -781,35 +756,41 @@ jobs: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false + - name: Install flox + uses: flox/install-flox-action@c94e7e1ab56ae14fe98bae4fd84384fd135f0c2a # v2.4.0 + with: + disable-metrics: "true" - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} enable-cache: true python-version: "3.12" cache-dependency-glob: uv.lock - - name: Check uv lockfile - run: uv lock --check - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + - name: Install nodejs + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: '22' + node-version-file: .nvmrc - name: Install pnpm via corepack - run: npm i -g corepack@0.31.0 && corepack enable pnpm + run: | + npm i -g corepack@0.31.0 + corepack enable pnpm - name: Install web dependencies working-directory: web run: pnpm install --frozen-lockfile - - name: Install scanner dependencies - shell: bash - run: script/install_osv_scanner.sh - - name: Run lint - run: tools/lint/lint-all.sh - shell: bash + - name: Run Lint + uses: flox/activate-action@410568008895a0f2e09a34bbd9523f8ef1f2d292 # v1.1.0 env: CI_PROJECT_DIR: ${{ github.workspace }} + with: + dir: ./tools/lint + command: | + tools/lint/lint-all.sh - name: Upload lint artifacts if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: lint-artifacts + name: Lint Artifacts retention-days: 7 path: | third_party/ @@ -856,6 +837,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.12" enable-cache: true cache-dependency-glob: uv.lock @@ -888,6 +870,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.12" enable-cache: true cache-dependency-glob: uv.lock @@ -951,6 +934,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} # Must satisfy the workspace floor in the root pyproject.toml (`requires-python`), or # `uv sync` refuses the interpreter outright. python-version: ${{ matrix.python-version }} @@ -1019,6 +1003,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.12" enable-cache: true cache-dependency-glob: uv.lock @@ -1074,6 +1059,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.12" enable-cache: true cache-dependency-glob: uv.lock @@ -1146,6 +1132,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.12" enable-cache: true cache-dependency-glob: uv.lock @@ -1290,6 +1277,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: ${{ matrix.python-version }} enable-cache: true cache-dependency-glob: uv.lock @@ -1381,6 +1369,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.13" enable-cache: true cache-dependency-glob: uv.lock @@ -1445,6 +1434,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} python-version: "3.13" enable-cache: true cache-dependency-glob: uv.lock @@ -1504,7 +1494,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: .nvmrc - name: Install pnpm via corepack run: npm i -g corepack@0.31.0 && corepack enable pnpm - name: Install dependencies @@ -1537,7 +1527,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: .nvmrc - name: Install pnpm via corepack run: npm i -g corepack@0.31.0 && corepack enable pnpm - name: Install dependencies @@ -1570,7 +1560,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: .nvmrc - name: Install pnpm via corepack run: npm i -g corepack@0.31.0 && corepack enable pnpm - name: Install dependencies @@ -1597,7 +1587,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: .nvmrc - name: Install pnpm via corepack run: npm i -g corepack@0.31.0 && corepack enable pnpm - name: Install dependencies @@ -1625,7 +1615,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: .nvmrc - name: Install pnpm via corepack run: npm i -g corepack@0.31.0 && corepack enable pnpm - name: Install dependencies @@ -1656,7 +1646,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: .nvmrc - name: Install pnpm via corepack run: npm i -g corepack@0.31.0 && corepack enable pnpm - name: Install dependencies @@ -1678,7 +1668,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: "22" + node-version-file: .nvmrc - name: Install pnpm via corepack run: npm i -g corepack@0.31.0 && corepack enable pnpm - name: Install dependencies @@ -1723,6 +1713,7 @@ jobs: # unsupported version. uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} enable-cache: true cache-dependency-glob: uv.lock - name: Run OpenShell backend unit tests @@ -1763,10 +1754,8 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: - # Point setup-uv at the nemo-platform checkout so it picks up the - # repo's `required-version` constraint from pyproject.toml. Other - # jobs check out into the workspace root and get this implicitly. working-directory: nemo-platform + version: ${{ env.UV_VERSION }} python-version: "3.12" enable-cache: true cache-dependency-glob: uv.lock @@ -1908,20 +1897,23 @@ jobs: path: summary.md opa-policy-test: + name: Test OPA Policy runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - - name: Install OPA 1.8.0 - run: | - curl -L -o opa https://github.com/open-policy-agent/opa/releases/download/v1.8.0/opa_linux_amd64_static - chmod +x opa - ./opa version - - name: Run test - run: | - ./opa test services/core/auth/src/nmp/core/auth/app/policies services/core/auth/src/nmp/core/auth/app/policy_tests services/core/auth/src/nmp/core/auth/assets/static-authz.yaml -v + - name: Install Deps + uses: flox/install-flox-action@c94e7e1ab56ae14fe98bae4fd84384fd135f0c2a # v2.4.0 + with: + disable-metrics: "true" + - name: Policy Test + uses: flox/activate-action@410568008895a0f2e09a34bbd9523f8ef1f2d292 # v1.1.0 + with: + dir: ./tools/open-policy-agent + command: | + opa test services/core/auth/src/nmp/core/auth/app/policies services/core/auth/src/nmp/core/auth/app/policy_tests services/core/auth/src/nmp/core/auth/assets/static-authz.yaml -v require-nvskills: runs-on: ubuntu-latest @@ -1981,7 +1973,7 @@ jobs: - changes - actionlint - uv-lock - - uv-latest-compatibility + - uv-compatibility - docker-bake-graph - build-cpu-smoke-images - kind-cpu-smoke diff --git a/.github/workflows/insights-testbed.yml b/.github/workflows/insights-testbed.yml index af538600b25..732cd168cec 100644 --- a/.github/workflows/insights-testbed.yml +++ b/.github/workflows/insights-testbed.yml @@ -37,6 +37,7 @@ on: - ".github/actions/insights-testbed-prep/**" env: + UV_VERSION: "0.9.14" TAU2_JUDGE_LLM: ${{ vars.TAU2_JUDGE_LLM || 'openai/nvidia/nvidia/evals-nemotron-ultra' }} TAU2_BENCH_REF: 8ebb7499622fc2be9b9d510d6f7a7653461f4f29 TESTBED_STATE_REPO: ${{ vars.TESTBED_STATE_REPO || 'NVIDIA-dev/NeMo-Optimizer' }} @@ -51,6 +52,7 @@ jobs: with: { path: nemo-platform, persist-credentials: false } - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} working-directory: nemo-platform - name: Run plugin tests working-directory: nemo-platform @@ -66,6 +68,7 @@ jobs: with: { path: nemo-platform, persist-credentials: false } - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} working-directory: nemo-platform - id: resolve env: diff --git a/.github/workflows/ngc-metadata.yaml b/.github/workflows/ngc-metadata.yaml index 447a275552a..623c2afd1f3 100644 --- a/.github/workflows/ngc-metadata.yaml +++ b/.github/workflows/ngc-metadata.yaml @@ -10,6 +10,9 @@ on: permissions: contents: read +env: + UV_VERSION: "0.9.14" + jobs: sync: runs-on: ubuntu-latest @@ -29,6 +32,7 @@ jobs: - name: Set up uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 with: + version: ${{ env.UV_VERSION }} enable-cache: false - name: Sync NGC metadata diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 77466cf8ccd..7599868583e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -67,9 +67,9 @@ repos: - repo: https://github.com/norwoodj/helm-docs # The container itself is 'latest' no matter what here - rev: "v1.14.2" + rev: v1.14.2 hooks: - - id: helm-docs-container + - id: helm-docs files: | (?x)^( k8s/helm/values\.yaml| @@ -96,6 +96,24 @@ repos: files: 'pyproject\.toml$' pass_filenames: false verbose: true + - id: uv-version-consistency + name: Check CI and Flox uv versions + entry: ./tools/lint/check-uv-version.sh + language: system + files: '^(\.github/workflows/.*\.ya?ml|tools/python/\.flox/env/manifest\.toml)$' + pass_filenames: false + - id: python-version-consistency + name: Check Make and Flox Python versions + entry: ./tools/lint/check-python-version.sh + language: system + files: '^(Makefile|tools/python/\.flox/env/manifest\.toml)$' + pass_filenames: false + - id: node-version-consistency + name: Check Node.js and pnpm versions + entry: ./tools/lint/check-node-version.sh + language: system + files: '^(\.nvmrc|web/package\.json|tools/nodejs/\.flox/env/manifest\.toml|\.github/workflows/ci\.yaml|\.github/actions/build-nemo-platform-wheel/action\.yaml)$' + pass_filenames: false - id: copyright-fix name: Fix copyright headers entry: uv run script/copyright_fixer.py @@ -148,3 +166,13 @@ repos: - id: check-merge-conflict args: - --assume-in-merge +# Flox + - repo: local + hooks: + - id: flox-lock-consistency + name: Check Flox locks + entry: ./tools/lint/check-flox-locks.sh + language: system + files: '(^\.flox/env/manifest\.toml$|^tools/[^/]+/\.flox/env/manifest\.toml$)' + pass_filenames: false + stages: [pre-commit] diff --git a/AGENTS.md b/AGENTS.md index 55dd24ed989..3340b9fefbb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -245,10 +245,12 @@ Ensure all pre-commit hooks pass by running `uv run pre-commit run -a`. A clean ### Bootstrap prerequisites -- **uv version:** Root `pyproject.toml` requires and supports `uv>=0.9.14` for source checkout bootstrap. `uv.lock` updates must use uv `0.9.14`, matching the platform containers and CI lock check. CI separately validates latest uv compatibility. +- **Toolchain:** Install Flox before running `make bootstrap`; Make activates it as needed. For a preinstalled host toolchain, use `TOOLCHAIN=system` only when uv is at least `0.9.14`, Node.js is `22.23.2`, and pnpm is `10.34.5`. +- **uv version:** Root `pyproject.toml` requires and supports `uv>=0.9.14` for source checkout bootstrap. `uv.lock` updates use uv `0.9.14`, matching the platform containers and CI lock check. - **Native build deps:** `make bootstrap-python` builds `annoy` (via `nemoguardrails`). Install system headers once per VM image: `sudo apt-get install -y python3-dev build-essential`. - **Python bootstrap:** Run `make bootstrap-python` from repo root (creates `.venv`, runs `uv sync --frozen --all-packages`). See [SETUP.md](SETUP.md) for the full playbook. -- **Studio (optional):** `make bootstrap-studio` resolves the Node.js/pnpm versions pinned in `mise.toml`, so a VM shipping an older Node doesn't need upgrading. API services still run without Studio assets. Pass `NMP_SKIP_MISE=1` to bootstrap against the toolchain already on PATH. +- **Studio (optional):** `make bootstrap-studio` uses the Node.js/pnpm versions pinned in the Flox environment, so a VM shipping an older Node does not need upgrading. API services still run without Studio assets. For a preinstalled host toolchain, use `TOOLCHAIN=system` with Node.js `22.23.2` and pnpm `10.34.5`. +- **Docker:** Not needed for dependency bootstrap. It is required before running `nemo setup` or local services. ### Running the platform diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9424469a5ae..2789756338a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,6 +19,27 @@ cd nemo-platform Install the local prerequisites first, then run the bootstrap targets from the repository root. +#### Full Developer Environment with Flox + +For a complete contributor environment, including Python tooling and TypeScript +dependencies, install [Flox](https://flox.dev/docs/install-flox/install) and +run bootstrap from the repository root: + +```bash +# macOS with Homebrew; see the Flox installation guide for other platforms. +brew install flox + +make bootstrap +``` + +`make bootstrap` activates Flox as needed, installs the pinned Python and Node.js +toolchains, synchronizes Python dependencies, installs pnpm workspace +dependencies, and builds Studio assets. Run `flox activate` afterward when you +want to use `uv`, `node`, or `pnpm` directly. Flox supplies Node.js and Corepack +installs the repository-pinned pnpm into the environment cache. Interactive +activation installs the repository's pre-commit hook when needed; leave the +environment with `flox deactivate` when you are done. + #### Python Environment Setup This project uses [uv](https://github.com/astral-sh/uv) for dependency management of the Python environment. @@ -31,10 +52,8 @@ Install `uv`: curl -LsSf https://astral.sh/uv/0.9.14/install.sh | sh ``` -> **NeMo Platform uses uv version `>=0.9.14`.** -> -> When updating this version, make sure to update the version in -> `pyproject.toml` and CI jobs. +> **NeMo Platform requires uv version `>=0.9.14`.** Flox and CI use the exact +> repository toolchain version; `pyproject.toml` intentionally remains a range. #### Studio Environment Setup @@ -44,11 +63,10 @@ For complete Studio setup instructions, see the [Getting Started section in the ##### Prerequisites -1. **Node.js matching the Studio workspace engine**: Install a Node version that satisfies the `engines.node` range in `web/package.json`. -2. **pnpm**: Install via corepack (included with Node.js 16.13+) +1. **Flox**: Activate the repository environment, which provides the pinned Node.js and pnpm versions: ```bash -corepack enable pnpm +flox activate ``` #### Initialize the Repository @@ -61,6 +79,18 @@ make bootstrap If you only need Python dependencies, use `make bootstrap-python`. +#### System Toolchain Alternative + +Flox is recommended, but contributors may use an existing toolchain. Install uv +`>=0.9.14`, Node.js `22.23.2`, pnpm `10.34.5`, and a C compiler, then run: + +```bash +make TOOLCHAIN=system bootstrap +``` + +Docker is not needed for dependency bootstrap, but it is required by `nemo setup` +and local services. + ##### Building the Studio UI for Local Development `make bootstrap` already installs the web dependencies and builds the @@ -83,7 +113,8 @@ pnpm dev This provides hot module replacement (HMR) at the local URL printed by Vite. -When you're ready to test with the FastAPI service, rebuild with `pnpm build:fastapi`. +When you're ready to test with the FastAPI service, rebuild with +`pnpm build:fastapi`. ##### Running the Platform with Studio @@ -102,8 +133,8 @@ uv run nemo setup Then start the platform from the repository root: ```bash -# From an activated virtual environment -source .venv/bin/activate +# From an activated Flox environment +flox activate nemo services run # Or run everything with quickstart config (builds OPA policy first) @@ -119,46 +150,9 @@ NMP_CONFIG_FILE_PATH=packages/nmp_platform/config/local.yaml \ Visit `http://localhost:8080/studio/` to access the Studio UI. -#### Using direnv for Automatic Virtual Environment Activation (Optional) - -[direnv](https://direnv.net/) can automatically activate your virtual environment -when you enter the project directory, eliminating the need to manually source -the venv or use `uv run` for every command. - -```bash -eval "$(direnv hook bash)" # for bash -eval "$(direnv hook zsh)" # for zsh -``` - -Create an `.envrc` file in the repository root (note: the `install_direnv.sh` -script creates this file automatically if it doesn't exist): - -```bash -# See https://github.com/direnv/direnv/wiki/Python -# This has to be before our PATH_adds as well -export VIRTUAL_ENV=.venv -layout python3 -# this should make it so you don't have to source the venv directly -PATH_add $VIRTUAL_ENV/bin -# ensure local bin is ahead of the venv, mostly for UV. we want to use the -PATH_add ./script -``` - -Allow direnv to load the configuration: - -```bash -direnv allow -``` - -Now when you `cd` into the repository, the virtual environment will -automatically activate. You can run commands like `pytest` or `ruff` directly -without needing to prefix them with `uv run`. - -Initialize pre-commit: - -```bash -pre-commit install -``` +After the first interactive `flox activate`, pre-commit is installed +automatically. System-toolchain contributors can install it explicitly with +`uv run pre-commit install`. ## Development diff --git a/Makefile b/Makefile index 4c8341a56d0..66087a323f5 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ PYTEST_EXTRA ?= PYTHON_VERSION ?= 3.12 BOOTSTRAP_CREATE_VENV ?= 1 BOOTSTRAP_EXPECTED_VIRTUAL_ENV := $(CURDIR)/.venv -BOOTSTRAP_ACTIVATION_REMINDER = if [ "$${VIRTUAL_ENV:-}" != "$(BOOTSTRAP_EXPECTED_VIRTUAL_ENV)" ]; then echo ""; echo "Next steps:"; echo " source .venv/bin/activate"; echo " nemo --help"; fi +BOOTSTRAP_ACTIVATION_REMINDER = if [ "$(TOOLCHAIN)" = "flox" ] && [ "$${FLOX_ENV_PROJECT:-}" != "$(CURDIR)" ]; then echo ""; echo "Next steps:"; echo " flox activate"; echo " nemo --help"; elif [ "$(TOOLCHAIN)" = "system" ] && [ "$${VIRTUAL_ENV:-}" != "$(BOOTSTRAP_EXPECTED_VIRTUAL_ENV)" ]; then echo ""; echo "Next steps:"; echo " source .venv/bin/activate"; echo " nemo --help"; fi # Display platform info $(info local system architecture: $(PLATFORM)/$(ARCH)) @@ -64,21 +64,21 @@ refresh-openapi: ## Generate the OpenAPI specification .PHONY: stainless stainless: ## Run Stainless to generate the OpenAPI spec and sync it with the SDK - SDK_RELEASE_TIER=ga $(MISE_EXEC) ./sdk/stainless.sh sync + SDK_RELEASE_TIER=ga $(FLOX_EXEC) ./sdk/stainless.sh sync .PHONY: generate generate: stainless ## Alias for SDK generation via Stainless .PHONY: update-web-sdk -update-web-sdk: verify-mise ## Regenerate the TypeScript web SDK (web/packages/sdk) from the OpenAPI spec via Orval - cd web && $(MISE_EXEC) pnpm gen +update-web-sdk: verify-toolchain ## Regenerate the TypeScript web SDK (web/packages/sdk) from the OpenAPI spec via Orval + cd web && $(PNPM) gen .PHONY: update-sdk update-sdk: build-policy refresh-openapi stainless update-web-sdk update-cli ## Update the SDK by regenerating the OpenAPI spec and syncing it with Stainless .PHONY: vendor-nemo-platform-ext vendor-nemo-platform-ext: - $(MISE_EXEC) $(MAKE) -C packages/nemo_platform_ext vendor + $(FLOX_EXEC) $(MAKE) -C packages/nemo_platform_ext vendor .PHONY: generate-cli-commands generate-cli-commands: ## Run generation of the CLI commands @@ -163,14 +163,14 @@ clean-python: ## remove python virtual environment rm -rf .venv/ .PHONY: verify-python-version -verify-python-version: verify-mise ## Verify Python version and install if necessary +verify-python-version: verify-toolchain ## Verify Python version and install if necessary @echo "~~~~~~" @echo "verifying python version" $(UV) python find $(PYTHON_VERSION) || $(UV) python install $(PYTHON_VERSION) # Phony rather than a file target: a `.venv/bin/python` that already exists says # nothing about which interpreter it is, so changing PYTHON_VERSION has to force -# a rebuild. Order-only prerequisite keeps mise resolution out of the recipe. +# a rebuild. Order-only prerequisite keeps tool resolution out of the recipe. .PHONY: .venv .venv: | verify-python-version ## Create a Python virtual environment @echo "~~~" @@ -201,7 +201,7 @@ verify-python-version: verify-mise ## Verify Python version and install if neces BOOTSTRAP_LOCAL_PLUGIN_DIRS ?= .PHONY: bootstrap-python -bootstrap-python: verify-python-version ## Bootstrap Python dependencies. +bootstrap-python: verify-python-version verify-compiler ## Bootstrap Python dependencies. @echo "~~~~~~" @echo "installing python dependencies" $(UV) sync --python $(PYTHON_VERSION) --frozen --all-packages @@ -212,53 +212,55 @@ bootstrap-python: verify-python-version ## Bootstrap Python dependencies. $(BOOTSTRAP_ACTIVATION_REMINDER); \ fi -# Set NMP_SKIP_MISE=1 to bootstrap against the node/pnpm already on PATH -# instead of the mise-managed ones (offline installs, nix shells, distro -# toolchains). web/package.json engines are still enforced either way. -NMP_SKIP_MISE ?= -MISE_VERSION ?= v2026.5.7 -MISE := $(shell command -v mise 2>/dev/null || echo $(HOME)/.local/bin/mise) -MISE_EXEC := $(if $(NMP_SKIP_MISE),,"$(MISE)" exec --) -UV := $(MISE_EXEC) uv - -.PHONY: verify-mise -verify-mise: ## Install mise (if missing) and run `mise install` from mise.toml - @if [ -n "$(NMP_SKIP_MISE)" ]; then \ - echo "NMP_SKIP_MISE set, using node/pnpm from PATH"; \ - exit 0; \ - fi; \ - if [ ! -x "$(MISE)" ] && ! command -v mise >/dev/null 2>&1; then \ - curl -fsSL https://mise.run | MISE_VERSION=$(MISE_VERSION) sh; \ - fi; \ - if [ ! -x "$(MISE)" ] && ! command -v mise >/dev/null 2>&1; then \ - echo "mise not on PATH. Add $$HOME/.local/bin to PATH and re-run,"; \ - echo "or re-run with NMP_SKIP_MISE=1 to use your own node/pnpm."; \ +TOOLCHAIN ?= flox +FLOX ?= flox +ifeq ($(TOOLCHAIN),flox) +ifeq ($(FLOX_ENV_PROJECT),$(CURDIR)) +FLOX_EXEC := +else +FLOX_EXEC := $(FLOX) activate --dir "$(CURDIR)" -- +endif +else ifeq ($(TOOLCHAIN),system) +FLOX_EXEC := +else +$(error TOOLCHAIN must be either flox or system) +endif +UV := $(FLOX_EXEC) uv +ifeq ($(TOOLCHAIN),flox) +PNPM := $(FLOX_EXEC) bash -c 'corepack "pnpm@$$PNPM_VERSION" "$$@"' -- +else +PNPM := $(FLOX_EXEC) pnpm +endif + +.PHONY: verify-toolchain +verify-toolchain: ## Verify the selected Flox or system toolchain +ifeq ($(TOOLCHAIN),flox) + @if [ "$(FLOX_ENV_PROJECT)" = "$(CURDIR)" ]; then \ + echo "Using the active Flox environment"; \ + elif ! command -v "$(FLOX)" >/dev/null 2>&1; then \ + echo "flox is required. Install it, then rerun this command."; \ exit 1; \ - fi; \ - if [ -z "$${GITHUB_TOKEN:-}" ] && command -v gh >/dev/null 2>&1; then \ - GITHUB_TOKEN="$$(gh auth token 2>/dev/null)"; \ - export GITHUB_TOKEN; \ - fi; \ - "$(MISE)" install --yes || { \ - echo ""; \ - echo "mise could not install the pinned tools."; \ - echo "pnpm and uv are fetched through the GitHub API, which allows only"; \ - echo "60 unauthenticated requests per hour per IP. If the output above"; \ - echo "mentions a rate limit, set GITHUB_TOKEN (or run 'gh auth login')"; \ - echo "and re-run."; \ + fi +else + @bash script/verify-system-toolchain.sh +endif + +.PHONY: verify-compiler +verify-compiler: ## Verify a C compiler is available for Python package builds + @if ! command -v cc >/dev/null 2>&1; then \ + echo "A C compiler is required for Python package builds (for example, annoy)." >&2; \ + echo "Install Xcode Command Line Tools on macOS or build-essential on Debian/Ubuntu." >&2; \ exit 1; \ - } + fi .PHONY: verify-pnpm -verify-pnpm: verify-mise ## Verify pnpm is available for Studio bootstrap - @$(MISE_EXEC) pnpm --version || { \ +verify-pnpm: verify-toolchain ## Verify pnpm is available for Studio bootstrap +ifeq ($(TOOLCHAIN),system) + @bash script/verify-system-toolchain.sh web +endif + @$(PNPM) --version || { \ echo "pnpm not found."; \ - if [ -n "$(NMP_SKIP_MISE)" ]; then \ - echo "NMP_SKIP_MISE is set, so pnpm has to come from your PATH."; \ - echo "Install pnpm, or re-run without NMP_SKIP_MISE to use the mise-managed one."; \ - else \ - echo "Run 'make verify-mise' to install the pinned toolchain."; \ - fi; \ + echo "Install Flox or use TOOLCHAIN=system with pnpm on PATH."; \ exit 1; \ } @@ -266,14 +268,14 @@ verify-pnpm: verify-mise ## Verify pnpm is available for Studio bootstrap verify-node-version: verify-pnpm ## Verify pnpm and Node.js satisfy Studio's package engine @echo "~~~~~~" @echo "verifying Node.js version from web/package.json engines" - @$(MISE_EXEC) script/verify-node-version.sh + @$(FLOX_EXEC) bash script/verify-node-version.sh .PHONY: bootstrap-studio bootstrap-studio: verify-node-version ## Install web dependencies and build Studio assets for FastAPI @echo "~~~~~~" @echo "installing Studio web dependencies and building FastAPI assets" - cd web && CI=true $(MISE_EXEC) pnpm install --frozen-lockfile - cd web && $(MISE_EXEC) pnpm --filter nemo-studio-ui build:fastapi + cd web && CI=true $(PNPM) install --frozen-lockfile + cd web && $(PNPM) --filter nemo-studio-ui build:fastapi .PHONY: bootstrap-plugins bootstrap-plugins: .venv ## Install editable plugin packages not covered by the root uv workspace @@ -339,13 +341,13 @@ check-copyright-headers: .PHONY: lint lint: ## Run all linters (licenses, openapi, config docs, python style/types/sdk, vendored SDK, CLI, auth config) - $(MISE_EXEC) bash tools/lint/lint-all.sh + $(FLOX_EXEC) bash tools/lint/lint-all.sh LINT_FIX_VERIFY ?= 0 .PHONY: lint-fix lint-fix: ## Auto-fix lint issues (set LINT_FIX_VERIFY=1 to also run CI lint checks) - LINT_FIX_VERIFY=$(LINT_FIX_VERIFY) $(MISE_EXEC) bash tools/lint/lint-fix.sh + LINT_FIX_VERIFY=$(LINT_FIX_VERIFY) $(FLOX_EXEC) bash tools/lint/lint-fix.sh .PHONY: vendor vendor: ## Vendor packages into the SDK and generate wrapper metadata diff --git a/README.md b/README.md index b7900b2b7a2..710251ebaf1 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ NeMo Platform brings NVIDIA NeMo libraries together under one CLI, Python SDK, a ## Get started -**Prerequisites:** Python 3.12-3.13, `uv>=0.9.14`, and an API key for an inference provider (NVIDIA Build, OpenAI, Anthropic, Google Gemini, or a local Ollama instance). For source development, you also need Git, GNU Make, and — if you want the web UI — Node.js `>=22.23.2 <23` with `pnpm>=10.34.5`. +**Prerequisites:** Python 3.12-3.13, `uv>=0.9.14`, and an API key for an inference provider (NVIDIA Build, OpenAI, Anthropic, Google Gemini, or a local Ollama instance). Source development needs Git, GNU Make, a C compiler, and either Flox (recommended) or the pinned system Node.js/pnpm toolchain. Docker is required when starting local services. Quick install from PyPI: @@ -33,13 +33,14 @@ Source checkout for development: git clone https://github.com/NVIDIA-NeMo/nemo-platform.git cd nemo-platform +# Install Flox first: https://flox.dev/docs/install-flox/install make bootstrap -source .venv/bin/activate +flox activate nemo setup ``` -Source development still needs Git and GNU Make. `make bootstrap` supplies the rest of the toolchain, installing the uv, Node.js and pnpm versions pinned in `mise.toml`. Run it before other `make` targets — they call uv through mise but don't install it. See [SETUP.md](SETUP.md#toolchain-uv-nodejs-pnpm). +`make bootstrap` uses the Flox-pinned uv, Node.js, and pnpm toolchain; it does not require a prior `flox activate`. Activate Flox after bootstrap to continue development in the managed environment. Without Flox, install uv `>=0.9.14`, Node.js `22.23.2`, pnpm `10.34.5`, and a C compiler, then run `make TOOLCHAIN=system bootstrap` followed by `source .venv/bin/activate`. See [SETUP.md](SETUP.md#toolchain-uv-nodejs-pnpm). `nemo setup` starts local services, registers your LLM provider, discovers available models, selects default and fast agent models, installs agent skills, and deploys a sample agent (see more below). @@ -85,7 +86,7 @@ nemo services run
Studio (web UI) bootstrap troubleshooting -If `make bootstrap` reports that Studio asset bootstrap did not complete, the API still runs but the web UI is unavailable until the bundle is built. Install Node 22.23.x with `pnpm env use --global 22.23.2`, then run `make bootstrap-studio` from the repo root. +If `make bootstrap` reports that Studio asset bootstrap did not complete, the API still runs but the web UI is unavailable until the bundle is built. Ensure Flox is installed, or provide system Node.js `22.23.2` and pnpm `10.34.5` with `TOOLCHAIN=system`, then run `make bootstrap-studio` from the repository root.
diff --git a/SETUP.md b/SETUP.md index f39e3a0df80..7610a8ca69f 100644 --- a/SETUP.md +++ b/SETUP.md @@ -88,11 +88,13 @@ is unavailable, start Docker and retry—do not proceed to `rm -rf`. The README documents the streamlined path. Prefer this over the manual steps below whenever the task fits — it covers prerequisites install, service startup, provider registration, default/fast model selection, and demo agent deployment in one shot: +Before running `make bootstrap`, install Flox from the [Flox installation guide](https://flox.dev/docs/install-flox/install). Flox is the recommended source-development toolchain and does not need to be activated first. Contributors using a preinstalled host toolchain instead need uv `>=0.9.14`, Node.js `22.23.2`, pnpm `10.34.5`, and a C compiler; they must use `make TOOLCHAIN=system bootstrap`. + === "Interactive" ```bash make bootstrap # installs Python deps, Studio assets, and plugins (including demo calculator agent) -source .venv/bin/activate +flox activate # enter the managed development environment nemo setup # interactive: prompts for provider, picks default/fast models, optionally deploys calculator-agent ``` @@ -114,38 +116,24 @@ nemo setup --auto --start-services --install-skills --deploy-agent ### Toolchain: uv, Node.js, pnpm -`mise.toml` pins all three — uv to satisfy `pyproject.toml`'s `required-version`, Node.js and pnpm to satisfy `web/package.json` engines. `make bootstrap` installs mise on first run and invokes each through `mise exec --`, so the pinned versions win over whatever is already on your PATH. Nothing is written to your shell rc. +Flox pins all three — uv to satisfy `pyproject.toml`'s `required-version`, Node.js to match `.nvmrc`, and pnpm to match `web/package.json`. `make` invokes tools through Flox, so the pinned versions win over whatever is already on your PATH. Nothing is written to your shell rc. -**Run `make bootstrap` before any other `make` target.** Targets such as `make test-unit`, `make update-licenses` and `make refresh-openapi` call uv through mise but don't install mise themselves. On a machine that doesn't have it yet, they fail like this: +**Run `make bootstrap` before any other `make` target.** Targets such as `make test-unit`, `make update-licenses` and `make refresh-openapi` call uv through Flox. On a machine that does not have Flox yet, they fail like this: ```text -/bin/sh: /Users/you/.local/bin/mise: No such file or directory +/bin/sh: flox: command not found make: *** [test-unit] Error 127 ``` -`make bootstrap` fixes it, as does `make verify-mise` on its own. To use the toolchain you already have instead, pass `NMP_SKIP_MISE=1` — it works on every target. - -That covers the `make` targets only. To run `uv` or `pnpm` directly — `uv sync`, the Studio dev server, tests, lint — you need mise on your PATH first, since it installs to `~/.local/bin`: - -```bash -export PATH="$HOME/.local/bin:$PATH" -``` - -Then either prefix commands: - -```bash -mise exec -- pnpm dev -mise exec -- uv sync -``` +`make bootstrap` fixes it, as does `make verify-toolchain` on its own. CI uses `TOOLCHAIN=system` only after it has provisioned the matching toolchain explicitly. -or activate mise once so every shell picks up the pinned versions: +That covers the `make` targets only. To run `uv` or `pnpm` directly, activate Flox first: ```bash -eval "$(mise activate bash)" # ~/.bashrc -eval "$(mise activate zsh)" # ~/.zshrc +flox activate ``` -Without one of those, a system or nvm-managed Node.js takes precedence and may not satisfy `engines`, and a globally installed uv outside `required-version` fails `uv sync` with a version mismatch. To bootstrap against your own toolchain instead of mise, use `make bootstrap NMP_SKIP_MISE=1`. +Without Flox, install uv `>=0.9.14`, Node.js `22.23.2`, pnpm `10.34.5`, and a C compiler, then run `make TOOLCHAIN=system bootstrap`. Docker is required when starting local services, but not for dependency bootstrap. If `nemo setup` is too high-level for the task (e.g. debugging startup, custom service set, custom plugin install after bootstrap), use the manual sections below. diff --git a/mise.toml b/mise.toml deleted file mode 100644 index 59fe4b2c463..00000000000 --- a/mise.toml +++ /dev/null @@ -1,4 +0,0 @@ -[tools] -node = "22.23.2" -pnpm = "10.34.5" -uv = "0.9" diff --git a/pyproject.toml b/pyproject.toml index 1839e613d7c..262b0e0f7be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -518,6 +518,7 @@ omit = [ "*/.venv/*", "*/venv/*", "*/.tox/*", + "*/.flox/*", "*/setup.py", "*/site-packages/*", ] diff --git a/script/verify-node-version.sh b/script/verify-node-version.sh index e293e066b37..110b45a1f8e 100755 --- a/script/verify-node-version.sh +++ b/script/verify-node-version.sh @@ -7,18 +7,24 @@ WEB_DIR="$REPO_ROOT/web" # --- Toolchain availability --- -for tool in node pnpm; do - if ! command -v "$tool" >/dev/null 2>&1; then - echo "$tool is not on PATH." - if [ -n "${NMP_SKIP_MISE:-}" ]; then - echo "NMP_SKIP_MISE is set, so $tool has to come from your PATH." - echo "Install it, or re-run without NMP_SKIP_MISE to use the mise-managed one." - else - echo "Run 'make verify-mise' to install the pinned toolchain." - fi +if ! command -v node >/dev/null 2>&1; then + echo "node is not on PATH." >&2 + exit 1 +fi + +if [[ -n "${PNPM_VERSION:-}" ]]; then + if ! command -v corepack >/dev/null 2>&1; then + echo "corepack is not on PATH." >&2 exit 1 fi -done + pnpm() { + corepack "pnpm@${PNPM_VERSION}" "$@" + } +elif ! command -v pnpm >/dev/null 2>&1; then + echo "pnpm is not on PATH." >&2 + echo "Install it, or rerun without TOOLCHAIN=system to use Flox." >&2 + exit 1 +fi # --- Engine compatibility check --- diff --git a/script/verify-system-toolchain.sh b/script/verify-system-toolchain.sh new file mode 100755 index 00000000000..4f396949bb9 --- /dev/null +++ b/script/verify-system-toolchain.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +set -euo pipefail + +mode="${1:-python}" +if [[ "${mode}" != "python" && "${mode}" != "web" ]]; then + echo "Usage: $0 [python|web]" >&2 + exit 2 +fi + +version_at_least() { + local current="$1" + local minimum="$2" + local current_part + local minimum_part + local index + local -a current_parts minimum_parts + + IFS=. read -r -a current_parts <<<"${current}" + IFS=. read -r -a minimum_parts <<<"${minimum}" + + for index in 0 1 2; do + current_part="${current_parts[index]:-0}" + minimum_part="${minimum_parts[index]:-0}" + if ((10#${current_part} > 10#${minimum_part})); then + return 0 + fi + if ((10#${current_part} < 10#${minimum_part})); then + return 1 + fi + done +} + +if ! command -v uv >/dev/null 2>&1; then + echo "TOOLCHAIN=system requires uv on PATH." >&2 + exit 1 +fi + +uv_minimum="$(sed -n 's/^required-version = ">=\([^"]*\)"/\1/p' pyproject.toml)" +uv_current="$(uv --version | awk '{print $2}')" +if [[ -z "${uv_minimum}" ]] || ! version_at_least "${uv_current}" "${uv_minimum}"; then + echo "TOOLCHAIN=system requires uv >=${uv_minimum:-the project minimum}; found ${uv_current}." >&2 + exit 1 +fi + +if [[ "${mode}" = "python" ]]; then + exit 0 +fi + +for tool in node pnpm; do + if ! command -v "${tool}" >/dev/null 2>&1; then + echo "TOOLCHAIN=system requires ${tool} on PATH for Studio work." >&2 + exit 1 + fi +done + +node_required="$(tr -d '[:space:]' < .nvmrc)" +node_current="$(node --version | sed 's/^v//')" +pnpm_required="$(sed -n 's/.*"packageManager": "pnpm@\([^"]*\)".*/\1/p' web/package.json)" +pnpm_current="$(pnpm --version)" + +if [[ "${node_current}" != "${node_required}" ]]; then + echo "TOOLCHAIN=system requires Node.js ${node_required}; found ${node_current}." >&2 + exit 1 +fi + +if [[ "${pnpm_current}" != "${pnpm_required}" ]]; then + echo "TOOLCHAIN=system requires pnpm ${pnpm_required}; found ${pnpm_current}." >&2 + exit 1 +fi diff --git a/tools/actionlint/.flox/.gitattributes b/tools/actionlint/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/actionlint/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/actionlint/.flox/.gitignore b/tools/actionlint/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/actionlint/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/actionlint/.flox/env.json b/tools/actionlint/.flox/env.json new file mode 100644 index 00000000000..8e57e8606ca --- /dev/null +++ b/tools/actionlint/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "actionlint", + "version": 1 +} diff --git a/tools/actionlint/.flox/env/manifest.lock b/tools/actionlint/.flox/env/manifest.lock new file mode 100644 index 00000000000..6f638313187 --- /dev/null +++ b/tools/actionlint/.flox/env/manifest.lock @@ -0,0 +1,281 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "actionlint": { + "pkg-path": "actionlint", + "pkg-group": "actionlint", + "version": "1.7.12" + }, + "shellcheck": { + "pkg-path": "shellcheck", + "pkg-group": "actionlint", + "version": "0.11.0" + } + }, + "options": {} + }, + "packages": [ + { + "attr_path": "actionlint", + "broken": false, + "derivation": "/nix/store/f6xz9pw6zvga7r04isc4xf54y8g4sq5z-actionlint-1.7.12.drv", + "description": "Static checker for GitHub Actions workflow files", + "install_id": "actionlint", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "actionlint-1.7.12", + "pname": "actionlint", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:54.694474Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.7.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/9qj0ikkqv66k52xs8fywmnzyg8zn2svm-actionlint-1.7.12" + }, + "system": "aarch64-darwin", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "actionlint", + "broken": false, + "derivation": "/nix/store/pih7r5p4pify73ap7r0g4s7aqv5q01d2-actionlint-1.7.12.drv", + "description": "Static checker for GitHub Actions workflow files", + "install_id": "actionlint", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "actionlint-1.7.12", + "pname": "actionlint", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:21.154073Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.7.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/31js4yryr1yjq4waygdlv2k5w5ks0s0n-actionlint-1.7.12" + }, + "system": "aarch64-linux", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "actionlint", + "broken": false, + "derivation": "/nix/store/63nf20xl5rcbm5mxf2pbfkdk90lcc4qi-actionlint-1.7.12.drv", + "description": "Static checker for GitHub Actions workflow files", + "install_id": "actionlint", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "actionlint-1.7.12", + "pname": "actionlint", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:08:59.948591Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.7.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/w4rjv0ikr5r5x54w758c8ck2016nmzsx-actionlint-1.7.12" + }, + "system": "x86_64-darwin", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "actionlint", + "broken": false, + "derivation": "/nix/store/mk996amm0g9pssw96f0nh4460x97p890-actionlint-1.7.12.drv", + "description": "Static checker for GitHub Actions workflow files", + "install_id": "actionlint", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "actionlint-1.7.12", + "pname": "actionlint", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:23.770360Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.7.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/20imjbvi2q6z691fd5acg20mfx3aqvkj-actionlint-1.7.12" + }, + "system": "x86_64-linux", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "shellcheck", + "broken": false, + "derivation": "/nix/store/h7qr1dkmmmwvr6rdp41d46mrxxyypqc2-shellcheck-0.11.0.drv", + "description": "Shell script analysis tool", + "install_id": "shellcheck", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "shellcheck-0.11.0", + "pname": "shellcheck", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:14:50.123814Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.11.0", + "outputs_to_install": [ + "bin", + "doc", + "man" + ], + "outputs": { + "bin": "/nix/store/py6hpk9rm5vh16dn0sifa3wpmsl0kl67-shellcheck-0.11.0-bin", + "doc": "/nix/store/bf4yd8vzhafk7nknzjjz5awvkqvyfspc-shellcheck-0.11.0-doc", + "man": "/nix/store/lwd2gr8083jfif5xb8h7jj396dvr6kdd-shellcheck-0.11.0-man", + "out": "/nix/store/7qi1h6hbr1ybpz9xyh4j38vrki1xc2z4-shellcheck-0.11.0" + }, + "system": "aarch64-darwin", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "shellcheck", + "broken": false, + "derivation": "/nix/store/27a27jgwxyq768zr75divyi6x4744bix-shellcheck-0.11.0.drv", + "description": "Shell script analysis tool", + "install_id": "shellcheck", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "shellcheck-0.11.0", + "pname": "shellcheck", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:43:48.990893Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.11.0", + "outputs_to_install": [ + "bin", + "doc", + "man" + ], + "outputs": { + "bin": "/nix/store/ydbg36fc5vvgc4k60d38vj95741wvv28-shellcheck-0.11.0-bin", + "doc": "/nix/store/dmj404h7ac342mrnj5dfdych83cd6r6c-shellcheck-0.11.0-doc", + "man": "/nix/store/l3202mccjm3iz9m0myddbmvhiy8nkp9m-shellcheck-0.11.0-man", + "out": "/nix/store/yyy8s43483p5ww6v09kal0kidb7kxvmk-shellcheck-0.11.0" + }, + "system": "aarch64-linux", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "shellcheck", + "broken": false, + "derivation": "/nix/store/40c53aw1zc0db8fxqk9z33pbx5sbgwbn-shellcheck-0.11.0.drv", + "description": "Shell script analysis tool", + "install_id": "shellcheck", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "shellcheck-0.11.0", + "pname": "shellcheck", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:11:23.130360Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.11.0", + "outputs_to_install": [ + "bin", + "doc", + "man" + ], + "outputs": { + "bin": "/nix/store/68yldspq5p1gxa79ghprb1njskk36ax2-shellcheck-0.11.0-bin", + "doc": "/nix/store/4sk9v7wwdh2sia6wi3rknvvvm52wqg6r-shellcheck-0.11.0-doc", + "man": "/nix/store/90d8x14kmdq8fa12d5azjwdnp4z55q8b-shellcheck-0.11.0-man", + "out": "/nix/store/crl9a7fkfbpjbzgwj5nwpj57bmj7z940-shellcheck-0.11.0" + }, + "system": "x86_64-darwin", + "group": "actionlint", + "priority": 5 + }, + { + "attr_path": "shellcheck", + "broken": false, + "derivation": "/nix/store/fjnaf97vql7h3d6mzymqabz7lmbljj0x-shellcheck-0.11.0.drv", + "description": "Shell script analysis tool", + "install_id": "shellcheck", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "shellcheck-0.11.0", + "pname": "shellcheck", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:43:04.681164Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.11.0", + "outputs_to_install": [ + "bin", + "doc", + "man" + ], + "outputs": { + "bin": "/nix/store/vwvvnr1qxpwn0vffbsn8bkviqcgicizr-shellcheck-0.11.0-bin", + "doc": "/nix/store/wm6ncb99697pw9px9dpnx4vdq7mjskq2-shellcheck-0.11.0-doc", + "man": "/nix/store/g6cz58h4p7dasw30y0qrk0xwdp5595qv-shellcheck-0.11.0-man", + "out": "/nix/store/gykrz50q65f9jrljvd9bds46irfbd0bh-shellcheck-0.11.0" + }, + "system": "x86_64-linux", + "group": "actionlint", + "priority": 5 + } + ] +} diff --git a/tools/actionlint/.flox/env/manifest.toml b/tools/actionlint/.flox/env/manifest.toml new file mode 100644 index 00000000000..14f50fbe945 --- /dev/null +++ b/tools/actionlint/.flox/env/manifest.toml @@ -0,0 +1,5 @@ +schema-version = "1.14.0" + +[install] +actionlint = { pkg-path = "actionlint", version = "1.7.12", pkg-group = "actionlint" } +shellcheck = { pkg-path = "shellcheck", version = "0.11.0", pkg-group = "actionlint" } diff --git a/tools/common/.flox/.gitattributes b/tools/common/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/common/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/common/.flox/.gitignore b/tools/common/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/common/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/common/.flox/env.json b/tools/common/.flox/env.json new file mode 100644 index 00000000000..ebc20a5bf0a --- /dev/null +++ b/tools/common/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "common", + "version": 1 +} diff --git a/tools/common/.flox/env/manifest.lock b/tools/common/.flox/env/manifest.lock new file mode 100644 index 00000000000..b4b95039e40 --- /dev/null +++ b/tools/common/.flox/env/manifest.lock @@ -0,0 +1,799 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "diffutils": { + "pkg-path": "diffutils" + }, + "findutils": { + "pkg-path": "findutils" + }, + "gnumake": { + "pkg-path": "gnumake" + }, + "gnutar": { + "pkg-path": "gnutar" + }, + "gum": { + "pkg-path": "gum" + }, + "yq-go": { + "pkg-path": "yq-go" + } + }, + "vars": { + "ALIGN": "center", + "BORDER": "double", + "BORDER_FOREGROUND": "#76B900", + "FOREGROUND": "#76B900", + "GUM_LOG_MESSAGE_FOREGROUND": "#76B900", + "MARGIN": "1 2", + "PADDING": "1 2", + "WIDTH": "50" + }, + "options": {} + }, + "packages": [ + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/1dm6zyrj9634fz016hnqild1zznb18jm-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:55.469692Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/lw06ap9kg9hrmsp7a534pwzh303gm02w-diffutils-3.12-info", + "out": "/nix/store/yw1mksapzj4v66c5ag7ng59jn2nh6klq-diffutils-3.12" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/gy9f86m4f8bay71v2aylf6ilmfdblp4c-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:22.168402Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/b0jifqs0ywlwjj5yyigk7jyllsjzgiil-diffutils-3.12-info", + "out": "/nix/store/qm0ch7mlxn6kjdymcznxfsf5qdxqv9lk-diffutils-3.12" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/i5r3m138kb1gihsvjf2hs3g9dmyawk32-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:00.840124Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/7rh8a74vwdb6lvvvwjd0dlpv84hl6mr6-diffutils-3.12-info", + "out": "/nix/store/lwghldxh6irjmbp73lpxv6mrdwb4aqhv-diffutils-3.12" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/4lqdccfv8wh1si8qh1phfjnl2v7530p9-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:24.850606Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/vajbg82rq4kq817ic61azz8z5363dy4c-diffutils-3.12-info", + "out": "/nix/store/3c05s0vxy8wafaa7lkj4bfh69wa0ch10-diffutils-3.12" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/971s20l3wxc0zv5c6gy4n9d04b9sxf3k-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:55.823224Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/nrk43rrjmq5dn4z0l56frzkpcya7bm7b-findutils-4.10.0-info", + "locate": "/nix/store/s494jb7dpfav3x14349f1gwa1xzw2hhp-findutils-4.10.0-locate", + "out": "/nix/store/z10ivgdarglczg1fp995rl3h6zx17ng0-findutils-4.10.0" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/bzhsr1f65ya9k9vh6b4cjzrdj9glg7bd-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:22.723360Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/bd7lq9h718463n6v4a8j889m7z7p1jmd-findutils-4.10.0-info", + "locate": "/nix/store/lr299wp5bmraayckga75pxfjjl6klz05-findutils-4.10.0-locate", + "out": "/nix/store/8z92qzl5h4dx7y6j5ks9zlpgy1rqi10v-findutils-4.10.0" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/jvn6l62vr18ih2qgn8j9iizi7gwgb9py-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:01.290176Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/xadm4ryq6sx6njbw97p6fvfpdhapc52w-findutils-4.10.0-info", + "locate": "/nix/store/f0y58n40x3ymy4q46jrl4ylynjzcl87g-findutils-4.10.0-locate", + "out": "/nix/store/lzlf2kma2qxsq6ijy9a9irc0g6n8cdpg-findutils-4.10.0" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/m1n6hnajwhnv5qm4mwh2b2briv8vrkb3-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:25.467195Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/z9xp5gx83h9j3nyn1qmlimfb9jnda70q-findutils-4.10.0-info", + "locate": "/nix/store/mlhv10zqih8f45hw0jqg4lzbz9ialzx3-findutils-4.10.0-locate", + "out": "/nix/store/zjwih3d9rrrw4ixll52wsy0538p7vdfd-findutils-4.10.0" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/fq3j34ffr44fa5a5nkwci5pdncl5h7hg-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:56.218409Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "doc": "/nix/store/v2jpgmm2fsg7b0z27cc514jdqbhm0isy-gnumake-4.4.1-doc", + "info": "/nix/store/dli72plfj1gcp88wv6px7qjjqvnnlql5-gnumake-4.4.1-info", + "man": "/nix/store/mzy3b5lxi8jbq5d63yvq52sjsq73907l-gnumake-4.4.1-man", + "out": "/nix/store/ij3d5cfr8h31a41l80jzid0z6kj2ajsv-gnumake-4.4.1" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/8g055kd88xxnsxxanrn2l1ycmd1zaqp4-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:23.879706Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "debug": "/nix/store/rcg8zj3391869cn266zwxynplwhyf6qw-gnumake-4.4.1-debug", + "doc": "/nix/store/qvl65zgm24p9sw0mzw3cxijcs8palykk-gnumake-4.4.1-doc", + "info": "/nix/store/2xp5f2ypvrlg6wn5s44jg3ji82l78k9q-gnumake-4.4.1-info", + "man": "/nix/store/3c96gbpypik8gzasv9brnka3i6mks9rz-gnumake-4.4.1-man", + "out": "/nix/store/v1888rzl1qf8zzd27q1vxvqqssizjx3x-gnumake-4.4.1" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/k8zf9n1v4hwky8xq8k83rxh7lrxwy630-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:01.829543Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "doc": "/nix/store/3b9cjf16jx4ncpp3b4k6m8q01nxsrw1n-gnumake-4.4.1-doc", + "info": "/nix/store/rriz5p4q8a6sca7sw3p3js1m5dl09ia8-gnumake-4.4.1-info", + "man": "/nix/store/wb4yn3d7vmi1hr4f8pz38rjvcl7f70ma-gnumake-4.4.1-man", + "out": "/nix/store/0bg5b97b9hbhz8907bfcrch1i116xppa-gnumake-4.4.1" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/ppc7b3wjgk81bxnls18vjflgw70wxss4-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:26.701509Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "debug": "/nix/store/054b9sxxzph2fbwmj45njf1rspjifaz6-gnumake-4.4.1-debug", + "doc": "/nix/store/c2skg22md4ablx0qfcrsh7vpad31zgyx-gnumake-4.4.1-doc", + "info": "/nix/store/6mifiq9cp2bsg9ghkhifrvlmip7z3147-gnumake-4.4.1-info", + "man": "/nix/store/arjpl2nnq7khwfhy16qphyxxg924apy1-gnumake-4.4.1-man", + "out": "/nix/store/k9ybsvscqk4lhz5ndc1ap9800im1cry1-gnumake-4.4.1" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/xczzf9n70psj6lrpm5pmv2cgmv1zb19r-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:56.226588Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/zzm2iycbpgdv23aibi06z0akdi43rhnx-gnutar-1.35-info", + "out": "/nix/store/prip7nslhk7b9hfws6y5y9lzfxjskanv-gnutar-1.35" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/lw1g8qxvdmrdphq1cv5yb50j98m2v1xm-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:23.894623Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/q9bv4apsdh5wlqv0ga7lr9i22iv6978z-gnutar-1.35-info", + "out": "/nix/store/r4c3r48fn312jmjls34nwz41b9y4xsvs-gnutar-1.35" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/smwpwzpldpah35vkwjgkmnh2yrwl0mh2-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:01.837913Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/z68xf85yapz8rjzk7spnx09cf7cyngr5-gnutar-1.35-info", + "out": "/nix/store/s2z5cn0gikvb2x352nizvlwpmv18jh9k-gnutar-1.35" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/45ynwydadvp0xmsy1bkag7lp2zysy1jc-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:26.716276Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/avcnv3j0l6lwsffrihbhj84pgy11yqj3-gnutar-1.35-info", + "out": "/nix/store/1j461raj6r4hihrq9j6alrddmx837fzs-gnutar-1.35" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/ncv12x2sfb3pnxc4z7rlspgc0vf0zvbc-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:56.472327Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/55h6jsvhnhilka36s9jkld0k0d55c174-gum-0.17.0" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/4lqcj3v44pcscjmnjip8ggm99hrpilxr-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:24.298504Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/51vn4xsrgzfl9g3s00byydpx6jgjgrnd-gum-0.17.0" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/w01nbfjmxqjr3w9sycd0jliiamnljij2-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:02.122815Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/m2wks8knnsfgjl0ikhbi0vv7bqn53385-gum-0.17.0" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/468b0lgb2p00hyfj24xb44yj24r33hy4-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:27.139900Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/w3h6fxv7jmapwcm3rxxwp83q16rnskm2-gum-0.17.0" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/fizkq87xqlj4yicyxm2610qqirk29gx6-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:15:55.233322Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/lpf51yzqr105clhg4c4vyn2blyai4axn-yq-go-4.53.3" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/89zhpxra3dajdv5g4mi9pkf26kvff87l-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:45:10.000608Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/hnn92zxywj73282qrq31ha89drv13244-yq-go-4.53.3" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/ic6w08gsq6fhl16368y1qgpzqvhwx3if-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:12:44.816982Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/agf9fyr053m3092vsmh6vih3apz0kw05-yq-go-4.53.3" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/jfa3lz2rbba3mrnvaz0l660han5gd0xy-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:44:33.209955Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/sky6728rldnq9yzvljy25d1l6k7y1saj-yq-go-4.53.3" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + } + ] +} diff --git a/tools/common/.flox/env/manifest.toml b/tools/common/.flox/env/manifest.toml new file mode 100644 index 00000000000..8c0ff62b6b4 --- /dev/null +++ b/tools/common/.flox/env/manifest.toml @@ -0,0 +1,20 @@ +schema-version = "1.14.0" + +[install] +# Utilities +gnumake.pkg-path = "gnumake" +gnutar.pkg-path = "gnutar" +gum.pkg-path = "gum" +findutils.pkg-path = "findutils" +diffutils.pkg-path = "diffutils" +yq-go.pkg-path = "yq-go" + +[vars] +GUM_LOG_MESSAGE_FOREGROUND="#76B900" +FOREGROUND="#76B900" +BORDER_FOREGROUND="#76B900" +BORDER="double" +ALIGN="center" +WIDTH="50" +MARGIN="1 2" +PADDING="1 2" diff --git a/tools/helm/.flox/.gitattributes b/tools/helm/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/helm/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/helm/.flox/.gitignore b/tools/helm/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/helm/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/helm/.flox/env.json b/tools/helm/.flox/env.json new file mode 100644 index 00000000000..0f92fb0d8d0 --- /dev/null +++ b/tools/helm/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "helm", + "version": 1 +} diff --git a/tools/helm/.flox/env/manifest.lock b/tools/helm/.flox/env/manifest.lock new file mode 100644 index 00000000000..4b6ff258d44 --- /dev/null +++ b/tools/helm/.flox/env/manifest.lock @@ -0,0 +1,296 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "helm-docs": { + "pkg-path": "helm-docs", + "pkg-group": "helm-docs", + "version": "1.14.2" + }, + "kubeconform": { + "pkg-path": "kubeconform", + "pkg-group": "kubeconform", + "version": "0.6.7" + }, + "kubernetes-helm": { + "pkg-path": "kubernetes-helm", + "pkg-group": "kubernetes-helm", + "version": "4.2.3" + } + }, + "options": { + "systems": [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-linux" + ] + } + }, + "packages": [ + { + "attr_path": "helm-docs", + "broken": false, + "derivation": "/nix/store/y91aqsk2pipz2vx62rdxbs5zdra3xxry-helm-docs-1.14.2.drv", + "description": "Tool for automatically generating markdown documentation for Helm charts", + "install_id": "helm-docs", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "helm-docs-1.14.2", + "pname": "helm-docs", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:55:06.299662Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.14.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/0i1kal44yygaycd4s287hxsj1prg35a3-helm-docs-1.14.2" + }, + "system": "aarch64-darwin", + "group": "helm-docs", + "priority": 5 + }, + { + "attr_path": "helm-docs", + "broken": false, + "derivation": "/nix/store/bqlkqal7i3n8ysx86a4464qpsjy8wsgw-helm-docs-1.14.2.drv", + "description": "Tool for automatically generating markdown documentation for Helm charts", + "install_id": "helm-docs", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "helm-docs-1.14.2", + "pname": "helm-docs", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:28.058381Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.14.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/p2cvfmi5h311fg503nq0fi2dmihsgbcp-helm-docs-1.14.2" + }, + "system": "aarch64-linux", + "group": "helm-docs", + "priority": 5 + }, + { + "attr_path": "helm-docs", + "broken": false, + "derivation": "/nix/store/4mp8lw4dhpk6s09y63w61p122daba7ml-helm-docs-1.14.2.drv", + "description": "Tool for automatically generating markdown documentation for Helm charts", + "install_id": "helm-docs", + "license": "GPL-3.0-only", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "helm-docs-1.14.2", + "pname": "helm-docs", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:43.732862Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "1.14.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/68b6nv2gc1j7g6js3wj2plj2dsvx2vnx-helm-docs-1.14.2" + }, + "system": "x86_64-linux", + "group": "helm-docs", + "priority": 5 + }, + { + "attr_path": "kubeconform", + "broken": false, + "derivation": "/nix/store/9s4snw6sv1rxkppb2vh77mfx8y8w3dk0-kubeconform-0.6.7.drv", + "description": "FAST Kubernetes manifests validator, with support for Custom Resources!", + "install_id": "kubeconform", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=979daf34c8cacebcd917d540070b52a3c2b9b16e", + "name": "kubeconform-0.6.7", + "pname": "kubeconform", + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", + "rev_count": 793735, + "rev_date": "2025-05-04T03:14:55Z", + "scrape_date": "2025-05-05T04:19:29.834897Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.6.7", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/39nyhvxm0fj2bqpy1hb0wp1mj6drgw6k-kubeconform-0.6.7" + }, + "system": "aarch64-darwin", + "group": "kubeconform", + "priority": 5 + }, + { + "attr_path": "kubeconform", + "broken": false, + "derivation": "/nix/store/lq4z544sl9s1g771v8si3pa54zk39x4h-kubeconform-0.6.7.drv", + "description": "FAST Kubernetes manifests validator, with support for Custom Resources!", + "install_id": "kubeconform", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=979daf34c8cacebcd917d540070b52a3c2b9b16e", + "name": "kubeconform-0.6.7", + "pname": "kubeconform", + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", + "rev_count": 793735, + "rev_date": "2025-05-04T03:14:55Z", + "scrape_date": "2025-05-05T04:37:22.795766Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.6.7", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/dl336sgplkl83x7hgq9vchnwia92rllx-kubeconform-0.6.7" + }, + "system": "aarch64-linux", + "group": "kubeconform", + "priority": 5 + }, + { + "attr_path": "kubeconform", + "broken": false, + "derivation": "/nix/store/7sn96dgwl0lkghawlg88557cr9nr88y4-kubeconform-0.6.7.drv", + "description": "FAST Kubernetes manifests validator, with support for Custom Resources!", + "install_id": "kubeconform", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=979daf34c8cacebcd917d540070b52a3c2b9b16e", + "name": "kubeconform-0.6.7", + "pname": "kubeconform", + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", + "rev_count": 793735, + "rev_date": "2025-05-04T03:14:55Z", + "scrape_date": "2025-05-05T05:15:57.921277Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.6.7", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/8cmvaf9s4h36rz1464kwwn5a9pifgf56-kubeconform-0.6.7" + }, + "system": "x86_64-linux", + "group": "kubeconform", + "priority": 5 + }, + { + "attr_path": "kubernetes-helm", + "broken": false, + "derivation": "/nix/store/h27s9phbjyisaq14bdrh1hc6v1bmh1kh-kubernetes-helm-4.2.3.drv", + "description": "Package manager for kubernetes", + "install_id": "kubernetes-helm", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "kubernetes-helm-4.2.3", + "pname": "kubernetes-helm", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:55:08.760008Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.2.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/zxlrdn6fsss4s2i496np7kdrwy92261j-kubernetes-helm-4.2.3" + }, + "system": "aarch64-darwin", + "group": "kubernetes-helm", + "priority": 5 + }, + { + "attr_path": "kubernetes-helm", + "broken": false, + "derivation": "/nix/store/w61scb5zj8c4dmckwlmrxf8m2ma263fl-kubernetes-helm-4.2.3.drv", + "description": "Package manager for kubernetes", + "install_id": "kubernetes-helm", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "kubernetes-helm-4.2.3", + "pname": "kubernetes-helm", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:32.211235Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.2.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/3m7a0rmsr6k5hs0xl2ym6kiv4iqgwypj-kubernetes-helm-4.2.3" + }, + "system": "aarch64-linux", + "group": "kubernetes-helm", + "priority": 5 + }, + { + "attr_path": "kubernetes-helm", + "broken": false, + "derivation": "/nix/store/qkhmnhnv2j5zql42fylj3vs4h8f4p35z-kubernetes-helm-4.2.3.drv", + "description": "Package manager for kubernetes", + "install_id": "kubernetes-helm", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "kubernetes-helm-4.2.3", + "pname": "kubernetes-helm", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:58:48.065333Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "4.2.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/wkb6xckn077grj4jqb6z6wgmwzj7g1xr-kubernetes-helm-4.2.3" + }, + "system": "x86_64-linux", + "group": "kubernetes-helm", + "priority": 5 + } + ] +} diff --git a/tools/helm/.flox/env/manifest.toml b/tools/helm/.flox/env/manifest.toml new file mode 100644 index 00000000000..900d4ab377d --- /dev/null +++ b/tools/helm/.flox/env/manifest.toml @@ -0,0 +1,15 @@ +schema-version = "1.14.0" + + +[install] +kubernetes-helm = { pkg-path = "kubernetes-helm", version = "4.2.3", pkg-group = "kubernetes-helm" } +helm-docs = { pkg-path = "helm-docs", version = "1.14.2", pkg-group = "helm-docs" } +kubeconform = { pkg-path = "kubeconform", version = "0.6.7", pkg-group = "kubeconform" } + +[options] +# Systems that environment is compatible with +systems = [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-linux", +] diff --git a/tools/lint/.flox/.gitattributes b/tools/lint/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/lint/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/lint/.flox/.gitignore b/tools/lint/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/lint/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/lint/.flox/env.json b/tools/lint/.flox/env.json new file mode 100644 index 00000000000..ce23d9edb95 --- /dev/null +++ b/tools/lint/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "lint", + "version": 1 +} diff --git a/tools/lint/.flox/env/manifest.lock b/tools/lint/.flox/env/manifest.lock new file mode 100644 index 00000000000..b45b9cc941e --- /dev/null +++ b/tools/lint/.flox/env/manifest.lock @@ -0,0 +1,1000 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "diffutils": { + "pkg-path": "diffutils" + }, + "findutils": { + "pkg-path": "findutils" + }, + "gnumake": { + "pkg-path": "gnumake" + }, + "gnutar": { + "pkg-path": "gnutar" + }, + "gum": { + "pkg-path": "gum" + }, + "osv-scanner": { + "pkg-path": "osv-scanner", + "pkg-group": "osv-scanner", + "version": "2.3.3" + }, + "yq-go": { + "pkg-path": "yq-go" + } + }, + "vars": { + "ALIGN": "center", + "BORDER": "double", + "BORDER_FOREGROUND": "#76B900", + "FOREGROUND": "#76B900", + "GUM_LOG_MESSAGE_FOREGROUND": "#76B900", + "MARGIN": "1 2", + "PADDING": "1 2", + "WIDTH": "50" + }, + "options": {} + }, + "packages": [ + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/6wq5al03q2wa5q7n1ncbd7abhl66y7b8-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:13:26.142590Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/ns183jzjw9y8cs1psf76lw21005p4z0j-osv-scanner-2.3.3" + }, + "system": "aarch64-darwin", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/qq33cdnga8jg16qj9p7f8m6llhsxvfyw-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:42:08.260295Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/mry5p0m1qd8sr7hrv5pzrymdvfky1zw7-osv-scanner-2.3.3" + }, + "system": "aarch64-linux", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/1js2yqnpa9m8r6pzibwx3fcz85rrfhz0-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:39.284981Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/l79gbf7zv1ry5h66xnhb544ncpxcniax-osv-scanner-2.3.3" + }, + "system": "x86_64-darwin", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/y8jd2pjjlpkdsbp1hkzszsfzxx1ajz1c-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:41:14.038939Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/znf20q4b2114afsq39pn3fhmcda25rhy-osv-scanner-2.3.3" + }, + "system": "x86_64-linux", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/1dm6zyrj9634fz016hnqild1zznb18jm-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:55.469692Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/lw06ap9kg9hrmsp7a534pwzh303gm02w-diffutils-3.12-info", + "out": "/nix/store/yw1mksapzj4v66c5ag7ng59jn2nh6klq-diffutils-3.12" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/gy9f86m4f8bay71v2aylf6ilmfdblp4c-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:22.168402Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/b0jifqs0ywlwjj5yyigk7jyllsjzgiil-diffutils-3.12-info", + "out": "/nix/store/qm0ch7mlxn6kjdymcznxfsf5qdxqv9lk-diffutils-3.12" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/i5r3m138kb1gihsvjf2hs3g9dmyawk32-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:00.840124Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/7rh8a74vwdb6lvvvwjd0dlpv84hl6mr6-diffutils-3.12-info", + "out": "/nix/store/lwghldxh6irjmbp73lpxv6mrdwb4aqhv-diffutils-3.12" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "diffutils", + "broken": false, + "derivation": "/nix/store/4lqdccfv8wh1si8qh1phfjnl2v7530p9-diffutils-3.12.drv", + "description": "Commands for showing the differences between files (diff, cmp, etc.)", + "install_id": "diffutils", + "license": "GPL-3.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "diffutils-3.12", + "pname": "diffutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:24.850606Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "3.12", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/vajbg82rq4kq817ic61azz8z5363dy4c-diffutils-3.12-info", + "out": "/nix/store/3c05s0vxy8wafaa7lkj4bfh69wa0ch10-diffutils-3.12" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/971s20l3wxc0zv5c6gy4n9d04b9sxf3k-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:55.823224Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/nrk43rrjmq5dn4z0l56frzkpcya7bm7b-findutils-4.10.0-info", + "locate": "/nix/store/s494jb7dpfav3x14349f1gwa1xzw2hhp-findutils-4.10.0-locate", + "out": "/nix/store/z10ivgdarglczg1fp995rl3h6zx17ng0-findutils-4.10.0" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/bzhsr1f65ya9k9vh6b4cjzrdj9glg7bd-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:22.723360Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/bd7lq9h718463n6v4a8j889m7z7p1jmd-findutils-4.10.0-info", + "locate": "/nix/store/lr299wp5bmraayckga75pxfjjl6klz05-findutils-4.10.0-locate", + "out": "/nix/store/8z92qzl5h4dx7y6j5ks9zlpgy1rqi10v-findutils-4.10.0" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/jvn6l62vr18ih2qgn8j9iizi7gwgb9py-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:01.290176Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/xadm4ryq6sx6njbw97p6fvfpdhapc52w-findutils-4.10.0-info", + "locate": "/nix/store/f0y58n40x3ymy4q46jrl4ylynjzcl87g-findutils-4.10.0-locate", + "out": "/nix/store/lzlf2kma2qxsq6ijy9a9irc0g6n8cdpg-findutils-4.10.0" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "findutils", + "broken": false, + "derivation": "/nix/store/m1n6hnajwhnv5qm4mwh2b2briv8vrkb3-findutils-4.10.0.drv", + "description": "GNU Find Utilities, the basic directory searching utilities of the GNU operating system", + "install_id": "findutils", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "findutils-4.10.0", + "pname": "findutils", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:25.467195Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.10.0", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/z9xp5gx83h9j3nyn1qmlimfb9jnda70q-findutils-4.10.0-info", + "locate": "/nix/store/mlhv10zqih8f45hw0jqg4lzbz9ialzx3-findutils-4.10.0-locate", + "out": "/nix/store/zjwih3d9rrrw4ixll52wsy0538p7vdfd-findutils-4.10.0" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/fq3j34ffr44fa5a5nkwci5pdncl5h7hg-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:56.218409Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "doc": "/nix/store/v2jpgmm2fsg7b0z27cc514jdqbhm0isy-gnumake-4.4.1-doc", + "info": "/nix/store/dli72plfj1gcp88wv6px7qjjqvnnlql5-gnumake-4.4.1-info", + "man": "/nix/store/mzy3b5lxi8jbq5d63yvq52sjsq73907l-gnumake-4.4.1-man", + "out": "/nix/store/ij3d5cfr8h31a41l80jzid0z6kj2ajsv-gnumake-4.4.1" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/8g055kd88xxnsxxanrn2l1ycmd1zaqp4-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:23.879706Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "debug": "/nix/store/rcg8zj3391869cn266zwxynplwhyf6qw-gnumake-4.4.1-debug", + "doc": "/nix/store/qvl65zgm24p9sw0mzw3cxijcs8palykk-gnumake-4.4.1-doc", + "info": "/nix/store/2xp5f2ypvrlg6wn5s44jg3ji82l78k9q-gnumake-4.4.1-info", + "man": "/nix/store/3c96gbpypik8gzasv9brnka3i6mks9rz-gnumake-4.4.1-man", + "out": "/nix/store/v1888rzl1qf8zzd27q1vxvqqssizjx3x-gnumake-4.4.1" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/k8zf9n1v4hwky8xq8k83rxh7lrxwy630-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:01.829543Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "doc": "/nix/store/3b9cjf16jx4ncpp3b4k6m8q01nxsrw1n-gnumake-4.4.1-doc", + "info": "/nix/store/rriz5p4q8a6sca7sw3p3js1m5dl09ia8-gnumake-4.4.1-info", + "man": "/nix/store/wb4yn3d7vmi1hr4f8pz38rjvcl7f70ma-gnumake-4.4.1-man", + "out": "/nix/store/0bg5b97b9hbhz8907bfcrch1i116xppa-gnumake-4.4.1" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnumake", + "broken": false, + "derivation": "/nix/store/ppc7b3wjgk81bxnls18vjflgw70wxss4-gnumake-4.4.1.drv", + "description": "Tool to control the generation of non-source files from sources", + "install_id": "gnumake", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnumake-4.4.1", + "pname": "gnumake", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:26.701509Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.4.1", + "outputs_to_install": [ + "man", + "out" + ], + "outputs": { + "debug": "/nix/store/054b9sxxzph2fbwmj45njf1rspjifaz6-gnumake-4.4.1-debug", + "doc": "/nix/store/c2skg22md4ablx0qfcrsh7vpad31zgyx-gnumake-4.4.1-doc", + "info": "/nix/store/6mifiq9cp2bsg9ghkhifrvlmip7z3147-gnumake-4.4.1-info", + "man": "/nix/store/arjpl2nnq7khwfhy16qphyxxg924apy1-gnumake-4.4.1-man", + "out": "/nix/store/k9ybsvscqk4lhz5ndc1ap9800im1cry1-gnumake-4.4.1" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/xczzf9n70psj6lrpm5pmv2cgmv1zb19r-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:56.226588Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/zzm2iycbpgdv23aibi06z0akdi43rhnx-gnutar-1.35-info", + "out": "/nix/store/prip7nslhk7b9hfws6y5y9lzfxjskanv-gnutar-1.35" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/lw1g8qxvdmrdphq1cv5yb50j98m2v1xm-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:23.894623Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/q9bv4apsdh5wlqv0ga7lr9i22iv6978z-gnutar-1.35-info", + "out": "/nix/store/r4c3r48fn312jmjls34nwz41b9y4xsvs-gnutar-1.35" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/smwpwzpldpah35vkwjgkmnh2yrwl0mh2-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:01.837913Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out" + ], + "outputs": { + "info": "/nix/store/z68xf85yapz8rjzk7spnx09cf7cyngr5-gnutar-1.35-info", + "out": "/nix/store/s2z5cn0gikvb2x352nizvlwpmv18jh9k-gnutar-1.35" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gnutar", + "broken": false, + "derivation": "/nix/store/45ynwydadvp0xmsy1bkag7lp2zysy1jc-gnutar-1.35.drv", + "description": "GNU implementation of the `tar` archiver", + "install_id": "gnutar", + "license": "GPL-3.0-or-later", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gnutar-1.35", + "pname": "gnutar", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:26.716276Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "1.35", + "outputs_to_install": [ + "out", + "out" + ], + "outputs": { + "info": "/nix/store/avcnv3j0l6lwsffrihbhj84pgy11yqj3-gnutar-1.35-info", + "out": "/nix/store/1j461raj6r4hihrq9j6alrddmx837fzs-gnutar-1.35" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/ncv12x2sfb3pnxc4z7rlspgc0vf0zvbc-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:12:56.472327Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/55h6jsvhnhilka36s9jkld0k0d55c174-gum-0.17.0" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/4lqcj3v44pcscjmnjip8ggm99hrpilxr-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:41:24.298504Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/51vn4xsrgzfl9g3s00byydpx6jgjgrnd-gum-0.17.0" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/w01nbfjmxqjr3w9sycd0jliiamnljij2-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:02.122815Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/m2wks8knnsfgjl0ikhbi0vv7bqn53385-gum-0.17.0" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "gum", + "broken": false, + "derivation": "/nix/store/468b0lgb2p00hyfj24xb44yj24r33hy4-gum-0.17.0.drv", + "description": "Tasty Bubble Gum for your shell", + "install_id": "gum", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "gum-0.17.0", + "pname": "gum", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:40:27.139900Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.17.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/w3h6fxv7jmapwcm3rxxwp83q16rnskm2-gum-0.17.0" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/fizkq87xqlj4yicyxm2610qqirk29gx6-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:15:55.233322Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/lpf51yzqr105clhg4c4vyn2blyai4axn-yq-go-4.53.3" + }, + "system": "aarch64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/89zhpxra3dajdv5g4mi9pkf26kvff87l-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:45:10.000608Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/hnn92zxywj73282qrq31ha89drv13244-yq-go-4.53.3" + }, + "system": "aarch64-linux", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/ic6w08gsq6fhl16368y1qgpzqvhwx3if-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:12:44.816982Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/agf9fyr053m3092vsmh6vih3apz0kw05-yq-go-4.53.3" + }, + "system": "x86_64-darwin", + "group": "toplevel", + "priority": 5 + }, + { + "attr_path": "yq-go", + "broken": false, + "derivation": "/nix/store/jfa3lz2rbba3mrnvaz0l660han5gd0xy-yq-go-4.53.3.drv", + "description": "Portable command-line YAML processor", + "install_id": "yq-go", + "license": "[ MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "yq-go-4.53.3", + "pname": "yq-go", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:44:33.209955Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "4.53.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/sky6728rldnq9yzvljy25d1l6k7y1saj-yq-go-4.53.3" + }, + "system": "x86_64-linux", + "group": "toplevel", + "priority": 5 + } + ], + "compose": { + "composer": { + "schema-version": "1.14.0", + "options": {}, + "include": { + "environments": [ + { + "dir": "../common" + }, + { + "dir": "../osv-scanner" + } + ] + } + }, + "include": [ + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "diffutils": { + "pkg-path": "diffutils" + }, + "findutils": { + "pkg-path": "findutils" + }, + "gnumake": { + "pkg-path": "gnumake" + }, + "gnutar": { + "pkg-path": "gnutar" + }, + "gum": { + "pkg-path": "gum" + }, + "yq-go": { + "pkg-path": "yq-go" + } + }, + "vars": { + "ALIGN": "center", + "BORDER": "double", + "BORDER_FOREGROUND": "#76B900", + "FOREGROUND": "#76B900", + "GUM_LOG_MESSAGE_FOREGROUND": "#76B900", + "MARGIN": "1 2", + "PADDING": "1 2", + "WIDTH": "50" + }, + "options": {} + }, + "name": "common", + "descriptor": { + "dir": "../common" + } + }, + { + "manifest": { + "schema-version": "1.14.0", + "install": { + "osv-scanner": { + "pkg-path": "osv-scanner", + "pkg-group": "osv-scanner", + "version": "2.3.3" + } + }, + "options": {} + }, + "name": "osv-scanner", + "descriptor": { + "dir": "../osv-scanner" + } + } + ], + "warnings": [] + } +} diff --git a/tools/lint/.flox/env/manifest.toml b/tools/lint/.flox/env/manifest.toml new file mode 100644 index 00000000000..dc65a993724 --- /dev/null +++ b/tools/lint/.flox/env/manifest.toml @@ -0,0 +1,7 @@ +schema-version = "1.14.0" + +[include] +environments = [ + { dir = "../common" }, + { dir = "../osv-scanner" } +] diff --git a/tools/lint/check-flox-locks.sh b/tools/lint/check-flox-locks.sh new file mode 100755 index 00000000000..f4b7d7858bd --- /dev/null +++ b/tools/lint/check-flox-locks.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +set -euo pipefail + +root_lock=".flox/env/manifest.lock" + +canonical_manifest() { + yq -o=json '.options = (.options // {}) | sort_keys(..)' "$1" +} + +canonical_composer() { + yq -o=json '.compose.composer | .options = (.options // {}) | sort_keys(..)' "${root_lock}" +} + +canonical_include() { + local environment_dir="$1" + yq -o=json "(.compose.include[] | select(.descriptor.dir == \"${environment_dir}\") | .manifest) | .options = (.options // {}) | sort_keys(..)" "${root_lock}" +} + +if [[ ! -f "${root_lock}" ]]; then + echo "Missing ${root_lock}. Run: flox include upgrade" >&2 + exit 1 +fi + +if [[ "$(canonical_manifest .flox/env/manifest.toml)" != "$(canonical_composer)" ]]; then + echo "Root Flox manifest is not reflected in ${root_lock}. Run: flox include upgrade" >&2 + exit 1 +fi + +while IFS= read -r environment_dir; do + environment_manifest="${environment_dir}/.flox/env/manifest.toml" + environment_lock="${environment_dir}/.flox/env/manifest.lock" + + if [[ ! -f "${environment_lock}" ]]; then + echo "Missing ${environment_lock}. Run: flox upgrade --dir ${environment_dir}" >&2 + exit 1 + fi + + if [[ "$(canonical_manifest "${environment_manifest}")" != "$(canonical_manifest "${environment_lock}" | yq -o=json '.manifest')" ]]; then + echo "${environment_manifest} is not reflected in ${environment_lock}. Run: flox upgrade --dir ${environment_dir}" >&2 + exit 1 + fi + + if [[ "$(canonical_manifest "${environment_lock}" | yq -o=json '.manifest')" != "$(canonical_include "${environment_dir}")" ]]; then + echo "${environment_lock} is not reflected in ${root_lock}. Run: flox include upgrade" >&2 + exit 1 + fi +done < <(yq -r '.include.environments[].dir' .flox/env/manifest.toml) diff --git a/tools/lint/check-node-version.sh b/tools/lint/check-node-version.sh new file mode 100755 index 00000000000..d79ccf9882e --- /dev/null +++ b/tools/lint/check-node-version.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +set -euo pipefail + +node_version="$(yq '.install.nodejs.version' tools/nodejs/.flox/env/manifest.toml)" +pnpm_version="$(yq -r '.vars.PNPM_VERSION' tools/nodejs/.flox/env/manifest.toml)" +nvmrc_version="$(tr -d '[:space:]' < .nvmrc)" +package_manager="$(yq -r '.packageManager' web/package.json)" + +if [[ "${node_version}" != "${nvmrc_version}" ]]; then + echo "Flox Node.js version ${node_version} does not match .nvmrc ${nvmrc_version}." >&2 + exit 1 +fi + +if [[ "${package_manager}" != "pnpm@${pnpm_version}" ]]; then + echo "Corepack pnpm version ${pnpm_version} does not match web/package.json ${package_manager}." >&2 + exit 1 +fi + +assert_setup_node_uses_nvmrc() { + local workflow="$1" + local version_file="$2" + local setup_node_count + local version_file_count + + setup_node_count="$(grep -c 'uses: actions/setup-node@' "${workflow}" || true)" + version_file_count="$(grep -F -c "node-version-file: ${version_file}" "${workflow}" || true)" + + if [[ "${setup_node_count}" -eq 0 || "${setup_node_count}" != "${version_file_count}" ]]; then + echo "Every setup-node step in ${workflow} must use ${version_file}." >&2 + exit 1 + fi +} + +assert_setup_node_uses_nvmrc .github/workflows/ci.yaml .nvmrc +assert_setup_node_uses_nvmrc .github/actions/build-nemo-platform-wheel/action.yaml '${{ inputs.source-root }}/.nvmrc' diff --git a/tools/lint/check-python-version.sh b/tools/lint/check-python-version.sh new file mode 100755 index 00000000000..4745290992d --- /dev/null +++ b/tools/lint/check-python-version.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +set -euo pipefail + +make_python_version="$(sed -n 's/^PYTHON_VERSION[[:space:]]*?=[[:space:]]*\([^[:space:]#]*\).*/\1/p' Makefile)" +flox_python_version="$(yq -r '.vars.UV_PYTHON' tools/python/.flox/env/manifest.toml)" + +if [[ -z "${make_python_version}" ]]; then + echo "Could not find the default PYTHON_VERSION in Makefile." >&2 + exit 1 +fi + +if [[ -z "${flox_python_version}" || "${flox_python_version}" == "null" ]]; then + echo "Could not find UV_PYTHON in tools/python/.flox/env/manifest.toml." >&2 + exit 1 +fi + +if [[ "${make_python_version}" != "${flox_python_version}" ]]; then + echo "Makefile Python version ${make_python_version} does not match Flox UV_PYTHON ${flox_python_version}." >&2 + exit 1 +fi diff --git a/tools/lint/check-uv-version.sh b/tools/lint/check-uv-version.sh new file mode 100755 index 00000000000..da6eeb05ce4 --- /dev/null +++ b/tools/lint/check-uv-version.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +set -euo pipefail + +_flox_ver="$(yq '.install.uv.version' tools/python/.flox/env/manifest.toml)" + +if [[ ! "${_flox_ver}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + printf "Flox must install an exact uv version, found: %s\n" "${_flox_ver}" >&2 + exit 1 +fi + +_workflows=() +while IFS= read -r _workflow; do + _workflows+=("${_workflow}") +done < <(find .github/workflows -type f \( -name '*.yaml' -o -name '*.yml' \) -exec grep -l 'astral-sh/setup-uv' {} +) + +if [[ "${#_workflows[@]}" -eq 0 ]]; then + echo "No workflows using astral-sh/setup-uv were found." >&2 + exit 1 +fi + +for _workflow in "${_workflows[@]}"; do + _ci_ver="$(yq '.env.UV_VERSION' "${_workflow}")" + + if [[ "${_ci_ver}" != "${_flox_ver}" ]]; then + printf "CI and Flox uv versions differ:\n\n" >&2 + printf "workflow flox-env\n%s %s\n" "${_workflow}:${_ci_ver}" "${_flox_ver}" | column -t >&2 + exit 1 + fi +done diff --git a/tools/lint/lint-all.sh b/tools/lint/lint-all.sh index 56a80fa9fce..bdc721f2ca0 100755 --- a/tools/lint/lint-all.sh +++ b/tools/lint/lint-all.sh @@ -6,6 +6,10 @@ PROJECT_ROOT="${CI_PROJECT_DIR:-$(cd "${SCRIPT_DIR}/../.." && pwd)}" cd "${PROJECT_ROOT}" || exit 1 declare -a scripts=( + "check-uv-version-consistency:tools/lint/check-uv-version.sh" + "check-python-version-consistency:tools/lint/check-python-version.sh" + "check-node-version-consistency:tools/lint/check-node-version.sh" + "check-flox-lock-consistency:tools/lint/check-flox-locks.sh" "lint-licenses:tools/lint/lint-licenses.sh" "lint-openapi:tools/lint/lint-openapi.sh" "lint-config-reference-docs:tools/lint/lint-config-reference-docs.sh" diff --git a/tools/lint/lint-fix-web-sdk.sh b/tools/lint/lint-fix-web-sdk.sh index cb2f0242103..6beb309ef53 100755 --- a/tools/lint/lint-fix-web-sdk.sh +++ b/tools/lint/lint-fix-web-sdk.sh @@ -15,4 +15,5 @@ if ! command -v pnpm >/dev/null 2>&1; then exit 0 fi -exec pnpm gen +pnpm_path="$(command -v pnpm)" +exec node "${pnpm_path}" gen diff --git a/tools/lint/lint-web-sdk.sh b/tools/lint/lint-web-sdk.sh index d0db9cf3f75..c18b1ab4ddb 100755 --- a/tools/lint/lint-web-sdk.sh +++ b/tools/lint/lint-web-sdk.sh @@ -16,4 +16,5 @@ if ! command -v pnpm >/dev/null 2>&1; then exit 0 fi -exec pnpm gen:check +pnpm_path="$(command -v pnpm)" +exec node "${pnpm_path}" gen:check diff --git a/tools/nodejs/.flox/.gitattributes b/tools/nodejs/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/nodejs/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/nodejs/.flox/.gitignore b/tools/nodejs/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/nodejs/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/nodejs/.flox/env.json b/tools/nodejs/.flox/env.json new file mode 100644 index 00000000000..3a2a34288a9 --- /dev/null +++ b/tools/nodejs/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "nemo-platform-nodejs", + "version": 1 +} diff --git a/tools/nodejs/.flox/env/manifest.lock b/tools/nodejs/.flox/env/manifest.lock new file mode 100644 index 00000000000..6eb6d54a636 --- /dev/null +++ b/tools/nodejs/.flox/env/manifest.lock @@ -0,0 +1,117 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "nodejs": { + "pkg-path": "nodejs_22", + "pkg-group": "node", + "version": "22.23.2" + } + }, + "vars": { + "COREPACK_HOME": "${FLOX_ENV_CACHE}/corepack", + "COREPACK_SHIMS": "${FLOX_ENV_CACHE}/corepack/bin", + "PNPM_VERSION": "10.34.5" + }, + "hook": { + "on-activate": " set -euo pipefail\n mkdir -p \"$COREPACK_SHIMS\"\n if ! test -x \"$COREPACK_SHIMS/pnpm\" || ! \"$COREPACK_SHIMS/pnpm\" --version | grep -Fxq \"$PNPM_VERSION\"; then\n corepack install --global \"pnpm@$PNPM_VERSION\"\n corepack enable --install-directory \"$COREPACK_SHIMS\"\n fi\n export PATH=\"$COREPACK_SHIMS:$PATH\"\n" + }, + "options": { + "systems": [ + "aarch64-darwin", + "aarch64-linux", + "x86_64-linux" + ] + } + }, + "packages": [ + { + "attr_path": "nodejs_22", + "broken": false, + "derivation": "/nix/store/98iw9769gchj4vs8vkfvkdnxczaarami-nodejs-22.23.2.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "nodejs-22.23.2", + "pname": "nodejs_22", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T04:55:15.826463Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "22.23.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/s0qzknz77k3lzikgywx2piilfp8w0581-nodejs-22.23.2" + }, + "system": "aarch64-darwin", + "group": "node", + "priority": 5 + }, + { + "attr_path": "nodejs_22", + "broken": false, + "derivation": "/nix/store/i9h6nligglciwssrc0zdri9zji0hx20c-nodejs-22.23.2.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "nodejs-22.23.2", + "pname": "nodejs_22", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:24:46.217099Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "22.23.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/i7dq81ramvcyrzasgv8qbf07rgfiqiai-nodejs-22.23.2" + }, + "system": "aarch64-linux", + "group": "node", + "priority": 5 + }, + { + "attr_path": "nodejs_22", + "broken": false, + "derivation": "/nix/store/1x2rjyk2j93jmsl6myl8nrv7b95viv21-nodejs-22.23.2.drv", + "description": "Event-driven I/O framework for the V8 JavaScript engine", + "install_id": "nodejs", + "license": "MIT", + "locked_url": "https://github.com/flox/nixpkgs?rev=f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "name": "nodejs-22.23.2", + "pname": "nodejs_22", + "rev": "f13ff45afd1bb73e640eaa08a7066dbed07e3238", + "rev_count": 1049422, + "rev_date": "2026-08-07T12:45:23Z", + "scrape_date": "2026-08-09T05:59:03.273842Z", + "stabilities": [ + "unstable" + ], + "unfree": false, + "version": "22.23.2", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/3vm4j8im8bzdal3dsgmhv9gb5kvanbp1-nodejs-22.23.2" + }, + "system": "x86_64-linux", + "group": "node", + "priority": 5 + } + ] +} diff --git a/tools/nodejs/.flox/env/manifest.toml b/tools/nodejs/.flox/env/manifest.toml new file mode 100644 index 00000000000..456ffe9e272 --- /dev/null +++ b/tools/nodejs/.flox/env/manifest.toml @@ -0,0 +1,23 @@ +schema-version = "1.14.0" + +[install] +nodejs = { pkg-path = "nodejs_22", version = "22.23.2", pkg-group = "node" } + +[vars] +PNPM_VERSION = "10.34.5" +COREPACK_HOME = "${FLOX_ENV_CACHE}/corepack" +COREPACK_SHIMS = "${FLOX_ENV_CACHE}/corepack/bin" + +[hook] +on-activate = ''' + set -euo pipefail + mkdir -p "$COREPACK_SHIMS" + if ! test -x "$COREPACK_SHIMS/pnpm" || ! "$COREPACK_SHIMS/pnpm" --version | grep -Fxq "$PNPM_VERSION"; then + corepack install --global "pnpm@$PNPM_VERSION" + corepack enable --install-directory "$COREPACK_SHIMS" + fi + export PATH="$COREPACK_SHIMS:$PATH" +''' + +[options] +systems = ["aarch64-darwin", "aarch64-linux", "x86_64-linux"] diff --git a/tools/open-policy-agent/.flox/.gitattributes b/tools/open-policy-agent/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/open-policy-agent/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/open-policy-agent/.flox/.gitignore b/tools/open-policy-agent/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/open-policy-agent/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/open-policy-agent/.flox/env.json b/tools/open-policy-agent/.flox/env.json new file mode 100644 index 00000000000..dcd64777ea8 --- /dev/null +++ b/tools/open-policy-agent/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "open-policy-agent", + "version": 1 +} diff --git a/tools/open-policy-agent/.flox/env/manifest.lock b/tools/open-policy-agent/.flox/env/manifest.lock new file mode 100644 index 00000000000..0dd4fec0e5d --- /dev/null +++ b/tools/open-policy-agent/.flox/env/manifest.lock @@ -0,0 +1,140 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "open-policy-agent": { + "pkg-path": "open-policy-agent", + "pkg-group": "open-policy-agent", + "version": "1.8.0" + } + }, + "options": {} + }, + "packages": [ + { + "attr_path": "open-policy-agent", + "broken": false, + "derivation": "/nix/store/x6pblvx2vksr0j7x1fn64za35ydpna5m-open-policy-agent-1.8.0.drv", + "description": "General-purpose policy engine", + "install_id": "open-policy-agent", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", + "name": "open-policy-agent-1.8.0", + "pname": "open-policy-agent", + "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev_count": 866707, + "rev_date": "2025-09-24T05:06:22Z", + "scrape_date": "2025-09-26T03:42:58.943863Z", + "stabilities": [ + "unstable", + "staging", + "stable" + ], + "unfree": false, + "version": "1.8.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/28vvl32vygjxdalfprxjqvnwpbsp2j7i-open-policy-agent-1.8.0" + }, + "system": "aarch64-darwin", + "group": "open-policy-agent", + "priority": 5 + }, + { + "attr_path": "open-policy-agent", + "broken": false, + "derivation": "/nix/store/07baqszwy9ldr487q9z6svwcsn7d73px-open-policy-agent-1.8.0.drv", + "description": "General-purpose policy engine", + "install_id": "open-policy-agent", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", + "name": "open-policy-agent-1.8.0", + "pname": "open-policy-agent", + "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev_count": 866707, + "rev_date": "2025-09-24T05:06:22Z", + "scrape_date": "2025-09-26T04:12:13.305775Z", + "stabilities": [ + "unstable", + "staging", + "stable" + ], + "unfree": false, + "version": "1.8.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/i98fklmmf7xcqlmm1hdzkcw4wvyf92my-open-policy-agent-1.8.0" + }, + "system": "aarch64-linux", + "group": "open-policy-agent", + "priority": 5 + }, + { + "attr_path": "open-policy-agent", + "broken": false, + "derivation": "/nix/store/x7smjn0d496p62ckf6jcvp0i4qb9gzqv-open-policy-agent-1.8.0.drv", + "description": "General-purpose policy engine", + "install_id": "open-policy-agent", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", + "name": "open-policy-agent-1.8.0", + "pname": "open-policy-agent", + "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev_count": 866707, + "rev_date": "2025-09-24T05:06:22Z", + "scrape_date": "2025-09-26T04:39:57.100020Z", + "stabilities": [ + "unstable", + "staging", + "stable" + ], + "unfree": false, + "version": "1.8.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/mby5spqsadnhrbdc20h01b5fbf7938vl-open-policy-agent-1.8.0" + }, + "system": "x86_64-darwin", + "group": "open-policy-agent", + "priority": 5 + }, + { + "attr_path": "open-policy-agent", + "broken": false, + "derivation": "/nix/store/rz93a0lg0j3b7p0lygizpnibnln7i2av-open-policy-agent-1.8.0.drv", + "description": "General-purpose policy engine", + "install_id": "open-policy-agent", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=e643668fd71b949c53f8626614b21ff71a07379d", + "name": "open-policy-agent-1.8.0", + "pname": "open-policy-agent", + "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev_count": 866707, + "rev_date": "2025-09-24T05:06:22Z", + "scrape_date": "2025-09-26T05:11:19.422384Z", + "stabilities": [ + "unstable", + "staging", + "stable" + ], + "unfree": false, + "version": "1.8.0", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/v3nqh59l69bpq739pa2amj427h1isc5d-open-policy-agent-1.8.0" + }, + "system": "x86_64-linux", + "group": "open-policy-agent", + "priority": 5 + } + ] +} diff --git a/tools/open-policy-agent/.flox/env/manifest.toml b/tools/open-policy-agent/.flox/env/manifest.toml new file mode 100644 index 00000000000..6072eaa42cf --- /dev/null +++ b/tools/open-policy-agent/.flox/env/manifest.toml @@ -0,0 +1,4 @@ +schema-version = "1.14.0" + +[install] +open-policy-agent = { pkg-path = "open-policy-agent", version = "1.8.0", pkg-group = "open-policy-agent" } diff --git a/tools/osv-scanner/.flox/.gitattributes b/tools/osv-scanner/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/osv-scanner/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/osv-scanner/.flox/.gitignore b/tools/osv-scanner/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/osv-scanner/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/osv-scanner/.flox/env.json b/tools/osv-scanner/.flox/env.json new file mode 100644 index 00000000000..ff08a2cdeed --- /dev/null +++ b/tools/osv-scanner/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "osv-scanner", + "version": 1 +} diff --git a/tools/osv-scanner/.flox/env/manifest.lock b/tools/osv-scanner/.flox/env/manifest.lock new file mode 100644 index 00000000000..320cca7db07 --- /dev/null +++ b/tools/osv-scanner/.flox/env/manifest.lock @@ -0,0 +1,136 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "osv-scanner": { + "pkg-path": "osv-scanner", + "pkg-group": "osv-scanner", + "version": "2.3.3" + } + }, + "options": {} + }, + "packages": [ + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/6wq5al03q2wa5q7n1ncbd7abhl66y7b8-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:13:26.142590Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/ns183jzjw9y8cs1psf76lw21005p4z0j-osv-scanner-2.3.3" + }, + "system": "aarch64-darwin", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/qq33cdnga8jg16qj9p7f8m6llhsxvfyw-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T03:42:08.260295Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/mry5p0m1qd8sr7hrv5pzrymdvfky1zw7-osv-scanner-2.3.3" + }, + "system": "aarch64-linux", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/1js2yqnpa9m8r6pzibwx3fcz85rrfhz0-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:09:39.284981Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/l79gbf7zv1ry5h66xnhb544ncpxcniax-osv-scanner-2.3.3" + }, + "system": "x86_64-darwin", + "group": "osv-scanner", + "priority": 5 + }, + { + "attr_path": "osv-scanner", + "broken": false, + "derivation": "/nix/store/y8jd2pjjlpkdsbp1hkzszsfzxx1ajz1c-osv-scanner-2.3.3.drv", + "description": "Vulnerability scanner written in Go which uses the data provided by https://osv.dev", + "install_id": "osv-scanner", + "license": "Apache-2.0", + "locked_url": "https://github.com/flox/nixpkgs?rev=d407951447dcd00442e97087bf374aad70c04cea", + "name": "osv-scanner-2.3.3", + "pname": "osv-scanner", + "rev": "d407951447dcd00442e97087bf374aad70c04cea", + "rev_count": 1027867, + "rev_date": "2026-07-05T04:06:12Z", + "scrape_date": "2026-07-06T04:41:14.038939Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "2.3.3", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/znf20q4b2114afsq39pn3fhmcda25rhy-osv-scanner-2.3.3" + }, + "system": "x86_64-linux", + "group": "osv-scanner", + "priority": 5 + } + ] +} diff --git a/tools/osv-scanner/.flox/env/manifest.toml b/tools/osv-scanner/.flox/env/manifest.toml new file mode 100644 index 00000000000..e61bb413433 --- /dev/null +++ b/tools/osv-scanner/.flox/env/manifest.toml @@ -0,0 +1,4 @@ +schema-version = "1.14.0" + +[install] +osv-scanner = { pkg-path = "osv-scanner", version = "2.3.3", pkg-group = "osv-scanner" } diff --git a/tools/python/.flox/.gitattributes b/tools/python/.flox/.gitattributes new file mode 100644 index 00000000000..bb5491e1923 --- /dev/null +++ b/tools/python/.flox/.gitattributes @@ -0,0 +1 @@ +env/manifest.lock linguist-generated=true linguist-language=JSON diff --git a/tools/python/.flox/.gitignore b/tools/python/.flox/.gitignore new file mode 100644 index 00000000000..8d211868311 --- /dev/null +++ b/tools/python/.flox/.gitignore @@ -0,0 +1,5 @@ +run/ +cache/ +lib/ +log/ +!env/ diff --git a/tools/python/.flox/env.json b/tools/python/.flox/env.json new file mode 100644 index 00000000000..ec94adb17b3 --- /dev/null +++ b/tools/python/.flox/env.json @@ -0,0 +1,4 @@ +{ + "name": "nemo-platform-python", + "version": 1 +} diff --git a/tools/python/.flox/env/manifest.lock b/tools/python/.flox/env/manifest.lock new file mode 100644 index 00000000000..f5df79a9182 --- /dev/null +++ b/tools/python/.flox/env/manifest.lock @@ -0,0 +1,146 @@ +{ + "lockfile-version": 1, + "manifest": { + "schema-version": "1.14.0", + "install": { + "uv": { + "pkg-path": "uv", + "pkg-group": "uv", + "version": "0.9.14" + } + }, + "vars": { + "UV_CACHE_DIR": "${FLOX_ENV_CACHE}/uv-cache", + "UV_MANAGED_PYTHON": "1", + "UV_PYTHON": "3.12", + "UV_PYTHON_INSTALL_DIR": "${FLOX_ENV_CACHE}/python", + "UV_VENV_SEED": "1" + }, + "hook": { + "on-activate": " set -euo pipefail\n\n export VIRTUAL_ENV=\"$PWD/.venv\"\n export PATH=\"$VIRTUAL_ENV/bin:$PATH\"\n\n if uv sync --frozen --all-packages --check; then\n return 0\n fi\n\n echo \"Python environment is out of sync; synchronizing...\"\n uv sync --frozen --all-packages\n" + }, + "options": {} + }, + "packages": [ + { + "attr_path": "uv", + "broken": false, + "derivation": "/nix/store/5xdn711qjgkkady64ywrxq6mhbi9nz9h-uv-0.9.14.drv", + "description": "Extremely fast Python package installer and resolver, written in Rust", + "install_id": "uv", + "license": "[ Apache-2.0, MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=418468ac9527e799809c900eda37cbff999199b6", + "name": "uv-0.9.14", + "pname": "uv", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "rev_count": 905402, + "rev_date": "2025-12-02T09:27:49Z", + "scrape_date": "2025-12-04T02:56:01.692648Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.9.14", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/zbg4ksfcdcmqbw8x0f0xlla16g2lhxgy-uv-0.9.14" + }, + "system": "aarch64-darwin", + "group": "uv", + "priority": 5 + }, + { + "attr_path": "uv", + "broken": false, + "derivation": "/nix/store/8z6dv3xfq2mc9hw87w37sw2hs1jlchyg-uv-0.9.14.drv", + "description": "Extremely fast Python package installer and resolver, written in Rust", + "install_id": "uv", + "license": "[ Apache-2.0, MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=418468ac9527e799809c900eda37cbff999199b6", + "name": "uv-0.9.14", + "pname": "uv", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "rev_count": 905402, + "rev_date": "2025-12-02T09:27:49Z", + "scrape_date": "2025-12-04T03:05:28.971221Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.9.14", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/2k74mawzpjihb1jpyxlmbhaz7wflbhyb-uv-0.9.14" + }, + "system": "aarch64-linux", + "group": "uv", + "priority": 5 + }, + { + "attr_path": "uv", + "broken": false, + "derivation": "/nix/store/v9j7x0id9jkqg88fydksrddjy2pxcgib-uv-0.9.14.drv", + "description": "Extremely fast Python package installer and resolver, written in Rust", + "install_id": "uv", + "license": "[ Apache-2.0, MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=418468ac9527e799809c900eda37cbff999199b6", + "name": "uv-0.9.14", + "pname": "uv", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "rev_count": 905402, + "rev_date": "2025-12-02T09:27:49Z", + "scrape_date": "2025-12-04T03:13:57.183996Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.9.14", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/msq3vg45z01w0bl7q0k57yyczjh10hv8-uv-0.9.14" + }, + "system": "x86_64-darwin", + "group": "uv", + "priority": 5 + }, + { + "attr_path": "uv", + "broken": false, + "derivation": "/nix/store/16j8ajlaksqd7pv1pnp12v22bb79wsl8-uv-0.9.14.drv", + "description": "Extremely fast Python package installer and resolver, written in Rust", + "install_id": "uv", + "license": "[ Apache-2.0, MIT ]", + "locked_url": "https://github.com/flox/nixpkgs?rev=418468ac9527e799809c900eda37cbff999199b6", + "name": "uv-0.9.14", + "pname": "uv", + "rev": "418468ac9527e799809c900eda37cbff999199b6", + "rev_count": 905402, + "rev_date": "2025-12-02T09:27:49Z", + "scrape_date": "2025-12-04T03:23:20.097970Z", + "stabilities": [ + "staging", + "unstable" + ], + "unfree": false, + "version": "0.9.14", + "outputs_to_install": [ + "out" + ], + "outputs": { + "out": "/nix/store/483pf97g9l0l3rh0988ghffcppm4001a-uv-0.9.14" + }, + "system": "x86_64-linux", + "group": "uv", + "priority": 5 + } + ] +} diff --git a/tools/python/.flox/env/manifest.toml b/tools/python/.flox/env/manifest.toml new file mode 100644 index 00000000000..672fd37718e --- /dev/null +++ b/tools/python/.flox/env/manifest.toml @@ -0,0 +1,26 @@ +schema-version = "1.14.0" + +[install] +uv = { pkg-path = "uv", version = "0.9.14", pkg-group = "uv" } + +[vars] +UV_VENV_SEED="1" +UV_MANAGED_PYTHON="1" +UV_PYTHON="3.12" +UV_CACHE_DIR="${FLOX_ENV_CACHE}/uv-cache" +UV_PYTHON_INSTALL_DIR="${FLOX_ENV_CACHE}/python" + +[hook] +on-activate = ''' + set -euo pipefail + + export VIRTUAL_ENV="$PWD/.venv" + export PATH="$VIRTUAL_ENV/bin:$PATH" + + if uv sync --frozen --all-packages --check; then + return 0 + fi + + echo "Python environment is out of sync; synchronizing..." + uv sync --frozen --all-packages +''' diff --git a/web/AGENTS.md b/web/AGENTS.md index 328abc0806e..8e616fb902b 100644 --- a/web/AGENTS.md +++ b/web/AGENTS.md @@ -32,7 +32,7 @@ Cursor/Claude skills for this monorepo live under **`web/.agents/skills/`** (for - Use **pnpm** exclusively — never npm or yarn - Run frontend commands from `web/`, not from repo root -- Node.js and pnpm come from mise (`mise.toml` at the repo root). Run `make verify-mise` from the repo root to install the pinned versions; mise lands in `~/.local/bin`, so use `~/.local/bin/mise exec -- ` if that directory isn't on PATH and mise isn't activated in the shell +- Node.js and pnpm come from the root Flox environment. Run `flox activate` for interactive work; Corepack provides the repository-pinned pnpm. - Install dependencies: `pnpm add ` - Run scripts: `pnpm ` diff --git a/web/README.md b/web/README.md index dc54d2336ca..424c42b8e5b 100644 --- a/web/README.md +++ b/web/README.md @@ -4,24 +4,17 @@ NeMo Studio is a UI built on the NeMo Platform, which is aimed at improving agen ## Getting Started -1. Get Node.js and pnpm satisfying the `engines` in `package.json` onto your PATH. Either let [mise](https://mise.jdx.dev/) manage them from the versions pinned in `mise.toml` at the repo root: +1. For first setup, install Flox from the repository root and run `make bootstrap-studio`; it provides the pinned Node.js and pnpm versions without requiring global installation. For interactive web work, activate Flox: ```bash - make verify-mise # from the repo root, installs mise + the pinned versions + flox activate # from the repository root ``` - mise installs to `~/.local/bin`, so make sure that's on your PATH, then add the matching line for your shell to its startup file: + Or install Node.js `22.23.2` and pnpm `10.34.5` yourself, then use `TOOLCHAIN=system make bootstrap-studio` from the repository root. - ```bash - export PATH="$HOME/.local/bin:$PATH" - - eval "$(mise activate bash)" # ~/.bashrc - eval "$(mise activate zsh)" # ~/.zshrc - ``` - - or install Node.js and pnpm yourself. `make bootstrap-studio` and the other `make` targets use the mise-managed versions by default, whatever you pick here — pass `NMP_SKIP_MISE=1` to make them use your PATH instead. - -2. Install workspace deps and copy `.env` files, from `web/`: +2. Copy `.env` files from `web/`. `make bootstrap-studio` already installs the + workspace dependencies. In an activated Flox environment, Corepack provides + the repository-pinned pnpm: ```bash pnpm install @@ -55,7 +48,7 @@ pnpm add --filter ### eslint / prettier -We use `eslint` and `prettier` for linting and formatting. `pnpm install` will download those for you, and you can run them with the `pnpm` scripts found in `package.json`. +We use `eslint` and `prettier` for linting and formatting. `pnpm install` will download those for you, and you can run the `pnpm` scripts found in `package.json` directly. It's highly recommend you set up your IDE to run these tools on save, so you don't have to worry about manually formatting/linting, and failing CI because your code isn't formatted/linted.