Releases: SatuSkyCloud/1ctl
v0.5.1
Changelog
- c6f3504 fix: handle errcheck for resource exhausted error parsing
- fd0fdd8 docs: add release notes for v0.5.1
- 2da8de8 feat: add resource exhausted error handling and tier info display
- d758bd6 fix(context): handle empty context file in saveContext
- 71fbaa9 fix(ci): skip binary test for cross-compiled builds
- 615d73a fix: resolve sec scan warnings and add Windows test compat
- 960b497 fix: resolve gosec warnings and update CI lint tooling
Version 0.5.1 (13-01-2026)
✨ New Features
-
Resource Exhausted Error Handling: Enhanced error handling for resource quota exceeded scenarios
- Beautiful formatted error display showing current tier limits
- Clear guidance on which resources are exhausted (CPU, Memory, Pods, etc.)
- Automatic tier upgrade suggestions when applicable
- Support for displaying next tier limits and requirements
-
Tier Info Display: Added tier information to credits commands
credits balancenow shows current tier and limits- Display of highest achieved tier (peak tier)
- Credits required to reach next tier
- Current resource limits per tier
🔧 Technical Improvements
-
Resource Error Utilities: New
internal/utils/resource_error.gomoduleParseResourceExhaustedError()- Parse API error responses for resource exhaustionFormatResourceExhaustedError()- Beautiful CLI formatting for resource errors- Comprehensive test coverage with
resource_error_test.go
-
Deploy Command Enhancement: Improved error handling during deployment
- Detects resource exhausted errors from API
- Displays actionable upgrade guidance
- Shows current vs required resources
-
Credits API Integration: Enhanced credits balance endpoint integration
- Added
TierInfostruct with tier details - Support for tier limits display
- Upgrade path information
- Added
v0.5.0
Changelog
- 4727341 chore(v0.5.0): feature sync and pipeline fixes
Version 0.5.0 (09-01-2026)
✨ New Features
-
Credits & Billing Management: Complete billing and credits integration
credits balance- View organization credit balancecredits transactions- View transaction historycredits usage- View machine usage and costscredits topup- Initiate credit top-up via Stripecredits invoices- Manage invoices (list, get, download PDF, generate)
-
Storage Management (S3): Full S3-compatible object storage support
storage list/get/create/delete- Manage storage configurationsstorage buckets- Bucket management operationsstorage files/upload/download- File operationsstorage presign- Generate presigned URLsstorage usage- View storage usage statistics
-
Logs Command: Deployment log viewing and streaming
logs --deployment-id- View stored deployment logslogs --follow- Stream logs in real-time (WebSocket)logs --stats- View log statisticslogs --tail- Limit number of lines
-
GitHub Integration: Complete GitHub OAuth and repository management
github status- Check GitHub connection statusgithub connect/disconnect- Manage GitHub account connectiongithub repos- List, sync, and get repository detailsgithub installation- Manage GitHub App installation
-
Notifications: In-app notification management
notifications list- List notifications with filteringnotifications count- Get unread notification countnotifications read- Mark notifications as readnotifications delete- Delete notifications
-
Marketplace: Browse and deploy pre-configured applications
marketplace list- Browse available appsmarketplace get- Get app detailsmarketplace deploy- Deploy marketplace apps (WordPress, Immich, N8N, etc.)
-
User Profile Management: Personal account management
user me- View current user profileuser update- Update profile (name, email)user password- Change password (interactive)user permissions- View role and permissionsuser sessions revoke- Revoke all sessions
-
API Token Management: Manage API tokens programmatically
token list- List all API tokenstoken create- Create new tokens with expirytoken get- Get token detailstoken enable/disable- Toggle token statetoken delete- Delete tokens
-
Audit Logs: View organization audit trails
audit list- List audit logs with filteringaudit get- Get audit log detailsaudit export- Export logs to JSON/CSV
-
Talos Configuration: Talos Linux machine configuration
talos generate- Generate Talos configurationtalos apply- Apply configuration to machinestalos history- View configuration historytalos network- View machine network info
-
Admin Operations: Super-admin management tools
admin usage- Manage machine usage recordsadmin credits- Add/refund organization creditsadmin namespaces- List all Kubernetes namespacesadmin cluster-roles- List cluster rolesadmin cleanup- Cleanup resources by label
🔄 Enhanced Commands
- Organization Command Enhancements
org list- List all user organizationsorg create- Create new organizationsorg delete- Delete organizationsorg team list- List team membersorg team add- Add team members with roleorg team role- Update member rolesorg team remove- Remove team members- Enhanced
org switchwith--org-namesupport
🔧 Technical Improvements
-
Backend Route Expansion: Added 70+ new CLI routes to backend
- Full DI pattern implementation for CLI controllers
- Split controllers for better separation of concerns
- Enhanced authentication middleware
-
API Client Architecture: Modular API client files
api/credits.go- Credits and billing operationsapi/storage.go- S3 storage operationsapi/logs.go- Log operationsapi/github.go- GitHub integrationapi/notifications.go- Notification operationsapi/marketplace.go- Marketplace operationsapi/audit.go- Audit log operationsapi/talos.go- Talos configurationapi/admin.go- Admin operationsapi/user.go- User profile operationsapi/token.go- API token operationsapi/org.go- Organization and team management
-
Command Structure: 11 new command files with consistent patterns
- Beautiful output formatting with status lines, headers, dividers
- Comprehensive error handling
- Flag validation and help text
📚 Documentation
- Updated README.md with all new commands and examples
- Added usage examples for:
- Credits & billing operations
- Storage management
- Log streaming
- GitHub integration
- Marketplace deployment
- Team management
- API token management
- Admin operations
📋 New Commands Summary
| Category | Commands Added |
|---|---|
| Credits | 9 subcommands |
| Storage | 12 subcommands |
| Logs | 1 command with 4 flags |
| GitHub | 10 subcommands |
| Notifications | 5 subcommands |
| Marketplace | 3 subcommands |
| User | 5 subcommands |
| Token | 6 subcommands |
| Audit | 3 subcommands |
| Talos | 4 subcommands |
| Admin | 8 subcommands |
| Org (enhanced) | 7 new subcommands |
v0.4.0
Changelog
- d45bad9 chore(v0.4.0): multi-cluster integration
Version 0.4.0 (18-12-2025)
✨ New Features
- Multi-Cluster Deployment: Deploy applications across multiple Kubernetes clusters for high availability
- New
--multiclusterflag to enable multi-cluster replication - New
--multicluster-modeflag to choose deployment strategy:active-active: Both clusters serve traffic simultaneously with geo-routing (ideal for stateless apps)active-passive: Primary serves traffic, secondary is standby with automatic failover (ideal for stateful apps)
- New
--backup-scheduleflag to configure backup frequency:hourly,daily,weekly - New
--backup-retentionflag to configure backup retention:24h,72h,168h,720h
- New
🔄 API Enhancements
-
MulticlusterConfig Model: Added new configuration model for multi-cluster deployments
Enabled: Toggle multi-cluster replicationMode: Active-Active or Active-Passive deployment strategyBackupEnabled: Enable Velero backups for data protectionBackupSchedule: Cron-based backup schedulingBackupRetention: Duration-based backup retentionFailoverEnabled: Automatic failover on primary cluster failureRestoreOnFailover: Automatic restore from backup on failover
-
Deployment Model Update: Extended
Deploymentstruct withMulticlusterConfigfield
🔧 Technical Improvements
-
Orchestrator Enhancement: Updated deployment orchestration to build and send multi-cluster configuration
- Automatic cron schedule conversion from friendly names (hourly/daily/weekly)
- Smart defaults: Active-passive mode automatically enables backup, failover, and restore-on-failover
- Seamless integration with existing deployment workflow
-
DeploymentOptions Update: Added multi-cluster fields to deployment options struct
MulticlusterEnabled: Enable/disable multi-clusterMulticlusterMode: Deployment strategy selectionBackupSchedule: User-friendly schedule selectionBackupRetention: Retention duration
📚 New Command Usage
# Deploy with multi-cluster enabled (active-passive with daily backups, 7-day retention)
1ctl deploy --cpu 100m --memory 256Mi --multicluster
# Deploy with active-active mode (geo-routing, no backups)
1ctl deploy --cpu 100m --memory 256Mi --multicluster --multicluster-mode active-active
# Deploy with custom backup configuration
1ctl deploy --cpu 100m --memory 256Mi --multicluster \
--multicluster-mode active-passive \
--backup-schedule hourly \
--backup-retention 72h
# Full example with all options
1ctl deploy --cpu 500m --memory 1Gi \
--machine my-machine-1 --machine my-machine-2 \
--env DATABASE_URL=postgres://... \
--multicluster \
--multicluster-mode active-passive \
--backup-schedule daily \
--backup-retention 168h📋 Multi-Cluster Configuration Reference
| Flag | Default | Description |
|---|---|---|
--multicluster |
false |
Enable multi-cluster deployment |
--multicluster-mode |
active-passive |
Deployment strategy |
--backup-schedule |
daily |
Backup frequency (hourly/daily/weekly) |
--backup-retention |
168h |
Backup retention period |
Backup Schedule Mapping
| Schedule | Cron Expression | Description |
|---|---|---|
hourly |
0 * * * * |
Every hour |
daily |
0 0 * * * |
Daily at midnight UTC |
weekly |
0 18 * * 6 |
Weekly (Sunday 2 AM MYT) |
Retention Options
| Value | Duration | Use Case |
|---|---|---|
24h |
1 Day | Quick recovery, minimal storage |
72h |
3 Days | Short-term retention |
168h |
7 Days | Recommended for most apps |
720h |
30 Days | Long-term retention |
🔒 Security
- Multi-cluster configuration securely transmitted via existing API authentication
- Backup and failover operations handled by operator with proper RBAC
- Cloudflare Load Balancer hostname auto-generated by backend
v0.3.0
Changelog
- ce6d940 chore(v0.3.0): add multi-organization support with context management and CLI commands
✨ New Features
- Multi-Organization Support: Full support for users belonging to multiple organizations
- New
org currentcommand to view current organization context - New
org switchcommand to switch between organizations - Enhanced
auth statuscommand to display organization ID and namespace - Organization context automatically saved and restored across sessions
- New
🔄 API Enhancements
-
Multi-Tenant Authentication: Updated authentication flow to support multi-tenant backend
- Login now returns and stores complete organization information (ID, name, namespace)
- Token validation includes organization context
- All API calls properly scoped to user's current organization
- Fixed
/api-tokens/listendpoint to include organization ID parameter
-
Backend Compatibility: Updated all endpoints to work with multi-tenant backend
- Fixed
TokenValidatemodel types (UUID → string) to match backend response - Added
GetUserProfileAPI function for retrieving user organization details - Simplified login flow to use backend-provided organization data
- Updated issuer endpoint to use upsert pattern (
/issuers/upsert)
- Fixed
🔧 Technical Improvements
-
Enhanced Context Management: Improved CLI context storage
- Added
CurrentOrgIDandCurrentOrgNamefields to context - New helper functions:
GetCurrentOrgID(),SetCurrentOrgID(),GetCurrentOrgName(),SetCurrentOrgName() - New combined setter:
SetCurrentOrganization()for atomic updates - Maintains backward compatibility with existing context files
- Added
-
Improved Organization Visibility: Better user experience for multi-org environments
- Auth status now shows: Email, Organization, Organization ID, Namespace, Token expiry
- Deploy command properly uses current organization context by default
--organizationflag allows deploying to specific organization/namespace
-
Comprehensive Test Coverage: Added tests for all new features
- 3 new test cases for organization context operations
- 3 new test cases for org command structure
- All tests passing with 100% coverage of new code
- Updated existing tests to accommodate new fields
🛠️ Breaking Changes
- TokenValidate Model Changes: ID fields changed from
uuid.UUIDtostringtype- Affects:
UserID,TokenID,OrganizationID - Added new fields:
Token,Namespace,Message - Ensures compatibility with backend multi-tenant implementation
- Affects:
📚 New Commands
# View current organization
1ctl org current
# Switch to different organization
1ctl org switch --org-id <organization-id>
# Enhanced auth status
1ctl auth status🔒 Security
- All operations properly scoped to user's organization
- Context file maintains secure 0600 permissions
- Organization switching validates user access
v0.2.3
v0.2.2
Changelog
- 3f0da70 chore (v0.2.2): add dedicated Docker upload service for large image support
✨ New Features
- Enhanced Docker Image Upload: Added support for large Docker image uploads (>500MB and <8GB)
🔄 API Enhancements
- Docker Upload Infrastructure: Migrated Docker image uploads to dedicated service
- Previous:
/docker/images/uploadendpoint on main API - New: Direct upload to specialized Docker upload service
- Optimized for handling large binary transfers
- Supports file sizes from 500MB to 8GB
- Previous:
v0.2.1
Changelog
- 8dbc6ce chore: v0.2.1 - Fixed ingress domain management issues, enhanced ingress API with new retrieval function, improved deployment orchestration for better domain handling, and streamlined ingress upsert operations for consistency and error handling.
🐛 Bug Fixes
- Fixed ingress domain management: Resolved issue where ingress upsert operations were generating new domains instead of reusing existing ones
- Enhanced
upsertIngressfunction to check for existing ingresses by deployment ID before creating new ones - Added proper existing domain name reuse logic to prevent unnecessary domain generation
- Fixed Kubernetes error "ingress not found" by properly identifying and updating existing ingress resources
- Improved ingress update flow to use existing domain names and preserve ingress IDs
- Fixed ingress upsert response parsing to correctly handle backend's string response containing only the ingress ID
- Enhanced
🔧 Technical Improvements
-
Enhanced Ingress API: Added
GetIngressByDeploymentIDfunction to retrieve existing ingresses- Leverages existing backend route
/ingresses/deploymentId/:deploymentId - Enables proper lookup of existing ingress resources during deployment updates
- Simplifies client-side logic by leveraging backend's existing upsert capabilities
- Leverages existing backend route
-
Improved Deployment Orchestration: Enhanced ingress handling in deployment process
- Better separation between new ingress creation and existing ingress updates
- Consistent domain name handling across deployment scenarios
- Improved logging and error messaging for ingress operations
- Returns domain name from backend response to ensure consistency
🔄 API Enhancements
- Ingress Management: Streamlined ingress upsert operations to work seamlessly with backend logic
- Client now properly leverages backend's existing ingress detection by namespace and app label
- Reduced client-side complexity by relying on backend's robust upsert implementation
- Enhanced error handling and response processing for ingress operations
- Updated
UpsertIngressto correctly unmarshal string ingress ID response from backend
v0.2.0
Changelog
- 6781c2d chore: v0.2.0 - Simplified command structure by removing 'create' subcommands for deploy, service, and ingress; introduced upsert endpoints for idempotent operations; enhanced Dockerfile validation; improved user experience with streamlined CLI commands and comprehensive test updates.
✨ Enhanced Command Structure
-
Simplified Deploy Command: Removed
deploy createsubcommand and moved deployment flags directly to maindeploycommand- New usage:
1ctl deploy --cpu 100m --memory 20Mi --env HELLO=BYE --env SAY=WHAT - Subcommands
list,get, andstatusremain available - Enhanced validation with clear error messages for required flags
- New usage:
-
Simplified Service Command: Removed
service createsubcommand and moved service flags directly to mainservicecommand- New usage:
1ctl service --deployment-id=123 --name=myservice --port=8080 --namespace=myorg - Subcommands
listanddeleteremain available - Required flags:
--deployment-id,--name,--port
- New usage:
-
Simplified Ingress Command: Removed
ingress createsubcommand and moved ingress flags directly to mainingresscommand- New usage:
1ctl ingress --deployment-id=123 --service-id=456 --app-label=myapp --namespace=myorg --domain=example.com - Subcommands
listanddeleteremain available - Required flags:
--deployment-id,--domain,--app-label,--namespace
- New usage:
🔄 API Enhancements
-
Upsert Endpoints Migration: Updated all resource creation to use upsert endpoints for idempotent operations
- Deployment:
POST /deployments/upsert/:namespace/:appLabel(namespace = organization, appLabel = app name) - Service:
POST /services/upsert/:namespace/:serviceName(namespace = organization, serviceName = app name) - Ingress:
POST /ingresses/upsert/:namespace/:appLabel(namespace = organization, appLabel = app name)
- Deployment:
-
API Client Improvements: Replaced create functions with upsert functions
CreateDeployment→UpsertDeploymentCreateService→UpsertServiceCreateIngress→UpsertIngress- Maintained same payload structure for backward compatibility
🔧 Technical Improvements
-
Enhanced User Experience: Streamlined command syntax eliminates unnecessary subcommand nesting
- Direct flag access from main commands improves CLI ergonomics
- Consistent command patterns across deploy, service, and ingress resources
- Maintained backward compatibility for list/delete subcommands
-
Comprehensive Test Updates: Updated all test suites to reflect new command structure
- Mock API functions updated to use upsert patterns
- Integration tests migrated to new endpoint structure
- Command tests updated with new handler functions
- Maintained test coverage across all functionality
-
Shell Completion Updates: Updated all shell completion scripts for new command structure
- Bash: Removed obsolete "create" subcommands, updated flag completions
- Zsh: Enhanced completion with new command patterns
- Fish: Updated subcommand and flag completion logic
- PowerShell: Removed deprecated creation commands from completions
-
Deployment Orchestrator: Updated orchestration logic to use upsert operations
- Service creation now uses
UpsertServicefor idempotent operations - Ingress creation now uses
UpsertIngressfor consistent updates - Dependency handling updated with new upsert patterns
- Improved error messages with operation context
- Service creation now uses
-
Enhanced Image Upload Reliability: Added retry mechanism for Docker image uploads
- Automatic retry up to 3 attempts on upload failures
- Exponential backoff strategy (2, 4, 8 seconds between retries)
- Clear progress indication and error reporting for each attempt
- Improved resilience against temporary network issues or server errors
-
Enhanced Docker Validation: Significantly improved Dockerfile validation to support modern Docker features
- Multistage Build Support: Now properly validates
FROM image AS stage_namesyntax - Line Continuation Handling: Fixed parsing of multi-line commands using backslash (
\) continuations - Enhanced Image Name Validation: Updated regex patterns to support registry URLs, namespaces, and case-insensitive matching
- COPY --from Syntax: Added proper validation for
COPY --from=stage_namecommands in multistage builds - Stage Name Validation: Validates stage names allow alphanumeric characters, underscores, and hyphens
- Comprehensive Test Coverage: Added extensive test cases for all multistage build scenarios
- Multistage Build Support: Now properly validates
🛠️ Breaking Changes
- Command Structure: Removed
createsubcommands fromdeploy,service, andingresscommands- Old:
1ctl deploy create --cpu 100m --memory 20Mi - New:
1ctl deploy --cpu 100m --memory 20Mi - Old:
1ctl service create --deployment-id=123 --name=myservice --port=8080 - New:
1ctl service --deployment-id=123 --name=myservice --port=8080 - Old:
1ctl ingress create --deployment-id=123 --domain=example.com - New:
1ctl ingress --deployment-id=123 --domain=example.com --app-label=myapp --namespace=myorg
- Old:
v0.1.8
Changelog
- e76351c chore: v0.1.8 - Introduced machine marketplace discovery with enhanced filtering options, updated machine model with new fields and metrics, improved hostname mapping, and added API function for fetching available machines.
✨ New Features
- Machine Marketplace Discovery: Added
machine availablecommand to browse and filter available machines for rent- Comprehensive filtering options:
--region,--zone,--min-cpu,--min-memory,--gpu,--recommended,--pricing-tier - Enhanced display with pricing information, performance metrics, and recommendation indicators
- Real-time availability status and resource specifications
- Comprehensive filtering options:
🔧 Technical Improvements
-
Updated Machine Model: Synchronized frontend Machine model with enhanced backend structure
- Changed
MachineIDfromuuid.UUIDtostringtype - Added new fields:
ID,Status,LastHealthCheck,Recommended,ResourceScore - Added performance metrics:
CPUUsagePercent,MemoryUsagePercent,StorageUsagePercent,NetworkUsageGbps - Added hardware features:
HasGPU,HasHDD,HasNVME,NodeType - Added pricing information:
PricingTier,HourlyCost - Added reliability metrics:
UptimePercent,ResponseTimeMs,NetworkMetricsType
- Changed
-
Enhanced Hostname Mapping: Updated deployment logic to use machine IDs instead of machine names
- Both manual machine selection (
--machineflag) and automatic selection now use machine IDs - Improved deduplication logic based on unique machine IDs
- Ensures consistent backend integration with machine ID-based deployments
- Both manual machine selection (
-
Improved Machine Information Display: Enhanced machine listing with additional useful information
- Added Status, Node Type, Pricing Tier, and Hourly Cost to machine details
- Added conditional display of Resource Score and Uptime percentage
- Separate optimized display format for available machines marketplace
🛠️ API Enhancements
- Added
GetAvailableMachines()API function for fetching monetized machines - Updated
MachineIDsstruct to use string array instead of UUID array
v0.1.7
Changelog
- 759fffe chore: v0.1.7
- 94b0eb5 chore: update installation instructions in README for automated version retrieval
- 4d6d484 chore: v0.1.6 & update GitHub Actions workflow for SatuSky deployment
- eec41cb chore: v0.1.5
🐛 Bug Fixes
- Fixed hostname deduplication for monetized machines: When multiple machines share the same hostname (e.g., "1"), the system now properly preserves the original hostname instead of incrementing it (e.g., "1" stays "1" instead of becoming "2")
- Added hostname deduplication logic for owner's machines in automatic selection
- Added hostname deduplication logic for manually specified machines via
--machineflag - Ensures consistent hostname behavior across both user-owned and monetized machine deployments
🔧 Technical Improvements
- Enhanced versioning system: Fixed automatic version detection in build process
- Updated
Taskfile.ymlto automatically detect version from Git tags instead of using hardcoded default - Added
task versioncommand to easily check current version information - Version now correctly reflects Git state with format like
v0.1.6-3-g94b0eb5for commits ahead of tags - Improved build-time version injection with commit hash and build date
- Updated