Files
cloud-host/CHANGELOG.md
T
keyhan 5f77c07183 docs: rewrite ARCHITECTURE.md, README.md; add CHANGELOG and CONTRIBUTING
- ARCHITECTURE.md: all modules, Helm charts, billing/lifecycle flow, WordPress
- README.md: updated features, API endpoints, configuration, project structure
- CHANGELOG.md: full changelog for all unreleased changes
- CONTRIBUTING.md: commit conventions, documentation requirements, PR checklist
2026-04-22 16:45:30 +03:30

4.8 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

Helm Chart (backend/helm/cloudhost-app/)

  • New Helm chart replacing legacy Handlebars templates for all deployments
  • deployment.yaml — app deployment with imagePullSecrets, imagePullPolicy: Always, health probes
  • service.yaml — ClusterIP service (port 80 → app port)
  • ingress.yaml — Nginx ingress with cert-manager TLS
  • secret.yaml — user env vars as K8s Secret
  • db-deployment.yaml — PostgreSQL or MySQL with readiness/liveness probes
  • db-service.yaml — database ClusterIP service
  • db-pvc.yaml — database storage with helm.sh/resource-policy: keep
  • db-secret.yaml — database credentials with helm.sh/resource-policy: keep
  • wp-pvc.yaml — WordPress wp-content PVC with keep policy
  • registry-pull-secret.yaml — imagePullSecret for insecure registries
  • _helpers.tpl — shared template helpers (name, namespace, labels, DB image, DB port)
  • values.yaml — comprehensive defaults for all runtimes
  • Chart.yaml — chart metadata (v0.1.0)

Helm Service (backend/src/kubernetes/helm.service.ts)

  • New HelmService wrapping Helm CLI for install/upgrade, rollback, uninstall, history, status
  • Temp file management for kubeconfig and values (mode 0o600, auto-cleanup)
  • Full error handling with structured logging

Lifecycle Module (backend/src/lifecycle/)

  • New AppLifecycleService — cron-based scanner (configurable interval, default 60s)
  • State machine: ACTIVE → SUSPENDED → PENDING_DELETION → DELETED
  • Auto-suspend expired apps (scale to 0 replicas)
  • Auto-renew hourly plans from wallet balance
  • Admin-configurable grace periods via PlatformSettings table
  • activateApp() and renewApp() for payment reactivation
  • New LifecycleControllerGET/PATCH /lifecycle/settings (admin only)
  • New LifecycleModule — wires service, controller, entities

Billing Enhancements (backend/src/billing/)

  • PlatformSetting entity — key-value settings table for admin runtime config
  • calculateCostForApp() method in BillingService
  • deductWallet() method for programmatic wallet deductions
  • Billing controller integrates lifecycle activation on payment

Application Entity Enhancements

  • New fields: planId, billingCycle, lifecycleStatus, planExpiresAt, suspendedAt, scheduledDeletionAt
  • AppLifecycleStatus enum: active, suspended, pending_deletion, deleted
  • BillingCycle enum: hourly, monthly, yearly

Frontend

  • Wallet balance display in dashboard header (all pages)
  • Lifecycle status column in user apps list (color-coded badges)
  • Plan expiry countdown in apps list
  • Admin apps page: suspended/pending-deletion summary cards
  • Admin billing page: lifecycle settings management section
  • Updated TypeScript types for lifecycle and billing fields

Tests

  • build.service.spec.ts — WordPress Dockerfile generation, PVC race condition, entrypoint script
  • helm.service.spec.ts — HelmService chart path, temp files, history parsing
  • kubernetes.service.spec.tsbuildHelmValues() logic, password generation
  • clusters.service.spec.ts — getDefault logic, delete/reassign logic

Changed

Build Service (backend/src/build/build.service.ts)

  • Runtime detectiondetectRuntime() now reads parent directory (not zip file itself)
  • WordPress support — full Dockerfile generation with custom entrypoint for wp-content merging
  • Laravel fix — generates nginx.conf and supervisord.conf inline (no longer requires user-provided files)
  • Laravel fixcomposer.lock made optional (composer.lock*)
  • ConfigMap cleanup moved to finally block

Kubernetes Service (backend/src/kubernetes/kubernetes.service.ts)

  • buildHelmValues() now includes registry.url for pull secret generation
  • deleteApplication() rewritten — runs helm uninstall then explicitly deletes kept resources (PVCs, secrets, TLS certs)
  • Added scaleDeployment() method for lifecycle suspend/resume

Applications Controller

  • Delete endpoint no longer requires app.clusterId && app.latestImageTag — always attempts K8s cleanup

Configuration

  • Added lifecycle config section with scanIntervalMs and per-cycle deleteAfterMs defaults

Documentation

  • ARCHITECTURE.md — complete rewrite: added WordPress, Helm charts, billing/lifecycle, all modules
  • README.md — complete rewrite: added WordPress, billing, lifecycle, snapshots, tickets, new API endpoints
  • CHANGELOG.md — created (this file)
  • CONTRIBUTING.md — created with commit conventions, documentation requirements