diff --git a/.cspell.json b/.cspell.json
index cd0ef3d83f57..632875cab758 100644
--- a/.cspell.json
+++ b/.cspell.json
@@ -51,11 +51,13 @@
"artifactgc",
"clientset",
"clusterworkflowtemplate",
+ "codegen",
"Creds",
"cronworkflow",
"cronworkflows",
"cwft",
"daemoned",
+ "direnv",
"featuregen",
"ffsv",
"gcflags",
@@ -72,6 +74,7 @@
"multiclient",
"mainctrfs",
"mypassword",
+ "nixpkgs",
"nonroot",
"podpriority",
"promtail",
@@ -89,6 +92,7 @@
"workflowkey",
"workflowtemplate",
"workflowtemplates",
+ "wslconfig",
"zstd"
]
}
diff --git a/.envrc b/.envrc
new file mode 100644
index 000000000000..edafbba94ed1
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,9 @@
+# Enter the development shell automatically on `cd`, for anyone with direnv
+# installed (https://direnv.net). `direnv allow` once to opt in.
+#
+# Install nix-direnv (https://github.com/nix-community/nix-direnv) too: it caches
+# the shell so `cd` is instant and stops the garbage collector from throwing the
+# tools away.
+#
+# Without direnv, run `nix develop` by hand instead.
+use flake
diff --git a/.github/workflows/update-gomod2nix.yml b/.github/workflows/update-gomod2nix.yml
deleted file mode 100644
index 05bc558206f1..000000000000
--- a/.github/workflows/update-gomod2nix.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: Update gomod2nix
-
-on:
- push:
- branches:
- - 'renovate/**' # Only run on Renovate branches
- - 'dependabot/**'
- paths:
- - 'go.mod'
- - 'go.sum'
-
-permissions:
- contents: write
-
-jobs:
- gomod2nix:
- runs-on: ubuntu-latest
- env:
- HAS_APP: ${{ secrets.GOMOD2NIX_APP_ID != '' }}
- steps:
- - name: Generate a token
- id: generate-token
- # Pushing with GITHUB_TOKEN leaves the PR's CI runs stuck in an
- # "approval required" state, so push as a GitHub App instead.
- # Skipped on forks without the app; the GITHUB_TOKEN fallback still
- # pushes, it just won't re-trigger CI.
- if: env.HAS_APP == 'true'
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
- with:
- client-id: ${{ secrets.GOMOD2NIX_APP_ID }}
- private-key: ${{ secrets.GOMOD2NIX_APP_PRIVATE_KEY }}
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- with:
- # Use the default ref (the branch that was pushed)
- token: ${{ steps.generate-token.outputs.token || secrets.GITHUB_TOKEN }}
- - uses: nixbuild/nix-quick-install-action@9f63be77f412a248c9d9a65a4c82cf066cdf8f0c # v35
- - name: Install gomod2nix
- # Install from the repo's own flake, not upstream `github:nix-community/gomod2nix`.
- # The dev/nix overlay builds gomod2nix against the Go version pinned in
- # dev/nix/conf.nix (single source of truth, kept in sync with go.mod), so the
- # `go mod download` it runs uses the right toolchain. Installing upstream would
- # pull gomod2nix's own stale nixpkgs and an older Go, failing on `go 1.26.1`.
- run: nix profile install ./dev/nix#gomod2nix
-
- - name: Run gomod2nix
- run: gomod2nix
-
- - name: Commit and push changes
- uses: stefanzweifel/git-auto-commit-action@4a55954c782fc1ea30b9056cd3e7a2b40ca8887d # v7.2.0
- with:
- commit_message: "chore(nix): update gomod2nix.toml"
- file_pattern: gomod2nix.toml
diff --git a/.gitignore b/.gitignore
index eed0ec67f237..3de0d34f54b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,7 +18,6 @@ debug.test
git-ask-pass.sh
*.iml
/coverage.out
-.envrc
/.vendor-new
/kustomize
/workflow-controller
@@ -57,11 +56,8 @@ result
/ui/playwright-report/
/ui/test-results/
/ui/e2e/.auth/
-.devenv
-.devenv.flake.nix
+# direnv's cache of the nix devShell (see .envrc)
+.direnv/
.*-vendor
proto_vendor
.github.com
-.go/
-.goenv/
-.gocache/
diff --git a/.markdownlint.yaml b/.markdownlint.yaml
index ea6c07aaeaa4..84a22b6adf4a 100644
--- a/.markdownlint.yaml
+++ b/.markdownlint.yaml
@@ -6,3 +6,9 @@ MD007:
MD024:
siblings_only: true
MD034: false
+# Rules added after markdownlint-cli 0.33, which the docs have never been
+# written to. Turning either on is a docs change, not a tooling one.
+# link text should be descriptive, i.e. not "here" or "link"
+MD059: false
+# table pipes should line up
+MD060: false
diff --git a/Makefile b/Makefile
index 057e133a3d4c..2879c0dccd69 100644
--- a/Makefile
+++ b/Makefile
@@ -11,18 +11,17 @@ help: ## Showcase the help instructions for all documented `make` commands (not
@echo "Documented make targets:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
-# NOTE: Please ensure dependencies are synced with the flake.nix file in dev/nix/flake.nix before upgrading
-# any external dependency. There is documentation on how to do this under the Developer Guide
-
-USE_NIX ?= false
-
-ifeq ($(USE_NIX), true)
-GOPATH ?= .go
-endif
-
+# NOTE: this Makefile is a task runner, not a package manager. Every tool it
+# drives comes from the Nix development shell (`nix develop`, or automatically
+# via direnv — see .envrc) and is found on PATH. To add or upgrade a tool, edit
+# flake.nix; there is documentation on how to do this under the Developer Guide.
+
+# Deliberately not indented: `help` above is still the rule being read, and a
+# tab would make these part of its recipe instead of assignments, leaving
+# GOPATH — and everything derived from it, such as SRC — empty.
ifndef GOPATH
- GOPATH := $(shell go env GOPATH)
- export GOPATH
+GOPATH := $(shell go env GOPATH)
+export GOPATH
endif
# https://stackoverflow.com/questions/4122831/disable-make-builtin-rules-and-variables-from-inside-the-make-file
@@ -39,9 +38,7 @@ GIT_REMOTE := origin
GIT_BRANCH := $(shell git rev-parse --symbolic-full-name --verify --quiet --abbrev-ref HEAD)
RELEASE_TAG := $(shell if [[ "$(GIT_TAG)" =~ ^v[0-9]+\.[0-9]+\.[0-9]+.*$$ ]]; then echo "true"; else echo "false"; fi)
DEV_BRANCH := $(shell [ "$(GIT_BRANCH)" = main ] || [ `echo $(GIT_BRANCH) | cut -c -8` = release- ] || [ `echo $(GIT_BRANCH) | cut -c -4` = dev- ] || [ $(RELEASE_TAG) = true ] && echo false || echo true)
-ifneq ($(USE_NIX), true)
SRC := $(GOPATH)/src/github.com/argoproj/argo-workflows
-endif
VERSION := latest
# VERSION is the version to be used for files in manifests and should always be latest unless we are releasing
# we assume HEAD means you are on a tag
@@ -144,8 +141,9 @@ ifeq ($(PROFILE),sso)
AUTH_MODE := sso
endif
-# Makefile managed tools
-ifeq ($(USE_NIX), true)
+# Tools, all provided by the Nix development shell (flake.nix) and resolved from
+# PATH. The indirection is kept so a tool can be pointed elsewhere for a one-off
+# (e.g. `make lint TOOL_GOLANGCI_LINT=./golangci-lint`).
TOOL_MOCKERY := mockery
TOOL_CONTROLLER_GEN := controller-gen
TOOL_GO_TO_PROTOBUF := go-to-protobuf
@@ -159,28 +157,6 @@ TOOL_GOIMPORTS := goimports
TOOL_GOLANGCI_LINT := golangci-lint
TOOL_GOTESTSUM := gotestsum
TOOL_BUF := buf
-else
-TOOL_MOCKERY := $(GOPATH)/bin/mockery
-TOOL_CONTROLLER_GEN := $(GOPATH)/bin/controller-gen
-TOOL_GO_TO_PROTOBUF := $(GOPATH)/bin/go-to-protobuf
-TOOL_PROTOC_GEN_GOGO := $(GOPATH)/bin/protoc-gen-gogo
-TOOL_PROTOC_GEN_GOGOFAST := $(GOPATH)/bin/protoc-gen-gogofast
-TOOL_PROTOC_GEN_GRPC_GATEWAY:= $(GOPATH)/bin/protoc-gen-grpc-gateway
-TOOL_PROTOC_GEN_SWAGGER := $(GOPATH)/bin/protoc-gen-swagger
-TOOL_OPENAPI_GEN := $(GOPATH)/bin/openapi-gen
-TOOL_SWAGGER := $(GOPATH)/bin/swagger
-TOOL_GOIMPORTS := $(GOPATH)/bin/goimports
-TOOL_GOLANGCI_LINT := $(GOPATH)/bin/golangci-lint
-TOOL_GOTESTSUM := $(GOPATH)/bin/gotestsum
-TOOL_BUF := $(GOPATH)/bin/buf
-endif
-# Extract custom build tags for linting (excluding platform-specific ones)
-GO_BUILD_TAGS := $(shell grep -rh '//go:build' --include='*.go' --exclude-dir=vendor --exclude-dir=".??*" . 2>/dev/null | grep -v vendor | sed 's|.*//go:build ||' | tr '&|!() ' '\n' | grep -v '^$$' | grep -vE '^(windows|darwin|linux|ignore_autogenerated)$$' | sort -u | tr '\n' ',' | sed 's/,$$//')
-TOOL_EMBEDDOC := hack/embeddoc/embeddoc
-
-# npm bin -g will do this on later npms than we have
-NVM_BIN ?= $(shell npm config get prefix)/bin
-ifeq ($(USE_NIX), true)
TOOL_CLANG_FORMAT := clang-format
TOOL_TYPOS := typos
TOOL_CSPELL := cspell
@@ -188,33 +164,11 @@ TOOL_MARKDOWN_LINK_CHECK := markdown-link-check
TOOL_MARKDOWNLINT := markdownlint
TOOL_DEVCONTAINER := devcontainer
TOOL_PROPERDOCS := properdocs
-else
-TOOL_CLANG_FORMAT := /usr/local/bin/clang-format
-TOOL_TYPOS := $(GOPATH)/bin/typos
-TOOL_CSPELL := $(NVM_BIN)/cspell
-TOOL_MARKDOWN_LINK_CHECK := $(NVM_BIN)/markdown-link-check
-TOOL_MARKDOWNLINT := $(NVM_BIN)/markdownlint
-TOOL_DEVCONTAINER := $(NVM_BIN)/devcontainer
-TOOL_PROPERDOCS_DIR := $(HOME)/.venv/properdocs
-TOOL_PROPERDOCS := $(TOOL_PROPERDOCS_DIR)/bin/properdocs
-endif
+# The exception: built from this repo, so it is a real file target.
+TOOL_EMBEDDOC := hack/embeddoc/embeddoc
-# Spell-check tool versions. Sourced from nixpkgs under USE_NIX; pinned here for
-# the npm/binary installs below. Keep aligned with dev/nix when bumping.
-CSPELL_VERSION := 9.7.0
-TYPOS_VERSION := 1.47.0
-# Map `uname` output to the target triple used by typos' release tarballs.
-TYPOS_UNAME_ARCH := $(shell uname -m)
-ifeq ($(TYPOS_UNAME_ARCH),arm64)
-TYPOS_ARCH := aarch64
-else
-TYPOS_ARCH := $(TYPOS_UNAME_ARCH)
-endif
-ifeq ($(shell uname -s),Darwin)
-TYPOS_TARGET := $(TYPOS_ARCH)-apple-darwin
-else
-TYPOS_TARGET := $(TYPOS_ARCH)-unknown-linux-musl
-endif
+# Extract custom build tags for linting (excluding platform-specific ones)
+GO_BUILD_TAGS := $(shell grep -rh '//go:build' --include='*.go' --exclude-dir=vendor --exclude-dir=".??*" . 2>/dev/null | grep -v vendor | sed 's|.*//go:build ||' | tr '&|!() ' '\n' | grep -v '^$$' | grep -vE '^(windows|darwin|linux|ignore_autogenerated)$$' | sort -u | tr '\n' ',' | sed 's/,$$//')
.PHONY: print-variables
print-variables: ## Print Makefile variables
@@ -222,9 +176,6 @@ print-variables: ## Print Makefile variables
@echo KUBECTX=$(KUBECTX) K3D=$(K3D) DOCKER_PUSH=$(DOCKER_PUSH) TARGET_PLATFORM=$(TARGET_PLATFORM)
@echo PROFILE=$(PROFILE) AUTH_MODE=$(AUTH_MODE) SECURE=$(SECURE) STATIC_FILES=$(STATIC_FILES) ALWAYS_OFFLOAD_NODE_STATUS=$(ALWAYS_OFFLOAD_NODE_STATUS) UPPERIO_DB_DEBUG=$(UPPERIO_DB_DEBUG) LOG_LEVEL=$(LOG_LEVEL) NAMESPACED=$(NAMESPACED) BASE_HREF=$(BASE_HREF) GOPATH=$(GOPATH)
-ifneq ($(USE_NIX), true)
-proto_vendor: $(TOOL_BUF)
-endif
proto_vendor: argo-proto.yaml
GOFLAGS="$(GOFLAGS) -mod=mod" go run hack/proto-export/*.go --out proto_vendor
touch proto_vendor
@@ -277,10 +228,6 @@ SWAGGER_FILES := pkg/apiclient/_.primary.swagger.json \
pkg/apiclient/workflowarchive/workflow-archive.swagger.json \
pkg/apiclient/workflowtemplate/workflow-template.swagger.json \
pkg/apiclient/sync/sync.swagger.json
-PROTO_BINARIES := $(TOOL_PROTOC_GEN_GOGO) $(TOOL_PROTOC_GEN_GOGOFAST) $(TOOL_GOIMPORTS) $(TOOL_PROTOC_GEN_GRPC_GATEWAY) $(TOOL_PROTOC_GEN_SWAGGER) $(TOOL_CLANG_FORMAT)
-ifneq ($(USE_NIX), true)
-pkg/apiclient/%.swagger.json: $(PROTO_BINARIES)
-endif
QUICK_GENERATED_DOCS := docs/metrics.md docs/tracing.md docs/database-migrations.md docs/variable-flow/variables.md
GENERATED_DOCS := $(QUICK_GENERATED_DOCS) docs/fields.md docs/cli/argo.md docs/workflow-controller-configmap.md docs/go-sdk-guide.md
@@ -417,21 +364,16 @@ argoexec-nonroot-image:
fi
.PHONY: codegen
-ifneq ($(USE_NIX), true)
-codegen: $(TOOL_MOCKERY) $(TOOL_BUF)
-endif
codegen: types swagger manifests $(GENERATED_DOCS) vendor/modules.txt ## Generate code via `go generate`, as well as SDKs
go generate ./...
$(TOOL_MOCKERY) --config .mockery.yaml
- make --directory sdks/java USE_NIX=$(USE_NIX) generate
+ make --directory sdks/java generate
.PHONY: check-pwd
check-pwd:
-ifneq ($(USE_NIX), true)
ifneq ($(SRC),$(PWD))
@echo "⚠️ Code generation will not work if code in not checked out into $(SRC)" >&2
endif
-endif
.PHONY: types
types: check-pwd pkg/apis/workflow/v1alpha1/generated.proto pkg/apis/workflow/v1alpha1/openapi_generated.go pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
@@ -454,84 +396,10 @@ swagger: \
api/jsonschema/schema.json
-$(TOOL_MOCKERY): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- GOTOOLCHAIN=go1.26.1 go install github.com/vektra/mockery/v3@v3.5.1
-endif
-$(TOOL_CONTROLLER_GEN): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.18.0
-endif
-$(TOOL_GO_TO_PROTOBUF): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install k8s.io/code-generator/cmd/go-to-protobuf@v0.35.1
-endif
-$(TOOL_PROTOC_GEN_GOGO): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install github.com/gogo/protobuf/protoc-gen-gogo@v1.3.2
-endif
-$(TOOL_PROTOC_GEN_GOGOFAST): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install github.com/gogo/protobuf/protoc-gen-gogofast@v1.3.2
-endif
-$(TOOL_PROTOC_GEN_GRPC_GATEWAY): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@v1.16.0
-endif
-$(TOOL_PROTOC_GEN_SWAGGER): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@v1.16.0
-endif
-$(TOOL_OPENAPI_GEN): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install k8s.io/kube-openapi/cmd/openapi-gen@v0.0.0-20220124234850-424119656bbf
-endif
-$(TOOL_SWAGGER): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install github.com/go-swagger/go-swagger/cmd/swagger@v0.33.1
-endif
-$(TOOL_GOIMPORTS): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install golang.org/x/tools/cmd/goimports@v0.35.0
-endif
-$(TOOL_GOTESTSUM): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install gotest.tools/gotestsum@v1.12.3
-endif
-$(TOOL_BUF): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- go install github.com/bufbuild/buf/cmd/buf@v1.65.0
-endif
-
$(TOOL_EMBEDDOC): hack/embeddoc/main.go hack/embeddoc/go.mod
cd hack/embeddoc && go build -o embeddoc .
-$(TOOL_CLANG_FORMAT):
-ifeq (, $(shell which clang-format))
-ifeq ($(shell uname),Darwin)
- brew install clang-format
-else
- sudo apt update
- sudo apt install -y clang-format
-endif
-endif
-
# go-to-protobuf fails with mysterious errors on code that doesn't compile
-ifneq ($(USE_NIX), true)
-pkg/apis/workflow/v1alpha1/generated.proto: $(TOOL_GO_TO_PROTOBUF) $(PROTO_BINARIES)
-endif
pkg/apis/workflow/v1alpha1/generated.proto: $(TYPES) proto-vendor vendor/modules.txt
# These files are generated on a v4/ folder by the tool. Link them to the root folder
mkdir -p github.com/argoproj
@@ -592,9 +460,6 @@ pkg/apiclient/sync/sync.swagger.json: $(TYPES) pkg/apiclient/sync/sync.proto
$(call protoc,pkg/apiclient/sync/sync.proto)
# generate other files for other CRDs
-ifneq ($(USE_NIX), true)
-manifests/base/crds/full/argoproj.io_workflows.yaml: $(TOOL_CONTROLLER_GEN)
-endif
manifests/base/crds/full/argoproj.io_workflows.yaml: $(TYPES) ./hack/manifests/crdgen.sh ./hack/manifests/crds.go
./hack/manifests/crdgen.sh
@@ -647,30 +512,18 @@ dist/manifests/%: manifests/%
manifests-validate:
kubectl apply --server-side --validate=strict --dry-run=server -f 'manifests/*.yaml'
-$(TOOL_GOLANGCI_LINT): Makefile
- curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b `go env GOPATH`/bin v2.11.3
-
.PHONY: lint lint-go lint-ui
lint: lint-go lint-ui features-validate ## Lint the project
-ifneq ($(USE_NIX), true)
-# golangci-lint loads packages in implicit vendor mode, so the vendor tree must
-# be fresh. Skipped under Nix, which deletes vendor/ in the recipe below.
-lint-go: $(TOOL_GOLANGCI_LINT) vendor/modules.txt
-endif
lint-go: ui/dist/app/index.html
-ifeq ($(USE_NIX), true)
+ # golangci-lint loads packages in implicit vendor mode, which conflicts with
+ # the `go mod tidy` below, so lint against the module cache instead.
rm -Rf v3 vendor
-endif
# If you're using `woc.wf.Spec` or `woc.execWf.Status` your code probably won't work with WorkflowTemplate.
# * Change `woc.wf.Spec` to `woc.execWf.Spec`.
# * Change `woc.execWf.Status` to `woc.wf.Status`.
@awk '(/woc.wf.Spec/ || /woc.execWf.Status/) && !/not-woc-misuse/ {print FILENAME ":" FNR "\t" $0 ; exit 1}' $(shell find workflow/controller -type f -name '*.go' -not -name '*test*')
# Tidy Go modules
go mod tidy
-ifneq ($(USE_NIX), true)
- # Re-vendor if tidy changed go.mod or go.sum, so the lint below sees a consistent tree
- [ vendor/modules.txt -nt go.mod ] && [ vendor/modules.txt -nt go.sum ] || go mod vendor
-endif
# Lint Go files (with auto-discovered build tags)
$(TOOL_GOLANGCI_LINT) run --fix --verbose --build-tags="$(GO_BUILD_TAGS)"
@@ -682,16 +535,8 @@ lint-ui: ui/dist/app/index.html
# for local we have a faster target that prints to stdout, does not use json, and can cache because it has no coverage
.PHONY: test
-ifneq ($(USE_NIX), true)
-test: $(TOOL_GOTESTSUM) $(TOOL_BUF)
-endif
test: ui/dist/app/index.html $(JSON_TEST_OUTPUT) ## Run tests
-ifneq ($(USE_NIX), true)
- go mod vendor
- go build -mod=vendor ./...
-else
go build ./...
-endif
env KUBECONFIG=/dev/null $(call gotest,./...,unit,-p 20)
# marker file, based on it's modification time, we know how long ago this target was run
@mkdir -p dist
@@ -747,6 +592,10 @@ dist/argosay:
mkdir -p dist
cp test/e2e/images/argosay/v2/argosay dist/
+# The development shell supplies tilt and k3d, so these two targets exist only
+# for the environments that do not use it yet: CI and the dev container. They go
+# when those move to the flake.
+
# renovate: datasource=github-releases depName=tilt-dev/tilt
TILT_VERSION ?= 0.37.3
@@ -791,7 +640,7 @@ k3d-down: ## Delete the k3d cluster used by Tilt
K3D_CLUSTER_NAME=$(K3D_CLUSTER_NAME) ./hack/tilt/k3d-down.sh
.PHONY: start
-start: tilt k3d-up ## Start the dev stack in-cluster via Tilt
+start: k3d-up ## Start the dev stack in-cluster via Tilt
# --host=0.0.0.0 binds the Tilt web UI to all interfaces so it is reachable
# via the container IP in a devcontainer (the devcontainer CLI doesn't
# forward ports). The argo server/UI/metrics forwards bind 0.0.0.0 too.
@@ -821,7 +670,7 @@ mysql-dump:
test-cli: ./dist/argo
-test-%: $(TOOL_GOTESTSUM) $(JSON_TEST_OUTPUT) vendor/modules.txt
+test-%: $(JSON_TEST_OUTPUT) vendor/modules.txt
E2E_WAIT_TIMEOUT=$(E2E_WAIT_TIMEOUT) E2E_INITLESS=$(INITLESS) $(call gotest,./test/e2e,$@,-timeout $(E2E_SUITE_TIMEOUT) --tags $*)
.PHONY: test-%-sdk
@@ -837,10 +686,10 @@ test-ui-e2e:
yarn --cwd ui install
yarn --cwd ui e2e
-Test%: $(TOOL_GOTESTSUM) $(JSON_TEST_OUTPUT) vendor/modules.txt
+Test%: $(JSON_TEST_OUTPUT) vendor/modules.txt
E2E_WAIT_TIMEOUT=$(E2E_WAIT_TIMEOUT) E2E_INITLESS=$(INITLESS) $(call gotest,./test/e2e,$@,-timeout $(E2E_SUITE_TIMEOUT) -count 1 --tags $(ALL_BUILD_TAGS) -parallel $(E2E_PARALLEL) -run='.*/$*')
-Benchmark%: $(TOOL_GOTESTSUM) $(JSON_TEST_OUTPUT) vendor/modules.txt
+Benchmark%: $(JSON_TEST_OUTPUT) vendor/modules.txt
$(call gotest,./test/e2e,$@,--tags $(ALL_BUILD_TAGS) -run='$@' -benchmem -count=$(BENCHMARK_COUNT) -bench .)
# clean
@@ -870,9 +719,6 @@ docs/variable-flow/variables.md: $(wildcard util/variables/*.go) $(wildcard util
go test -run TestGenerateMarkdown -count=1 ./util/variables/ -args -write
# swagger
-ifneq ($(USE_NIX), true)
-pkg/apis/workflow/v1alpha1/openapi_generated.go: $(TOOL_OPENAPI_GEN)
-endif
pkg/apis/workflow/v1alpha1/openapi_generated.go: $(TYPES) vendor/modules.txt
# These files are generated on a v4/ folder by the tool. Link them to the root folder
[ -e ./v4 ] || ln -s . v4
@@ -889,9 +735,6 @@ pkg/apis/workflow/v1alpha1/openapi_generated.go: $(TYPES) vendor/modules.txt
# generates many other files (listers, informers, client etc).
.PRECIOUS: pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go
-ifneq ($(USE_NIX), true)
-pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go: $(TOOL_GO_TO_PROTOBUF)
-endif
pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go: $(TYPES) vendor/modules.txt
CODEGEN_DIR=$$(go list -mod=mod -m -f '{{.Dir}}' k8s.io/code-generator@v0.35.1); \
bash -c "source $$CODEGEN_DIR/kube_codegen.sh && \
@@ -918,10 +761,10 @@ pkg/apiclient/_.secondary.swagger.json: hack/api/swagger/secondaryswaggergen.go
GOFLAGS="$(GOFLAGS) -mod=mod" go run ./hack/api/swagger secondaryswaggergen
# we always ignore the conflicts, so lets automated figuring out how many there will be and just use that
-dist/swagger-conflicts: $(TOOL_SWAGGER) $(SWAGGER_FILES)
+dist/swagger-conflicts: $(SWAGGER_FILES)
swagger mixin $(SWAGGER_FILES) 2>&1 | grep -c skipping > dist/swagger-conflicts || true
-dist/mixed.swagger.json: $(TOOL_SWAGGER) $(SWAGGER_FILES) dist/swagger-conflicts
+dist/mixed.swagger.json: $(SWAGGER_FILES) dist/swagger-conflicts
swagger mixin -c $(shell cat dist/swagger-conflicts) $(SWAGGER_FILES) -o dist/mixed.swagger.json
dist/swaggifed.swagger.json: dist/mixed.swagger.json hack/api/swagger/swaggify.sh
@@ -930,10 +773,10 @@ dist/swaggifed.swagger.json: dist/mixed.swagger.json hack/api/swagger/swaggify.s
dist/kubeified.swagger.json: dist/swaggifed.swagger.json dist/kubernetes.swagger.json
GOFLAGS="$(GOFLAGS) -mod=mod" go run ./hack/api/swagger kubeifyswagger dist/swaggifed.swagger.json dist/kubeified.swagger.json
-dist/swagger.0.json: $(TOOL_SWAGGER) dist/kubeified.swagger.json
+dist/swagger.0.json: dist/kubeified.swagger.json
$(TOOL_SWAGGER) flatten --with-flatten minimal --with-flatten remove-unused dist/kubeified.swagger.json -o dist/swagger.0.json
-api/openapi-spec/swagger.json: $(TOOL_SWAGGER) dist/swagger.0.json
+api/openapi-spec/swagger.json: dist/swagger.0.json
$(TOOL_SWAGGER) flatten --with-flatten remove-unused dist/swagger.0.json -o api/openapi-spec/swagger.json
api/jsonschema/schema.json: api/openapi-spec/swagger.json hack/api/jsonschema/main.go
@@ -959,73 +802,28 @@ docs/cli/argo.md: $(CLI_PKG_FILES) go.sum ui/dist/app/index.html hack/docs/cli.g
docs/go-sdk-guide.md: $(TOOL_EMBEDDOC)
$(TOOL_EMBEDDOC)
-$(TOOL_CSPELL): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- npm list -g cspell@$(CSPELL_VERSION) > /dev/null || npm i -g cspell@$(CSPELL_VERSION)
-endif
-
-$(TOOL_TYPOS): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- # typos has no npm package; install the prebuilt static binary
- mkdir -p $(GOPATH)/bin
- curl -sSfL https://github.com/crate-ci/typos/releases/download/v$(TYPOS_VERSION)/typos-v$(TYPOS_VERSION)-$(TYPOS_TARGET).tar.gz | tar -xz -C $(GOPATH)/bin ./typos
-endif
-
# Markdown to spell-check: all tracked Markdown except SDKs, changelogs and the
# generated API reference docs (whose typos come from upstream/vendored comments).
SPELLCHECK_MD = $(shell git ls-files '*.md' | grep -vE '^(sdks/|CHANGELOG|USERS\.md|docs/(fields|executor_swagger)\.md)')
.PHONY: docs-spellcheck
-ifneq ($(USE_NIX), true)
-docs-spellcheck: $(TOOL_TYPOS) $(TOOL_CSPELL)
-endif
docs-spellcheck: $(QUICK_GENERATED_DOCS) ## Spell check docs
# catch common misspellings across all docs (config: _typos.toml)
$(TOOL_TYPOS) $(SPELLCHECK_MD)
# dictionary-based spell check of prose docs (config: .cspell.json)
$(TOOL_CSPELL) lint --no-progress --config .cspell.json "docs/**/*.md"
-$(TOOL_MARKDOWN_LINK_CHECK): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- npm list -g markdown-link-check@3.11.1 > /dev/null || npm i -g markdown-link-check@3.11.1
-endif
-
.PHONY: docs-linkcheck
-ifneq ($(USE_NIX), true)
-docs-linkcheck: $(TOOL_MARKDOWN_LINK_CHECK)
-endif
docs-linkcheck:
# check docs for broken links
$(TOOL_MARKDOWN_LINK_CHECK) -q -c .mlc_config.json $(shell find docs -name '*.md' -not -name fields.md -not -name executor_swagger.md)
-$(TOOL_MARKDOWNLINT): Makefile
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- npm list -g markdownlint-cli@0.33.0 > /dev/null || npm i -g markdownlint-cli@0.33.0
-endif
-
.PHONY: docs-lint
-ifneq ($(USE_NIX), true)
-docs-lint: $(TOOL_MARKDOWNLINT)
-endif
docs-lint: $(QUICK_GENERATED_DOCS)
# lint docs
$(TOOL_MARKDOWNLINT) docs --fix --ignore docs/fields.md --ignore docs/executor_swagger.md --ignore docs/cli --ignore docs/walk-through/the-structure-of-workflow-specs.md --ignore docs/tested-kubernetes-versions.md --ignore docs/go-sdk-guide.md --ignore docs/database-migrations.md
-$(TOOL_PROPERDOCS): docs/requirements.txt
-# update this in Nix when upgrading it here
-ifneq ($(USE_NIX), true)
- python3 -m venv $(TOOL_PROPERDOCS_DIR)
- $(TOOL_PROPERDOCS_DIR)/bin/pip install --no-cache-dir -r $<
-endif
-
.PHONY: docs
-ifneq ($(USE_NIX), true)
-docs: $(TOOL_PROPERDOCS)
-endif
docs: docs-spellcheck docs-lint ## Build docs TODO: This is temporarily disabled to unblock merging PRs.
# docs-linkcheck
# copy README.md to docs/README.md
@@ -1054,9 +852,6 @@ docs-serve: docs ## Build and serve the docs on localhost
githooks: .git/hooks/pre-commit .git/hooks/commit-msg
.PHONY: pre-commit
-ifneq ($(USE_NIX), true)
-pre-commit: $(TOOL_BUF)
-endif
pre-commit: codegen lint docs ## Run the pre-commit hooks
# marker file, based on it's modification time, we know how long ago this target was run
touch dist/pre-commit
@@ -1079,7 +874,7 @@ feature-new: hack/featuregen/featuregen
$< new --filename $(FEATURE_FILENAME)
.PHONY: features-validate
-features-validate: hack/featuregen/featuregen $(TOOL_MARKDOWNLINT)
+features-validate: hack/featuregen/featuregen
# Validate all pending feature documentation files
$< validate
$< update --dry | tail +4 | $(TOOL_MARKDOWNLINT) -s
@@ -1091,14 +886,14 @@ features-preview: hack/featuregen/featuregen
$< update --dry
.PHONY: features-update
-features-update: hack/featuregen/featuregen $(TOOL_MARKDOWNLINT)
+features-update: hack/featuregen/featuregen
# Update the features documentation, but keep the feature files in the pending directory
# Updates docs/new-features.md for release-candidates
$< update --version $(VERSION)
$(TOOL_MARKDOWNLINT) ./docs/new-features.md
.PHONY: features-release
-features-release: hack/featuregen/featuregen $(TOOL_MARKDOWNLINT)
+features-release: hack/featuregen/featuregen
# Update the features documentation AND move the feature files to the released directory
# Use this for the final update when releasing a version
$< update --version $(VERSION) --final
@@ -1110,14 +905,9 @@ hack/featuregen/featuregen: hack/featuregen/main.go hack/featuregen/contents.go
# dev container
-$(TOOL_DEVCONTAINER): Makefile
-ifeq (, $(shell command -v devcontainer 2>/dev/null))
- npm list -g @devcontainers/cli@0.75.0 > /dev/null || npm i -g @devcontainers/cli@0.75.0
-endif
-
.PHONY: devcontainer-build
-devcontainer-build: $(TOOL_DEVCONTAINER)
- devcontainer build \
+devcontainer-build:
+ $(TOOL_DEVCONTAINER) build \
--workspace-folder . \
--config .devcontainer/builder/devcontainer.json \
--platform $(TARGET_PLATFORM) \
@@ -1126,8 +916,8 @@ devcontainer-build: $(TOOL_DEVCONTAINER)
$(DEVCONTAINER_FLAGS)
.PHONY: devcontainer-up
-devcontainer-up: $(TOOL_DEVCONTAINER)
- devcontainer up --workspace-folder .
+devcontainer-up:
+ $(TOOL_DEVCONTAINER) up --workspace-folder .
# gRPC/protobuf generation for artifact.proto
pkg/apiclient/artifact/artifact.swagger.json: $(TYPES) pkg/apiclient/artifact/artifact.proto
@@ -1139,7 +929,3 @@ swagger: pkg/apiclient/artifact/artifact.swagger.json
.PHONY: test-go-sdk
test-go-sdk: ## Run all Go SDK examples
./hack/test-go-sdk.sh
-
-.PHONY: gomod2nix
-gomod2nix: ## Run gomod2nix via Docker to update gomod2nix.toml
- docker run --rm -v $$(PWD):/app -w /app nixos/nix nix --extra-experimental-features "nix-command flakes" run github:nix-community/gomod2nix
diff --git a/_typos.toml b/_typos.toml
index 2d44676060e5..a2a008f54388 100644
--- a/_typos.toml
+++ b/_typos.toml
@@ -1,7 +1,7 @@
# Config for `typos` (https://github.com/crate-ci/typos), which flags only known
# misspellings, so no project-jargon dictionary is needed. Prose docs also get a
-# dictionary-based pass from cspell (.cspell.json). Version is pinned in the
-# Makefile and comes from nixpkgs in dev/nix.
+# dictionary-based pass from cspell (.cspell.json). The version comes from the
+# development shell (flake.nix).
[files]
extend-exclude = [
diff --git a/dev/nix/README.md b/dev/nix/README.md
deleted file mode 100644
index ea0b6b62c9f0..000000000000
--- a/dev/nix/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Argo Nixfiles
-
-See [Try Argo using Nix](../../docs/running-nix.md).
diff --git a/dev/nix/conf.nix b/dev/nix/conf.nix
deleted file mode 100644
index 86cf5f4feaf0..000000000000
--- a/dev/nix/conf.nix
+++ /dev/null
@@ -1,62 +0,0 @@
-# most of these configuration options might not do anything yet.
-# the plan is to gradually introduce more and more functionality into Nix
-# and move away from the Makefile.
-# At the moment, only the equivalent of "make start UI=true" is supported.
-# Even then the buildFlags are not passed into Go, meaning you won't see the correct version info yet.
-# This is only intended for quick developing at the moment, gradually more functionality will be pushed here.
-rec {
- # Keep in sync with go.mod
- goVersion = "1.26.1";
- version = "latest";
- env = {
- DEFAULT_REQUEUE_TIME = "1s";
- SECURE = "false";
- ALWAYS_OFFLOAD_NODE_STATUS = "false";
- LOG_LEVEL = "debug";
- UPPERIO_DB_DEBUG = "0";
- IMAGE_NAMESPACE = "quay.io/argoproj";
- VERSION = "${version}";
- AUTH_MODE = "hybrid";
- NAMESPACED = "true";
- KUBE_NAMESPACE = "argo";
- NAMESPACE = "${env.KUBE_NAMESPACE}";
- MANAGED_NAMESPACE = "${env.KUBE_NAMESPACE}"; # same as kubeNamespace
- CTRL = "true";
- LOGS = "true"; # same as CTRL - not acted upon
- UI = "true"; # same as CTRL
- API = "true"; # same as CTRL
- UI_SECURE = "false";
- PLUGINS = "false";
- };
- controller = {
- env = {
- CTRL = "${env.CTRL}";
- ARGO_EXECUTOR_PLUGINS = "${env.PLUGINS}";
- ARGO_REMOVE_PVC_PROTECTION_FINALIZER = "true";
- ARGO_PROGRESS_PATCH_TICK_DURATION = "7s";
- DEFAULT_REQUEUE_TIME = "${env.DEFAULT_REQUEUE_TIME}";
- LEADER_ELECTION_IDENTITY = "local";
- ALWAYS_OFFLOAD_NODE_STATUS = "${env.ALWAYS_OFFLOAD_NODE_STATUS}";
- OFFLOAD_NODE_STATUS_TTL = "30s";
- WORKFLOW_GC_PERIOD = "30s";
- UPPERIO_DB_DEBUG = "${env.UPPERIO_DB_DEBUG}";
- ARCHIVED_WORKFLOW_GC_PERIOD = "30s";
- };
- args = "--executor-image ${env.IMAGE_NAMESPACE}/argoexec:${env.VERSION} --namespaced=${env.NAMESPACED} --managed-namespace=${env.MANAGED_NAMESPACE} --loglevel ${env.LOG_LEVEL}";
- };
-
- argoServer = {
- env = {
- UPPERIO_DB_DEBUG = "${env.UPPERIO_DB_DEBUG}";
- CI_ONLY_DISABLE_ARTIFACT_SERVER_CHECKS = "true";
- };
- args = "--loglevel ${env.LOG_LEVEL} server --namespaced=${env.NAMESPACED} --auth-mode ${env.AUTH_MODE} --secure=${env.SECURE} --x-frame-options=SAMEORIGIN";
- };
- ui = {
- env = {
- ARGO_UI_SECURE = "${env.UI_SECURE}";
- ARGO_SECURE = "${env.SECURE}";
- };
- args = "--cwd ui start";
- };
-}
diff --git a/dev/nix/flake.lock b/dev/nix/flake.lock
deleted file mode 100644
index 3cca26c2a9c5..000000000000
--- a/dev/nix/flake.lock
+++ /dev/null
@@ -1,1143 +0,0 @@
-{
- "nodes": {
- "cachix": {
- "inputs": {
- "devenv": [
- "devenv"
- ],
- "flake-compat": [
- "devenv",
- "flake-compat"
- ],
- "git-hooks": [
- "devenv",
- "git-hooks"
- ],
- "nixpkgs": [
- "devenv",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1777487137,
- "narHash": "sha256-TuvKVBX60mqyMT6OB5JqVEh1YIWtFMR/igLCaCdC9tw=",
- "owner": "cachix",
- "repo": "cachix",
- "rev": "a66a440c321d35f7193472c317f42a55ccd1cb93",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "ref": "latest",
- "repo": "cachix",
- "type": "github"
- }
- },
- "cachix_2": {
- "inputs": {
- "devenv": [
- "devenv",
- "crate2nix"
- ],
- "flake-compat": [
- "devenv",
- "crate2nix"
- ],
- "git-hooks": "git-hooks",
- "nixpkgs": "nixpkgs"
- },
- "locked": {
- "lastModified": 1767714506,
- "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=",
- "owner": "cachix",
- "repo": "cachix",
- "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "ref": "latest",
- "repo": "cachix",
- "type": "github"
- }
- },
- "cachix_3": {
- "inputs": {
- "devenv": [
- "devenv",
- "crate2nix",
- "crate2nix_stable"
- ],
- "flake-compat": [
- "devenv",
- "crate2nix",
- "crate2nix_stable"
- ],
- "git-hooks": "git-hooks_2",
- "nixpkgs": "nixpkgs_2"
- },
- "locked": {
- "lastModified": 1767714506,
- "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=",
- "owner": "cachix",
- "repo": "cachix",
- "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "ref": "latest",
- "repo": "cachix",
- "type": "github"
- }
- },
- "crate2nix": {
- "inputs": {
- "cachix": "cachix_2",
- "crate2nix_stable": "crate2nix_stable",
- "devshell": "devshell_2",
- "flake-compat": "flake-compat_2",
- "flake-parts": "flake-parts_2",
- "nix-test-runner": "nix-test-runner_2",
- "nixpkgs": [
- "devenv",
- "nixpkgs"
- ],
- "pre-commit-hooks": "pre-commit-hooks_2"
- },
- "locked": {
- "lastModified": 1772186516,
- "narHash": "sha256-8s28pzmQ6TOIUzznwFibtW1CMieMUl1rYJIxoQYor58=",
- "owner": "rossng",
- "repo": "crate2nix",
- "rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e",
- "type": "github"
- },
- "original": {
- "owner": "rossng",
- "repo": "crate2nix",
- "rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e",
- "type": "github"
- }
- },
- "crate2nix_stable": {
- "inputs": {
- "cachix": "cachix_3",
- "crate2nix_stable": [
- "devenv",
- "crate2nix",
- "crate2nix_stable"
- ],
- "devshell": "devshell",
- "flake-compat": "flake-compat",
- "flake-parts": "flake-parts",
- "nix-test-runner": "nix-test-runner",
- "nixpkgs": "nixpkgs_3",
- "pre-commit-hooks": "pre-commit-hooks"
- },
- "locked": {
- "lastModified": 1769627083,
- "narHash": "sha256-SUuruvw1/moNzCZosHaa60QMTL+L9huWdsCBN6XZIic=",
- "owner": "nix-community",
- "repo": "crate2nix",
- "rev": "7c33e664668faecf7655fa53861d7a80c9e464a2",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "ref": "0.15.0",
- "repo": "crate2nix",
- "type": "github"
- }
- },
- "devenv": {
- "inputs": {
- "cachix": "cachix",
- "crate2nix": "crate2nix",
- "flake-compat": "flake-compat_3",
- "flake-parts": "flake-parts_3",
- "ghostty": "ghostty",
- "git-hooks": "git-hooks_3",
- "nix": "nix",
- "nixd": "nixd",
- "nixpkgs": [
- "nixpkgs"
- ],
- "rust-overlay": "rust-overlay"
- },
- "locked": {
- "lastModified": 1778705847,
- "narHash": "sha256-EQnZCy7r4VMO6KDoytxHBa0mFbM1D9g1kaDfs/s0YZA=",
- "owner": "cachix",
- "repo": "devenv",
- "rev": "ea3d94ac9d6bf6a1313773170122ca4e2ef5a0be",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "ref": "v2.1.2",
- "repo": "devenv",
- "type": "github"
- }
- },
- "devshell": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1768818222,
- "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=",
- "owner": "numtide",
- "repo": "devshell",
- "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "devshell",
- "type": "github"
- }
- },
- "devshell_2": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1768818222,
- "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=",
- "owner": "numtide",
- "repo": "devshell",
- "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "devshell",
- "type": "github"
- }
- },
- "flake-compat": {
- "locked": {
- "lastModified": 1733328505,
- "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
- "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
- "revCount": 69,
- "type": "tarball",
- "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz"
- },
- "original": {
- "type": "tarball",
- "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
- }
- },
- "flake-compat_2": {
- "locked": {
- "lastModified": 1733328505,
- "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
- "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
- "revCount": 69,
- "type": "tarball",
- "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz"
- },
- "original": {
- "type": "tarball",
- "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
- }
- },
- "flake-compat_3": {
- "flake": false,
- "locked": {
- "lastModified": 1767039857,
- "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
- "owner": "edolstra",
- "repo": "flake-compat",
- "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
- "type": "github"
- },
- "original": {
- "owner": "edolstra",
- "repo": "flake-compat",
- "type": "github"
- }
- },
- "flake-compat_4": {
- "flake": false,
- "locked": {
- "lastModified": 1761588595,
- "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
- "owner": "edolstra",
- "repo": "flake-compat",
- "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
- "type": "github"
- },
- "original": {
- "owner": "edolstra",
- "repo": "flake-compat",
- "type": "github"
- }
- },
- "flake-parts": {
- "inputs": {
- "nixpkgs-lib": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1768135262,
- "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
- "flake-parts_2": {
- "inputs": {
- "nixpkgs-lib": [
- "devenv",
- "crate2nix",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1768135262,
- "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
- "flake-parts_3": {
- "inputs": {
- "nixpkgs-lib": [
- "devenv",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1777678872,
- "narHash": "sha256-EPIFsulyon7Z1vLQq5Fk64GR8L7cQsT+IPhcsukVbgk=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "5250617bffd85403b14dbf43c3870e7f255d2c16",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
- "flake-parts_4": {
- "inputs": {
- "nixpkgs-lib": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1769996383,
- "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
- "flake-utils": {
- "inputs": {
- "systems": "systems_2"
- },
- "locked": {
- "lastModified": 1731533236,
- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "ghostty": {
- "inputs": {
- "flake-compat": "flake-compat_4",
- "home-manager": "home-manager",
- "nixpkgs": "nixpkgs_4",
- "systems": "systems",
- "zig": "zig",
- "zon2nix": "zon2nix"
- },
- "locked": {
- "lastModified": 1777773742,
- "narHash": "sha256-dZFc+8az7BUIs8+v45XqNnY5G6oXEwVfVVHZQuATSGQ=",
- "owner": "ghostty-org",
- "repo": "ghostty",
- "rev": "1547dd667ab6d1f4ebcdc7282adc54c95752ee67",
- "type": "github"
- },
- "original": {
- "owner": "ghostty-org",
- "repo": "ghostty",
- "type": "github"
- }
- },
- "git-hooks": {
- "inputs": {
- "flake-compat": [
- "devenv",
- "crate2nix",
- "cachix",
- "flake-compat"
- ],
- "gitignore": "gitignore",
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "cachix",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1765404074,
- "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=",
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "type": "github"
- }
- },
- "git-hooks_2": {
- "inputs": {
- "flake-compat": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "cachix",
- "flake-compat"
- ],
- "gitignore": "gitignore_2",
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "cachix",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1765404074,
- "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=",
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "type": "github"
- }
- },
- "git-hooks_3": {
- "inputs": {
- "flake-compat": [
- "devenv",
- "flake-compat"
- ],
- "gitignore": "gitignore_5",
- "nixpkgs": [
- "devenv",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1776796298,
- "narHash": "sha256-PcRvlWayisPSjd0UcRQbhG8Oqw78AcPE6x872cPRHN8=",
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "rev": "3cfd774b0a530725a077e17354fbdb87ea1c4aad",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "git-hooks.nix",
- "type": "github"
- }
- },
- "gitignore": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "cachix",
- "git-hooks",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1709087332,
- "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "type": "github"
- }
- },
- "gitignore_2": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "cachix",
- "git-hooks",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1709087332,
- "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "type": "github"
- }
- },
- "gitignore_3": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "pre-commit-hooks",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1709087332,
- "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "type": "github"
- }
- },
- "gitignore_4": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "pre-commit-hooks",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1709087332,
- "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "type": "github"
- }
- },
- "gitignore_5": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "git-hooks",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1709087332,
- "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "gitignore.nix",
- "type": "github"
- }
- },
- "gomod2nix": {
- "inputs": {
- "flake-utils": "flake-utils",
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1770244772,
- "narHash": "sha256-hj+A96fxr93C3jwfUE0swcygXU4ZW+Tyo5vSwI6tvzY=",
- "owner": "nix-community",
- "repo": "gomod2nix",
- "rev": "0629af88797d22dc18f8dd69cb2cd1fef6958e55",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "gomod2nix",
- "type": "github"
- }
- },
- "home-manager": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "ghostty",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1770586272,
- "narHash": "sha256-Ucci8mu8QfxwzyfER2DQDbvW9t1BnTUJhBmY7ybralo=",
- "owner": "nix-community",
- "repo": "home-manager",
- "rev": "b1f916ba052341edc1f80d4b2399f1092a4873ca",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "home-manager",
- "type": "github"
- }
- },
- "nix": {
- "inputs": {
- "flake-compat": [
- "devenv",
- "flake-compat"
- ],
- "flake-parts": [
- "devenv",
- "flake-parts"
- ],
- "git-hooks-nix": [
- "devenv",
- "git-hooks"
- ],
- "nixpkgs": [
- "devenv",
- "nixpkgs"
- ],
- "nixpkgs-23-11": [
- "devenv"
- ],
- "nixpkgs-regression": [
- "devenv"
- ]
- },
- "locked": {
- "lastModified": 1776511668,
- "narHash": "sha256-g2KEBuHpc3a56c+jPcg0+w6LSuIj6f+zzdztLCOyIhc=",
- "owner": "cachix",
- "repo": "nix",
- "rev": "42d4b7de21c15f28c568410f4383fa06a8458a40",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "ref": "devenv-2.34",
- "repo": "nix",
- "type": "github"
- }
- },
- "nix-filter": {
- "locked": {
- "lastModified": 1757882181,
- "narHash": "sha256-+cCxYIh2UNalTz364p+QYmWHs0P+6wDhiWR4jDIKQIU=",
- "owner": "numtide",
- "repo": "nix-filter",
- "rev": "59c44d1909c72441144b93cf0f054be7fe764de5",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "nix-filter",
- "type": "github"
- }
- },
- "nix-test-runner": {
- "flake": false,
- "locked": {
- "lastModified": 1588761593,
- "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=",
- "owner": "stoeffel",
- "repo": "nix-test-runner",
- "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2",
- "type": "github"
- },
- "original": {
- "owner": "stoeffel",
- "repo": "nix-test-runner",
- "type": "github"
- }
- },
- "nix-test-runner_2": {
- "flake": false,
- "locked": {
- "lastModified": 1588761593,
- "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=",
- "owner": "stoeffel",
- "repo": "nix-test-runner",
- "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2",
- "type": "github"
- },
- "original": {
- "owner": "stoeffel",
- "repo": "nix-test-runner",
- "type": "github"
- }
- },
- "nixd": {
- "inputs": {
- "flake-parts": [
- "devenv",
- "flake-parts"
- ],
- "nixpkgs": "nixpkgs_5",
- "treefmt-nix": "treefmt-nix"
- },
- "locked": {
- "lastModified": 1777345723,
- "narHash": "sha256-BhY3D5DhpDnnUcaY+AL/cpyYX+OIjQgnAkbPLZ08C38=",
- "owner": "nix-community",
- "repo": "nixd",
- "rev": "6bf30951a3dc407a798d30db427e3f96ac9b39f5",
- "type": "github"
- },
- "original": {
- "owner": "nix-community",
- "repo": "nixd",
- "type": "github"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 1765186076,
- "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_2": {
- "locked": {
- "lastModified": 1765186076,
- "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_3": {
- "locked": {
- "lastModified": 1769433173,
- "narHash": "sha256-Gf1dFYgD344WZ3q0LPlRoWaNdNQq8kSBDLEWulRQSEs=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "13b0f9e6ac78abbbb736c635d87845c4f4bee51b",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixpkgs-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_4": {
- "locked": {
- "lastModified": 1770537093,
- "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=",
- "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51",
- "type": "tarball",
- "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz"
- },
- "original": {
- "type": "tarball",
- "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
- }
- },
- "nixpkgs_5": {
- "locked": {
- "lastModified": 1776877367,
- "narHash": "sha256-wMN1gM00sUQ2KC9CNr/XEOGdfOrl67PabIRv9AYayTo=",
- "rev": "0726a0ecb6d4e08f6adced58726b95db924cef57",
- "type": "tarball",
- "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre985613.0726a0ecb6d4/nixexprs.tar.xz"
- },
- "original": {
- "type": "tarball",
- "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
- }
- },
- "nixpkgs_6": {
- "locked": {
- "lastModified": 1782821651,
- "narHash": "sha256-D5jO0ME1lA9bDHnd5kVawBwItG/N4oZr3FlXmMzLec8=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "e52c192be9d7b2c4bd4aed326c8731b35f8bb75c",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixpkgs-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_7": {
- "locked": {
- "lastModified": 1770107345,
- "narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=",
- "owner": "nixos",
- "repo": "nixpkgs",
- "rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4",
- "type": "github"
- },
- "original": {
- "owner": "nixos",
- "ref": "nixpkgs-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "pre-commit-hooks": {
- "inputs": {
- "flake-compat": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "flake-compat"
- ],
- "gitignore": "gitignore_3",
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "crate2nix_stable",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1769069492,
- "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=",
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "type": "github"
- }
- },
- "pre-commit-hooks_2": {
- "inputs": {
- "flake-compat": [
- "devenv",
- "crate2nix",
- "flake-compat"
- ],
- "gitignore": "gitignore_4",
- "nixpkgs": [
- "devenv",
- "crate2nix",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1769069492,
- "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=",
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "type": "github"
- }
- },
- "root": {
- "inputs": {
- "devenv": "devenv",
- "flake-parts": "flake-parts_4",
- "gomod2nix": "gomod2nix",
- "nix-filter": "nix-filter",
- "nixpkgs": "nixpkgs_6",
- "rust-overlay": "rust-overlay_2",
- "treefmt-nix": "treefmt-nix_2"
- }
- },
- "rust-overlay": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1777778183,
- "narHash": "sha256-Lqv9MZO0XAGcMbXJU+ULBSMD41Pf391uJehylUQKe7Y=",
- "owner": "oxalica",
- "repo": "rust-overlay",
- "rev": "dbba5f888c82ef3ce594c451c33ac2474eb80847",
- "type": "github"
- },
- "original": {
- "owner": "oxalica",
- "repo": "rust-overlay",
- "type": "github"
- }
- },
- "rust-overlay_2": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1770260791,
- "narHash": "sha256-ADTBfENFjRVDQMcCycyX/pAy6NFI/Ct6Mrar3gsmXI0=",
- "owner": "oxalica",
- "repo": "rust-overlay",
- "rev": "42ec85352e419e601775c57256a52f6d48a39906",
- "type": "github"
- },
- "original": {
- "owner": "oxalica",
- "repo": "rust-overlay",
- "type": "github"
- }
- },
- "systems": {
- "flake": false,
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- },
- "systems_2": {
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- },
- "treefmt-nix": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "nixd",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1775636079,
- "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
- "owner": "numtide",
- "repo": "treefmt-nix",
- "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "treefmt-nix",
- "type": "github"
- }
- },
- "treefmt-nix_2": {
- "inputs": {
- "nixpkgs": "nixpkgs_7"
- },
- "locked": {
- "lastModified": 1770228511,
- "narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=",
- "owner": "numtide",
- "repo": "treefmt-nix",
- "rev": "337a4fe074be1042a35086f15481d763b8ddc0e7",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "treefmt-nix",
- "type": "github"
- }
- },
- "zig": {
- "inputs": {
- "flake-compat": [
- "devenv",
- "ghostty",
- "flake-compat"
- ],
- "nixpkgs": [
- "devenv",
- "ghostty",
- "nixpkgs"
- ],
- "systems": [
- "devenv",
- "ghostty",
- "systems"
- ]
- },
- "locked": {
- "lastModified": 1776789209,
- "narHash": "sha256-G6B7Q4TXn7MZ1mB+f9rymjsYF5PLWoSvmbxijb/99bw=",
- "owner": "mitchellh",
- "repo": "zig-overlay",
- "rev": "14fe971844e841297ddd2ce9783d6892b467af39",
- "type": "github"
- },
- "original": {
- "owner": "mitchellh",
- "repo": "zig-overlay",
- "type": "github"
- }
- },
- "zig_2": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "ghostty",
- "zon2nix",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1777234348,
- "narHash": "sha256-fKw44a4qbUuI5eTG8k0gPbqMV5TOrjYF35PBzsYgd2U=",
- "ref": "refs/heads/main",
- "rev": "2c781c0609ecda600ab98f98cca417bbd981bd53",
- "revCount": 1677,
- "type": "git",
- "url": "https://codeberg.org/jcollie/zig-overlay.git"
- },
- "original": {
- "type": "git",
- "url": "https://codeberg.org/jcollie/zig-overlay.git"
- }
- },
- "zon2nix": {
- "inputs": {
- "nixpkgs": [
- "devenv",
- "ghostty",
- "nixpkgs"
- ],
- "zig": "zig_2"
- },
- "locked": {
- "lastModified": 1777314365,
- "narHash": "sha256-eLxQaD0wc96Neqkln8wHS0rNq/chPODifFkhwrwilEU=",
- "owner": "jcollie",
- "repo": "zon2nix",
- "rev": "a5a1d412ad1ab6305511997bbc92b3a9dd6cb784",
- "type": "github"
- },
- "original": {
- "owner": "jcollie",
- "ref": "main",
- "repo": "zon2nix",
- "type": "github"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/dev/nix/flake.nix b/dev/nix/flake.nix
deleted file mode 100644
index 08d58df93be4..000000000000
--- a/dev/nix/flake.nix
+++ /dev/null
@@ -1,509 +0,0 @@
-# NOTE: all dependencies changed here must also be changed in the Makefile.
-
-{
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
- flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; };
- devenv = {
- url = "github:cachix/devenv/v2.1.2";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- nix-filter.url = "github:numtide/nix-filter";
- gomod2nix = {
- url = "github:nix-community/gomod2nix";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- treefmt-nix.url = "github:numtide/treefmt-nix";
- rust-overlay.url = "github:oxalica/rust-overlay";
- rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
- };
-
- outputs = inputs:
- inputs.flake-parts.lib.mkFlake { inherit inputs; } {
- systems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
- imports = [ inputs.treefmt-nix.flakeModule ];
- perSystem = { pkgs, lib, config, system, ... }:
- let
- argoConfig = import ./conf.nix;
- myyarn = pkgs.yarn.override { inherit nodejs; };
- filter = inputs.nix-filter.lib;
- # Keep these aligned with the matching go install targets in the Makefile.
- toolVersions = {
- kubeauto = "0.0.7";
- mockery = "3.5.1";
- controllerTools = "0.18.0";
- codeGenerator = "0.35.1";
- gogoProtobuf = "1.3.2";
- grpcGateway = "1.16.0";
- kubeOpenapi = "0.0.0-20220124234850-424119656bbf";
- goSwagger = "0.33.1";
- goimports = "0.35.0";
- gotestsum = "1.12.3";
- buf = "1.65.0";
- };
- goVersion = argoConfig.goVersion;
- goVersionParts = lib.splitString "." goVersion;
- goMajor = builtins.elemAt goVersionParts 0;
- goMinor = builtins.elemAt goVersionParts 1;
- goMajorMinor = "${goMajor}.${goMinor}";
- goPackageAttr = "go_${goMajor}_${goMinor}";
- buildGoModuleAttr = "buildGo${goMajor}${goMinor}Module";
-
- # dependencies for building the go binaries
- initialFilteredSrc = filter {
- root = ../../.;
- include = [
- "." # Way easier to tell it what to exclude than what to include so include all.
- "devenv.yaml"
- ];
- exclude = [
- ".devcontainer"
- ".git"
- ".github"
- "community"
- "docs"
- "examples"
- "hack"
- "manifests"
- "sdks"
- (filter.matchExt ".md")
- (filter.matchExt ".yaml")
- (filter.matchExt ".yml")
- ];
- };
- package = {
- name = "controller";
- version = argoConfig.version;
- };
-
- nodejs = pkgs.nodejs_22;
- nodeEnv = import ./node-env.nix {
- inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript;
- inherit pkgs nodejs;
- libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
- };
-
- nodePackages = import ./node-packages.nix {
- inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
- inherit nodeEnv;
- };
- pythonPkgs = pkgs.python312Packages;
- # ProperDocs is the MkDocs fork we build the docs with (see the Makefile
- # and docs/requirements.txt — keep the version aligned). It is not yet in
- # nixpkgs, so we build it from its PyPI wheel; the Material theme,
- # mkdocs-redirects and pymdown-extensions come from nixpkgs, which also
- # pulls in the `mkdocs` package that those plugins import at runtime.
- properdocs = with pythonPkgs; # upgrade this in the Makefile if upgraded here
- buildPythonPackage rec {
- pname = "properdocs";
- version = "1.6.7";
- format = "wheel";
- src = fetchPypi {
- inherit pname version format;
- dist = "py3";
- python = "py3";
- hash = "sha256-b6DPouAb8zj2hIksilBs9w6oiufzR5yTO2+iAWgQHL0=";
- };
- propagatedBuildInputs = [
- mergedeep markdown click
- pyyaml
- pyyaml-env-tag
- jinja2
- watchdog
- importlib-metadata
- packaging
- pathspec
- platformdirs
- markupsafe
- ghp-import
- ];
- doCheck = false;
- };
- pythonEnv = pkgs.python312.withPackages (ps: [
- ps.pytest
- ps.typing-extensions
- ps.mypy
- ps.autopep8
- ps.pip
- properdocs
- ps.mkdocs-material
- ps.mkdocs-redirects
- ]);
-
- mkEnvSerialize = (envKey: envValue: "export ${envKey}=${envValue};");
- mkEnv = (envAttrs:
- lib.concatStrings
- (lib.mapAttrsToList
- mkEnvSerialize
- envAttrs)
- );
- mkExec = (execName: envAttrs: execArgs:
- "${mkEnv envAttrs}${execName} ${execArgs}"
- );
- controllerCmd = mkExec "workflow-controller" argoConfig.controller.env argoConfig.controller.args;
- argoServerCmd = mkExec "argo" argoConfig.argoServer.env argoConfig.argoServer.args;
- uiCmd = mkExec "yarn" argoConfig.ui.env argoConfig.ui.args;
- in
- {
- _module.args = import inputs.nixpkgs {
- inherit system;
- overlays = [
- inputs.gomod2nix.overlays.default
- inputs.rust-overlay.overlays.default
- (self: super:
- let
- goPackage = if builtins.hasAttr goPackageAttr super
- then builtins.getAttr goPackageAttr super
- else throw "go.mod requires Go ${goVersion}, but nixpkgs does not provide ${goPackageAttr}";
- buildGoModulePackage = if builtins.hasAttr buildGoModuleAttr super
- then builtins.getAttr buildGoModuleAttr super
- else throw "go.mod requires Go ${goVersion}, but nixpkgs does not provide ${buildGoModuleAttr}";
- goVersionMatches = if lib.versions.majorMinor goPackage.version == goMajorMinor && !lib.versionOlder goPackage.version goVersion
- then true
- else throw "go.mod requires Go ${goVersion}; nixpkgs ${goPackageAttr} provides ${goPackage.version}, which must be ${goMajorMinor}.x and not older than ${goVersion}";
- in
- {
- go = if goVersionMatches then goPackage else null;
- buildGoModule = if goVersionMatches then buildGoModulePackage else null;
- })
- ];
- };
-
- packages = {
- ${package.name} = pkgs.buildGoApplication {
- pname = package.name;
- inherit (package) version;
- src = pkgs.runCommand "${package.name}-src-with-placeholder-ui" {
- nativeBuildInputs = [ pkgs.coreutils ];
- inherit initialFilteredSrc;
- } ''
- echo "Copying original sources to $out ..."
- cp -rT ${initialFilteredSrc} $out
-
- echo "Making copied files writable ..."
- chmod -R u+w $out
-
- echo "Creating placeholder UI in $out/ui/dist/app ..."
- mkdir -p $out/ui/dist/app
- echo "
Placeholder UI for Nix build" > $out/ui/dist/app/index.html
- echo "This is a placeholder file for Nix build." > $out/ui/dist/app/README.txt
- '';
- modules = ./gomod2nix.toml;
- doCheck = false;
- };
-
- kubeauto = pkgs.buildGoModule rec {
- pname = "kubeauto";
- version = toolVersions.kubeauto;
- src = pkgs.fetchFromGitHub {
- owner = "kitproj";
- repo = "kubeauto";
- rev = "v${version}";
- sha256 = "sha256-WbGiTjxQBykwejx6iDctAZ53gwGgr2vAkK42kbQzkeE=";
- };
- vendorHash = "sha256-de5YVcBpU3tNpqilBwx68nuqBzU4e5ca/WNDPCsFPKA=";
- };
-
- mockery = pkgs.go-mockery.overrideAttrs(old: rec {
- version = toolVersions.mockery;
- src = pkgs.fetchFromGitHub {
- owner = "vektra";
- repo = "mockery";
- rev = "v${version}";
- sha256 = "sha256-x7WniZ4wpnuzUHM2ZC2P7Ns67bIp4V4F9f4xQEJONEk=";
- };
- vendorHash = "sha256-cNMknwlU7ENwN67CtyU1YgYIXCJbh4b7Z3oUK7kkEkk=";
- doCheck = false;
- });
-
- protoc-gen-gogo-all = pkgs.buildGoModule rec {
- pname = "protoc-gen-gogo";
- version = toolVersions.gogoProtobuf;
-
- src = pkgs.fetchFromGitHub {
- owner = "gogo";
- repo = "protobuf";
- rev = "v${version}";
- sha256 = "sha256-CoUqgLFnLNCS9OxKFS7XwjE17SlH6iL1Kgv+0uEK2zU=";
- };
- doCheck = false;
- vendorHash = "sha256-nOL2Ulo9VlOHAqJgZuHl7fGjz/WFAaWPdemplbQWcak=";
- };
- grpc-ecosystem = pkgs.buildGoModule rec {
- pname = "grpc-ecosystem";
- version = toolVersions.grpcGateway;
-
- src = pkgs.fetchFromGitHub {
- owner = "grpc-ecosystem";
- repo = "grpc-gateway";
- rev = "v${version}";
- sha256 = "sha256-jJWqkMEBAJq50KaXccVpmgx/hwTdKgTtNkz8/xYO+Dc=";
- };
- doCheck = false;
- vendorHash = "sha256-jVOb2uHjPley+K41pV+iMPNx67jtb75Rb/ENhw+ZMoM=";
- };
-
- go-swagger = pkgs.go-swagger.overrideAttrs (old: rec {
- version = toolVersions.goSwagger;
- src = pkgs.fetchFromGitHub {
- owner = "go-swagger";
- repo = "go-swagger";
- rev = "v${version}";
- sha256 = "sha256-CVfGKkqneNgSJZOptQrywCioSZwJP0XGspVM3S45Q/k=";
- };
- vendorHash = "sha256-x3fTIXmI5NnOKph1D84MHzf1Kod+WLYn1JtnWLr4x+U=";
- });
-
- controller-tools = pkgs.kubernetes-controller-tools.overrideAttrs (old: rec {
- version = toolVersions.controllerTools;
- src = pkgs.fetchFromGitHub {
- owner = "kubernetes-sigs";
- repo = "controller-tools";
- rev = "v${version}";
- sha256 = "sha256-zrh6GWFivs1fqkvaN6MSiYoCuPbiTQ6mJz4d69Wb7lo=";
- };
- vendorHash = "sha256-criu2UyNkGaVQnIxrjzIU4D389DbCcjG/kn3kfoD5yE=";
- });
-
- k8sio-tools = pkgs.buildGoModule rec {
- pname = "k8sio-tools";
- version = toolVersions.codeGenerator;
-
- src = pkgs.fetchFromGitHub {
- owner = "kubernetes";
- repo = "code-generator";
- rev = "v${version}";
- sha256 = "sha256-NhWD09Uy8QZLov74qhBmhqXGkxWalSjOMe/1He/fHns=";
- };
- vendorHash = "sha256-eQuiQ8sCOE9wyVIBRmSQ1PkdvRIIw9I3GwSpHDPEE/I=";
- doCheck = false;
- };
-
- goreman = pkgs.buildGoModule rec {
- pname = "goreman";
- version = "0.3.11"; # upgrade this in the Makefile if upgraded here
- src = pkgs.fetchFromGitHub {
- owner = "mattn";
- repo = "goreman";
- rev = "v${version}";
- sha256 = "sha256-TbJfeU94wakI2028kDqU+7dRRmqXuqpPeL4XBaA/HPo=";
- };
- vendorHash = "sha256-87aHBRWm5Odv6LeshZty5N31sC+vdSwGlTYhk3BZkPo=";
- doCheck = false;
- };
-
- stern = pkgs.buildGoModule rec {
- pname = "stern";
- version = "1.25.0"; # upgrade this in the Makefile if upgraded here
- src = pkgs.fetchFromGitHub {
- owner = "stern";
- repo = "stern";
- rev = "v${version}";
- sha256 = "sha256-E4Hs9FH+6iQ7kv6CmYUHw9HchtJghMq9tnERO2rpL1g=";
- };
- vendorHash = "sha256-+B3cAuV+HllmB1NaPeZitNpX9udWuCKfDFv+mOVHw2Y=";
- doCheck = false;
- };
-
- buf = pkgs.buildGoModule rec {
- pname = "buf";
- version = toolVersions.buf;
- src = pkgs.fetchFromGitHub {
- owner = "bufbuild";
- repo = "buf";
- rev = "v${version}";
- sha256 = "1vgwp4nm1kqisrywph6wdp6rvc3wsbzldvvdh8wnd7gd303j255s";
- };
- vendorHash = "sha256-8Vh6txDsPOGad6rsW9hkahT+3Dku+aECaWpkGHgW7fs=";
- doCheck = false;
- };
-
- openapi-gen = pkgs.buildGoModule rec {
- pname = "openapi-gen";
- version = toolVersions.kubeOpenapi;
- src = pkgs.fetchFromGitHub {
- owner = "kubernetes";
- repo = "kube-openapi";
- rev = "424119656bbf";
- hash = "sha256-rkI7r75euOv9c0QpGpLTfatFq5S3npynmKKNlflAHug=";
- };
- subPackages = [ "cmd/openapi-gen" ];
- vendorHash = "sha256-2PETLn3oDGIsyUQS7cY0XGTdMZvr7LCCc9fcltP0L80=";
- doCheck = false;
- };
-
- goimports = pkgs.buildGoModule rec {
- pname = "goimports";
- version = toolVersions.goimports;
- src = pkgs.fetchFromGitHub {
- owner = "golang";
- repo = "tools";
- rev = "v${version}";
- hash = "sha256-h53fIvf3pedJXlopOEWYq5Hp7IVNsTIGychuCBPwY1I=";
- };
- subPackages = [ "cmd/goimports" ];
- vendorHash = "sha256-L2VYebgRTdiJyIBW437hvt8RyF4D4P8rjFvjNiDtu6Q=";
- doCheck = false;
- };
-
- gotestsum = pkgs.buildGoModule rec {
- pname = "gotestsum";
- version = toolVersions.gotestsum;
- src = pkgs.fetchFromGitHub {
- owner = "gotestyourself";
- repo = "gotestsum";
- rev = "v${version}";
- hash = "sha256-j8lB0TIHK8/yMzaTB5OOaboEtnB6IsTybz8sJbNoQt4=";
- };
- vendorHash = "sha256-UInHqKzntK0fYsUKZ2jW4akymeRd3sMQKf8+//TQb7g=";
- doCheck = false;
- };
-
- snipdoc = pkgs.rustPlatform.buildRustPackage rec {
- pname = "snipdoc";
- version = "0.1.12";
- src = pkgs.fetchFromGitHub {
- owner = "kaplanelad";
- repo = "snipdoc";
- rev = "v${version}";
- hash = "sha256-3tF871gZouZMJ3LOzlucaxEy3q8TNoc08GVCT0aYOUk=";
- };
- cargoHash = "sha256-chi8q+zTewc7xpyvQbnMU7Lmd0Y4qFrIFCSh7IBITxU=";
- doCheck = false;
- };
-
- nodeDependencies = nodePackages.shell.nodeDependencies;
-
- inherit (pkgs) go jq protobuf diffutils golangci-lint kustomize gotools kubectl k3d docker gettext lsof typos cspell gomod2nix;
- inherit nodejs;
- yarn = myyarn;
-
- default = config.packages.${package.name};
- };
-
- devShells = {
- ${package.name} = pkgs.mkShell {
- inherit (package) name;
- shellHook = ''
- unset GOROOT;
- unset GOPATH;
- # Create the k3d cluster Tilt deploys into (context k3d-k3s-default);
- # idempotent, the same one `make start` uses. Then run `make start`
- # (or `tilt up`) to build and run the stack in-cluster.
- make k3d-up
- '';
- inputsFrom = [
- (pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default))
- config.packages.${package.name}
- ];
- packages = with pkgs; [
- (rust-bin.selectLatestNightlyWith (toolchain: toolchain.default))
- config.packages.mockery
- config.packages.protoc-gen-gogo-all
- config.packages.grpc-ecosystem
- config.packages.go-swagger
- config.packages.controller-tools
- config.packages.k8sio-tools
- config.packages.goreman
- config.packages.stern
- config.packages.buf
- config.packages.openapi-gen
- config.packages.snipdoc
- config.packages.${package.name}
- config.packages.kubeauto
- nodePackages.shell.nodeDependencies
- typos
- cspell
- gopls
- go
- config.packages.goimports
- jq
- nodejs
- pythonEnv
- clang-tools
- protobuf
- myyarn
- diffutils
- kustomize
- gomod2nix
- config.packages.gotestsum
- golangci-lint
- gotools
- kubectl
- tilt
- k3d
- docker
- gettext
- lsof
- ];
- };
-
- devEnv = inputs.devenv.lib.mkShell {
- inherit inputs pkgs;
- modules = [
- ({ pkgs, ... }: {
- env = argoConfig.env;
- # This is your devenv configuration
- packages = with pkgs; [
- config.packages.mockery
- config.packages.protoc-gen-gogo-all
- config.packages.grpc-ecosystem
- config.packages.go-swagger
- config.packages.controller-tools
- config.packages.k8sio-tools
- config.packages.goreman
- config.packages.stern
- config.packages.buf
- config.packages.openapi-gen
- config.packages.snipdoc
- config.packages.kubeauto
- nodePackages.shell.nodeDependencies
- typos
- cspell
- gopls
- go
- config.packages.goimports
- jq
- nodejs
- pythonEnv
- clang-tools
- protobuf
- myyarn
- diffutils
- config.packages.${package.name}
- kustomize
- config.packages.gotestsum
- golangci-lint
- gotools
- kubectl
- tilt
- k3d
- docker
- gettext
- lsof
- ];
- enterShell = ''
- unset GOPATH;
- unset GOROOT;
- ./hack/free-port.sh 9090;
- ./hack/free-port.sh 2746;
- ./hack/free-port.sh 8080;
- yarn --cwd ui install;
- clear;
- echo "Development shell is now ready. Run 'make start' (or 'tilt up') to build and run the stack in-cluster via Tilt."
- '';
- })
- ];
- };
- default = config.devShells.controller;
- };
-
- treefmt = {
- projectRootFile = "flake.nix";
- programs.nixpkgs-fmt.enable = true;
- programs.gofmt.enable = true;
- };
- };
- };
-
-}
diff --git a/dev/nix/gomod2nix.toml b/dev/nix/gomod2nix.toml
deleted file mode 120000
index 5d1ea418b32a..000000000000
--- a/dev/nix/gomod2nix.toml
+++ /dev/null
@@ -1 +0,0 @@
-../../gomod2nix.toml
\ No newline at end of file
diff --git a/dev/nix/node-env.nix b/dev/nix/node-env.nix
deleted file mode 100644
index d7ada5ff9fbe..000000000000
--- a/dev/nix/node-env.nix
+++ /dev/null
@@ -1,694 +0,0 @@
-# This file originates from node2nix
-
-{ lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript }:
-
-let
- # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
- util-linux = if pkgs ? "util-linux" then pkgs."util-linux" else pkgs.utillinux;
-
- python = if nodejs ? python then nodejs.python else python2;
-
- # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
- tarWrapper = runCommand "tarWrapper" { } ''
- mkdir -p $out/bin
-
- cat > $out/bin/tar <> $out/nix-support/hydra-build-products
- '';
- };
-
- # Common shell logic
- installPackage = writeShellScript "install-package" ''
- installPackage() {
- local packageName=$1 src=$2
-
- local strippedName
-
- local DIR=$PWD
- cd $TMPDIR
-
- unpackFile $src
-
- # Make the base dir in which the target dependency resides first
- mkdir -p "$(dirname "$DIR/$packageName")"
-
- if [ -f "$src" ]
- then
- # Figure out what directory has been unpacked
- packageDir="$(find . -maxdepth 1 -type d | tail -1)"
-
- # Restore write permissions to make building work
- find "$packageDir" -type d -exec chmod u+x {} \;
- chmod -R u+w "$packageDir"
-
- # Move the extracted tarball into the output folder
- mv "$packageDir" "$DIR/$packageName"
- elif [ -d "$src" ]
- then
- # Get a stripped name (without hash) of the source directory.
- # On old nixpkgs it's already set internally.
- if [ -z "$strippedName" ]
- then
- strippedName="$(stripHash $src)"
- fi
-
- # Restore write permissions to make building work
- chmod -R u+w "$strippedName"
-
- # Move the extracted directory into the output folder
- mv "$strippedName" "$DIR/$packageName"
- fi
-
- # Change to the package directory to install dependencies
- cd "$DIR/$packageName"
- }
- '';
-
- # Bundle the dependencies of the package
- #
- # Only include dependencies if they don't exist. They may also be bundled in the package.
- includeDependencies = { dependencies }:
- lib.optionalString (dependencies != [ ]) (
- ''
- mkdir -p node_modules
- cd node_modules
- ''
- + (lib.concatMapStrings
- (dependency:
- ''
- if [ ! -e "${dependency.packageName}" ]; then
- ${composePackage dependency}
- fi
- ''
- )
- dependencies)
- + ''
- cd ..
- ''
- );
-
- # Recursively composes the dependencies of a package
- composePackage = { name, packageName, src, dependencies ? [ ], ... }@args:
- builtins.addErrorContext "while evaluating node package '${packageName}'" ''
- installPackage "${packageName}" "${src}"
- ${includeDependencies { inherit dependencies; }}
- cd ..
- ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
- '';
-
- pinpointDependencies = { dependencies, production }:
- let
- pinpointDependenciesFromPackageJSON = writeTextFile {
- name = "pinpointDependencies.js";
- text = ''
- var fs = require('fs');
- var path = require('path');
-
- function resolveDependencyVersion(location, name) {
- if(location == process.env['NIX_STORE']) {
- return null;
- } else {
- var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
-
- if(fs.existsSync(dependencyPackageJSON)) {
- var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
-
- if(dependencyPackageObj.name == name) {
- return dependencyPackageObj.version;
- }
- } else {
- return resolveDependencyVersion(path.resolve(location, ".."), name);
- }
- }
- }
-
- function replaceDependencies(dependencies) {
- if(typeof dependencies == "object" && dependencies !== null) {
- for(var dependency in dependencies) {
- var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
-
- if(resolvedVersion === null) {
- process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
- } else {
- dependencies[dependency] = resolvedVersion;
- }
- }
- }
- }
-
- /* Read the package.json configuration */
- var packageObj = JSON.parse(fs.readFileSync('./package.json'));
-
- /* Pinpoint all dependencies */
- replaceDependencies(packageObj.dependencies);
- if(process.argv[2] == "development") {
- replaceDependencies(packageObj.devDependencies);
- }
- else {
- packageObj.devDependencies = {};
- }
- replaceDependencies(packageObj.optionalDependencies);
- replaceDependencies(packageObj.peerDependencies);
-
- /* Write the fixed package.json file */
- fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
- '';
- };
- in
- ''
- node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
-
- ${lib.optionalString (dependencies != [])
- ''
- if [ -d node_modules ]
- then
- cd node_modules
- ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
- cd ..
- fi
- ''}
- '';
-
- # Recursively traverses all dependencies of a package and pinpoints all
- # dependencies in the package.json file to the versions that are actually
- # being used.
-
- pinpointDependenciesOfPackage = { packageName, dependencies ? [ ], production ? true, ... }@args:
- ''
- if [ -d "${packageName}" ]
- then
- cd "${packageName}"
- ${pinpointDependencies { inherit dependencies production; }}
- cd ..
- ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
- fi
- '';
-
- # Extract the Node.js source code which is used to compile packages with
- # native bindings
- nodeSources = runCommand "node-sources" { } ''
- tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
- mv node-* $out
- '';
-
- # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
- addIntegrityFieldsScript = writeTextFile {
- name = "addintegrityfields.js";
- text = ''
- var fs = require('fs');
- var path = require('path');
-
- function augmentDependencies(baseDir, dependencies) {
- for(var dependencyName in dependencies) {
- var dependency = dependencies[dependencyName];
-
- // Open package.json and augment metadata fields
- var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
- var packageJSONPath = path.join(packageJSONDir, "package.json");
-
- if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
- console.log("Adding metadata fields to: "+packageJSONPath);
- var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
-
- if(dependency.integrity) {
- packageObj["_integrity"] = dependency.integrity;
- } else {
- packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
- }
-
- if(dependency.resolved) {
- packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
- } else {
- packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
- }
-
- if(dependency.from !== undefined) { // Adopt from property if one has been provided
- packageObj["_from"] = dependency.from;
- }
-
- fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
- }
-
- // Augment transitive dependencies
- if(dependency.dependencies !== undefined) {
- augmentDependencies(packageJSONDir, dependency.dependencies);
- }
- }
- }
-
- if(fs.existsSync("./package-lock.json")) {
- var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
-
- if(![1, 2].includes(packageLock.lockfileVersion)) {
- process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
- process.exit(1);
- }
-
- if(packageLock.dependencies !== undefined) {
- augmentDependencies(".", packageLock.dependencies);
- }
- }
- '';
- };
-
- # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
- reconstructPackageLock = writeTextFile {
- name = "reconstructpackagelock.js";
- text = ''
- var fs = require('fs');
- var path = require('path');
-
- var packageObj = JSON.parse(fs.readFileSync("package.json"));
-
- var lockObj = {
- name: packageObj.name,
- version: packageObj.version,
- lockfileVersion: 2,
- requires: true,
- packages: {
- "": {
- name: packageObj.name,
- version: packageObj.version,
- license: packageObj.license,
- bin: packageObj.bin,
- dependencies: packageObj.dependencies,
- engines: packageObj.engines,
- optionalDependencies: packageObj.optionalDependencies
- }
- },
- dependencies: {}
- };
-
- function augmentPackageJSON(filePath, packages, dependencies) {
- var packageJSON = path.join(filePath, "package.json");
- if(fs.existsSync(packageJSON)) {
- var packageObj = JSON.parse(fs.readFileSync(packageJSON));
- packages[filePath] = {
- version: packageObj.version,
- integrity: "sha1-000000000000000000000000000=",
- dependencies: packageObj.dependencies,
- engines: packageObj.engines,
- optionalDependencies: packageObj.optionalDependencies
- };
- dependencies[packageObj.name] = {
- version: packageObj.version,
- integrity: "sha1-000000000000000000000000000=",
- dependencies: {}
- };
- processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies);
- }
- }
-
- function processDependencies(dir, packages, dependencies) {
- if(fs.existsSync(dir)) {
- var files = fs.readdirSync(dir);
-
- files.forEach(function(entry) {
- var filePath = path.join(dir, entry);
- var stats = fs.statSync(filePath);
-
- if(stats.isDirectory()) {
- if(entry.substr(0, 1) == "@") {
- // When we encounter a namespace folder, augment all packages belonging to the scope
- var pkgFiles = fs.readdirSync(filePath);
-
- pkgFiles.forEach(function(entry) {
- if(stats.isDirectory()) {
- var pkgFilePath = path.join(filePath, entry);
- augmentPackageJSON(pkgFilePath, packages, dependencies);
- }
- });
- } else {
- augmentPackageJSON(filePath, packages, dependencies);
- }
- }
- });
- }
- }
-
- processDependencies("node_modules", lockObj.packages, lockObj.dependencies);
-
- fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
- '';
- };
-
- # Script that links bins defined in package.json to the node_modules bin directory
- # NPM does not do this for top-level packages itself anymore as of v7
- linkBinsScript = writeTextFile {
- name = "linkbins.js";
- text = ''
- var fs = require('fs');
- var path = require('path');
-
- var packageObj = JSON.parse(fs.readFileSync("package.json"));
-
- var nodeModules = Array(packageObj.name.split("/").length).fill("..").join(path.sep);
-
- if(packageObj.bin !== undefined) {
- fs.mkdirSync(path.join(nodeModules, ".bin"))
-
- if(typeof packageObj.bin == "object") {
- Object.keys(packageObj.bin).forEach(function(exe) {
- if(fs.existsSync(packageObj.bin[exe])) {
- console.log("linking bin '" + exe + "'");
- fs.symlinkSync(
- path.join("..", packageObj.name, packageObj.bin[exe]),
- path.join(nodeModules, ".bin", exe)
- );
- }
- else {
- console.log("skipping non-existent bin '" + exe + "'");
- }
- })
- }
- else {
- if(fs.existsSync(packageObj.bin)) {
- console.log("linking bin '" + packageObj.bin + "'");
- fs.symlinkSync(
- path.join("..", packageObj.name, packageObj.bin),
- path.join(nodeModules, ".bin", packageObj.name.split("/").pop())
- );
- }
- else {
- console.log("skipping non-existent bin '" + packageObj.bin + "'");
- }
- }
- }
- else if(packageObj.directories !== undefined && packageObj.directories.bin !== undefined) {
- fs.mkdirSync(path.join(nodeModules, ".bin"))
-
- fs.readdirSync(packageObj.directories.bin).forEach(function(exe) {
- if(fs.existsSync(path.join(packageObj.directories.bin, exe))) {
- console.log("linking bin '" + exe + "'");
- fs.symlinkSync(
- path.join("..", packageObj.name, packageObj.directories.bin, exe),
- path.join(nodeModules, ".bin", exe)
- );
- }
- else {
- console.log("skipping non-existent bin '" + exe + "'");
- }
- })
- }
- '';
- };
-
- prepareAndInvokeNPM = { packageName, bypassCache, reconstructLock, npmFlags, production }:
- let
- forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
- in
- ''
- # Pinpoint the versions of all dependencies to the ones that are actually being used
- echo "pinpointing versions of dependencies..."
- source $pinpointDependenciesScriptPath
-
- # Patch the shebangs of the bundled modules to prevent them from
- # calling executables outside the Nix store as much as possible
- patchShebangs .
-
- # Deploy the Node.js package by running npm install. Since the
- # dependencies have been provided already by ourselves, it should not
- # attempt to install them again, which is good, because we want to make
- # it Nix's responsibility. If it needs to install any dependencies
- # anyway (e.g. because the dependency parameters are
- # incomplete/incorrect), it fails.
- #
- # The other responsibilities of NPM are kept -- version checks, build
- # steps, postprocessing etc.
-
- export HOME=$TMPDIR
- cd "${packageName}"
- runHook preRebuild
-
- ${lib.optionalString bypassCache ''
- ${lib.optionalString reconstructLock ''
- if [ -f package-lock.json ]
- then
- echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
- echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
- rm package-lock.json
- else
- echo "No package-lock.json file found, reconstructing..."
- fi
-
- node ${reconstructPackageLock}
- ''}
-
- node ${addIntegrityFieldsScript}
- ''}
-
- npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
-
- runHook postRebuild
-
- if [ "''${dontNpmInstall-}" != "1" ]
- then
- # NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
- rm -f npm-shrinkwrap.json
-
- npm ${forceOfflineFlag} --nodedir=${nodeSources} --no-bin-links --ignore-scripts ${npmFlags} ${lib.optionalString production "--production"} install
- fi
-
- # Link executables defined in package.json
- node ${linkBinsScript}
- '';
-
- # Builds and composes an NPM package including all its dependencies
- buildNodePackage =
- { name
- , packageName
- , version ? null
- , dependencies ? [ ]
- , buildInputs ? [ ]
- , production ? true
- , npmFlags ? ""
- , dontNpmInstall ? false
- , bypassCache ? false
- , reconstructLock ? false
- , preRebuild ? ""
- , dontStrip ? true
- , unpackPhase ? "true"
- , buildPhase ? "true"
- , meta ? { }
- , ...
- }@args:
-
- let
- extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ];
- in
- stdenv.mkDerivation ({
- name = "${name}${if version == null then "" else "-${version}"}";
- buildInputs = [ tarWrapper python nodejs ]
- ++ lib.optional (stdenv.isLinux) util-linux
- ++ lib.optional (stdenv.isDarwin) libtool
- ++ buildInputs;
-
- inherit nodejs;
-
- inherit dontStrip; # Stripping may fail a build for some package deployments
- inherit dontNpmInstall preRebuild unpackPhase buildPhase;
-
- compositionScript = composePackage args;
- pinpointDependenciesScript = pinpointDependenciesOfPackage args;
-
- passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
-
- installPhase = ''
- source ${installPackage}
-
- # Create and enter a root node_modules/ folder
- mkdir -p $out/lib/node_modules
- cd $out/lib/node_modules
-
- # Compose the package and all its dependencies
- source $compositionScriptPath
-
- ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
-
- # Create symlink to the deployed executable folder, if applicable
- if [ -d "$out/lib/node_modules/.bin" ]
- then
- ln -s $out/lib/node_modules/.bin $out/bin
-
- # Fixup all executables
- ls $out/bin/* | while read i
- do
- file="$(readlink -f "$i")"
- chmod u+rwx "$file"
- if isScript "$file"
- then
- sed -i 's/\r$//' "$file" # convert crlf to lf
- fi
- done
- fi
-
- # Create symlinks to the deployed manual page folders, if applicable
- if [ -d "$out/lib/node_modules/${packageName}/man" ]
- then
- mkdir -p $out/share
- for dir in "$out/lib/node_modules/${packageName}/man/"*
- do
- mkdir -p $out/share/man/$(basename "$dir")
- for page in "$dir"/*
- do
- ln -s $page $out/share/man/$(basename "$dir")
- done
- done
- fi
-
- # Run post install hook, if provided
- runHook postInstall
- '';
-
- meta = {
- # default to Node.js' platforms
- platforms = nodejs.meta.platforms;
- } // meta;
- } // extraArgs);
-
- # Builds a node environment (a node_modules folder and a set of binaries)
- buildNodeDependencies =
- { name
- , packageName
- , version ? null
- , src
- , dependencies ? [ ]
- , buildInputs ? [ ]
- , production ? true
- , npmFlags ? ""
- , dontNpmInstall ? false
- , bypassCache ? false
- , reconstructLock ? false
- , dontStrip ? true
- , unpackPhase ? "true"
- , buildPhase ? "true"
- , ...
- }@args:
-
- let
- extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
- in
- stdenv.mkDerivation ({
- name = "node-dependencies-${name}${if version == null then "" else "-${version}"}";
-
- buildInputs = [ tarWrapper python nodejs ]
- ++ lib.optional (stdenv.isLinux) util-linux
- ++ lib.optional (stdenv.isDarwin) libtool
- ++ buildInputs;
-
- inherit dontStrip; # Stripping may fail a build for some package deployments
- inherit dontNpmInstall unpackPhase buildPhase;
-
- includeScript = includeDependencies { inherit dependencies; };
- pinpointDependenciesScript = pinpointDependenciesOfPackage args;
-
- passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
-
- installPhase = ''
- source ${installPackage}
-
- mkdir -p $out/${packageName}
- cd $out/${packageName}
-
- source $includeScriptPath
-
- # Create fake package.json to make the npm commands work properly
- cp ${src}/package.json .
- chmod 644 package.json
- ${lib.optionalString bypassCache ''
- if [ -f ${src}/package-lock.json ]
- then
- cp ${src}/package-lock.json .
- chmod 644 package-lock.json
- fi
- ''}
-
- # Go to the parent folder to make sure that all packages are pinpointed
- cd ..
- ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
-
- ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
-
- # Expose the executables that were installed
- cd ..
- ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
-
- mv ${packageName} lib
- ln -s $out/lib/node_modules/.bin $out/bin
- '';
- } // extraArgs);
-
- # Builds a development shell
- buildNodeShell =
- { name
- , packageName
- , version ? null
- , src
- , dependencies ? [ ]
- , buildInputs ? [ ]
- , production ? true
- , npmFlags ? ""
- , dontNpmInstall ? false
- , bypassCache ? false
- , reconstructLock ? false
- , dontStrip ? true
- , unpackPhase ? "true"
- , buildPhase ? "true"
- , ...
- }@args:
-
- let
- nodeDependencies = buildNodeDependencies args;
- extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "unpackPhase" "buildPhase" ];
- in
- stdenv.mkDerivation ({
- name = "node-shell-${name}${if version == null then "" else "-${version}"}";
-
- buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) util-linux ++ buildInputs;
- buildCommand = ''
- mkdir -p $out/bin
- cat > $out/bin/shell < --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'`, then e.g. `http://:8080`.
+1. [`devcontainer` CLI](https://github.com/devcontainers/cli), which the development shell provides. In your `argo-workflows` folder, run `make devcontainer-up` to start the container. Then, use `devcontainer exec --workspace-folder . /bin/bash` to get a shell where you can build the code. You can use any editor outside the container to edit code; any changes will be mirrored inside the container. Unlike the VS Code extension, the CLI does not forward ports to your host. The dev stack binds its services (UI `8080`, server `2746`, metrics `9090`, Tilt UI `10350`) to `0.0.0.0`, so reach them via the container's IP — `docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'`, then e.g. `http://:8080`.
1. [GitHub Codespaces](https://github.com/codespaces). You can start editing as soon as VSCode is open, though you may want to wait for `pre-build.sh` to finish installing dependencies, building binaries, and setting up the cluster before running any commands in the terminal. Once you start running services (see next steps below), you can click on the "PORTS" tab in the VSCode terminal to see all forwarded ports. You can open the Web UI in a new tab from there.
Once you have entered the container, continue to [Developing Locally](#developing-locally).
@@ -27,26 +72,7 @@ The container runs [k3d](https://k3d.io/) via [docker-in-docker](https://github.
Note for Windows: configure [`.wslconfig`](https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig) to limit memory usage by the WSL2 to prevent VSCode OOM.
-### Manual Installation
-
-To build on your own machine without using the Dev Container you will need:
-
-* [Go](https://golang.org/dl/)
-* [Yarn](https://classic.yarnpkg.com/en/docs/install/#mac-stable)
-* [Docker](https://docs.docker.com/get-docker/)
-* [`protoc`](http://google.github.io/proto-lens/installing-protoc.html)
-* [`node`](https://nodejs.org/download/release/latest-v16.x/) for running the UI
-* [`k3d`](https://k3d.io/) to run a local Kubernetes cluster
-* [Tilt](https://tilt.dev/) to build images and run Argo in that cluster
-* The following entries in your `/etc/hosts` file:
-
- ```text
- 127.0.0.1 dex
- 127.0.0.1 minio
- 127.0.0.1 postgres
- 127.0.0.1 mysql
- 127.0.0.1 azurite
- ```
+### The Local Cluster
We use [k3d](https://k3d.io/) for the local Kubernetes cluster since it is fast and lets you test RBAC set-up. You don't
need to create the cluster by hand — `make start` (below) runs `make k3d-up`, which creates it if needed (pinned to a
diff --git a/docs/running-nix.md b/docs/running-nix.md
deleted file mode 100644
index f564427a49c2..000000000000
--- a/docs/running-nix.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Try Argo using Nix
-
-Nix is a package manager / build tool which focuses on reproducible build environments.
-Argo Workflows has some basic support for Nix which is enough to get Argo Workflows up and running with minimal effort.
-Here are the steps to follow:
-
- 1. Modify your hosts file and set up a Kubernetes cluster according to [Running Locally](running-locally.md). Don't worry about the other instructions.
- 2. Install [`Nix`](https://nixos.org/download.html).
- 3. Install [`devenv`](https://devenv.sh/getting-started/)
- 4. Enable nix flakes add the line `experimental-features = nix-command flakes` in either `~/.config/nix/nix.conf` (local install) or `/etc/nix/nix.conf` (global install).
- 5. Run `devenv up`.
-
-## Warning
-
-This is still bare-bones at the moment, any feature in the Makefile not mentioned here is excluded for now.
-In practice, this means that only a `make start` equivalent is supported at the moment.
-As an additional caveat, there are no LDFlags set in the build; as a result the UI will show `0.0.0-unknown` for the version.
-
-## How do I upgrade a dependency?
-
-Most dependencies are in the Nix packages repository but if you want a specific version, you might have to build it yourself.
-This is fairly trivial in Nix, the idea is to just change the version string to whatever package you are concerned about.
-
-### Changing a python dependency version
-
-If we look at the `properdocs` dependency, we see a call to `buildPythonPackage`, to change the version we need to just modify the version string.
-Doing this will display a failure because the hash from the `fetchPypi` command will now differ, it will also display the correct hash, copy this hash
-and replace the existing hash value.
-
-### Changing a go dependency version
-
-The almost exact same principles apply here, the only difference being you must change the `vendorHash` and the `sha256` fields.
-The `vendorHash` is a hash of the vendored dependencies while the `sha256` is for the sources fetched from the `fetchFromGithub` call.
-
-### Why am I getting a `vendorSha256` mismatch ?
-
-Unfortunately, dependabot is not capable of upgrading flakes automatically, when the go modules are automatically upgraded the
-hash of the vendor dependencies changes but this change isn't automatically reflected in the nix file. The `vendorSha256` field that needs to
-be upgraded can be found by searching for `${package.name} = pkgs.buildGoModule` in the nix file.
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 000000000000..913e0680aaa2
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,27 @@
+{
+ "nodes": {
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1785133411,
+ "narHash": "sha256-Yjv0WEg39KRYS0rBdTbu6Fc/or/ihAKk13W9sQ6VWd0=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "2f5a153c270b70cb0f8c11f46d96d6d3bc39f4e3",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixos-26.05",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 000000000000..2dd5df3f9288
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,489 @@
+# Every tool needed to develop Argo Workflows, in one devShell — bar the
+# devcontainer CLI, which is too heavy to carry for the one CI job that uses
+# it and has a shell to itself (see devShells.devcontainer below).
+#
+# nix develop # enter the shell
+# direnv allow # or let direnv do it for you (see .envrc)
+#
+# Nix manages *tools* only: nothing here builds Argo itself, that stays
+# `make build`. The Makefile is a task runner and finds every tool on `PATH`,
+# so there are no `go install` targets left to keep in sync.
+#
+# Tools come in two tiers:
+#
+# pinned Anything whose version is part of a contract — it decides what
+# generated code, lint results or test output look like. These are
+# written out below with an explicit version and hash, and bumping
+# one is a reviewable change.
+#
+# floating Everything else: editors, clients, the local cluster. These come
+# from nixpkgs stable as-is and move when the pin below moves.
+{
+ description = "Argo Workflows development tooling";
+
+ inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
+
+ outputs = { self, nixpkgs }:
+ let
+ inherit (nixpkgs) lib;
+
+ systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+
+ # ---------------------------------------------------------------------
+ # Pinned tool versions.
+ #
+ # Renovate keeps these current; each is used exactly once below, so the
+ # version and its hash sit next to each other.
+ # ---------------------------------------------------------------------
+ toolVersions = {
+ buf = "1.65.0";
+ codeGenerator = "0.35.1";
+ controllerTools = "0.18.0";
+ cspell = "9.7.0";
+ gogoProtobuf = "1.3.2";
+ goimports = "0.35.0";
+ golangciLint = "2.11.3";
+ goSwagger = "0.33.1";
+ gotestsum = "1.12.3";
+ grpcGateway = "1.16.0";
+ kubeauto = "0.0.7";
+ kubeOpenapi = "0.0.0-20220124234850-424119656bbf";
+ mockery = "3.5.1";
+ openapiGenerator = "5.2.1";
+ properdocs = "1.6.7";
+ snipdoc = "0.1.12";
+ };
+
+ # ---------------------------------------------------------------------
+ # Go toolchain
+ #
+ # go.mod is the single source of truth for the Go version. nixpkgs is
+ # used when it is new enough; when it lags, we build that exact Go from
+ # source instead of silently developing against a different compiler.
+ # ---------------------------------------------------------------------
+ goVersion =
+ let
+ line = lib.findFirst (l: lib.hasPrefix "go " l) null
+ (lib.splitString "\n" (builtins.readFile ./go.mod));
+ in
+ if line == null
+ then throw "no `go` directive found in go.mod"
+ else lib.removePrefix "go " line;
+
+ # Hashes for https://go.dev/dl/go.src.tar.gz. Only needed while
+ # nixpkgs lags go.mod — the error below tells you when, and Nix prints the
+ # hash to paste in on the first build.
+ goSrcHashes = { };
+
+ goOverlay = final: prev:
+ let
+ majorMinor = lib.versions.majorMinor goVersion;
+ attr = "go_${lib.versions.major goVersion}_${lib.versions.minor goVersion}";
+ candidate = prev.${attr} or null;
+ # A newer patch release of the same minor is fine (and is what the
+ # `go` directive means); a different minor is not.
+ fromNixpkgs = candidate != null
+ && lib.versions.majorMinor candidate.version == majorMinor
+ && !lib.versionOlder candidate.version goVersion;
+
+ hash = goSrcHashes.${goVersion} or null;
+ fromSource =
+ if hash == null then
+ throw ''
+ go.mod requires Go ${goVersion}, which nixpkgs does not provide
+ (nixpkgs.${attr} = ${if candidate == null then "missing" else candidate.version}).
+
+ Add the hash of https://go.dev/dl/go${goVersion}.src.tar.gz to
+ `goSrcHashes` in flake.nix and it will be built from source. Use
+ lib.fakeHash first; Nix prints the real one.
+ ''
+ else
+ prev.go.overrideAttrs (old: {
+ version = goVersion;
+ src = prev.fetchurl {
+ url = "https://go.dev/dl/go${goVersion}.src.tar.gz";
+ inherit hash;
+ };
+ });
+
+ go = if fromNixpkgs then candidate else fromSource;
+ in
+ {
+ inherit go;
+ # Keep the tools we build below on the same toolchain as the shell.
+ # When nixpkgs is current this is the derivation it already used, so
+ # it costs nothing and everything still comes from the binary cache.
+ buildGoModule = prev.buildGoModule.override { inherit go; };
+ };
+
+ # ---------------------------------------------------------------------
+ # Pinned tools
+ # ---------------------------------------------------------------------
+ toolsOverlay = final: prev: {
+ argoTools =
+ let
+ inherit (final) buildGoModule fetchFromGitHub;
+ pythonPkgs = final.python3Packages;
+
+ # ProperDocs is the MkDocs fork the docs are built with (see
+ # docs/requirements.txt — keep the version aligned). It is not in
+ # nixpkgs, so build it from its PyPI wheel; the Material theme,
+ # mkdocs-redirects and pymdown-extensions come from nixpkgs, which
+ # also pulls in the `mkdocs` those plugins import at runtime.
+ properdocs = pythonPkgs.buildPythonPackage rec {
+ pname = "properdocs";
+ version = toolVersions.properdocs;
+ format = "wheel";
+ src = pythonPkgs.fetchPypi {
+ inherit pname version format;
+ dist = "py3";
+ python = "py3";
+ hash = "sha256-b6DPouAb8zj2hIksilBs9w6oiufzR5yTO2+iAWgQHL0=";
+ };
+ propagatedBuildInputs = with pythonPkgs; [
+ click
+ ghp-import
+ importlib-metadata
+ jinja2
+ markdown
+ markupsafe
+ mergedeep
+ packaging
+ pathspec
+ platformdirs
+ pyyaml
+ pyyaml-env-tag
+ watchdog
+ ];
+ doCheck = false;
+ };
+
+ # Every Go tool below is built the same way: no test suite (we are
+ # packaging a release, not vetting it) and no symbol table or DWARF
+ # (`-s -w`), which is about a third of a Go binary and dead weight
+ # in something nobody debugs in place. `subPackages` narrows the
+ # build to the commands the Makefile runs, wherever upstream ships
+ # more — gogo/protobuf and code-generator ship a dozen each, buf
+ # twenty-odd, and every one is tens of megabytes in the closure.
+ goTool = args: buildGoModule ({
+ doCheck = false;
+ ldflags = [ "-s" "-w" ];
+ } // args);
+ in
+ rec {
+ # Used for `buf export` only, from hack/proto-export.
+ buf = goTool rec {
+ pname = "buf";
+ version = toolVersions.buf;
+ src = fetchFromGitHub {
+ owner = "bufbuild";
+ repo = "buf";
+ rev = "v${version}";
+ hash = "sha256-uhQhBxjtnWY5gm3vRv/SfLCdzW3cwMt91hHPUC25/O0=";
+ };
+ subPackages = [ "cmd/buf" ];
+ vendorHash = "sha256-8Vh6txDsPOGad6rsW9hkahT+3Dku+aECaWpkGHgW7fs=";
+ };
+
+ # go-to-protobuf. The client, lister and informer generators live in
+ # this repo too, but kube_codegen.sh `go install`s its own copies
+ # into GOBIN and calls them by absolute path, so a copy on PATH
+ # would only be shadowing that.
+ code-generator = goTool rec {
+ pname = "code-generator";
+ version = toolVersions.codeGenerator;
+ src = fetchFromGitHub {
+ owner = "kubernetes";
+ repo = "code-generator";
+ rev = "v${version}";
+ hash = "sha256-NhWD09Uy8QZLov74qhBmhqXGkxWalSjOMe/1He/fHns=";
+ };
+ subPackages = [ "cmd/go-to-protobuf" ];
+ vendorHash = "sha256-eQuiQ8sCOE9wyVIBRmSQ1PkdvRIIw9I3GwSpHDPEE/I=";
+ };
+
+ controller-gen = final.kubernetes-controller-tools.overrideAttrs (old: rec {
+ version = toolVersions.controllerTools;
+ src = fetchFromGitHub {
+ owner = "kubernetes-sigs";
+ repo = "controller-tools";
+ rev = "v${version}";
+ hash = "sha256-zrh6GWFivs1fqkvaN6MSiYoCuPbiTQ6mJz4d69Wb7lo=";
+ };
+ vendorHash = "sha256-criu2UyNkGaVQnIxrjzIU4D389DbCcjG/kn3kfoD5yE=";
+ });
+
+ # protoc-gen-gogo and protoc-gen-gogofast.
+ gogo-protobuf = goTool rec {
+ pname = "gogo-protobuf";
+ version = toolVersions.gogoProtobuf;
+ src = fetchFromGitHub {
+ owner = "gogo";
+ repo = "protobuf";
+ rev = "v${version}";
+ hash = "sha256-CoUqgLFnLNCS9OxKFS7XwjE17SlH6iL1Kgv+0uEK2zU=";
+ };
+ subPackages = [ "protoc-gen-gogo" "protoc-gen-gogofast" ];
+ vendorHash = "sha256-nOL2Ulo9VlOHAqJgZuHl7fGjz/WFAaWPdemplbQWcak=";
+ };
+
+ goimports = goTool rec {
+ pname = "goimports";
+ version = toolVersions.goimports;
+ src = fetchFromGitHub {
+ owner = "golang";
+ repo = "tools";
+ rev = "v${version}";
+ hash = "sha256-h53fIvf3pedJXlopOEWYq5Hp7IVNsTIGychuCBPwY1I=";
+ };
+ subPackages = [ "cmd/goimports" ];
+ vendorHash = "sha256-L2VYebgRTdiJyIBW437hvt8RyF4D4P8rjFvjNiDtu6Q=";
+ };
+
+ golangci-lint = final.golangci-lint.overrideAttrs (old: rec {
+ version = toolVersions.golangciLint;
+ src = fetchFromGitHub {
+ owner = "golangci";
+ repo = "golangci-lint";
+ rev = "v${version}";
+ hash = "sha256-VD46VOSBzVeeJ86FYLEPTsy23MUQapDPPYiO3/Ki8Mw=";
+ };
+ vendorHash = "sha256-k/lsDC6thW3B1zcn+OXjSmwmiW8pm0HM+g/z+N3AQek=";
+ });
+
+ go-swagger = final.go-swagger.overrideAttrs (old: rec {
+ version = toolVersions.goSwagger;
+ src = fetchFromGitHub {
+ owner = "go-swagger";
+ repo = "go-swagger";
+ rev = "v${version}";
+ hash = "sha256-CVfGKkqneNgSJZOptQrywCioSZwJP0XGspVM3S45Q/k=";
+ };
+ vendorHash = "sha256-x3fTIXmI5NnOKph1D84MHzf1Kod+WLYn1JtnWLr4x+U=";
+ });
+
+ gotestsum = goTool rec {
+ pname = "gotestsum";
+ version = toolVersions.gotestsum;
+ src = fetchFromGitHub {
+ owner = "gotestyourself";
+ repo = "gotestsum";
+ rev = "v${version}";
+ hash = "sha256-j8lB0TIHK8/yMzaTB5OOaboEtnB6IsTybz8sJbNoQt4=";
+ };
+ subPackages = [ "." ];
+ vendorHash = "sha256-UInHqKzntK0fYsUKZ2jW4akymeRd3sMQKf8+//TQb7g=";
+ };
+
+ # protoc-gen-grpc-gateway and protoc-gen-swagger.
+ grpc-gateway = goTool rec {
+ pname = "grpc-gateway";
+ version = toolVersions.grpcGateway;
+ src = fetchFromGitHub {
+ owner = "grpc-ecosystem";
+ repo = "grpc-gateway";
+ rev = "v${version}";
+ hash = "sha256-jJWqkMEBAJq50KaXccVpmgx/hwTdKgTtNkz8/xYO+Dc=";
+ };
+ vendorHash = "sha256-jVOb2uHjPley+K41pV+iMPNx67jtb75Rb/ENhw+ZMoM=";
+ };
+
+ kubeauto = goTool rec {
+ pname = "kubeauto";
+ version = toolVersions.kubeauto;
+ src = fetchFromGitHub {
+ owner = "kitproj";
+ repo = "kubeauto";
+ rev = "v${version}";
+ hash = "sha256-WbGiTjxQBykwejx6iDctAZ53gwGgr2vAkK42kbQzkeE=";
+ };
+ vendorHash = "sha256-de5YVcBpU3tNpqilBwx68nuqBzU4e5ca/WNDPCsFPKA=";
+ };
+
+ mockery = final.go-mockery.overrideAttrs (old: rec {
+ version = toolVersions.mockery;
+ src = fetchFromGitHub {
+ owner = "vektra";
+ repo = "mockery";
+ rev = "v${version}";
+ hash = "sha256-x7WniZ4wpnuzUHM2ZC2P7Ns67bIp4V4F9f4xQEJONEk=";
+ };
+ vendorHash = "sha256-cNMknwlU7ENwN67CtyU1YgYIXCJbh4b7Z3oUK7kkEkk=";
+ doCheck = false;
+ });
+
+ openapi-gen = goTool rec {
+ pname = "openapi-gen";
+ version = toolVersions.kubeOpenapi;
+ src = fetchFromGitHub {
+ owner = "kubernetes";
+ repo = "kube-openapi";
+ rev = "424119656bbf";
+ hash = "sha256-rkI7r75euOv9c0QpGpLTfatFq5S3npynmKKNlflAHug=";
+ };
+ subPackages = [ "cmd/openapi-gen" ];
+ vendorHash = "sha256-2PETLn3oDGIsyUQS7cY0XGTdMZvr7LCCc9fcltP0L80=";
+ };
+
+ # The Java SDK is generated by OpenAPI Generator 5.2.1 (see
+ # sdks/java/Makefile), and the generated client is what downstream
+ # users compile against, so the version is a contract. nixpkgs
+ # builds a much newer one from source; take the published jar
+ # instead and run it on a current JDK rather than the EOL JDK 8 it
+ # was released against.
+ openapi-generator-cli = final.stdenvNoCC.mkDerivation rec {
+ pname = "openapi-generator-cli";
+ version = toolVersions.openapiGenerator;
+ jarfilename = "${pname}-${version}.jar";
+ src = final.fetchurl {
+ url = "mirror://maven/org/openapitools/${pname}/${version}/${jarfilename}";
+ hash = "sha256-stRtSZCvPUQuTiKOHmJ7k8o3Gtly9Up+gicrDOeWjIs=";
+ };
+ dontUnpack = true;
+ nativeBuildInputs = [ final.makeWrapper ];
+ installPhase = ''
+ runHook preInstall
+ install -Dm644 $src $out/share/java/${jarfilename}
+ makeWrapper ${final.jdk}/bin/java $out/bin/${pname} \
+ --add-flags "-jar $out/share/java/${jarfilename}"
+ runHook postInstall
+ '';
+ meta = {
+ description = "OpenAPI Generator CLI, pinned to the version the Java SDK is generated with";
+ homepage = "https://openapi-generator.tech";
+ license = lib.licenses.asl20;
+ mainProgram = pname;
+ };
+ };
+
+ inherit properdocs;
+
+ # `properdocs` plus the theme and extensions it loads at runtime.
+ pythonEnv = final.python3.withPackages (ps: [
+ properdocs
+ ps.mkdocs-material
+ ps.mkdocs-redirects
+ ps.pymdown-extensions
+ ]);
+
+ snipdoc = final.rustPlatform.buildRustPackage rec {
+ pname = "snipdoc";
+ version = toolVersions.snipdoc;
+ src = fetchFromGitHub {
+ owner = "kaplanelad";
+ repo = "snipdoc";
+ rev = "v${version}";
+ hash = "sha256-3tF871gZouZMJ3LOzlucaxEy3q8TNoc08GVCT0aYOUk=";
+ };
+ cargoHash = "sha256-chi8q+zTewc7xpyvQbnMU7Lmd0Y4qFrIFCSh7IBITxU=";
+ doCheck = false;
+ };
+
+ # cspell decides whether the docs spell-check passes, so its
+ # version is a contract. nixpkgs happens to ship exactly the version
+ # we want and packaging it by hand means vendoring a pnpm lockfile,
+ # so assert on it instead: a nixpkgs bump that moves cspell fails
+ # here rather than in a surprising docs job.
+ cspell =
+ let want = toolVersions.cspell; got = final.cspell.version; in
+ if got == want then final.cspell
+ else throw "cspell ${want} is pinned, but nixpkgs has ${got}: pin the new version in flake.nix after checking `make docs-spellcheck` still passes";
+ };
+ };
+
+ pkgsFor = system: import nixpkgs {
+ inherit system;
+ overlays = [ goOverlay toolsOverlay ];
+ };
+
+ forAllSystems = f: lib.genAttrs systems (system: f (pkgsFor system));
+ in
+ {
+ packages = forAllSystems (pkgs: pkgs.argoTools // { inherit (pkgs) go; });
+
+ devShells = forAllSystems (pkgs: {
+ default = pkgs.mkShell {
+ name = "argo-workflows";
+
+ packages = with pkgs; [
+ # -- pinned: codegen
+ argoTools.code-generator
+ argoTools.controller-gen
+ argoTools.gogo-protobuf
+ argoTools.goimports
+ argoTools.go-swagger
+ argoTools.grpc-gateway
+ argoTools.mockery
+ argoTools.buf
+ argoTools.openapi-gen
+
+ # -- pinned: lint, test and docs gates
+ argoTools.cspell
+ argoTools.golangci-lint
+ argoTools.gotestsum
+ argoTools.pythonEnv
+ argoTools.snipdoc
+
+ # -- pinned: SDKs
+ argoTools.openapi-generator-cli
+ jdk
+
+ # -- pinned: not in nixpkgs at all
+ argoTools.kubeauto
+
+ # -- floating: language toolchains
+ clang-tools # clang-format, for formatting .proto
+ go
+ gopls
+ nodejs_24
+ protobuf
+ (yarn.override { nodejs = nodejs_24; })
+
+ # -- floating: local cluster
+ k3d
+ kubectl
+ kustomize
+ tilt
+
+ # -- floating: everything else
+ diffutils
+ gettext # envsubst, for the release notes
+ gnused
+ jq
+ lsof
+ markdown-link-check
+ markdownlint-cli
+ typos
+ ];
+
+ # Nix's Go sets its own GOROOT; a stale one inherited from the host
+ # (a Homebrew or asdf install, say) makes it build against the wrong
+ # standard library.
+ shellHook = ''
+ unset GOROOT
+ '';
+ };
+
+ # The devcontainer CLI shells out to `docker`, so nixpkgs hands it a
+ # whole engine — moby, containerd and buildx are half a gigabyte
+ # between them. Only the CI job that bakes the image needs it, and
+ # inside the container Docker comes from the docker-in-docker feature
+ # anyway, so it gets a shell of its own instead of a place in the one
+ # everybody enters:
+ #
+ # nix develop .#devcontainer --command make devcontainer-build
+ devcontainer = pkgs.mkShell {
+ name = "argo-workflows-devcontainer";
+
+ # The CLI wraps itself with git, docker and docker-compose on PATH.
+ # Its docker already brings git-minimal along; point the wrapper at
+ # that one too rather than dragging in a second, perl-laden git.
+ packages = [
+ (pkgs.devcontainer.override { git = pkgs.gitMinimal; })
+ ];
+ };
+ });
+
+ formatter = forAllSystems (pkgs: pkgs.nixpkgs-fmt);
+ };
+}
diff --git a/gomod2nix.toml b/gomod2nix.toml
deleted file mode 100644
index 1f1b97502157..000000000000
--- a/gomod2nix.toml
+++ /dev/null
@@ -1,1059 +0,0 @@
-schema = 3
-
-[mod]
- [mod."cel.dev/expr"]
- version = "v0.25.1"
- hash = "sha256-TEdMxFUPK7IZuCXMufwCkbN+ZZIXSQclljIybFZcByo="
- [mod."cloud.google.com/go"]
- version = "v0.123.0"
- hash = "sha256-OjuvlqYrGvoUiXO/5ALbMxHvXRlrhDjLby1BN/nuhAw="
- [mod."cloud.google.com/go/auth"]
- version = "v0.20.0"
- hash = "sha256-HlKu/WvrK7oj5hgaAkpv9WAufMLfEVLiRJAdM5W6GVU="
- [mod."cloud.google.com/go/auth/oauth2adapt"]
- version = "v0.2.8"
- hash = "sha256-GoXFqAbp1WO1tDj07PF5EyxDYvCBP0l0qwxY2oV2hfc="
- [mod."cloud.google.com/go/compute/metadata"]
- version = "v0.9.0"
- hash = "sha256-VFqQwLJKyH1zReR/XtygEHP5UkI01T9BHEL0hvXtauo="
- [mod."cloud.google.com/go/iam"]
- version = "v1.11.0"
- hash = "sha256-cqK0LLViHAzK/XQEUWTF7OBTqdC59oWgdWr7v3JNcvE="
- [mod."cloud.google.com/go/monitoring"]
- version = "v1.29.0"
- hash = "sha256-Hn/YZtZle8ObXy8yft4pgiNslqScuCdVnK8ztPnyEqw="
- [mod."cloud.google.com/go/storage"]
- version = "v1.63.1"
- hash = "sha256-zlPcQEztb0G7ItNXNhTCay5zFGH42lbO+F/r1f1wLBw="
- [mod."dario.cat/mergo"]
- version = "v1.0.2"
- hash = "sha256-p6jdiHlLEfZES8vJnDywG4aVzIe16p0CU6iglglIweA="
- [mod."filippo.io/edwards25519"]
- version = "v1.2.0"
- hash = "sha256-VOgoreEdslftsR/MyEnZAlutqvph4T57NR1mT9+APfg="
- [mod."github.com/Azure/azure-sdk-for-go/sdk/azcore"]
- version = "v1.22.0"
- hash = "sha256-JhJgAeC3G0l+th1Xdu0Vf+FzWXTALHyb5FSIsKYTgBo="
- [mod."github.com/Azure/azure-sdk-for-go/sdk/azidentity"]
- version = "v1.14.0"
- hash = "sha256-oUoSbjql472sT24daGzICuBMEQLjpHXooGT83KtnUfc="
- [mod."github.com/Azure/azure-sdk-for-go/sdk/containers/azcontainerregistry"]
- version = "v0.2.3"
- hash = "sha256-CWJLUdzbAwvZmTTRr/VTVoneIo3nOnDJyjYmhEuZnkA="
- [mod."github.com/Azure/azure-sdk-for-go/sdk/internal"]
- version = "v1.12.0"
- hash = "sha256-jX/JR3WToz0vEWowfDBVjpul9EE2V2xGF1EfckrhDus="
- [mod."github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"]
- version = "v1.8.0"
- hash = "sha256-q3JD+vnG+IUDbf5QiTIMy0mbZNJOeUlrmewQ0k+IrnQ="
- [mod."github.com/Azure/go-ansiterm"]
- version = "v0.0.0-20250102033503-faa5f7b0171c"
- hash = "sha256-4WYKJtxjnm3egDAh9ocTR+gy5UUqVoY3knHy9c17XIY="
- [mod."github.com/AzureAD/microsoft-authentication-library-for-go"]
- version = "v1.7.2"
- hash = "sha256-zB4M5bgMGDcjvF4GKu2t+NHTIHm9xQbsw9CUGT0tkk8="
- [mod."github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp"]
- version = "v1.32.0"
- hash = "sha256-qkLtEOoEFlKy5+GbFeGqq0D/6yBD5uiQUUMmy/eLJxg="
- [mod."github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric"]
- version = "v0.57.0"
- hash = "sha256-vCsapCImRi4i0gfZVPeLWwj8BeMAmZRF7sGQzWMvMyE="
- [mod."github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping"]
- version = "v0.57.0"
- hash = "sha256-HMMjGdEbwBe26a5VKonuIr2qNu6xWaJ67pE1f6oI0TE="
- [mod."github.com/Knetic/govaluate"]
- version = "v3.0.1-0.20250325060307-7625b7f8c03d+incompatible"
- hash = "sha256-yq4peeNsW1Eb4/O2a9w8VOaXLHfe+TmFSrdviw6yppg="
- [mod."github.com/MakeNowJust/heredoc"]
- version = "v1.0.0"
- hash = "sha256-8hKERAVV1Pew84kc9GkW23dcO8uIUx/+tJQLi+oPwqE="
- [mod."github.com/Masterminds/goutils"]
- version = "v1.1.1"
- hash = "sha256-MEvA5e099GUllILa5EXxa6toQexU1sz6eDZt2tiqpCY="
- [mod."github.com/Masterminds/semver/v3"]
- version = "v3.5.0"
- hash = "sha256-Ps7gEw0nkHDZO/iDru/s+X8rMaUkNmiZ7id1GsIKlDU="
- [mod."github.com/Masterminds/sprig/v3"]
- version = "v3.3.0"
- hash = "sha256-NvFX1xRO5t/u8OI063SDPfqYcZ43AuLI6klA6daPV9I="
- [mod."github.com/Microsoft/go-winio"]
- version = "v0.6.2"
- hash = "sha256-tVNWDUMILZbJvarcl/E7tpSnkn7urqgSHa2Eaka5vSU="
- [mod."github.com/ProtonMail/go-crypto"]
- version = "v1.3.0"
- hash = "sha256-TUG+C4MyeWglOmiwiW2/NUVurFHXLgEPRd3X9uQ1NGI="
- [mod."github.com/TwiN/go-color"]
- version = "v1.4.1"
- hash = "sha256-m+trTKvNYRvkjOrdj+Fe+TkexfnBhd4vIGuS2snJSBc="
- [mod."github.com/TylerBrock/colorjson"]
- version = "v0.0.0-20200706003622-8a50f05110d2"
- hash = "sha256-la491SAfDVV2uyVQPHRthxJTKKYSwke0N1IU9iqoBwE="
- [mod."github.com/XSAM/otelsql"]
- version = "v0.43.0"
- hash = "sha256-jYd/cfx6dZHsMjpUInVsxbNjmPkoBUmMdVf7VRBZZ5E="
- [mod."github.com/ajg/form"]
- version = "v1.5.1"
- hash = "sha256-wHKZnoL8gW3YL8frdMIbs703ZX/NruuW5dV13PhxlG8="
- [mod."github.com/alibabacloud-go/debug"]
- version = "v1.0.1"
- hash = "sha256-hY9/RFyllP8Sz/W5pZzkZc2vXZav0dD5gTZEWmE8yDE="
- [mod."github.com/alibabacloud-go/tea"]
- version = "v1.5.2"
- hash = "sha256-kr4KZzVEKf0CL/8xX0ygXyc1NsCl8uYQwa5VGm0Tpg4="
- [mod."github.com/aliyun/aliyun-oss-go-sdk"]
- version = "v3.0.2+incompatible"
- hash = "sha256-tGYo4iifYkG0EOOBix+O/utWhrzzT2Zk+jcnZZ06ZPk="
- [mod."github.com/aliyun/credentials-go"]
- version = "v1.4.12"
- hash = "sha256-08l5gD5IZpfiKZzjct/DD+R/+u6PgUTbcke0DLcFhjs="
- [mod."github.com/andybalholm/brotli"]
- version = "v1.2.2"
- hash = "sha256-XVnD/ruaOOYmt1Eipv/kIzNStI9fqOYc3hJHJ7ao9Yg="
- [mod."github.com/antlr4-go/antlr/v4"]
- version = "v4.13.1"
- hash = "sha256-beAuxHNRUuhzcSJUh/8ztVf1zCUiaT72fg2Jvx0AuNQ="
- [mod."github.com/argoproj/argo-events"]
- version = "v1.9.11"
- hash = "sha256-i9ufsJB4PiF91dPV0vF4LhDt3GvLwFb50d6maBOZX0c="
- [mod."github.com/argoproj/pkg"]
- version = "v0.13.7-0.20250123033407-65f2d4777bfd"
- hash = "sha256-KZjHOfOH+e5GokEvIovIsAvv0+JmsozV4D6QnU9WX04="
- [mod."github.com/awalterschulze/gographviz"]
- version = "v2.0.3+incompatible"
- hash = "sha256-NLQtom5/csYWGUq3IMds0OI69S+/VDalAYccExFJ7Qc="
- [mod."github.com/aws/aws-sdk-go-v2"]
- version = "v1.42.1"
- hash = "sha256-1QcFmF2F/9NTRNC2ogPfXCPS6+b1cOscC5plzw+AhcE="
- [mod."github.com/aws/aws-sdk-go-v2/config"]
- version = "v1.32.30"
- hash = "sha256-mTI+p/ZIlIXqUaUmYHPuCEVA/todlPfqRRCpY4jNk8U="
- [mod."github.com/aws/aws-sdk-go-v2/credentials"]
- version = "v1.19.29"
- hash = "sha256-ZjKQH6Dw15tyMGvNft+N7LRS9d6fexveP5aJ85YFVK0="
- [mod."github.com/aws/aws-sdk-go-v2/feature/ec2/imds"]
- version = "v1.18.30"
- hash = "sha256-o3uRJ6fMcsNuSkKHeaNBLcnPKoc4Cia3m0ulEO4b5o0="
- [mod."github.com/aws/aws-sdk-go-v2/feature/rds/auth"]
- version = "v1.6.30"
- hash = "sha256-pezAAnSxge84pDBL7UX73GQUHDlTXsM99CNiOTIpc0A="
- [mod."github.com/aws/aws-sdk-go-v2/internal/configsources"]
- version = "v1.4.30"
- hash = "sha256-EtDxaxyPB16G1jG7JKLwx4ty/dDPS5DNsPjX1zCp4ss="
- [mod."github.com/aws/aws-sdk-go-v2/internal/endpoints/v2"]
- version = "v2.7.30"
- hash = "sha256-e5Y/tSKGbWp9QDu09Cd8UfByB2H9la0WXrZL+bBjJzE="
- [mod."github.com/aws/aws-sdk-go-v2/internal/v4a"]
- version = "v1.4.31"
- hash = "sha256-RZOXK4byQqi6gJKfS6QPyHwhVNNEznD+VE9XzxCQkNU="
- [mod."github.com/aws/aws-sdk-go-v2/service/dynamodb"]
- version = "v1.57.4"
- hash = "sha256-Dg3C6I4Lu2gtRf/RinNXcu+caWINRQ5y6vL+8rxqDKA="
- [mod."github.com/aws/aws-sdk-go-v2/service/ecr"]
- version = "v1.55.3"
- hash = "sha256-J9v9A2bMBTPM0K/aHM3TrS0nBkuTNFVQyqtnc1ZwE7w="
- [mod."github.com/aws/aws-sdk-go-v2/service/ecrpublic"]
- version = "v1.38.10"
- hash = "sha256-uJtfhtkG4pfehKHyc2dsqafvt6fKMnMgMe/uPemJrPY="
- [mod."github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding"]
- version = "v1.13.13"
- hash = "sha256-C0L0B5qRP8IhX02Wz/wttNtOkI6xrI9VHQr/FiTCUsc="
- [mod."github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery"]
- version = "v1.12.0"
- hash = "sha256-OT9tWrZZaHUUThpK8cjemBloxBJlaBqIxtctoBr0hiU="
- [mod."github.com/aws/aws-sdk-go-v2/service/internal/presigned-url"]
- version = "v1.13.30"
- hash = "sha256-M/du7ylRkueS2Sm2tzAfn8L7RWt0qmR3CWlORqgvhpA="
- [mod."github.com/aws/aws-sdk-go-v2/service/signin"]
- version = "v1.4.1"
- hash = "sha256-mbdJNJR8Zj61xJGYh4aLuBxAoSZR1I8wIN8bo1MrJ7c="
- [mod."github.com/aws/aws-sdk-go-v2/service/sns"]
- version = "v1.39.17"
- hash = "sha256-BNH4dAmXhvr3OJ+xUUHImteKiafqN0+kzN5xY4BgHuI="
- [mod."github.com/aws/aws-sdk-go-v2/service/sqs"]
- version = "v1.42.27"
- hash = "sha256-xzG9Q3mXoC1hiQZsR+4FncqG//htkPCT0ALnQY9UYkA="
- [mod."github.com/aws/aws-sdk-go-v2/service/sso"]
- version = "v1.32.1"
- hash = "sha256-hT8r+TRmZOXPY91H1GxcoKqOMW30dF7TZwH03X3vU38="
- [mod."github.com/aws/aws-sdk-go-v2/service/ssooidc"]
- version = "v1.37.1"
- hash = "sha256-qaeGgEaQyhVWXYuPh4qZqbO/eoCM2oeWzPV6FtQ618I="
- [mod."github.com/aws/aws-sdk-go-v2/service/sts"]
- version = "v1.44.1"
- hash = "sha256-yB11dp2pxJ+IUF/e/3tC62cMvy9BvsPScGNxrbSb6lI="
- [mod."github.com/aws/smithy-go"]
- version = "v1.27.3"
- hash = "sha256-pk7QdAi0PjT7DdN9UxaxhFO4fYanpR9pjAWUFC5dU/4="
- [mod."github.com/awslabs/amazon-ecr-credential-helper/ecr-login"]
- version = "v0.12.0"
- hash = "sha256-PHoHWGX9RVkAQNQF2fz5Hv4JEaGBvLhcuUwlu5IQjU0="
- [mod."github.com/beorn7/perks"]
- version = "v1.0.1"
- hash = "sha256-h75GUqfwJKngCJQVE5Ao5wnO3cfKD9lSIteoLp/3xJ4="
- [mod."github.com/blang/semver/v4"]
- version = "v4.0.0"
- hash = "sha256-dJC22MjnfT5WqJ7x7Tc3Bvpw9tFnBn9HqfWFiM57JVc="
- [mod."github.com/blushft/go-diagrams"]
- version = "v0.0.0-20250322201119-d91ac4ca5de4"
- hash = "sha256-XwlWZY1SVBmylr5irzO2Qs5zQOL5OUszdKkeOTUczwg="
- [mod."github.com/cenkalti/backoff/v4"]
- version = "v4.3.0"
- hash = "sha256-wfVjNZsGG1WoNC5aL+kdcy6QXPgZo4THAevZ1787md8="
- [mod."github.com/cenkalti/backoff/v5"]
- version = "v5.0.3"
- hash = "sha256-bKq43PPD8RM6e7HePxHaO27traqm76bkvHcTVTQ+jeY="
- [mod."github.com/cespare/xxhash/v2"]
- version = "v2.3.0"
- hash = "sha256-7hRlwSR+fos1kx4VZmJ/7snR7zHh8ZFKX+qqqqGcQpY="
- [mod."github.com/chai2010/gettext-go"]
- version = "v1.0.3"
- hash = "sha256-RtytBWIPUk33jEYc4hBYdgcDCgzHC1z9ld/sHO5vLTc="
- [mod."github.com/clipperhouse/displaywidth"]
- version = "v0.11.0"
- hash = "sha256-WokyTaofEy95xlshqK5YDzpemhXV5oaQifxS9YyfCXo="
- [mod."github.com/clipperhouse/uax29/v2"]
- version = "v2.7.0"
- hash = "sha256-GO3az7WiGcwU0OvmocwdfR5ohGRL8NbjscIaMyhAdxE="
- [mod."github.com/cloudflare/circl"]
- version = "v1.6.3"
- hash = "sha256-XZm4EastgX67Dgm5BpOEW/PY4aLcHM/O8+Xbz26PuTY="
- [mod."github.com/cncf/xds/go"]
- version = "v0.0.0-20260202195803-dba9d589def2"
- hash = "sha256-nCcna5Dwr8a+FgdSZt43VmoMds5U0FZta2vpJfdMOhs="
- [mod."github.com/colinmarc/hdfs/v2"]
- version = "v2.4.0"
- hash = "sha256-wb25mjI0R88ZJyrz0W/NPEsizt745Ii4du5WDQeNp/s="
- [mod."github.com/containerd/errdefs"]
- version = "v1.0.0"
- hash = "sha256-wMZGoeqvRhuovYCJx0Js4P3qFCNTZ/6Atea/kNYoPMI="
- [mod."github.com/containerd/errdefs/pkg"]
- version = "v0.3.0"
- hash = "sha256-BILJ0Be4cc8xfvLPylc/Pvwwa+w88+Hd0njzetUCeTg="
- [mod."github.com/containerd/log"]
- version = "v0.1.0"
- hash = "sha256-vuE6Mie2gSxiN3jTKTZovjcbdBd1YEExb7IBe3GM+9s="
- [mod."github.com/containerd/platforms"]
- version = "v0.2.1"
- hash = "sha256-XQdg/tnn5uKNzUc/dMmoIS9wgarx7SxaqZ5uJ9ZglA0="
- [mod."github.com/coreos/go-oidc/v3"]
- version = "v3.20.0"
- hash = "sha256-mlYeWQ7OKatN8ag+q+DjipcPSXwQJ+V5dOYswjcE76w="
- [mod."github.com/cpuguy83/dockercfg"]
- version = "v0.3.2"
- hash = "sha256-Jm0B99cXSJwMT53P0C6rhqDnZUykZXMVTdlvDrDvrxQ="
- [mod."github.com/cpuguy83/go-md2man/v2"]
- version = "v2.0.7"
- hash = "sha256-DKqGvdidl6J4lPhIk3okhU4k6MvtSr+hJ9huU/JTai0="
- [mod."github.com/creack/pty"]
- version = "v1.1.24"
- hash = "sha256-6oSurN/ZYr/KHxKKU6Qbw9w8CDKmPa8yL00pZ24H0AM="
- [mod."github.com/cyphar/filepath-securejoin"]
- version = "v0.6.1"
- hash = "sha256-obqip8c1c9mjXFznyXF8aDnpcMw7ttzv+e28anCa/v0="
- [mod."github.com/davecgh/go-spew"]
- version = "v1.1.2-0.20180830191138-d8f796af33cc"
- hash = "sha256-fV9oI51xjHdOmEx6+dlq7Ku2Ag+m/bmbzPo6A4Y74qc="
- [mod."github.com/distribution/reference"]
- version = "v0.6.0"
- hash = "sha256-gr4tL+qz4jKyAtl8LINcxMSanztdt+pybj1T+2ulQv4="
- [mod."github.com/docker/cli"]
- version = "v29.5.3+incompatible"
- hash = "sha256-UcKvGHHpa5BZ3cpG79NI2Rwu8mmCV8DQ9JHqScZWv30="
- [mod."github.com/docker/docker-credential-helpers"]
- version = "v0.9.5"
- hash = "sha256-7fm66H8bvqjiEssTy/oiAMmQd7T15aVS+EANrw+4H4U="
- [mod."github.com/docker/go-connections"]
- version = "v0.7.0"
- hash = "sha256-J+3epfT+oKV2Q8ELESsPyBFIzgnXfITH1GlgbDSkRwg="
- [mod."github.com/docker/go-units"]
- version = "v0.5.0"
- hash = "sha256-iK/V/jJc+borzqMeqLY+38Qcts2KhywpsTk95++hImE="
- [mod."github.com/doublerebel/bellows"]
- version = "v0.0.0-20160303004610-f177d92a03d3"
- hash = "sha256-fP3cKc0WeRhwtuK1NC8BVKmPg+wmoQ/Wi4vaV/ZYFYI="
- [mod."github.com/dustin/go-humanize"]
- version = "v1.0.1"
- hash = "sha256-yuvxYYngpfVkUg9yAmG99IUVmADTQA0tMbBXe0Fq0Mc="
- [mod."github.com/ebitengine/purego"]
- version = "v0.10.0"
- hash = "sha256-NPS88SNvsm4QEAx1zVmNGzMwtR1EBhdQYywQU1JdRqM="
- [mod."github.com/emicklei/go-restful/v3"]
- version = "v3.13.0"
- hash = "sha256-lB2Z29RDLiVQE5NrsV1s2iHeQ4ciGwNj5OG1zJxwZV8="
- [mod."github.com/emirpasic/gods"]
- version = "v1.18.1"
- hash = "sha256-hGDKddjLj+5dn2woHtXKUdd49/3xdsqnhx7VEdCu1m4="
- [mod."github.com/envoyproxy/go-control-plane/envoy"]
- version = "v1.37.0"
- hash = "sha256-xxQd6objJVXpcQ8B7MznhqeQLoLWlyjlASnq2hJDp+k="
- [mod."github.com/envoyproxy/protoc-gen-validate"]
- version = "v1.3.3"
- hash = "sha256-NsI6A4CBVTpAq4gsmv66sMx0gvY0J0kF/t9zbtlRLr4="
- [mod."github.com/evanphx/json-patch"]
- version = "v5.9.11+incompatible"
- hash = "sha256-1iyZpBaeBLmNkJ3T4A9fAEXEYB9nk9V02ug4pwl5dy0="
- [mod."github.com/evilmonkeyinc/jsonpath"]
- version = "v0.8.1"
- hash = "sha256-eJz6fTZoUAi8ROZZKb/nvKCe+YA3uR+4xYL868fJMBw="
- [mod."github.com/exponent-io/jsonpath"]
- version = "v0.0.0-20210407135951-1de76d718b3f"
- hash = "sha256-2wgJI2pvkaq2MoeUmLRaTBA8dIoEcwzKvw4qKJlhIec="
- [mod."github.com/expr-lang/expr"]
- version = "v1.17.8"
- hash = "sha256-bUQcgpyD5CIgWQGxC0A/pQPs2c6RSD7Ua2R4O9CSw7A="
- [mod."github.com/fatih/camelcase"]
- version = "v1.0.0"
- hash = "sha256-VPzLJ5R6kWzrCwggUOhHlQ3XKW6nCOXxn+0kWZzh+Xw="
- [mod."github.com/fatih/color"]
- version = "v1.19.0"
- hash = "sha256-YgMm1nid8yigNLG6aHfuMbsvMI1UYVf/Rkg44pp/NTU="
- [mod."github.com/fatih/structs"]
- version = "v1.1.0"
- hash = "sha256-OCmubTLF1anwNnkvFZDYHnF6hFlX0WDoe/9+dDlaMPM="
- [mod."github.com/felixge/httpsnoop"]
- version = "v1.0.4"
- hash = "sha256-c1JKoRSndwwOyOxq9ddCe+8qn7mG9uRq2o/822x5O/c="
- [mod."github.com/fsnotify/fsnotify"]
- version = "v1.10.1"
- hash = "sha256-6LBLgsh4nKkMpgRKVsYFEaGDSU1fncBcWVSjKBdfgjU="
- [mod."github.com/fxamacker/cbor/v2"]
- version = "v2.9.0"
- hash = "sha256-/IZK76MRCrz9XCiilieH5tKaLnIWyPJhwxDoVKB8dFc="
- [mod."github.com/gaganhr94/docker-credential-acr"]
- version = "v1.0.2"
- hash = "sha256-tn1WA/K0Yyzb7ABP9tF6p59euljQunFSmu9PPT7znxs="
- [mod."github.com/gavv/httpexpect/v2"]
- version = "v2.17.0"
- hash = "sha256-R6vRhw3Qhy5Q6P3UXX1G2z5eiNpauvexLHfqyqD5008="
- [mod."github.com/go-errors/errors"]
- version = "v1.5.1"
- hash = "sha256-K/IEfka2mbBk6b0AbiMaxpvkY1pZgzhtT6knqoDovPk="
- [mod."github.com/go-git/gcfg"]
- version = "v1.5.1-0.20230307220236-3a3c6141e376"
- hash = "sha256-f4k0gSYuo0/q3WOoTxl2eFaj7WZpdz29ih6CKc8Ude8="
- [mod."github.com/go-git/go-billy/v5"]
- version = "v5.9.0"
- hash = "sha256-6+i1Xk8kR6EY8y6YSE9Oyj8ykcvyHUHZv04GfwOIzzs="
- [mod."github.com/go-git/go-git/v5"]
- version = "v5.19.1"
- hash = "sha256-C0e3oOXYRgLUhm1TQk9mBwRwwj6iusxFAt5U9vqWz8A="
- [mod."github.com/go-jose/go-jose/v4"]
- version = "v4.1.4"
- hash = "sha256-MKoJKXup1jfwOyN8mHXu1CQ8fvFJTaEf3K2LVtNSRhc="
- [mod."github.com/go-logr/logr"]
- version = "v1.4.3"
- hash = "sha256-Nnp/dEVNMxLp3RSPDHZzGbI8BkSNuZMX0I0cjWKXXLA="
- [mod."github.com/go-logr/stdr"]
- version = "v1.2.2"
- hash = "sha256-rRweAP7XIb4egtT1f2gkz4sYOu7LDHmcJ5iNsJUd0sE="
- [mod."github.com/go-ole/go-ole"]
- version = "v1.2.6"
- hash = "sha256-+oxitLeJxYF19Z6g+6CgmCHJ1Y5D8raMi2Cb3M6nXCs="
- [mod."github.com/go-openapi/jsonpointer"]
- version = "v1.0.0"
- hash = "sha256-he4+Ue27HuNS0imS55XaS4g54v2OrKFJppdhz8cO94s="
- [mod."github.com/go-openapi/jsonreference"]
- version = "v1.0.0"
- hash = "sha256-+UaHDX6kNBxmhH6N2BE22KyXISiEvxPyTpJF5i6l+GE="
- [mod."github.com/go-openapi/swag"]
- version = "v0.26.1"
- hash = "sha256-eAD1EGpAppIOZQBxec+FEe11rmYnd/akI4C3eKsElLI="
- [mod."github.com/go-openapi/swag/cmdutils"]
- version = "v0.26.1"
- hash = "sha256-YaE9Sv3b/AMELBYnjcsfe9QtKlyye88OmHTHN8cUn/8="
- [mod."github.com/go-openapi/swag/conv"]
- version = "v0.26.1"
- hash = "sha256-VPkxP4sbzh+LN/jTJikJStGE6vo+rLv5BbaFSic8bvg="
- [mod."github.com/go-openapi/swag/fileutils"]
- version = "v0.26.1"
- hash = "sha256-EOl1ugoSuxepix1kqVJqamWHHW8/V/gk5RcGhAMv+Pg="
- [mod."github.com/go-openapi/swag/jsonname"]
- version = "v0.26.1"
- hash = "sha256-vyUIndj7CckGhyJ8QBHuchWHM4d/N325ccyuTS66gbM="
- [mod."github.com/go-openapi/swag/jsonutils"]
- version = "v0.26.1"
- hash = "sha256-FuMe1qlrZqS29rMFMZ2KKNAiMCcYAUDa2yS8vqlTelE="
- [mod."github.com/go-openapi/swag/loading"]
- version = "v0.26.1"
- hash = "sha256-45rD0Kd1LluM6bqSk3IfAClAfFoXRFdT57fB1gH9LLc="
- [mod."github.com/go-openapi/swag/mangling"]
- version = "v0.26.1"
- hash = "sha256-LZLUjreEo+xjdQnqPQCLtsROBfVlU8cxglwL0EuOWDw="
- [mod."github.com/go-openapi/swag/netutils"]
- version = "v0.26.1"
- hash = "sha256-zuSbhOhXiNWPgZamL3jtgBN0v6cLWLkUtwaVmX7bpwM="
- [mod."github.com/go-openapi/swag/stringutils"]
- version = "v0.26.1"
- hash = "sha256-f2oHoSu93xlhEzSP2xWTtMVk7xdOOLoZx/McBiRgQeI="
- [mod."github.com/go-openapi/swag/typeutils"]
- version = "v0.26.1"
- hash = "sha256-9fQSIyretdcKilp8PKJ7FMAy52LqvAkcOvgh3AsC3pY="
- [mod."github.com/go-openapi/swag/yamlutils"]
- version = "v0.26.1"
- hash = "sha256-JgqsyBwaJYRfPkJarbpxlqEhyRs6tg1/StljmV++UmY="
- [mod."github.com/go-playground/webhooks/v6"]
- version = "v6.4.0"
- hash = "sha256-kii4Lhr2JYfBb+iInphVi6ThpctpGivWF2rG5DN4hLQ="
- [mod."github.com/go-sql-driver/mysql"]
- version = "v1.10.0"
- hash = "sha256-ACqtLSMzQXWYSDegGS8AYAggcrEG6VDDrF3gDQ7z/ww="
- [mod."github.com/go-viper/mapstructure/v2"]
- version = "v2.5.0"
- hash = "sha256-LbrCBANBprVI84M0CWrXc7rriJL5ac5VKbh58LBTw7U="
- [mod."github.com/gobwas/glob"]
- version = "v0.2.4-0.20181002190808-e7a84e9525fe"
- hash = "sha256-dzuchqNIBYSE+QiJxuBU9Vpkdp4eGOqmNbShKGLXaUY="
- [mod."github.com/gogo/protobuf"]
- version = "v1.3.2"
- hash = "sha256-pogILFrrk+cAtb0ulqn9+gRZJ7sGnnLLdtqITvxvG6c="
- [mod."github.com/golang-jwt/jwt/v5"]
- version = "v5.3.1"
- hash = "sha256-h7AszH+3YWL3IV0+miY9vbtU0gM/2RpuASSGAYAgWcA="
- [mod."github.com/golang/groupcache"]
- version = "v0.0.0-20241129210726-2c02b8208cf8"
- hash = "sha256-AdLZ3dJLe/yduoNvZiXugZxNfmwJjNQyQGsIdzYzH74="
- [mod."github.com/golang/protobuf"]
- version = "v1.5.4"
- hash = "sha256-N3+Lv9lEZjrdOWdQhFj6Y3Iap4rVLEQeI8/eFFyAMZ0="
- [mod."github.com/google/btree"]
- version = "v1.1.3"
- hash = "sha256-/6Us2eNRFi2IIp7p5uPUXLridilAdk4SmZhcTYR0csw="
- [mod."github.com/google/cel-go"]
- version = "v0.29.0"
- hash = "sha256-j+zKJBywrA2UKzB/TAElEHwKsCa39+iEmzcbvsws3d4="
- [mod."github.com/google/gnostic-models"]
- version = "v0.7.0"
- hash = "sha256-sxShRxqOUVlz9IkAz0C/NP/7CmLBW3ffwoZTdh+rIOc="
- [mod."github.com/google/go-cmp"]
- version = "v0.7.0"
- hash = "sha256-JbxZFBFGCh/Rj5XZ1vG94V2x7c18L8XKB0N9ZD5F2rM="
- [mod."github.com/google/go-containerregistry"]
- version = "v0.21.7"
- hash = "sha256-LyHukzZEVrcQSjprkakCi9Wg0DzFlP5QP9Cl7N8iydU="
- [mod."github.com/google/go-containerregistry/pkg/authn/k8schain"]
- version = "v0.0.0-20260416183851-f80cb9a75083"
- hash = "sha256-B3OgLdfW6kXmcSYqdniUgLrSz8v5VgV8ccybyAIHs2c="
- [mod."github.com/google/go-containerregistry/pkg/authn/kubernetes"]
- version = "v0.0.0-20250521000321-4eb8c4d84ef0"
- hash = "sha256-VbAngxn71qJIazVNJJ6nNIjRXQpRYMnw4ObKh1FtT70="
- [mod."github.com/google/go-querystring"]
- version = "v1.2.0"
- hash = "sha256-F/Ve4oDaEqho8RryvdGSRR22/DbYHWZQa6M60n6oSYM="
- [mod."github.com/google/s2a-go"]
- version = "v0.1.9"
- hash = "sha256-0AdSpSTso4bATmM/9qamWzKrVtOLDf7afvDhoiT/UpA="
- [mod."github.com/google/uuid"]
- version = "v1.6.0"
- hash = "sha256-VWl9sqUzdOuhW0KzQlv0gwwUQClYkmZwSydHG2sALYw="
- [mod."github.com/googleapis/enterprise-certificate-proxy"]
- version = "v0.3.17"
- hash = "sha256-Xrmaq7p10YUxyt2OS9DEzVuucZgQ42ftoSyCBIBPSv4="
- [mod."github.com/googleapis/gax-go/v2"]
- version = "v2.23.0"
- hash = "sha256-aIJepJZI5PCsc9eteAP9x+n4RSSyOWi4kPnI5mmrBXk="
- [mod."github.com/gorilla/handlers"]
- version = "v1.5.2"
- hash = "sha256-2WQeVCe7vQg+8MpNLMhOGsRdbrcWLpbtUhUX8mbiQrs="
- [mod."github.com/gorilla/websocket"]
- version = "v1.5.4-0.20250319132907-e064f32e3674"
- hash = "sha256-a8n6oe20JDpwThClgAyVhJDi6QVaS0qzT4PvRxlQ9to="
- [mod."github.com/gregjones/httpcache"]
- version = "v0.0.0-20190611155906-901d90724c79"
- hash = "sha256-AEfenLNBYwZjwHsMG48bpwUyUtjx1BBiK2W5HQruIBc="
- [mod."github.com/grpc-ecosystem/go-grpc-middleware"]
- version = "v1.4.0"
- hash = "sha256-0UymBjkg41C9MPqkBLz/ZY9WbimZrabpJk+8C/X63h8="
- [mod."github.com/grpc-ecosystem/go-grpc-prometheus"]
- version = "v1.2.0"
- hash = "sha256-XtdBJuUYTXEokPrUetjD6iEqxFTBgyrm1M0X7r+1Uys="
- [mod."github.com/grpc-ecosystem/grpc-gateway"]
- version = "v1.16.0"
- hash = "sha256-wLymGic7wZ6fSiBYDAaGqnQ9Ste1fUWeqXeolZXCHvI="
- [mod."github.com/grpc-ecosystem/grpc-gateway/v2"]
- version = "v2.29.0"
- hash = "sha256-a/J/iffTIqbKXIBGGKfPIjgfyb2F05jw3Au8f1q6yEk="
- [mod."github.com/hashicorp/go-uuid"]
- version = "v1.0.3"
- hash = "sha256-8893qBbaug2yhxElowSrl3PrfhYlQ7cZ71QBgZWqpHE="
- [mod."github.com/huandu/xstrings"]
- version = "v1.5.0"
- hash = "sha256-q4F/rzbWMDmOVv07RVApdpfIsRNRByfOUQPEKsTq5BM="
- [mod."github.com/imkira/go-interpol"]
- version = "v1.1.0"
- hash = "sha256-8NaipC19EEqREyLc0QZq9aDGz+SFOFyhgeyCK9wdEKA="
- [mod."github.com/inconshreveable/mousetrap"]
- version = "v1.1.0"
- hash = "sha256-XWlYH0c8IcxAwQTnIi6WYqq44nOKUylSWxWO/vi+8pE="
- [mod."github.com/itchyny/gojq"]
- version = "v0.12.19"
- hash = "sha256-egaBNHKKzwDwaUN4GT+Xvt11Nz6ojNMSIrXbcEisyI4="
- [mod."github.com/itchyny/timefmt-go"]
- version = "v0.1.8"
- hash = "sha256-6h57JsmWju1QAx+mI9HZ+XceAeRnfLcA5HMWCHdymYE="
- [mod."github.com/jackc/pgio"]
- version = "v1.0.0"
- hash = "sha256-4W0PGZlkbBZcSJmPyXi9v1gAJIK9ujVLlcbxEOx9J1A="
- [mod."github.com/jackc/pgpassfile"]
- version = "v1.0.0"
- hash = "sha256-H0nFbC34/3pZUFnuiQk9W7yvAMh6qJDrqvHp+akBPLM="
- [mod."github.com/jackc/pgservicefile"]
- version = "v0.0.0-20240606120523-5a60cdf6a761"
- hash = "sha256-ETpGsLAA2wcm5xJBayr/mZrCE1YsWbnkbSSX3ptrFn0="
- [mod."github.com/jackc/pgtype"]
- version = "v1.14.4"
- hash = "sha256-JtozbaLKvt7Msq4laIIWI3ti9zIjNRQRPhVkwFxW4Os="
- [mod."github.com/jackc/pgx/v5"]
- version = "v5.9.2"
- hash = "sha256-+R23f/i6n/iUkwc33WadubkUNIslDQraeLWdFdOXGD8="
- [mod."github.com/jackc/puddle/v2"]
- version = "v2.2.2"
- hash = "sha256-IUxdu4JYfsCh/qlz2SiUWu7EVPHhyooiVA4oaS2Z6yk="
- [mod."github.com/jbenet/go-context"]
- version = "v0.0.0-20150711004518-d14ea06fba99"
- hash = "sha256-VANNCWNNpARH/ILQV9sCQsBWgyL2iFT+4AHZREpxIWE="
- [mod."github.com/jcmturner/aescts/v2"]
- version = "v2.0.0"
- hash = "sha256-XfzfHDUAe/AgvhKRn4tkW0Arq0rdqiO5BE9M5DhUYxU="
- [mod."github.com/jcmturner/dnsutils/v2"]
- version = "v2.0.0"
- hash = "sha256-ZlTjHMfAWvwkYyeg0qtw+CpATEXUYwUybHzVO0w+JFA="
- [mod."github.com/jcmturner/gofork"]
- version = "v1.7.6"
- hash = "sha256-Nno7bXSND8Fh9Ingwq8YQ2nQBLTw8NKqyUGEcMwyMnA="
- [mod."github.com/jcmturner/goidentity/v6"]
- version = "v6.0.1"
- hash = "sha256-E/TfsCp5pXJpfJGX0/ZfVeIPM7YCg0ualqdOHpjninM="
- [mod."github.com/jcmturner/gokrb5/v8"]
- version = "v8.4.4"
- hash = "sha256-Fea8sRztLt4yGESIZrFeNSoEzLkMnX0oeH875lrWZnc="
- [mod."github.com/jcmturner/rpc/v2"]
- version = "v2.0.3"
- hash = "sha256-M2zc3UUmZ4RN5pVD9NzmpoR5zJNrivku5e0SAa8dOoU="
- [mod."github.com/jonboulle/clockwork"]
- version = "v0.5.0"
- hash = "sha256-nTpG+sBf72tXRamrGscqy1ybuO9Lslngno4gYtU0qh0="
- [mod."github.com/json-iterator/go"]
- version = "v1.1.12"
- hash = "sha256-To8A0h+lbfZ/6zM+2PpRpY3+L6725OPC66lffq6fUoM="
- [mod."github.com/karrick/godirwalk"]
- version = "v1.17.0"
- hash = "sha256-NRv7gTTd04q2QoiybWU4lWIi9w8ZT3JP0nGyRVnkSLc="
- [mod."github.com/kevinburke/ssh_config"]
- version = "v1.2.0"
- hash = "sha256-Ta7ZOmyX8gG5tzWbY2oES70EJPfI90U7CIJS9EAce0s="
- [mod."github.com/klauspost/compress"]
- version = "v1.19.0"
- hash = "sha256-8tAQw82P+RzHACxt5Y8vV8jY+oHvKGCVyHCvMNdNiXM="
- [mod."github.com/klauspost/cpuid/v2"]
- version = "v2.3.0"
- hash = "sha256-50JhbQyT67BK38HIdJihPtjV7orYp96HknI2VP7A9Yc="
- [mod."github.com/klauspost/crc32"]
- version = "v1.3.0"
- hash = "sha256-RsS/MDJbVzVB+i74whqABgwZJWMw+AutF6HhJBVgbag="
- [mod."github.com/klauspost/pgzip"]
- version = "v1.2.6"
- hash = "sha256-qA1hjnVW/tqxY48JIWQVulwEwY7fwyvnasymZk3mScg="
- [mod."github.com/kylelemons/godebug"]
- version = "v1.1.0"
- hash = "sha256-DJ0re9mGqZb6PROQI8NPC0JVyDHdZ/y4uehNH7MbczY="
- [mod."github.com/lib/pq"]
- version = "v1.12.3"
- hash = "sha256-tJO991B11vUvoWnGvyF8j0Dp89V/3WYCcYRcY5XuwKc="
- [mod."github.com/liggitt/tabwriter"]
- version = "v0.0.0-20181228230101-89fcab3d43de"
- hash = "sha256-b6pLitORwgfGpOHpe45ykj00P17utbDv8bv6MCVoCBM="
- [mod."github.com/lithammer/dedent"]
- version = "v1.1.0"
- hash = "sha256-QO/M6cKlZNSKODtZyfRS4yr4y647JCzChFdlzcanDf8="
- [mod."github.com/lufia/plan9stats"]
- version = "v0.0.0-20211012122336-39d0f177ccd0"
- hash = "sha256-thb+rkDx5IeWMgw5/5jgu5gZ+6RjJAUXeMgSkJHhRlA="
- [mod."github.com/magiconair/properties"]
- version = "v1.8.10"
- hash = "sha256-smE+l2A9yDnDJFI7iNCjjF9NQnPySxEFFnbRUHyCq7I="
- [mod."github.com/mattn/go-colorable"]
- version = "v0.1.14"
- hash = "sha256-JC60PjKj7MvhZmUHTZ9p372FV72I9Mxvli3fivTbxuA="
- [mod."github.com/mattn/go-isatty"]
- version = "v0.0.20"
- hash = "sha256-qhw9hWtU5wnyFyuMbKx+7RB8ckQaFQ8D+8GKPkN3HHQ="
- [mod."github.com/mattn/go-runewidth"]
- version = "v0.0.23"
- hash = "sha256-SmChZ2U1aR8pW3LPhdM7KcVF5TO6VcHgRzBtUXbBWJA="
- [mod."github.com/minio/crc64nvme"]
- version = "v1.1.1"
- hash = "sha256-RVVi/gWPBEQqcW4n+KIKxlA3uY5+77e2rhkVk8fFNUo="
- [mod."github.com/minio/md5-simd"]
- version = "v1.1.2"
- hash = "sha256-vykcXvy2VBBAXnJott/XsGTT0gk2UL36JzZKfJ1KAUY="
- [mod."github.com/minio/minio-go/v7"]
- version = "v7.2.1"
- hash = "sha256-P0DMI8oXFq/l1gKn8tx4AzLtkcR9Cmn84BIWNHYDdzM="
- [mod."github.com/mitchellh/copystructure"]
- version = "v1.2.0"
- hash = "sha256-VR9cPZvyW62IHXgmMw8ee+hBDThzd2vftgPksQYR/Mc="
- [mod."github.com/mitchellh/go-homedir"]
- version = "v1.1.0"
- hash = "sha256-oduBKXHAQG8X6aqLEpqZHs5DOKe84u6WkBwi4W6cv3k="
- [mod."github.com/mitchellh/go-wordwrap"]
- version = "v1.0.1"
- hash = "sha256-fiD7kh5037BjA0vW6A2El0XArkK+4S5iTBjJB43BNYo="
- [mod."github.com/mitchellh/reflectwalk"]
- version = "v1.0.2"
- hash = "sha256-VX9DPqChm7jPnyrA3RAYgxAFrAhj7TRKIWD/qR9Zr9s="
- [mod."github.com/moby/docker-image-spec"]
- version = "v1.3.1"
- hash = "sha256-xwSNLmMagzywdGJIuhrWl1r7cIWBYCOMNYbuDDT6Jhs="
- [mod."github.com/moby/go-archive"]
- version = "v0.2.0"
- hash = "sha256-iM2QPtXIkcKIZOnr61ySpnw6lMRvsYH0QnAY4PF2pbs="
- [mod."github.com/moby/moby/api"]
- version = "v1.55.0"
- hash = "sha256-D2gQFKJgoNDcFzcMp+3iWMJK7w6QakqA5RMrcXbZWBw="
- [mod."github.com/moby/moby/client"]
- version = "v0.4.1"
- hash = "sha256-G49VpC6ykDsC9ackHwQ3voF+CYzCX1UTmhtWBMCaZSc="
- [mod."github.com/moby/patternmatcher"]
- version = "v0.6.1"
- hash = "sha256-Oj3pxvOxwUnKpRXC7eNz4VECOzmwAMFgboqK06aKu3U="
- [mod."github.com/moby/spdystream"]
- version = "v0.5.1"
- hash = "sha256-2vAgWBcBoG+DRVG+3rHsSnzovw68oTYb0DFozh1uBUI="
- [mod."github.com/moby/sys/sequential"]
- version = "v0.6.0"
- hash = "sha256-ZNWZuuvn+iDYMsL08IU6wvXC4OfAa7rol4kaCvytZ64="
- [mod."github.com/moby/sys/user"]
- version = "v0.4.0"
- hash = "sha256-Lk9pZFh/ERYGWkcKfVKhlDW66J13FESGD0yJcBc8+ts="
- [mod."github.com/moby/sys/userns"]
- version = "v0.1.0"
- hash = "sha256-zwXKyEZIH/FZjSVuSGmtwThDxPutj1pY+N6Ae6oVPuc="
- [mod."github.com/moby/term"]
- version = "v0.5.2"
- hash = "sha256-/G20jUZKx36ktmPU/nEw/gX7kRTl1Dbu7zvNBYNt4xU="
- [mod."github.com/modern-go/concurrent"]
- version = "v0.0.0-20180306012644-bacd9c7ef1dd"
- hash = "sha256-OTySieAgPWR4oJnlohaFTeK1tRaVp/b0d1rYY8xKMzo="
- [mod."github.com/modern-go/reflect2"]
- version = "v1.0.3-0.20250322232337-35a7c28c31ee"
- hash = "sha256-0pkWWZRB3lGFyzmlxxrm0KWVQo9HNXNafaUu3k+rE1g="
- [mod."github.com/monochromegane/go-gitignore"]
- version = "v0.0.0-20200626010858-205db1a8cc00"
- hash = "sha256-j1Mgb2TUUIiBcXB+slOkjtvcjmqSMEsG5RZYE7vGXOU="
- [mod."github.com/munnerz/goautoneg"]
- version = "v0.0.0-20191010083416-a7dc8b61c822"
- hash = "sha256-79URDDFenmGc9JZu+5AXHToMrtTREHb3BC84b/gym9Q="
- [mod."github.com/mxk/go-flowrate"]
- version = "v0.0.0-20140419014527-cca7078d478f"
- hash = "sha256-gRTfRfff/LRxC1SXXnQd2tV3UTcTx9qu90DJIVIaGn8="
- [mod."github.com/nao1215/markdown"]
- version = "v0.13.0"
- hash = "sha256-YakmT8Cw/WwJA9Fwx//6KN4h1QahByGvcK8H48GBFd4="
- [mod."github.com/ncruces/go-strftime"]
- version = "v0.1.9"
- hash = "sha256-T0iw+UEckzueWHT88PkTnZZixyKCEa+DTLzIiiohuWY="
- [mod."github.com/olekukonko/cat"]
- version = "v0.0.0-20250911104152-50322a0618f6"
- hash = "sha256-zkV9QYPu+fXO90ARQ/gn+gDkngJbBFaPqbTU378ki1Y="
- [mod."github.com/olekukonko/errors"]
- version = "v1.1.0"
- hash = "sha256-XYJzcbMX5iQsQ5k122a0QeoL5wbcLgh+LklcLsa6cv4="
- [mod."github.com/olekukonko/ll"]
- version = "v0.1.4-0.20260115111900-9e59c2286df0"
- hash = "sha256-bAzMGeDdOhZnE7bnz1dd/lrSlB8FXH+CR8F2xwwefKc="
- [mod."github.com/olekukonko/tablewriter"]
- version = "v1.1.3"
- hash = "sha256-9doZFXVtyqPDC2H1Zjzx1m2XLDPQRc6EHxacf1uaHmM="
- [mod."github.com/onsi/ginkgo"]
- version = "v1.16.5"
- hash = "sha256-Q3CKWQyIJKOiX9cs4t5Nz4pYxj6CT3AWnMXRNiM71GQ="
- [mod."github.com/opencontainers/go-digest"]
- version = "v1.0.0"
- hash = "sha256-cfVDjHyWItmUGZ2dzQhCHgmOmou8v7N+itDkLZVkqkQ="
- [mod."github.com/opencontainers/image-spec"]
- version = "v1.1.1"
- hash = "sha256-bxBjtl+6846Ed3QHwdssOrNvlHV6b+Dn17zPISSQGP8="
- [mod."github.com/pelletier/go-toml/v2"]
- version = "v2.3.1"
- hash = "sha256-5H8+UOtPOs+Yc+8oVT/3bugCCdbq3jFMH6eOW8dadyg="
- [mod."github.com/peterbourgon/diskv"]
- version = "v2.0.1+incompatible"
- hash = "sha256-K4mEVjH0eyxyYHQRxdbmgJT0AJrfucUwGB2BplRRt9c="
- [mod."github.com/philhofer/fwd"]
- version = "v1.2.0"
- hash = "sha256-cGx2/0QQay46MYGZuamFmU0TzNaFyaO+J7Ddzlr/3dI="
- [mod."github.com/pjbgf/sha1cd"]
- version = "v0.6.0"
- hash = "sha256-WC/sYIy9Iznlra87K9Gonn6/bo4a2aE+kvldecfBPfE="
- [mod."github.com/pkg/browser"]
- version = "v0.0.0-20240102092130-5ac0b6a4141c"
- hash = "sha256-9iaSHHpcA1fXVF5f8RlKyo1DSoHx7eGXIC2/4LFaoBY="
- [mod."github.com/planetscale/vtprotobuf"]
- version = "v0.6.1-0.20240319094008-0393e58bdf10"
- hash = "sha256-L8dyNm+PCRDNADiIGKZqsPkCgB4xpLrosZjssrN+sUY="
- [mod."github.com/pmezard/go-difflib"]
- version = "v1.0.1-0.20181226105442-5d4384ee4fb2"
- hash = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90="
- [mod."github.com/power-devops/perfstat"]
- version = "v0.0.0-20240221224432-82ca36839d55"
- hash = "sha256-ujzuJ1ttQgjHQJEij4O/2+I8DZaUVZQCQgA4ysfqulI="
- [mod."github.com/prometheus/client_golang"]
- version = "v1.23.2"
- hash = "sha256-3GD4fBFa1tJu8MS4TNP6r2re2eViUE+kWUaieIOQXCg="
- [mod."github.com/prometheus/client_model"]
- version = "v0.6.2"
- hash = "sha256-q6Fh6v8iNJN9ypD47LjWmx66YITa3FyRjZMRsuRTFeQ="
- [mod."github.com/prometheus/common"]
- version = "v0.70.0"
- hash = "sha256-LWehDuOdmzw/YB2jo3wAzZr4jiQP1W4chqkgxAndOfo="
- [mod."github.com/prometheus/otlptranslator"]
- version = "v1.0.0"
- hash = "sha256-94Aw8ltEH2XFotIEHzBghJiOt3KJiwW9cX8JVaNRTNk="
- [mod."github.com/prometheus/procfs"]
- version = "v0.21.0"
- hash = "sha256-q6ZRm1gKRUcksCPQld0a11BGEAwhoAlw+rbj8c2eJpc="
- [mod."github.com/remyoudompheng/bigfft"]
- version = "v0.0.0-20230129092748-24d4a6f8daec"
- hash = "sha256-vYmpyCE37eBYP/navhaLV4oX4/nu0Z/StAocLIFqrmM="
- [mod."github.com/robfig/cron/v3"]
- version = "v3.0.1"
- hash = "sha256-FUdqNbWYi5biQc/tjCeqzxu4iy4ot1ZvDU1M1wRf/6k="
- [mod."github.com/rs/xid"]
- version = "v1.6.0"
- hash = "sha256-rJB7h3KuH1DPp5n4dY3MiGnV1Y96A10lf5OUl+MLkzU="
- [mod."github.com/russross/blackfriday/v2"]
- version = "v2.1.0"
- hash = "sha256-R+84l1si8az5yDqd5CYcFrTyNZ1eSYlpXKq6nFt4OTQ="
- [mod."github.com/sagikazarmark/locafero"]
- version = "v0.12.0"
- hash = "sha256-EXk9S5Z5sYyApAzCgHIugsGMbt/pHWRfHYFZH5D+5Ws="
- [mod."github.com/sanity-io/litter"]
- version = "v1.5.5"
- hash = "sha256-D1oP7mL4+sFaMU1S1WBmuwWYPMmr4ahi46SD4hPl/+0="
- [mod."github.com/segmentio/fasthash"]
- version = "v1.0.3"
- hash = "sha256-Bm1sq6fFfoySkE6W7qib1drLBDQlOHMKJx8WyXzcNHM="
- [mod."github.com/sergi/go-diff"]
- version = "v1.3.2-0.20230802210424-5b0b94c5c0d3"
- hash = "sha256-UcLU83CPMbSoKI8RLvLJ7nvGaE2xRSL1RjoHCVkMzUM="
- [mod."github.com/sethvargo/go-limiter"]
- version = "v1.1.0"
- hash = "sha256-QJ+GrKb/ZQxkT9AgCZXCFmQKypMTF3cnXj6quL1JCSQ="
- [mod."github.com/shirou/gopsutil/v4"]
- version = "v4.26.5"
- hash = "sha256-ODPWgxRHQqlARId7n9Crvpgiv54YFr96PnqZg+IAWpI="
- [mod."github.com/shopspring/decimal"]
- version = "v1.4.0"
- hash = "sha256-U36bC271jQsjuWFF8BfLz4WicxPJUcPHRGxLvTz4Mdw="
- [mod."github.com/sirupsen/logrus"]
- version = "v1.9.4"
- hash = "sha256-ltRvmtM3XTCAFwY0IesfRqYIivyXPPuvkFjL4ARh1wg="
- [mod."github.com/skeema/knownhosts"]
- version = "v1.3.1"
- hash = "sha256-kjqQDzuncQNTuOYegqVZExwuOt/Z73m2ST7NZFEKixI="
- [mod."github.com/spf13/afero"]
- version = "v1.15.0"
- hash = "sha256-LhcezbOqfuBzacytbqck0hNUxi6NbWNhifUc5/9uHQ8="
- [mod."github.com/spf13/cast"]
- version = "v1.10.0"
- hash = "sha256-dQ6Qqf26IZsa6XsGKP7GDuCj+WmSsBmkBwGTDfue/rk="
- [mod."github.com/spf13/cobra"]
- version = "v1.10.2"
- hash = "sha256-nbRCTFiDCC2jKK7AHi79n7urYCMP5yDZnWtNVJrDi+k="
- [mod."github.com/spf13/pflag"]
- version = "v1.0.10"
- hash = "sha256-uDPnWjHpSrzXr17KEYEA1yAbizfcsfo5AyztY2tS6ZU="
- [mod."github.com/spf13/viper"]
- version = "v1.21.0"
- hash = "sha256-A9A8i7HH/ge4j3hw7G++HNj8BjhhpZKvxHhfY+QAxkI="
- [mod."github.com/spiffe/go-spiffe/v2"]
- version = "v2.6.0"
- hash = "sha256-8fvyGwDgSAFebzE1TA/cMTsFjH2CgxvHP5WoPfhw4Fk="
- [mod."github.com/stretchr/objx"]
- version = "v0.5.3"
- hash = "sha256-4s8d7MdRKq4r7QjkIFCdwjKehc6Hi5mS4xuZ2v2QYR8="
- [mod."github.com/stretchr/testify"]
- version = "v1.11.1"
- hash = "sha256-sWfjkuKJyDllDEtnM8sb/pdLzPQmUYWYtmeWz/5suUc="
- [mod."github.com/subosito/gotenv"]
- version = "v1.6.0"
- hash = "sha256-LspbjTniiq2xAICSXmgqP7carwlNaLqnCTQfw2pa80A="
- [mod."github.com/testcontainers/testcontainers-go"]
- version = "v0.43.0"
- hash = "sha256-SetPoobsB7A2TKgMoGDUvn9b2xgTp+eq+4etFbcuLYY="
- [mod."github.com/testcontainers/testcontainers-go/modules/mysql"]
- version = "v0.43.0"
- hash = "sha256-N8gT+Zx5irmu/N3cxrKL13T/Mk8EsdXb6KI1fmVXE7I="
- [mod."github.com/testcontainers/testcontainers-go/modules/postgres"]
- version = "v0.43.0"
- hash = "sha256-o4Dos+7Df3xb4YR+tNoRoXCDXRndbOhEAVVrb7eeV9Q="
- [mod."github.com/tidwall/gjson"]
- version = "v1.19.0"
- hash = "sha256-H0tqaftwuKVjuvlPov1Fr1a5W0JZmWUkOlPxY5qtSTE="
- [mod."github.com/tidwall/match"]
- version = "v1.1.1"
- hash = "sha256-M2klhPId3Q3T3VGkSbOkYl/2nLHnsG+yMbXkPkyrRdg="
- [mod."github.com/tidwall/pretty"]
- version = "v1.2.1"
- hash = "sha256-S0uTDDGD8qr415Ut7QinyXljCp0TkL4zOIrlJ+9OMl8="
- [mod."github.com/tinylib/msgp"]
- version = "v1.6.1"
- hash = "sha256-R2LutHQFZ7HAqeyzHqzMeyAJHxcYc+n1x7ysyrXefmQ="
- [mod."github.com/tklauser/go-sysconf"]
- version = "v0.3.16"
- hash = "sha256-hNVbsk0G+M9bLtHNywPD0nCW0z/9pM4jQV53nnDo/MY="
- [mod."github.com/tklauser/numcpus"]
- version = "v0.11.0"
- hash = "sha256-ObydGqAvRiHwVfO2ytmL28pRHyuCWYWwjH4hWdgI/Vs="
- [mod."github.com/upper/db/v4"]
- version = "v4.10.0"
- hash = "sha256-7idARF/fgIDJVAAYoREAOjkVJK33a+NYSsSz8zfHzGo="
- [mod."github.com/valyala/bytebufferpool"]
- version = "v1.0.0"
- hash = "sha256-I9FPZ3kCNRB+o0dpMwBnwZ35Fj9+ThvITn8a3Jr8mAY="
- [mod."github.com/valyala/fasthttp"]
- version = "v1.52.0"
- hash = "sha256-Gmcd4N4VOqI7Pl9Trb2ifDhaCU/AjEpuVdyNGGww5zc="
- [mod."github.com/valyala/fasttemplate"]
- version = "v1.2.2"
- hash = "sha256-gp+lNXE8zjO+qJDM/YbS6V43HFsYP6PKn4ux1qa5lZ0="
- [mod."github.com/x448/float16"]
- version = "v0.8.4"
- hash = "sha256-VKzMTMS9pIB/cwe17xPftCSK9Mf4Y6EuBEJlB4by5mE="
- [mod."github.com/xanzy/ssh-agent"]
- version = "v0.3.3"
- hash = "sha256-l3pGB6IdzcPA/HLk93sSN6NM2pKPy+bVOoacR5RC2+c="
- [mod."github.com/xeipuuv/gojsonpointer"]
- version = "v0.0.0-20190905194746-02993c407bfb"
- hash = "sha256-/u+qznDY8cnECZYIgSMRpKVWs04yAkW6EoGhqt+t73g="
- [mod."github.com/xeipuuv/gojsonreference"]
- version = "v0.0.0-20180127040603-bd5ef7bd5415"
- hash = "sha256-ZbXA+ASQrTgBQzasUKC9vznrOGpquYyWr+uwpm46fvU="
- [mod."github.com/xeipuuv/gojsonschema"]
- version = "v1.2.0"
- hash = "sha256-1ERBEvxj3pvHkMS2mvmvmYRi8jgAaTquo5hwjDLAEdc="
- [mod."github.com/xlab/treeprint"]
- version = "v1.2.0"
- hash = "sha256-g85HyWGLZuD/TFXZzmXT+u9TA1xIT5escUVhnofsYQI="
- [mod."github.com/yalp/jsonpath"]
- version = "v0.0.0-20180802001716-5cc68e5049a0"
- hash = "sha256-i7iWzS6hR5IwvrJ8kcjqxEYpRnj9cwiL726Ox8Ltfk4="
- [mod."github.com/yudai/gojsondiff"]
- version = "v1.0.0"
- hash = "sha256-9nVgqa9z/jdnusUcrVN+HsbkNJvSd3C4Bp3wr6Xw814="
- [mod."github.com/yudai/golcs"]
- version = "v0.0.0-20170316035057-ecda9a501e82"
- hash = "sha256-+CaxcEHjkNZjhQ6lZ+0mvBa2RtJ37wHehr6A7wrjplc="
- [mod."github.com/yusufpapurcu/wmi"]
- version = "v1.2.4"
- hash = "sha256-N+YDBjOW59YOsZ2lRBVtFsEEi48KhNQRb63/0ZSU3bA="
- [mod."github.com/zeebo/xxh3"]
- version = "v1.1.0"
- hash = "sha256-UuyNDofnjry9qKddcVhkTZFYUXgCYoLuKmCoOcyd504="
- [mod."go.opentelemetry.io/auto/sdk"]
- version = "v1.2.1"
- hash = "sha256-73bFYhnxNf4SfeQ52ebnwOWywdQbqc9lWawCcSgofvE="
- [mod."go.opentelemetry.io/contrib/detectors/gcp"]
- version = "v1.43.0"
- hash = "sha256-u+MgeLA1+ZbH9Y9C9WbIY8FEfmvbtM/SF1rDScGM1po="
- [mod."go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws"]
- version = "v0.69.0"
- hash = "sha256-0Vm58PlYzdhMOPERiYAslHDd74DXNKoeZBLYMQvlWNY="
- [mod."go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"]
- version = "v0.69.0"
- hash = "sha256-37oe5RsiBWxaOs7lZXJWEUN4P49jkr2ej+64FQ4ybT8="
- [mod."go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"]
- version = "v0.69.0"
- hash = "sha256-ypZB41ebghWCNZmuoDgdGbWyTjCglBEirLZ+s7jqCgc="
- [mod."go.opentelemetry.io/contrib/instrumentation/runtime"]
- version = "v0.69.0"
- hash = "sha256-JYiBPgJwgqjE7UZRWhEniyBDB9wJH5ZKP2fcLs53mMg="
- [mod."go.opentelemetry.io/otel"]
- version = "v1.44.0"
- hash = "sha256-XTGV9RjOIKyWrrgXJ32IA59lovxXqSeRrpcpC1FAFZA="
- [mod."go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"]
- version = "v1.44.0"
- hash = "sha256-fktlySf77domWF+7YmaDxkqrVzkxYGcTZYnQmhhCCPI="
- [mod."go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"]
- version = "v1.44.0"
- hash = "sha256-8O6Yzt4wWuSWXDYujDBBA/eDZ2IltRtWFNLqE05A+4U="
- [mod."go.opentelemetry.io/otel/exporters/otlp/otlptrace"]
- version = "v1.44.0"
- hash = "sha256-hqgoY2kWcu58Vdq+DrBZCT0g5bs/cnVLCcwYYWfinu4="
- [mod."go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"]
- version = "v1.44.0"
- hash = "sha256-hQeEeRqWCiMr2m1GHWlIOSbA6YTHgW6EW+M3e26lDn0="
- [mod."go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"]
- version = "v1.44.0"
- hash = "sha256-IOYc4gNOf6DB2f9T1qu1R5jbRM0RhJwpoImmsyUZDSA="
- [mod."go.opentelemetry.io/otel/exporters/prometheus"]
- version = "v0.66.0"
- hash = "sha256-a77Sb+ZZewVJGzernFClELhe+yq1xXZlQFwtDeW3XNM="
- [mod."go.opentelemetry.io/otel/metric"]
- version = "v1.44.0"
- hash = "sha256-e8dVyRoavby/YG7aH2T05IhWHlLvwnMHyPhelAS1mCQ="
- [mod."go.opentelemetry.io/otel/sdk"]
- version = "v1.44.0"
- hash = "sha256-rNqJXr5P2f5Qgllp/3E5Rm5lqt1kBhxHXppT5dXw5Cw="
- [mod."go.opentelemetry.io/otel/sdk/metric"]
- version = "v1.44.0"
- hash = "sha256-9OJi3uCRMdCo0d5YZjJnPCveQ9JNifNoOUBOEPtNBBE="
- [mod."go.opentelemetry.io/otel/trace"]
- version = "v1.44.0"
- hash = "sha256-69HorWRTLLzAHRgLe4nPp13qJthb3qp7RU7c0Y9qV/c="
- [mod."go.opentelemetry.io/proto/otlp"]
- version = "v1.10.0"
- hash = "sha256-IEnbR38ucFLTcuC2FA+gRvZNq2loUqXgDskSqP3+LUM="
- [mod."go.uber.org/mock"]
- version = "v0.6.0"
- hash = "sha256-m11cxIbrvOowa6xj11AztzfFk86DwR6SNO1lStcKzvo="
- [mod."go.yaml.in/yaml/v2"]
- version = "v2.4.4"
- hash = "sha256-ecT2ZXw7iT+63J4210xA6sMz0fUFXmDzLwZe2FzaNFU="
- [mod."go.yaml.in/yaml/v3"]
- version = "v3.0.4"
- hash = "sha256-NkGFiDPoCxbr3LFsI6OCygjjkY0rdmg5ggvVVwpyDQ4="
- [mod."golang.org/x/crypto"]
- version = "v0.54.0"
- hash = "sha256-m8jsqlPuoPxGDjClzcAVbXf1aiU07L+9j7vYcqJu/0Q="
- [mod."golang.org/x/exp"]
- version = "v0.0.0-20260410095643-746e56fc9e2f"
- hash = "sha256-JaDJGLIRoJjjvsg3dgfFuo7XApEJO2V4kUDmd58qTLI="
- [mod."golang.org/x/net"]
- version = "v0.57.0"
- hash = "sha256-gKo8UMw4hfETBHm8N5GOfuNadse9TWEQXJo2YWq5bY4="
- [mod."golang.org/x/oauth2"]
- version = "v0.36.0"
- hash = "sha256-evS7WkMrpgonmTcqtWFpC5rSKZN8O+vnAhNUs1MS9kw="
- [mod."golang.org/x/sync"]
- version = "v0.22.0"
- hash = "sha256-VZjl0fAM0p/nI81zh+pdBjzxFupx0UcKYXBBpL2ZS7k="
- [mod."golang.org/x/sys"]
- version = "v0.47.0"
- hash = "sha256-TpbRyWWqHjddP6QzUgAbaLd2EE0S+GYNRUIDJd18r98="
- [mod."golang.org/x/term"]
- version = "v0.45.0"
- hash = "sha256-vPBeJkepEZ1D9k4oaV20IuQlVmfAFv15KQgnhl9MNgw="
- [mod."golang.org/x/text"]
- version = "v0.40.0"
- hash = "sha256-LJfnki46XEreGbSgjl+DeqgcTsINTOu2owyXNvijMcA="
- [mod."golang.org/x/time"]
- version = "v0.15.0"
- hash = "sha256-5D24A65wn7k93Jj3+918UKjB9ccmGHPBEqjD2XDB92E="
- [mod."google.golang.org/api"]
- version = "v0.288.0"
- hash = "sha256-1icaXHslQSC34x8/Db0ufBAoZt784ixXsd35I5iJj2A="
- [mod."google.golang.org/genproto"]
- version = "v0.0.0-20260519071638-aa98bba5eb94"
- hash = "sha256-RVGF5xfos6LnKy4O+vBB3ubi34+bTJbwqEg5enLB89c="
- [mod."google.golang.org/genproto/googleapis/api"]
- version = "v0.0.0-20260713224248-f5fc221cf8c4"
- hash = "sha256-y3/iHn2MoRtZL6ICYcdQfAUg/YUSismg/1Ekrfx7Emg="
- [mod."google.golang.org/genproto/googleapis/rpc"]
- version = "v0.0.0-20260706201446-f0a921348800"
- hash = "sha256-ldJTTb7hhj1mdmzTn9IEkQVwCoj3KRlENZtUSEKHABU="
- [mod."google.golang.org/grpc"]
- version = "v1.82.1"
- hash = "sha256-5Q85pZWiKulJSGRAjYcVrlBe7y4tfa9gsjCqYiBhLUU="
- [mod."google.golang.org/protobuf"]
- version = "v1.36.11"
- hash = "sha256-7W+6jntfI/awWL3JP6yQedxqP5S9o3XvPgJ2XxxsIeE="
- [mod."gopkg.in/evanphx/json-patch.v4"]
- version = "v4.13.0"
- hash = "sha256-1iyZpBaeBLmNkJ3T4A9fAEXEYB9nk9V02ug4pwl5dy0="
- [mod."gopkg.in/go-playground/webhooks.v5"]
- version = "v5.17.0"
- hash = "sha256-dajSrYoD7vtKDb4Q+oS179KpwoxXk1u+u8k283C2LpU="
- [mod."gopkg.in/inf.v0"]
- version = "v0.9.1"
- hash = "sha256-z84XlyeWLcoYOvWLxPkPFgLkpjyb2Y4pdeGMyySOZQI="
- [mod."gopkg.in/ini.v1"]
- version = "v1.67.2"
- hash = "sha256-fvrkZDKE3sx3zwXDs8gZzL/9fARfLza5Mo7DAm3S4Vc="
- [mod."gopkg.in/warnings.v0"]
- version = "v0.1.2"
- hash = "sha256-ATVL9yEmgYbkJ1DkltDGRn/auGAjqGOfjQyBYyUo8s8="
- [mod."gopkg.in/yaml.v3"]
- version = "v3.0.1"
- hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU="
- [mod."k8s.io/api"]
- version = "v0.35.4"
- hash = "sha256-QiykPDGY9yD/uwEXd3P56VHgImHudLiE9Sag4+GY8f4="
- [mod."k8s.io/apiextensions-apiserver"]
- version = "v0.35.4"
- hash = "sha256-F0jPg+DzBHE1FyqGDGgmHRfS7hIx9JWb0iypA0PPVnI="
- [mod."k8s.io/apimachinery"]
- version = "v0.35.4"
- hash = "sha256-2THXGj+IHegAUB6l+4FVW1apliSNgrfgz6M4saX66yY="
- [mod."k8s.io/apiserver"]
- version = "v0.35.4"
- hash = "sha256-WzXOOT5A+2861nr/jZAQ2/PiTFHhy97Q+V/lROSCDeU="
- [mod."k8s.io/cli-runtime"]
- version = "v0.35.4"
- hash = "sha256-+FB9XGPssOXSTVPf65lbQCYEkI3LIQJL8Eg/9ar9tcg="
- [mod."k8s.io/client-go"]
- version = "v0.35.4"
- hash = "sha256-gnzJG0M89eu2LpgAXiFQak91eX/1byIfoOI8nk6huNo="
- [mod."k8s.io/component-base"]
- version = "v0.35.4"
- hash = "sha256-EfWkrAxyQZApPUGS+R2gptCnLgDCerRk23hWbhaHndA="
- [mod."k8s.io/component-helpers"]
- version = "v0.35.4"
- hash = "sha256-Mtv+T3dwaceLUHuqGpXn0wezJyov/Spxy4eu29r8BaU="
- [mod."k8s.io/gengo"]
- version = "v0.0.0-20260408192533-25e2208e0dc3"
- hash = "sha256-oX1jUQcNzbAjBwKtzOpafc0qi8zyEFBQphyzyPQ6nfA="
- [mod."k8s.io/klog/v2"]
- version = "v2.140.0"
- hash = "sha256-TbA5ZdLRzxa7WRnz3zgPPtTplgC33eY9yKKqVFDrPWU="
- [mod."k8s.io/kube-openapi"]
- version = "v0.0.0-20260603220949-865597e52e25"
- hash = "sha256-7gba4oTHFdGRluG9UFEwQyak+bu+c4v5TvY2ax1zRL8="
- [mod."k8s.io/kubectl"]
- version = "v0.35.4"
- hash = "sha256-F5GQjWI/xxoOnfxVW6IRJuQI38aVlXXeMcVhPFAadgk="
- [mod."k8s.io/metrics"]
- version = "v0.35.4"
- hash = "sha256-qQ+d6Be34puAk4cYSltBU5Dz4azZ4dzYXGAw/HYsj/c="
- [mod."k8s.io/utils"]
- version = "v0.0.0-20260707023825-cf1189d6abe3"
- hash = "sha256-DBYXOtMHB8jsC8CcjH+iLEkzgYQwAOYtIlTsqQtpHMw="
- [mod."modernc.org/libc"]
- version = "v1.65.8"
- hash = "sha256-JFsFcP6sB/AUhzxNMFlzgWm/VF445PIvVKk5tGt/wLg="
- [mod."modernc.org/mathutil"]
- version = "v1.7.1"
- hash = "sha256-COZ5rF2GhQVR1r6a0DanJ8qwQ94JSKdQxTMWrDzE0Cc="
- [mod."modernc.org/memory"]
- version = "v1.11.0"
- hash = "sha256-MkybF8vvrxXS5j7O8w3skwTo0aMo1yjWS0K440rYcHM="
- [mod."modernc.org/sqlite"]
- version = "v1.37.1"
- hash = "sha256-5U8KDHnzYmUXbXJfre9blEBRWlRG4BOAUEmNBPsXMaQ="
- [mod."moul.io/http2curl/v2"]
- version = "v2.3.0"
- hash = "sha256-0wUWQPmDa8wlP18TKrLtuY6Sakh3KkNqDq+FIbE+AHo="
- [mod."sigs.k8s.io/json"]
- version = "v0.0.0-20250730193827-2d320260d730"
- hash = "sha256-y3vUPJYL6oxu/8c0j4vgX6fzqHtVPSCjfyuWkZYf6+I="
- [mod."sigs.k8s.io/kustomize/api"]
- version = "v0.20.1"
- hash = "sha256-kcZREdlFsFC7xaMRzvwkE+93lQJBTanImDJjgYMyzRU="
- [mod."sigs.k8s.io/kustomize/kustomize/v5"]
- version = "v5.7.1"
- hash = "sha256-dlDQdlEtG2gJ22oASeHnwebuTjJmR2VZyK60OEvdvyU="
- [mod."sigs.k8s.io/kustomize/kyaml"]
- version = "v0.20.1"
- hash = "sha256-k87zgSRMFVcph06vqMd4KG9kE1GzllxKu36mWKdSisY="
- [mod."sigs.k8s.io/randfill"]
- version = "v1.0.0"
- hash = "sha256-xldQxDwW84hmlihdSOFfjXyauhxEWV9KmIDLZMTcYNo="
- [mod."sigs.k8s.io/structured-merge-diff/v6"]
- version = "v6.3.2"
- hash = "sha256-4ZUkeHKvdhsZmFSSZKAL/1GZdPO6735BY6FqRc+8tog="
- [mod."sigs.k8s.io/yaml"]
- version = "v1.6.0"
- hash = "sha256-49hg7IVPzwxeovp+HTMiWa/10NMMTSTjAdCmIv6p9dw="
- [mod."zombiezen.com/go/sqlite"]
- version = "v1.4.2"
- hash = "sha256-4bZY0TEkGDfwPH6j5TaLZarY3ZLjQkYKsjKY+Cj9fjk="
diff --git a/properdocs.yml b/properdocs.yml
index e5f0c722fadc..3480d21d7c82 100644
--- a/properdocs.yml
+++ b/properdocs.yml
@@ -296,7 +296,6 @@ nav:
- tracing.md
- Developer Guide:
- CONTRIBUTING.md
- - running-nix.md
- architecture.md
- running-locally.md
- doc-changes.md
diff --git a/sdks/java/Makefile b/sdks/java/Makefile
index cbfe45c7b14c..6a2b6bb27342 100755
--- a/sdks/java/Makefile
+++ b/sdks/java/Makefile
@@ -1,4 +1,3 @@
-USE_NIX ?= false
GIT_TAG := $(shell git describe --exact-match --tags --abbrev=0 2> /dev/null || echo untagged)
ifeq ($(GIT_TAG),untagged)
# "SNAPSHOT" is "latest" for Java
@@ -13,20 +12,16 @@ WD := $(shell echo "`pwd`/client")
DOCKER = docker run --rm --user $(shell id -u):$(shell id -g) -v $(WD):/wd --workdir /wd
MVN = $(DOCKER) -v $(HOME)/.m2:/tmp/.m2 -e JAVA_SDK_MAVEN_PASSWORD=${JAVA_SDK_MAVEN_PASSWORD} maven:3-openjdk-8 mvn -Duser.home=/tmp -s settings.xml
-CHOWN = chown -R $(shell id -u):$(shell id -g)
+
+# The generator comes from the development shell (see flake.nix), which pins the
+# version the published client is generated with.
+TOOL_OPENAPI_GENERATOR := openapi-generator-cli
publish: generate
# https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-apache-maven-for-use-with-github-packages
$(MVN) deploy -DskipTests -DaltDeploymentRepository=github::default::https://maven.pkg.github.com/argoproj/argo-workflows
generate:
-ifeq ($(USE_NIX), true)
- chmod -R 777 client || exit 0
- rm -rf $(WD)
- nix build
- cp -r result/data/client ./client
- chmod -R u+w ./client
-else
rm -Rf $(WD)
mkdir -p $(WD)
cp settings.xml $(WD)/settings.xml
@@ -34,11 +29,11 @@ else
sed 's/io.k8s.api.core.v1.//' | \
sed 's/io.k8s.apimachinery.pkg.apis.meta.v1.//' \
> $(WD)/swagger.json
- $(DOCKER) openapitools/openapi-generator-cli:v5.2.1 \
+ $(TOOL_OPENAPI_GENERATOR) \
generate \
- -i /wd/swagger.json \
+ -i $(WD)/swagger.json \
-g java \
- -o /wd \
+ -o $(WD) \
-p hideGenerationTimestamp=true \
-p serializationLibrary=jsonb \
-p dateLibrary=java8 \
@@ -75,11 +70,8 @@ else
--import-mappings VolumeDevice=io.kubernetes.client.openapi.models.V1VolumeDevice \
--import-mappings VolumeMount=io.kubernetes.client.openapi.models.V1VolumeMount \
--generate-alias-as-model
- # https://vsupalov.com/docker-shared-permissions/#set-the-docker-user-when-running-your-container
- $(CHOWN) $(WD) || sudo $(CHOWN) $(WD)
# adding kubernetes-client
cd client && sed 's//io.kubernetes<\/groupId>client-java<\/artifactId>14.0.1<\/version><\/dependency>/g' pom.xml > tmp && mv tmp pom.xml
-endif
client/pom.xml: generate
diff --git a/sdks/java/flake.lock b/sdks/java/flake.lock
deleted file mode 100755
index 4009b452babd..000000000000
--- a/sdks/java/flake.lock
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "nodes": {
- "flake-parts": {
- "inputs": {
- "nixpkgs-lib": [
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1688466019,
- "narHash": "sha256-VeM2akYrBYMsb4W/MmBo1zmaMfgbL4cH3Pu8PGyIwJ0=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "8e8d955c22df93dbe24f19ea04f47a74adbdc5ec",
- "type": "github"
- },
- "original": {
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "type": "github"
- }
- },
- "nix-filter": {
- "locked": {
- "lastModified": 1687178632,
- "narHash": "sha256-HS7YR5erss0JCaUijPeyg2XrisEb959FIct3n2TMGbE=",
- "owner": "numtide",
- "repo": "nix-filter",
- "rev": "d90c75e8319d0dd9be67d933d8eb9d0894ec9174",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "nix-filter",
- "type": "github"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 1688392541,
- "narHash": "sha256-lHrKvEkCPTUO+7tPfjIcb7Trk6k31rz18vkyqmkeJfY=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "ea4c80b39be4c09702b0cb3b42eab59e2ba4f24b",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-22.11",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs_2": {
- "locked": {
- "lastModified": 1680945546,
- "narHash": "sha256-8FuaH5t/aVi/pR1XxnF0qi4WwMYC+YxlfdsA0V+TEuQ=",
- "owner": "nixos",
- "repo": "nixpkgs",
- "rev": "d9f759f2ea8d265d974a6e1259bd510ac5844c5d",
- "type": "github"
- },
- "original": {
- "owner": "nixos",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "root": {
- "inputs": {
- "flake-parts": "flake-parts",
- "nix-filter": "nix-filter",
- "nixpkgs": "nixpkgs",
- "treefmt-nix": "treefmt-nix"
- }
- },
- "treefmt-nix": {
- "inputs": {
- "nixpkgs": "nixpkgs_2"
- },
- "locked": {
- "lastModified": 1689243103,
- "narHash": "sha256-IfBt2AD8qCwZs+m6BlOGEitBIkVJ0iMscMueb6QYUk4=",
- "owner": "numtide",
- "repo": "treefmt-nix",
- "rev": "f1dca68b908f3dd656b923b9fb62f7d755133662",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "treefmt-nix",
- "type": "github"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/sdks/java/flake.nix b/sdks/java/flake.nix
deleted file mode 100755
index 737b46ffba74..000000000000
--- a/sdks/java/flake.nix
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.11";
- flake-parts = { url = "github:hercules-ci/flake-parts"; inputs.nixpkgs-lib.follows = "nixpkgs"; };
- nix-filter = { url = "github:numtide/nix-filter"; };
- treefmt-nix.url = "github:numtide/treefmt-nix";
- };
-
- outputs = inputs:
- inputs.flake-parts.lib.mkFlake { inherit inputs; } {
- systems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
- imports = [ inputs.treefmt-nix.flakeModule ];
- perSystem = { pkgs, lib, config, ... }:
- let
-
- openapi_generator_cli_5_2_1 = pkgs.openapi-generator-cli.overrideAttrs (oldAttrs: rec {
- pname = "openapi-generator-cli";
- version = "5.2.1"; # update this when updating sdk Makefile
- jarfilename = "${pname}-${version}.jar";
- src = pkgs.fetchurl {
- url = "mirror://maven/org/openapitools/${pname}/${version}/${jarfilename}";
- sha256 = "sha256-stRtSZCvPUQuTiKOHmJ7k8o3Gtly9Up+gicrDOeWjIs=";
- };
- });
- argoConfig = import ../../dev/nix/conf.nix;
- filter = inputs.nix-filter.lib;
- mysrc = filter {
- root = ./../../.;
- include = [
- "sdks/java/settings.xml"
- "api/openapi-spec/swagger.json"
- ];
- exclude = [
- "Makefile"
- ];
- };
- in
- {
- packages = rec {
- argo_workflows_java_sdk = pkgs.stdenv.mkDerivation rec {
- version = argoConfig.version;
- pname = "argo-client-java-${version}";
-
- nativeBuildInputs = [
- openapi_generator_cli_5_2_1
- pkgs.gnused
- pkgs.openjdk8-bootstrap
- ];
-
- src = mysrc;
-
- buildPhase = ''
- pushd sdks/java
- export WD=$(echo `pwd`/client)
- mkdir -p $WD
- cp settings.xml $WD/settings.xml
- cat ../../api/openapi-spec/swagger.json | sed 's/io.k8s.api.core.v1.//' | sed 's/io.k8s.apimachinery.pkg.apis.meta.v1.//' > $WD/swagger.json
- export GIT_TAG=$(git describe --exact-match --tags --abbrev=0 2> /dev/null || echo untagged)
- if [ "$GIT_TAG" == "untagged" ]; then
- export VERSION=0.0.0-SNAPSHOT
- else
- export VERSION=$(echo "$GIT_TAG" | sed -e "s/^v//")
- fi
- mkdir -p $out/data
- openapi-generator-cli generate -i client/swagger.json -g java -o ./client -p hideGenerationTimestamp=true -p serializationLibrary=jsonb -p dateLibrary=java8 --api-package io.argoproj.workflow.apis --invoker-package io.argoproj.workflow --model-package io.argoproj.workflow.models --skip-validate-spec --group-id io.argoproj.workflow --artifact-id argo-client-java --artifact-version $VERSION --import-mappings Time=java.time.Instant --import-mappings Affinity=io.kubernetes.client.openapi.models.V1Affinity --import-mappings ConfigMapKeySelector=io.kubernetes.client.openapi.models.V1ConfigMapKeySelector --import-mappings Container=io.kubernetes.client.openapi.models.V1Container --import-mappings ContainerPort=io.kubernetes.client.openapi.models.V1ContainerPort --import-mappings EnvFromSource=io.kubernetes.client.openapi.models.V1EnvFromSource --import-mappings EnvVar=io.kubernetes.client.openapi.models.V1EnvVar --import-mappings HostAlias=io.kubernetes.client.openapi.models.V1HostAlias --import-mappings Lifecycle=io.kubernetes.client.openapi.models.V1Lifecycle --import-mappings ListMeta=io.kubernetes.client.openapi.models.V1ListMeta --import-mappings LocalObjectReference=io.kubernetes.client.openapi.models.V1LocalObjectReference --import-mappings ObjectMeta=io.kubernetes.client.openapi.models.V1ObjectMeta --import-mappings ObjectReference=io.kubernetes.client.openapi.models.V1ObjectReference --import-mappings PersistentVolumeClaim=io.kubernetes.client.openapi.models.V1PersistentVolumeClaim --import-mappings PodDisruptionBudgetSpec=io.kubernetes.client.openapi.models.V1beta1PodDisruptionBudgetSpec --import-mappings PodDNSConfig=io.kubernetes.client.openapi.models.V1PodDNSConfig --import-mappings PodSecurityContext=io.kubernetes.client.openapi.models.V1PodSecurityContext --import-mappings Probe=io.kubernetes.client.openapi.models.V1Probe --import-mappings ResourceRequirements=io.kubernetes.client.openapi.models.V1ResourceRequirements --import-mappings SecretKeySelector=io.kubernetes.client.openapi.models.V1SecretKeySelector --import-mappings SecurityContext=io.kubernetes.client.openapi.models.V1SecurityContext --import-mappings Toleration=io.kubernetes.client.openapi.models.V1Toleration --import-mappings Volume=io.kubernetes.client.openapi.models.V1Volume --import-mappings VolumeDevice=io.kubernetes.client.openapi.models.V1VolumeDevice --import-mappings VolumeMount=io.kubernetes.client.openapi.models.V1VolumeMount --generate-alias-as-model
- pushd client
- sed 's//io.kubernetes<\/groupId>client-java<\/artifactId>14.0.1<\/version><\/dependency>/g' pom.xml > tmp && mv tmp pom.xml
- popd
-
- popd
- '';
-
- installPhase = ''
- pushd sdks/java
- mkdir -p $out/data
- cp ./client/swagger.json $out/data/swagger.json
- cp -r ./client $out/data
- popd
- '';
- };
- default = argo_workflows_java_sdk;
- };
-
- devShells = {
- default = pkgs.mkShell {
- packages = with pkgs; [
- openapi_generator_cli_5_2_1
- openjdk8-bootstrap
- gnused
- ];
- };
- };
-
- treefmt = {
- projectRootFile = "flake.nix";
- programs.nixpkgs-fmt.enable = true;
- };
- };
- };
-
-}