docs: progress.md — harbor integration + UX fixes (v0.1.24–v0.1.28)

This commit is contained in:
“Naeel”
2026-03-11 17:23:32 +04:00
parent 6de90ac5ac
commit 871e6e8a1d
+93
View File
@@ -230,3 +230,96 @@
| 6 | `replicas` field в FunctionSpec | Низкий (v1.1) |
| 7 | RabbitMQ event triggers | Низкий (v2) |
| 8 | Метрики → Victoria Metrics | Низкий |
---
## 2026-03-11 — Harbor integration + Go 1.23 runtime (v0.1.24v0.1.26)
### Что сделано
| # | Компонент | Изменение |
|---|-----------|-----------|
| 1 | `internal/harbor/` | Harbor-клиент: `EnsureProject` создаёт проект перед push образа |
| 2 | `internal/builder/builder.go` | Поддержка `HarborClient`, push в `pearlharbor.registryk8s.services.ngcloud.ru` |
| 3 | `runtimes/go1.23/` | Новый Go 1.23 runtime: `server.go` + `runner.go` + Dockerfile |
| 4 | `internal/builder/context.go` | Go 1.23 в switch; `COPY . /app/handler/` вместо `COPY handler/` |
| 5 | `api/v1alpha1/function_types.go` | `go1.23` в enum поддерживаемых рантаймов |
| 6 | `terraform/provider/` | v0.1.14: `go1.23` в `stringvalidator.OneOf` |
| 7 | `deployments/k8s/operator.yaml` | v0.1.26 |
| 8 | `examples/hello-go/` | Новый пример: HTTP + job на Go 1.23 |
| 9 | `examples/hello-go/code/greeting.go` | Переименован из handler.go, функция `buildGreeting(guestName)` |
| 10 | `examples/pg-list-python/` | Новый пример: Python + PostgreSQL, только HTTP, без job |
### Docker Hub auth на 192.168.1.220
- Токен: `dckr_pat_aElN35tdXMBrtOAPraV5Fi0o58s` (сохранён в `secrets/dockerhub.env`, chmod 600)
- `docker login -u naeel --password-stdin` выполнен на remote machine
### Исправленные баги
- kaniko `COPY handler/ /app/handler/` — файлы в tar-контексте без prefix → исправлено на `COPY .`
- `Decimal` из psycopg2 не сериализуется → `float(row[2])` в `catalog.py`
- Formatter добавил дублирующий `package code` в `greeting.go` — удалён вручную
- CRD в кластере имел только `go1.21` в enum → `kubectl apply` обновлён CRD
- Provider v0.1.13 имел только `go1.21` → пересобран v0.1.14
### Git HEAD
```
d6a2e22 fix: восстановлен requirements.txt после теста
5c6a373 docs: переработан examples/README.md + комментарии function.tf
2ca3137 feat: пример pg-list-python
c4559dd fix: go1.23 build context
78d11ae refactor: rename handler.go→greeting.go
a709b38 feat: go1.23 runtime support
babd8e6 feat: harbor integration
```
---
## 2026-03-11 — UX улучшения: build logs + JSON для всех HTTP методов (v0.1.27v0.1.28)
### Проблемы до исправления
| Проблема | Симптом |
|---|---|
| Ошибка сборки без деталей | `terraform apply` показывал только `function build failed: build job failed` без причины |
| HTML 501 при DELETE/HEAD/PUT | Python runtime `http.server` не обрабатывал эти методы → HTML-ответ вместо JSON |
### Что изменили
#### `controllers/function_controller.go`
- `FunctionReconciler` получил поле `KubeClient kubernetes.Interface`
- Добавлен `getBuildPodLogs(ctx, kube, namespace, jobName)` — читает логи kaniko-пода (последние 50 строк)
- При сбое сборки (`case "failed"`) вызывает `getBuildPodLogs` и включает вывод в `Function.Status.Message`
- Провайдер пробрасывает `Message` в ошибку `terraform apply` — разработчик видит точную причину
#### `runtimes/python3.11/server.py`
- Выделен `_handle_with_body()` — общий обработчик для методов с телом
- `do_PUT`, `do_DELETE`, `do_PATCH` = `_handle_with_body` — вызывают функцию пользователя
- `do_HEAD` — отдаёт заголовки без тела (HTTP-стандарт; тело вычисляется но не отправляется)
- `send_error()` переопределён → JSON `{"error": "...", "code": N}` вместо HTML 501
- Runtime пересобран: `naeel/sless-runtime-python3.11:v0.1.2`
#### `main.go`
- `KubeClient: kubernetes.NewForConfigOrDie(mgr.GetConfig())` передаётся в `FunctionReconciler`
#### `internal/builder/context.go`
- python3.11 runtime: `v0.1.1``v0.1.2`
### Версии после исправления
- Оператор: `naeel/sless-operator:v0.1.28`
- Python runtime: `naeel/sless-runtime-python3.11:v0.1.2`
- Provider: `terra.k8c.ru/naeel/sless v0.1.14` (без изменений)
### Результат тестирования
| Тест | До | После |
|---|---|---|
| `DELETE /fn/...` | HTML 501 | ✅ JSON 200, функция вызывается |
| `HEAD /fn/...` | HTML 501 | ✅ HTTP 200, Content-Type: application/json |
| `PUT /fn/...` | HTML 501 | ✅ JSON 200, функция вызывается |
| Невалидный `requirements.txt` | `build job failed` | ✅ Полный вывод pip включая строку с ошибкой |
### Git коммиты
```
6de90ac chore: python runtime v0.1.2 + operator v0.1.28
3372cb1 fix: build logs in status + JSON for all HTTP methods in python runtime
```