Skip to content

Commit 7596fc2

Browse files
committed
feat: add kubectl-kcl
1 parent b1671f2 commit 7596fc2

File tree

6 files changed

+152
-6
lines changed

6 files changed

+152
-6
lines changed

README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# KCL Nix Flake
2-
3-
This repository provides a Nix flake for the KCL (Kubernetes Configuration Language) toolchain, including the KCL CLI and KCL Language Server.
2+
This repository provides a Nix flake for the KCL (Kubernetes Configuration Language) toolchain, including the KCL CLI, KCL Language Server, and kubectl-kcl plugin.
43

54
## Features
65

@@ -36,6 +35,7 @@ To use this flake in your project, add it to your `flake.nix` inputs:
3635
buildInputs = [
3736
kcl.cli
3837
kcl.language-server
38+
kcl.kubectl-kcl
3939
];
4040
};
4141
}
@@ -53,6 +53,7 @@ nix develop
5353

5454
- `kcl`: The KCL Command Line Interface
5555
- `kcl-language-server`: The KCL Language Server
56+
- `kubectl-kcl`: The KCL kubectl plugin
5657

5758
## Automated Updates
5859

flake.lock

+61
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

+28-1
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,37 @@
6868
'';
6969
};
7070

71+
getArchKubectlKcl = system:
72+
if system == "x86_64-linux" then "linux-amd64"
73+
else if system == "aarch64-linux" then "linux-arm64"
74+
else if system == "x86_64-darwin" then "macos-amd64"
75+
else if system == "aarch64-darwin" then "macos-arm64"
76+
else throw "Unsupported system: ${system}";
77+
78+
kubectl-kcl = pkgs.stdenv.mkDerivation rec {
79+
pname = "kubectl-kcl";
80+
version = "0.9.0";
81+
82+
src = pkgs.fetchurl {
83+
url = "https://github.com/kcl-lang/kubectl-kcl/releases/download/v${version}/kubectl-kcl-${getArchKubectlKcl system}.tgz";
84+
sha256 = {
85+
x86_64-linux = "1242dvx9ph52yxq988n0fvsbm9wpchi4pwpwj2zbscw1hgy0apq8";
86+
aarch64-linux = "1d0yby7niw7npp5v5f91q20g2z4flnzkp6ydhc0sjwls3lwrj8g9";
87+
x86_64-darwin = "1qyrmfwabz0aa3bavjrijmq21gk1marks6b1k2vg1vy68z68pll7";
88+
aarch64-darwin = "1vz529yi5dz0wi0ymbg3q52ixqdfzv9czk8iwp94q5ffjqcvdf9j";
89+
}.${system};
90+
};
91+
92+
installPhase = ''
93+
mkdir -p $out/bin
94+
cp bin/kubectl-kcl $out/bin/
95+
'';
96+
};
97+
7198
in
7299
{
73100
default = {
74-
inherit cli language-server;
101+
inherit cli language-server kubectl-kcl;
75102
};
76103
}
77104
);

flake.nix.tpl

+28-1
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,37 @@
6565
'';
6666
};
6767

68+
getArchKubectlKcl = system:
69+
if system == "x86_64-linux" then "linux-amd64"
70+
else if system == "aarch64-linux" then "linux-arm64"
71+
else if system == "x86_64-darwin" then "macos-amd64"
72+
else if system == "aarch64-darwin" then "macos-arm64"
73+
else throw "Unsupported system: ${system}";
74+
75+
kubectl-kcl = pkgs.stdenv.mkDerivation rec {
76+
pname = "kubectl-kcl";
77+
version = "{{ kubectl_kcl_version }}";
78+
79+
src = pkgs.fetchurl {
80+
url = "https://github.com/kcl-lang/kubectl-kcl/releases/download/v${version}/kubectl-kcl-${getArchKubectlKcl system}.tgz";
81+
sha256 = {
82+
x86_64-linux = "{{ kubectl_kcl_hash_x86_64_linux }}";
83+
aarch64-linux = "{{ kubectl_kcl_hash_aarch64_linux }}";
84+
x86_64-darwin = "{{ kubectl_kcl_hash_x86_64_darwin }}";
85+
aarch64-darwin = "{{ kubectl_kcl_hash_aarch64_darwin }}";
86+
}.${system};
87+
};
88+
89+
installPhase = ''
90+
mkdir -p $out/bin
91+
cp bin/kubectl-kcl $out/bin/
92+
'';
93+
};
94+
6895
in
6996
{
7097
default = {
71-
inherit cli language-server;
98+
inherit cli language-server kubectl-kcl;
7299
};
73100
}
74101
);

test/flake.nix

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
inputs = {
3+
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
4+
flake-utils.url = "github:numtide/flake-utils";
5+
kclpkgs.url = "..";
6+
};
7+
8+
outputs = { self, nixpkgs, flake-utils, kclpkgs }:
9+
flake-utils.lib.eachDefaultSystem (system:
10+
let
11+
pkgs = import nixpkgs { inherit system; };
12+
kcl = kclpkgs.default.${system};
13+
in
14+
{
15+
devShells.default = pkgs.mkShell {
16+
buildInputs = [
17+
kcl.cli
18+
kcl.language-server
19+
kcl.kubectl-kcl
20+
];
21+
};
22+
}
23+
);
24+
}

update_flake.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ def generate_flake():
2525

2626
kcl_version = fetch_latest_release("kcl")
2727
cli_version = fetch_latest_release("cli")
28+
kubectl_kcl_version = fetch_latest_release("kubectl-kcl")
2829

2930
substitutions = {
3031
'kcl_version': kcl_version,
3132
'cli_version': cli_version,
33+
'kubectl_kcl_version': kubectl_kcl_version,
3234
'cli_hash_x86_64_linux': calculate_hash(f"https://github.com/kcl-lang/cli/releases/download/v{cli_version}/kcl-v{cli_version}-linux-amd64.tar.gz"),
3335
'cli_hash_aarch64_linux': calculate_hash(f"https://github.com/kcl-lang/cli/releases/download/v{cli_version}/kcl-v{cli_version}-linux-arm64.tar.gz"),
3436
'cli_hash_x86_64_darwin': calculate_hash(f"https://github.com/kcl-lang/cli/releases/download/v{cli_version}/kcl-v{cli_version}-darwin-amd64.tar.gz"),
@@ -37,6 +39,10 @@ def generate_flake():
3739
'language_server_hash_aarch64_linux': calculate_hash(f"https://github.com/kcl-lang/kcl/releases/download/v{kcl_version}/kclvm-v{kcl_version}-linux-arm64.tar.gz"),
3840
'language_server_hash_x86_64_darwin': calculate_hash(f"https://github.com/kcl-lang/kcl/releases/download/v{kcl_version}/kclvm-v{kcl_version}-darwin-amd64.tar.gz"),
3941
'language_server_hash_aarch64_darwin': calculate_hash(f"https://github.com/kcl-lang/kcl/releases/download/v{kcl_version}/kclvm-v{kcl_version}-darwin-arm64.tar.gz"),
42+
'kubectl_kcl_hash_x86_64_linux': calculate_hash(f"https://github.com/kcl-lang/kubectl-kcl/releases/download/v{kubectl_kcl_version}/kubectl-kcl-linux-amd64.tgz"),
43+
'kubectl_kcl_hash_aarch64_linux': calculate_hash(f"https://github.com/kcl-lang/kubectl-kcl/releases/download/v{kubectl_kcl_version}/kubectl-kcl-linux-arm64.tgz"),
44+
'kubectl_kcl_hash_x86_64_darwin': calculate_hash(f"https://github.com/kcl-lang/kubectl-kcl/releases/download/v{kubectl_kcl_version}/kubectl-kcl-macos-amd64.tgz"),
45+
'kubectl_kcl_hash_aarch64_darwin': calculate_hash(f"https://github.com/kcl-lang/kubectl-kcl/releases/download/v{kubectl_kcl_version}/kubectl-kcl-macos-arm64.tgz"),
4046
}
4147

4248
for key, value in substitutions.items():
@@ -58,17 +64,17 @@ def generate_flake():
5864
with open('flake.nix', 'w') as f:
5965
f.write(new_content)
6066

61-
print(f"flake.nix has been generated successfully for KCL version {kcl_version} and CLI version {cli_version}.")
67+
print(f"flake.nix has been generated successfully for KCL version {kcl_version}, CLI version {cli_version}, and kubectl-kcl version {kubectl_kcl_version}.")
6268

6369
# Write outputs to GITHUB_OUTPUT environment file
6470
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
6571
f.write(f"KCL_VERSION={kcl_version}\n")
6672
f.write(f"CLI_VERSION={cli_version}\n")
73+
f.write(f"KUBECTL_KCL_VERSION={kubectl_kcl_version}\n")
6774
f.write(f"CONTENT_CHANGED={str(content_changed).lower()}\n")
6875
f.write("FLAKE_CONTENT<<EOF\n")
6976
f.write(new_content)
7077
f.write("\nEOF\n")
7178

7279
if __name__ == "__main__":
7380
generate_flake()
74-

0 commit comments

Comments
 (0)