Skip to content

Commit

Permalink
feat: add kubectl-kcl
Browse files Browse the repository at this point in the history
  • Loading branch information
suin committed Sep 9, 2024
1 parent b1671f2 commit 7596fc2
Show file tree
Hide file tree
Showing 6 changed files with 152 additions and 6 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# KCL Nix Flake

This repository provides a Nix flake for the KCL (Kubernetes Configuration Language) toolchain, including the KCL CLI and KCL Language Server.
This repository provides a Nix flake for the KCL (Kubernetes Configuration Language) toolchain, including the KCL CLI, KCL Language Server, and kubectl-kcl plugin.

## Features

Expand Down Expand Up @@ -36,6 +35,7 @@ To use this flake in your project, add it to your `flake.nix` inputs:
buildInputs = [
kcl.cli
kcl.language-server
kcl.kubectl-kcl
];
};
}
Expand All @@ -53,6 +53,7 @@ nix develop

- `kcl`: The KCL Command Line Interface
- `kcl-language-server`: The KCL Language Server
- `kubectl-kcl`: The KCL kubectl plugin

## Automated Updates

Expand Down
61 changes: 61 additions & 0 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 28 additions & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,37 @@
'';
};

getArchKubectlKcl = system:
if system == "x86_64-linux" then "linux-amd64"
else if system == "aarch64-linux" then "linux-arm64"
else if system == "x86_64-darwin" then "macos-amd64"
else if system == "aarch64-darwin" then "macos-arm64"
else throw "Unsupported system: ${system}";

kubectl-kcl = pkgs.stdenv.mkDerivation rec {
pname = "kubectl-kcl";
version = "0.9.0";

src = pkgs.fetchurl {
url = "https://github.com/kcl-lang/kubectl-kcl/releases/download/v${version}/kubectl-kcl-${getArchKubectlKcl system}.tgz";
sha256 = {
x86_64-linux = "1242dvx9ph52yxq988n0fvsbm9wpchi4pwpwj2zbscw1hgy0apq8";
aarch64-linux = "1d0yby7niw7npp5v5f91q20g2z4flnzkp6ydhc0sjwls3lwrj8g9";
x86_64-darwin = "1qyrmfwabz0aa3bavjrijmq21gk1marks6b1k2vg1vy68z68pll7";
aarch64-darwin = "1vz529yi5dz0wi0ymbg3q52ixqdfzv9czk8iwp94q5ffjqcvdf9j";
}.${system};
};

installPhase = ''
mkdir -p $out/bin
cp bin/kubectl-kcl $out/bin/
'';
};

in
{
default = {
inherit cli language-server;
inherit cli language-server kubectl-kcl;
};
}
);
Expand Down
29 changes: 28 additions & 1 deletion flake.nix.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,37 @@
'';
};

getArchKubectlKcl = system:
if system == "x86_64-linux" then "linux-amd64"
else if system == "aarch64-linux" then "linux-arm64"
else if system == "x86_64-darwin" then "macos-amd64"
else if system == "aarch64-darwin" then "macos-arm64"
else throw "Unsupported system: ${system}";

kubectl-kcl = pkgs.stdenv.mkDerivation rec {
pname = "kubectl-kcl";
version = "{{ kubectl_kcl_version }}";
src = pkgs.fetchurl {
url = "https://github.com/kcl-lang/kubectl-kcl/releases/download/v${version}/kubectl-kcl-${getArchKubectlKcl system}.tgz";
sha256 = {
x86_64-linux = "{{ kubectl_kcl_hash_x86_64_linux }}";
aarch64-linux = "{{ kubectl_kcl_hash_aarch64_linux }}";
x86_64-darwin = "{{ kubectl_kcl_hash_x86_64_darwin }}";
aarch64-darwin = "{{ kubectl_kcl_hash_aarch64_darwin }}";
}.${system};
};

installPhase = ''
mkdir -p $out/bin
cp bin/kubectl-kcl $out/bin/
'';
};

in
{
default = {
inherit cli language-server;
inherit cli language-server kubectl-kcl;
};
}
);
Expand Down
24 changes: 24 additions & 0 deletions test/flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
kclpkgs.url = "..";
};

outputs = { self, nixpkgs, flake-utils, kclpkgs }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
kcl = kclpkgs.default.${system};
in
{
devShells.default = pkgs.mkShell {
buildInputs = [
kcl.cli
kcl.language-server
kcl.kubectl-kcl
];
};
}
);
}
10 changes: 8 additions & 2 deletions update_flake.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ def generate_flake():

kcl_version = fetch_latest_release("kcl")
cli_version = fetch_latest_release("cli")
kubectl_kcl_version = fetch_latest_release("kubectl-kcl")

substitutions = {
'kcl_version': kcl_version,
'cli_version': cli_version,
'kubectl_kcl_version': kubectl_kcl_version,
'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"),
'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"),
'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"),
Expand All @@ -37,6 +39,10 @@ def generate_flake():
'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"),
'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"),
'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"),
'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"),
'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"),
'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"),
'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"),
}

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

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

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

if __name__ == "__main__":
generate_flake()

0 comments on commit 7596fc2

Please sign in to comment.