diff --git a/.gitignore b/.gitignore index 63d70b9..04ffb65 100644 --- a/.gitignore +++ b/.gitignore @@ -86,3 +86,6 @@ Temporary Items # local build folders istio-1.22.0/ kontrol-service/Run_kontrol_service + +# Ignoring the file that gets generated with the repo's version +/kardinal_version/kardinal_version.go \ No newline at end of file diff --git a/flake.lock b/flake.lock index 02d8866..f85bcc0 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1722589758, - "narHash": "sha256-sbbA8b6Q2vB/t/r1znHawoXLysCyD4L/6n6/RykiSnA=", + "lastModified": 1728509152, + "narHash": "sha256-tQo1rg3TlwgyI8eHnLvZSlQx9d/o2Rb4oF16TfaTOw0=", "owner": "nix-community", "repo": "gomod2nix", - "rev": "4e08ca09253ef996bd4c03afa383b23e35fe28a1", + "rev": "d5547e530464c562324f171006fc8f639aa01c9f", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1726320982, - "narHash": "sha256-RuVXUwcYwaUeks6h3OLrEmg14z9aFXdWppTWPMTwdQw=", + "lastModified": 1728740863, + "narHash": "sha256-u+rxA79a0lyhG+u+oPBRtTDtzz8kvkc9a6SWSt9ekVc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8f7492cce28977fbf8bd12c72af08b1f6c7c3e49", + "rev": "a3f9ad65a0bf298ed5847629a57808b97e6e8077", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f13ac34..e60699c 100644 --- a/flake.nix +++ b/flake.nix @@ -87,6 +87,19 @@ }; }; + generateKardinalVersion = pkgs.callPackage ./kardinal-cli/scripts/generate_kardinal_version.nix { + inherit pkgs; + }; + + runGenerateVersion = pkgs.stdenv.mkDerivation { + name = "run-generate-kardinal-version"; + buildInputs = [ generateKardinalVersion ]; + installPhase = '' + echo "Generating kardinal_version.go..." + ${generateKardinalVersion}/bin/generate-kardinal-version + ''; + }; + systemOutput = rec { devShells.default = pkgs.callPackage ./shell.nix { inherit pkgs; @@ -110,6 +123,7 @@ packages.go-tidy-all = pkgs.callPackage ./scripts/go-tidy-all.nix { inherit pkgs; }; + packages.generate-kardinal-version = runGenerateVersion; containers = let os = "linux"; diff --git a/go.work b/go.work index a887a5e..3cac1a5 100644 --- a/go.work +++ b/go.work @@ -6,4 +6,5 @@ use ( ./libs/cli-kontrol-api ./kardinal-cli ./sidecars/redis-overlay-service + ./kardinal_version ) diff --git a/kardinal-cli/cmd/root.go b/kardinal-cli/cmd/root.go index df52470..ea5ac22 100644 --- a/kardinal-cli/cmd/root.go +++ b/kardinal-cli/cmd/root.go @@ -32,6 +32,7 @@ import ( "kardinal.cli/kontrol" "kardinal.cli/tenant" + "github.com/kurtosis-tech/kardinal/kardinal_version" api "github.com/kurtosis-tech/kardinal/libs/cli-kontrol-api/api/golang/client" api_types "github.com/kurtosis-tech/kardinal/libs/cli-kontrol-api/api/golang/types" appv1 "k8s.io/api/apps/v1" @@ -622,6 +623,15 @@ var tenantShowCmd = &cobra.Command{ }, } +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Show version of Kardinal CLI running", + Args: cobra.ExactArgs(0), + Run: func(cmd *cobra.Command, args []string) { + fmt.Printf("%s\n", kardinal_version.KardinalVersion) + }, +} + func init() { devMode = false if os.Getenv("KARDINAL_CLI_DEV_MODE") == "TRUE" { @@ -637,6 +647,7 @@ func init() { rootCmd.AddCommand(reportInstall) rootCmd.AddCommand(topologyCmd) rootCmd.AddCommand(tenantCmd) + rootCmd.AddCommand(versionCmd) flowCmd.AddCommand(listCmd, createCmd, deleteCmd, telepresenceInterceptCmd) managerCmd.AddCommand(deployManagerCmd, removeManagerCmd) diff --git a/kardinal-cli/default.nix b/kardinal-cli/default.nix index 5aafcd4..77aa6f7 100644 --- a/kardinal-cli/default.nix +++ b/kardinal-cli/default.nix @@ -1,8 +1,16 @@ { - pkgs, - commit_hash ? "dirty", + pkgs, + commit_hash ? "dirty" }: let pname = "kardinal.cli"; + + generateKardinalVersion = pkgs.callPackage ./scripts/generate_kardinal_version.nix { + inherit pkgs; + }; + _ = pkgs.runCommand "generate-version" { + buildInputs = [ generateKardinalVersion ]; + }; + ldflags = pkgs.lib.concatStringsSep "\n" [ "-X github.com/kurtosis-tech/kurtosis/kardinal.AppName=${pname}" "-X github.com/kurtosis-tech/kurtosis/kardinal.Commit=${commit_hash}" @@ -10,11 +18,11 @@ in pkgs.buildGoApplication { # pname has to match the location (folder) where the main function is or use - # subPackges to specify the file (e.g. subPackages = ["some/folder/main.go"];) + # subPackages to specify the file (e.g. subPackages = ["some/folder/main.go"];) inherit pname ldflags; name = "${pname}"; pwd = ./.; src = ./.; modules = ./gomod2nix.toml; CGO_ENABLED = 0; - } + } \ No newline at end of file diff --git a/kardinal-cli/go.mod b/kardinal-cli/go.mod index 2302180..110685a 100644 --- a/kardinal-cli/go.mod +++ b/kardinal-cli/go.mod @@ -1,14 +1,16 @@ module kardinal.cli -go 1.22.0 +go 1.22.3 -toolchain go1.22.3 - -replace github.com/kurtosis-tech/kardinal/libs/cli-kontrol-api => ../libs/cli-kontrol-api +replace ( + github.com/kurtosis-tech/kardinal/kardinal_version => ../kardinal_version + github.com/kurtosis-tech/kardinal/libs/cli-kontrol-api => ../libs/cli-kontrol-api +) require ( github.com/adrg/xdg v0.4.0 github.com/google/uuid v1.6.0 + github.com/kurtosis-tech/kardinal/kardinal_version v0.0.0-00010101000000-000000000000 github.com/kurtosis-tech/stacktrace v0.0.0-20211028211901-1c67a77b5409 github.com/samber/lo v1.46.0 github.com/segmentio/analytics-go/v3 v3.3.0 diff --git a/kardinal-cli/scripts/generate_kardinal_version.nix b/kardinal-cli/scripts/generate_kardinal_version.nix new file mode 100644 index 0000000..01e6d15 --- /dev/null +++ b/kardinal-cli/scripts/generate_kardinal_version.nix @@ -0,0 +1,37 @@ +{ pkgs, ... }: +pkgs.writeShellApplication { + name = "generate-kardinal-version"; + runtimeInputs = with pkgs; [ git ]; + + text = '' + set -euo pipefail + root_dirpath=$(git rev-parse --show-toplevel) + + KARDINAL_VERSION_PACKAGE_DIR="kardinal_version" + KARDINAL_VERSION_GO_FILE="kardinal_version.go" + + # Check if the current commit has a tag + if git describe --tags --exact-match > /dev/null 2>&1; then + # If there's an exact match to a tag, use the tag as the version + new_version="$(git describe --tags --exact-match)" + else + # Otherwise, use the short commit SHA + commit_sha="$(git rev-parse --short=6 HEAD)" + # Check if the working directory is dirty + suffix="$(git diff --quiet || echo '-dirty')" + new_version="$commit_sha$suffix" + fi + + kardinal_version_go_file_abs_path="$root_dirpath/$KARDINAL_VERSION_PACKAGE_DIR/$KARDINAL_VERSION_GO_FILE" + + cat << EOF > "$kardinal_version_go_file_abs_path" +package $KARDINAL_VERSION_PACKAGE_DIR + +const ( + // !!!!!!!!!!!!!!!!!! DO NOT MODIFY THIS! IT WILL BE UPDATED AUTOMATICALLY DURING THE BUILD PROCESS !!!!!!!!!!!!!!! + KardinalVersion = "$new_version" + // !!!!!!!!!!!!!!!!!! DO NOT MODIFY THIS! IT WILL BE UPDATED AUTOMATICALLY DURING THE BUILD PROCESS !!!!!!!!!!!!!!! +) +EOF + ''; +} diff --git a/kardinal_version/go.mod b/kardinal_version/go.mod new file mode 100644 index 0000000..93704b0 --- /dev/null +++ b/kardinal_version/go.mod @@ -0,0 +1,3 @@ +module github.com/kurtosis-tech/kardinal/kardinal_version + +go 1.22.3 diff --git a/shell.nix b/shell.nix index b784398..82b5908 100644 --- a/shell.nix +++ b/shell.nix @@ -12,7 +12,7 @@ ''; go-tidy-all = import ./scripts/go-tidy-all.nix {inherit pkgs;}; - + generate-kardinal-version = import ./kardinal-cli/scripts/generate_kardinal_version.nix {inherit pkgs;}; manager_shell = pkgs.callPackage ./kardinal-manager/shell.nix {inherit pkgs;}; cli_shell = pkgs.callPackage ./kardinal-cli/shell.nix {inherit pkgs;}; cli_kontrol_api_shell = pkgs.callPackage ./libs/cli-kontrol-api/shell.nix {inherit pkgs;}; @@ -25,6 +25,7 @@ buildInputs = [ kardinal go-tidy-all + generate-kardinal-version kubectl kustomize kubernetes-helm