chore: add all untracked files from VM — scripts, test-results, LLM batch, docs
This commit is contained in:
@@ -0,0 +1,305 @@
|
||||
# План удаления 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/`
|
||||
|
||||
```bash
|
||||
# через SSH на VM:
|
||||
rm -rf ~/terra/fission/go-builder/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ШАГ 2. Удалить файл `console/internal/runtime/go.go`
|
||||
|
||||
**Содержит:** единственную функцию `BuildGoSourceZip(code string) ([]byte, error)` — упаковывает Go-код в zip для source package Fission.
|
||||
|
||||
**Действие:** удалить файл целиком.
|
||||
|
||||
```bash
|
||||
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`.
|
||||
|
||||
**До:**
|
||||
```go
|
||||
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"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**После:**
|
||||
```go
|
||||
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
|
||||
"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`-ветки (без условия).
|
||||
|
||||
**До:**
|
||||
```go
|
||||
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{
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**После:**
|
||||
```go
|
||||
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/` (целиком)
|
||||
|
||||
```bash
|
||||
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:
|
||||
```bash
|
||||
# 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 — создание и вызов`:
|
||||
```bash
|
||||
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`:
|
||||
```bash
|
||||
# ════════════════════════════════════════════════════════════════════════
|
||||
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`:
|
||||
```python
|
||||
("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:
|
||||
```go
|
||||
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:
|
||||
```go
|
||||
Environment: types.StringValue("go-env"),
|
||||
```
|
||||
Заменить на другой environment (например `"python-env"`) или удалить тест если он специфичен для Go.
|
||||
|
||||
---
|
||||
|
||||
### ШАГ 11. Проверка компиляции
|
||||
|
||||
После всех изменений:
|
||||
|
||||
```bash
|
||||
# SSH на VM:
|
||||
cd ~/terra/fission/console && go build ./...
|
||||
cd ~/terra/fission/terraform/provider && go build ./...
|
||||
```
|
||||
|
||||
Если ошибки — исправить неиспользуемые импорты (`"encoding/base64"`, `"archive/zip"` и т.п.)
|
||||
|
||||
---
|
||||
|
||||
### ШАГ 12. Запустить тесты
|
||||
|
||||
```bash
|
||||
# SSH на VM:
|
||||
cd ~/terra/fission/console && go test ./...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### ШАГ 13. Git commit
|
||||
|
||||
```bash
|
||||
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 stage
|
||||
- `metrics-collector/Dockerfile` — аналогично, golang для сборки коллектора
|
||||
- `console/go.mod`, `metrics-collector/go.mod`, `terraform/provider/go.mod` — это go.mod проектов на Go, не golang-функций fission
|
||||
- `terraform/provider/internal/resources/environment_resource.go` строка 75 про BuilderImage — это документация поля, можно оставить
|
||||
|
||||
---
|
||||
|
||||
## Порядок безопасного удаления
|
||||
|
||||
1. Начать с примеров и go-builder (нет зависимостей от другого кода)
|
||||
2. Затем runtime/go.go и ветки в function.go/entrypoint.go
|
||||
3. Затем тесты
|
||||
4. Последним — model/types.go запись "go"
|
||||
5. go build — убедиться что компилируется
|
||||
6. Коммит
|
||||
Reference in New Issue
Block a user