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 }