refactor: split main.go into packages (internal/api, internal/fission, internal/runtime, cmd/server)

This commit is contained in:
Naeel
2026-04-25 23:53:20 +03:00
parent 1f4de2ec15
commit 60646af0c8
20 changed files with 2799 additions and 1 deletions
+43
View File
@@ -0,0 +1,43 @@
package runtime
import (
"archive/zip"
"bytes"
)
// BuildGoSourceZip упаковывает исходный Go-код в zip для Fission source package.
//
// Fission Go-среда работает в два этапа:
// 1. Package создаётся с source.literal = zip(handler.go + go.mod)
// 2. go-builder job компилирует его в плагин (.so) — это занимает ~40s первый раз
//
// Важно: source package, а НЕ deployment package — Fission сам компилирует.
// Entrypoint по умолчанию "Handler" (экспортированная функция в handler.go).
func BuildGoSourceZip(code string) ([]byte, error) {
var buf bytes.Buffer
zw := zip.NewWriter(&buf)
// handler.go — пользовательский код
fw, err := zw.Create("handler.go")
if err != nil {
return nil, err
}
if _, err := fw.Write([]byte(code)); err != nil {
return nil, err
}
// go.mod — минимальный модуль для сборки; go-builder добавит нужные зависимости
goMod := "module github.com/user/fn\n\ngo 1.23\n"
fw2, err := zw.Create("go.mod")
if err != nil {
return nil, err
}
if _, err := fw2.Write([]byte(goMod)); err != nil {
return nil, err
}
if err := zw.Close(); err != nil {
return nil, err
}
return buf.Bytes(), nil
}