Selaa lähdekoodia

feat(template): add npx & uvx template

Thomas Zhang 2 kuukautta sitten
vanhempi
commit
6daa10b8ea
3 muutettua tiedostoa jossa 124 lisäystä ja 0 poistoa
  1. 53 0
      pkg/templates/npx/template.go
  2. 6 0
      pkg/templates/templates.go
  3. 65 0
      pkg/templates/uvx/template.go

+ 53 - 0
pkg/templates/npx/template.go

@@ -0,0 +1,53 @@
+/*
+Copyright 2026 LocoStack.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package npx
+
+import (
+	"github.com/LocoStack/loco-operator/api/v1alpha1"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/utils/ptr"
+)
+
+var NpxTemplate = v1alpha1.Template{
+	Name: "npx",
+	Spec: v1alpha1.TemplateSpec{
+		Runtime: v1alpha1.RuntimeSpec{
+			Name:  "npx",
+			Image: "node:26-slim",
+			Env: []corev1.EnvVar{
+				{
+					Name:  "HOME",
+					Value: "/tmp",
+				},
+				{
+					Name:  "NPM_CONFIG_CACHE",
+					Value: "/tmp/.npm",
+				},
+			},
+		},
+		SecurityContext: &corev1.PodSecurityContext{
+			RunAsNonRoot: ptr.To(true),
+			RunAsUser:    ptr.To[int64](10001),
+			RunAsGroup:   ptr.To[int64](10001),
+			FSGroup:      ptr.To[int64](10001),
+			SeccompProfile: &corev1.SeccompProfile{
+				Type: corev1.SeccompProfileTypeRuntimeDefault,
+			},
+			SupplementalGroups: []int64{},
+		},
+	},
+}

+ 6 - 0
pkg/templates/templates.go

@@ -25,10 +25,12 @@ import (
 	"github.com/LocoStack/loco-operator/pkg/templates/litellm"
 	llamacpp "github.com/LocoStack/loco-operator/pkg/templates/llama_cpp"
 	"github.com/LocoStack/loco-operator/pkg/templates/neo4j"
+	"github.com/LocoStack/loco-operator/pkg/templates/npx"
 	"github.com/LocoStack/loco-operator/pkg/templates/phoenix"
 	"github.com/LocoStack/loco-operator/pkg/templates/postgresql"
 	"github.com/LocoStack/loco-operator/pkg/templates/qdrant"
 	"github.com/LocoStack/loco-operator/pkg/templates/tei"
+	"github.com/LocoStack/loco-operator/pkg/templates/uvx"
 	corev1 "k8s.io/api/core/v1"
 )
 
@@ -261,4 +263,8 @@ func init() {
 	Manager.RegisterTemplate(tei.TEITemplate)
 	Manager.RegisterRuntime(tei.TEITemplate.Spec.Runtime)
 	Manager.RegisterRuntime(tei.TEIARM64Runtime)
+	Manager.RegisterTemplate(npx.NpxTemplate)
+	Manager.RegisterRuntime(npx.NpxTemplate.Spec.Runtime)
+	Manager.RegisterTemplate(uvx.UvxTemplate)
+	Manager.RegisterRuntime(uvx.UvxTemplate.Spec.Runtime)
 }

+ 65 - 0
pkg/templates/uvx/template.go

@@ -0,0 +1,65 @@
+/*
+Copyright 2026 LocoStack.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package uvx
+
+import (
+	"github.com/LocoStack/loco-operator/api/v1alpha1"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/utils/ptr"
+)
+
+var UvxTemplate = v1alpha1.Template{
+	Name: "uvx",
+	Spec: v1alpha1.TemplateSpec{
+		Runtime: v1alpha1.RuntimeSpec{
+			Name:  "uvx",
+			Image: "ghcr.io/astral-sh/uv:python3.12-trixie-slim",
+			Env: []corev1.EnvVar{
+				{
+					Name:  "HOME",
+					Value: "/tmp",
+				},
+				{
+					Name:  "XDG_CACHE_HOME",
+					Value: "/tmp/.cache",
+				},
+				{
+					Name:  "XDG_DATA_HOME",
+					Value: "/tmp/.local/share",
+				},
+				{
+					Name:  "XDG_CONFIG_HOME",
+					Value: "/tmp/.config",
+				},
+				{
+					Name:  "UV_CACHE_DIR",
+					Value: "/tmp/uv-cache",
+				},
+			},
+		},
+		SecurityContext: &corev1.PodSecurityContext{
+			RunAsNonRoot: ptr.To(true),
+			RunAsUser:    ptr.To[int64](10001),
+			RunAsGroup:   ptr.To[int64](10001),
+			FSGroup:      ptr.To[int64](10001),
+			SeccompProfile: &corev1.SeccompProfile{
+				Type: corev1.SeccompProfileTypeRuntimeDefault,
+			},
+			SupplementalGroups: []int64{},
+		},
+	},
+}