11 KiB
План удаления golang-интеграции из fission-console
Дата: 2026-05-01
Цель: Полностью убрать хвосты попытки интеграции Go-функций в fission.
Исполнитель: GPT 4.1 (строго по плану, без отсебятины)
Что удаляем и почему
Попытка запустить Go-функции в Fission через build pipeline (go-builder → .so плагин) была отвергнута.
Все упоминания языка "go" в модели, тестах, примерах, terraform — мёртвый код и хвосты.
ПЛАН УДАЛЕНИЯ (шаги строго по порядку)
ШАГ 1. Удалить директорию go-builder/
Содержит:
go-builder/Dockerfile— кастомный Docker-образ для компиляции Go-плагиновgo-builder/build.sh— скрипт сборки .so-плагина черезgo build -buildmode=plugin
Действие: удалить всю директорию go-builder/
# через SSH на VM:
rm -rf ~/terra/fission/go-builder/
ШАГ 2. Удалить файл console/internal/runtime/go.go
Содержит: единственную функцию BuildGoSourceZip(code string) ([]byte, error) — упаковывает Go-код в zip для source package Fission.
Действие: удалить файл целиком.
rm ~/terra/fission/console/internal/runtime/go.go
ШАГ 3. Убрать ветку "go" из console/internal/runtime/entrypoint.go
Файл: console/internal/runtime/entrypoint.go
Что убрать: блок case "go": return "Handler" в функции DefaultEntrypoint.
До:
func DefaultEntrypoint(lang string) string {
switch lang {
case "nodejs":
return "main"
case "php":
return "main.php::handler"
case "ruby":
return "handler"
case "go":
// Go: экспортированная функция (заглавная) — go/plugin требует экспорт
return "Handler"
default:
return "main.main"
}
}
После:
func DefaultEntrypoint(lang string) string {
switch lang {
case "nodejs":
return "main"
case "php":
return "main.php::handler"
case "ruby":
return "handler"
default:
return "main.main"
}
}
ШАГ 4. Убрать запись "go" из console/internal/model/types.go
Файл: console/internal/model/types.go
Что убрать: строку (и комментарий если есть):
"go": {Image: "ghcr.io/fission/go-env", BuilderImage: "naeel/go-builder-fast:v1"},
ШАГ 5. Убрать Go-ветку из console/internal/fission/function.go
Файл: console/internal/fission/function.go
Что убрать: блок if req.Language == "go" { ... } else { ... } — заменить на тело else-ветки (без условия).
До:
var pkgSpec map[string]any
if req.Language == "go" {
srcZip, err := runtime.BuildGoSourceZip(req.Code)
if err != nil {
return nil, fmt.Errorf("build go source archive: %w", err)
}
literal := base64.StdEncoding.EncodeToString(srcZip)
pkgSpec = map[string]any{
"source": map[string]any{
"type": "literal",
"literal": literal,
},
"deployment": map[string]any{},
"environment": map[string]any{"name": req.Environment, "namespace": ns},
"buildcommand": "build",
}
} else {
deployBytes, archiveErr := runtime.BuildDeployArchive(req.Language, req.Code)
if archiveErr != nil {
return nil, fmt.Errorf("build %s archive: %w", req.Language, archiveErr)
}
pkgSpec = map[string]any{
...
}
}
После:
var pkgSpec map[string]any
deployBytes, archiveErr := runtime.BuildDeployArchive(req.Language, req.Code)
if archiveErr != nil {
return nil, fmt.Errorf("build %s archive: %w", req.Language, archiveErr)
}
pkgSpec = map[string]any{
...
}
ВАЖНО: также убрать неиспользуемый import "encoding/base64" если после удаления он больше нигде не нужен в этом файле.
ШАГ 6. Удалить примеры с Go-функциями
Директории для удаления:
examples/go-hello/(целиком)examples/big-suite/code/go-order/(целиком)examples/big-suite/code/go-report/(целиком)examples/big-suite/code/go-processor/(целиком)
rm -rf ~/terra/fission/examples/go-hello/
rm -rf ~/terra/fission/examples/big-suite/code/go-order/
rm -rf ~/terra/fission/examples/big-suite/code/go-report/
rm -rf ~/terra/fission/examples/big-suite/code/go-processor/
ШАГ 7. Убрать блок Go из tests_v2.sh
Файл: tests_v2.sh
Удалить:
7a. Строка 13 — subs+=("${GO_NS}") внутри cleanup_namespaces().
7b. Строки 41-45 — объявление и warmup GO_NS:
# GO_NS фиксированный — namespace создаётся один раз, Fission не рестартует при повторных прогонах.
# Первый прогон занимает ~5 мин (rolling restart Fission), последующие — мгновенно.
GO_NS="go-livetest@test.local"
# Триггерим ensureUserNamespace заранее — Fission начнёт регистрировать NS пока идут остальные тесты.
curl -s -o /dev/null -X GET ${BASE}/functions -H "X-Test-Sub: ${GO_NS}" || true
7c. Строки 785-811 — весь блок БЛОК AE: Go — создание и вызов:
echo ""
echo ">>> БЛОК AE: Go — создание и вызов"
# Go: namespace GO_NS уже прогрет в начале теста (curl в самом верху).
# ...
GO_CODE=$(python3 -c "...")
curl -s -o /dev/null -X DELETE ${BASE}/functions/go-fn -H "X-Test-Sub: ${GO_NS}" || true
R=$(curl ... -d "{\"name\":\"go-fn\",\"language\":\"go\",...}")
...
[ "$STATUS" = "200" ] && pass "Go: invoke → 200" || fail ...
echo "$RAW" | grep -q "go-ok" && pass "Go: тело содержит go-ok" || fail ...
(всё до следующего echo "" и разделителя ===)
ШАГ 8. Убрать блок T03 (go) из test_simple_function.sh
Файл: test_simple_function.sh
Удалить строки 263-296 — весь блок T03: go — source pipeline, create с URL:
# ════════════════════════════════════════════════════════════════════════
echo ""
echo ">>> T03: go — source pipeline, create с URL"
# ════════════════════════════════════════════════════════════════════════
T03="${RUN_ID}-go-basic"
...
kube_gone "functions.fission.io" "${T03}" && pass "T03: Function удалена" || fail "T03: Function осталась"
ВАЖНО: проверить что write_go функция определена только для T03. Если да — удалить её определение тоже (найти write_go() в файле). Если используется где-то ещё — оставить.
ШАГ 9. Убрать Go из bench_heavy.py
Файл: bench_heavy.py
9a. Удалить блок GO_CODE — весь многострочный raw string от строки # ── Go ──... до следующего такого же разделителя комментария для другого языка (примерно строки 636–870).
9b. Строка ~1078 — удалить из списка functions:
("bench-go", "go", GO_CODE),
9c. Если после удаления GO_CODE есть orphan-упоминания bench-go или GO_CODE — удалить их.
ШАГ 10. Удалить/исправить в Terraform provider
10a. terraform/provider/internal/resources/simple_function_resource.go — строки 70-71:
image: "ghcr.io/fission/go-env:latest",
builderImage: "naeel/go-builder-fast:v1",
Удалить или заменить (зависит от контекста: если это default-значение только для Go-runtime — удалить весь if-блок; если это общий default — заменить на пустую строку "").
10b. terraform/provider/internal/resources/environment_resource_test.go — удалить тесты с go-env/go-builder (строки ~40-60).
10c. terraform/provider/internal/resources/package_resource_test.go — строка ~120:
Environment: types.StringValue("go-env"),
Заменить на другой environment (например "python-env") или удалить тест если он специфичен для Go.
ШАГ 11. Проверка компиляции
После всех изменений:
# SSH на VM:
cd ~/terra/fission/console && go build ./...
cd ~/terra/fission/terraform/provider && go build ./...
Если ошибки — исправить неиспользуемые импорты ("encoding/base64", "archive/zip" и т.п.)
ШАГ 12. Запустить тесты
# SSH на VM:
cd ~/terra/fission/console && go test ./...
ШАГ 13. Git commit
git add -A
git commit -m "remove golang integration: delete go-builder, go runtime, go examples, go tests (2026-05-01)"
Что НЕ трогать
console/Dockerfile— используетFROM golang:...для сборки самого console-сервера (Go) — это НЕ golang-integration для пользовательских функций, это build stagemetrics-collector/Dockerfile— аналогично, golang для сборки коллектораconsole/go.mod,metrics-collector/go.mod,terraform/provider/go.mod— это go.mod проектов на Go, не golang-функций fissionterraform/provider/internal/resources/environment_resource.goстрока 75 про BuilderImage — это документация поля, можно оставить
Порядок безопасного удаления
- Начать с примеров и go-builder (нет зависимостей от другого кода)
- Затем runtime/go.go и ветки в function.go/entrypoint.go
- Затем тесты
- Последним — model/types.go запись "go"
- go build — убедиться что компилируется
- Коммит