feat: go1.23 runtime support
- runtimes/go1.23/server.go: HTTP-wrapper + job-runner (SLESS_MODE=job) - runtimes/go1.23/go.mod: module sless/fn (изолирует от корневого go.mod) - runtimes/go1.23/Dockerfile: multi-stage build (golang:1.23-alpine → alpine:3.20) - internal/builder/context.go: go1.23 в runtimeBaseImage + generateDockerfile - controllers/functionjob_controller.go: go1.23 runner (nil cmd + SLESS_MODE=job env) - api/v1alpha1/function_types.go: enum go1.21 → go1.23 - config/crd/bases/...: CRD обновлён - terraform/provider: OneOf обновлён - examples/hello-go: HTTP + job примеры на go1.23 - deployments/k8s/operator.yaml: v0.1.25
This commit is contained in:
@@ -147,11 +147,11 @@ func (r *FunctionJobReconciler) Reconcile(ctx context.Context, req ctrl.Request)
|
||||
// runner читает SLESS_EVENT и вызывает handle(event) один раз
|
||||
Command: runtimeRunnerCommand(fn.Spec.Runtime),
|
||||
Env: append(
|
||||
fnEnvVars(fn),
|
||||
corev1.EnvVar{
|
||||
append(fnEnvVars(fn), corev1.EnvVar{
|
||||
Name: "SLESS_EVENT",
|
||||
Value: eventJSON,
|
||||
},
|
||||
}),
|
||||
goJobModeEnv(fn.Spec.Runtime)...,
|
||||
),
|
||||
Resources: corev1.ResourceRequirements{
|
||||
Limits: corev1.ResourceList{
|
||||
@@ -217,6 +217,12 @@ func (r *FunctionJobReconciler) syncJobStatus(ctx context.Context, fj *slessv1al
|
||||
// runner читает env SLESS_EVENT и SLESS_ENTRYPOINT, вызывает handle(event) один раз и завершается.
|
||||
func runtimeRunnerCommand(runtime string) []string {
|
||||
switch runtime {
|
||||
case "go1.23":
|
||||
// Go runtime: SLESS_MODE=job заставляет server читать SLESS_EVENT и выйти.
|
||||
// CMD остаётся как в образе (/server), переопределяем через Env.
|
||||
// Передаём пустую команду — используется CMD из образа (/server).
|
||||
// SLESS_MODE=job добавляется через Env в fnEnvVars.
|
||||
return nil // nil = использовать CMD из образа; SLESS_MODE=job в Env
|
||||
case "nodejs20":
|
||||
// inline runner — не требует отдельного файла в образе.
|
||||
// SLESS_ENTRYPOINT="module.func": module=имя файла, func=экспортируемая функция
|
||||
@@ -265,6 +271,15 @@ func fnEnvVars(fn *slessv1alpha1.Function) []corev1.EnvVar {
|
||||
|
||||
func int32Ptr(i int32) *int32 { return &i }
|
||||
|
||||
// goJobModeEnv возвращает SLESS_MODE=job для Go runtime — сигнал /server выполниться разово и выйти.
|
||||
// Для Python/Node runner задаётся через Command, для Go — через env (CMD /server общий).
|
||||
func goJobModeEnv(runtime string) []corev1.EnvVar {
|
||||
if runtime == "go1.23" {
|
||||
return []corev1.EnvVar{{Name: "SLESS_MODE", Value: "job"}}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// getJobPodOutput находит под созданный Job-ом и возвращает его stdout (trimmed).
|
||||
// runner.py/runner.js печатают json.dumps(result) в stdout — это и есть return value функции.
|
||||
// Если под не найден или логи недоступны — возвращает "completed successfully" как fallback.
|
||||
|
||||
Reference in New Issue
Block a user