diff --git a/.gitignore b/.gitignore index 4e937f7a0f..5d2df400f4 100644 --- a/.gitignore +++ b/.gitignore @@ -164,3 +164,5 @@ test-results/ secrets.yaml node_modules *.darwin +/tools/builders/prebuild-application/dist +src/frontend/packages/core/src/index.html diff --git a/angular.json b/angular.json index 7050477934..600538655d 100644 --- a/angular.json +++ b/angular.json @@ -15,7 +15,7 @@ "prebuildScripts": [ { "name": "Clean symlinks", - "script": "sh -c 'mv build/clean-symlinks.js build/clean-symlinks.cjs && node build/clean-symlinks.cjs && mv build/clean-symlinks.cjs build/clean-symlinks.js'", + "script": "node build/run-script-cjs.cjs build/clean-symlinks.js", "phase": 1, "cache": true, "cacheKey": ["src/frontend/packages/**/package.json"], @@ -24,7 +24,7 @@ }, { "name": "Store git metadata", - "script": "sh -c 'mv build/store-git-metadata.js build/store-git-metadata.cjs && node build/store-git-metadata.cjs && mv build/store-git-metadata.cjs build/store-git-metadata.js'", + "script": "node build/run-script-cjs.cjs build/store-git-metadata.js", "phase": 1, "cache": true, "cacheKey": [".git/HEAD", ".git/refs/heads/**"], @@ -86,29 +86,29 @@ { "glob": "**/*", "input": "src/frontend/packages/core/assets", - "output": "/core/assets" + "output": "core/assets" }, "src/frontend/packages/core/favicon.ico", { "glob": "**/*", "input": "custom-src/frontend/assets/custom", - "output": "/core/assets/custom", + "output": "core/assets/custom", "ignore": ["**/.gitkeep"] }, { "glob": "**/*", "input": "src/frontend/packages/kubernetes/assets", - "output": "/kubernetes/assets" + "output": "kubernetes/assets" }, { "glob": "**/*", "input": "node_modules/monaco-editor/min/vs", - "output": "/core/assets/monaco/vs" + "output": "core/assets/monaco/vs" }, { "glob": "**/*", "input": "node_modules/@cfstratos/monaco-yaml/lib", - "output": "/core/assets/monaco/vs/language/yaml" + "output": "core/assets/monaco/vs/language/yaml" } ], "styles": [ @@ -165,7 +165,8 @@ "ssl": true, "sslKey": "dev-ssl/server.key", "sslCert": "dev-ssl/server.crt", - "proxyConfig": "proxy.conf.cjs" + "proxyConfig": "proxy.conf.cjs", + "servePath": "/" }, "configurations": { "development": { diff --git a/build-backend.cjs b/build-backend.cjs new file mode 100644 index 0000000000..4dd7e9d59c --- /dev/null +++ b/build-backend.cjs @@ -0,0 +1,10 @@ +// build-backend.cjs +const fs = require('fs'); +const cp = require('child_process'); + +fs.mkdirSync('dist/bin', { recursive: true }); +const isWin = process.platform === 'win32'; +const outPath = isWin ? '..\\..\\dist\\bin\\jetstream' : '../../dist/bin/jetstream'; +const ldflags = `-X main.appVersion=${process.env.VERSION || 'dev'} -X main.buildDate=${process.env.BUILD_DATE || ''} -X main.gitCommit=${process.env.GIT_COMMIT || ''}`; +const cmd = `go build -ldflags \"${ldflags}\" -o ${outPath}`; +cp.execSync(cmd, { cwd: 'src/jetstream', stdio: 'inherit', shell: true }); diff --git a/build-backend.js b/build-backend.js new file mode 100644 index 0000000000..8887362c96 --- /dev/null +++ b/build-backend.js @@ -0,0 +1,10 @@ +// build-backend.js +const fs = require('fs'); +const cp = require('child_process'); + +fs.mkdirSync('dist/bin', { recursive: true }); +const isWin = process.platform === 'win32'; +const outPath = isWin ? '..\\..\\dist\\bin\\jetstream' : '../../dist/bin/jetstream'; +const ldflags = `-X main.appVersion=${process.env.VERSION || 'dev'} -X main.buildDate=${process.env.BUILD_DATE || ''} -X main.gitCommit=${process.env.GIT_COMMIT || ''}`; +const cmd = `go build -ldflags \"${ldflags}\" -o ${outPath}`; +cp.execSync(cmd, { cwd: 'src/jetstream', stdio: 'inherit', shell: true }); diff --git a/build/build-builders.cjs b/build/build-builders.cjs new file mode 100644 index 0000000000..9a5975bf86 --- /dev/null +++ b/build/build-builders.cjs @@ -0,0 +1,54 @@ +#!/usr/bin/env node +/** + * Cross-platform script to build custom Angular builders + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +const ROOT_DIR = path.join(__dirname, '..'); +const BUILDERS_DIR = path.join(ROOT_DIR, 'tools', 'builders', 'prebuild-application'); +const TARGET_DIR = path.join(ROOT_DIR, 'node_modules', '@stratos', 'builders'); +const DIST_DIR = path.join(BUILDERS_DIR, 'dist'); + +console.log('Building custom Angular builders...'); + +try { + // Install dependencies + console.log('Installing dependencies...'); + execSync('bun install', { + cwd: BUILDERS_DIR, + stdio: 'inherit' + }); + + // Build + console.log('Building...'); + execSync('bun run build', { + cwd: BUILDERS_DIR, + stdio: 'inherit' + }); + + // Create target directory + console.log('Copying to node_modules...'); + if (!fs.existsSync(TARGET_DIR)) { + fs.mkdirSync(TARGET_DIR, { recursive: true }); + } + + // Copy dist directory + if (fs.existsSync(DIST_DIR)) { + const targetDist = path.join(TARGET_DIR, 'dist'); + if (fs.existsSync(targetDist)) { + fs.rmSync(targetDist, { recursive: true, force: true }); + } + fs.cpSync(DIST_DIR, targetDist, { recursive: true }); + console.log('✓ Builders built successfully'); + } else { + console.error('❌ Build succeeded but dist directory not found'); + process.exit(1); + } + +} catch (err) { + console.error('❌ Failed to build builders:', err.message); + process.exit(1); +} diff --git a/build/post-setup.cjs b/build/post-setup.cjs index 6d62b3b8fc..fc1f0e0e29 100644 --- a/build/post-setup.cjs +++ b/build/post-setup.cjs @@ -21,7 +21,9 @@ function error(message) { function runScript(scriptName, scriptPath) { log(`Running ${scriptName}...`); try { - execSync(`sh -c 'mv ${scriptPath} ${scriptPath.replace('.js', '.cjs')} 2>/dev/null || true && node ${scriptPath.replace('.js', '.cjs')} && mv ${scriptPath.replace('.js', '.cjs')} ${scriptPath} 2>/dev/null || true'`, { + // Use the cross-platform wrapper script + const wrapperScript = path.join(ROOT_DIR, 'build', 'run-script-cjs.cjs'); + execSync(`node "${wrapperScript}" "${scriptPath}"`, { cwd: ROOT_DIR, stdio: 'inherit' }); diff --git a/build/run-script-cjs.cjs b/build/run-script-cjs.cjs new file mode 100644 index 0000000000..716b2c7f1f --- /dev/null +++ b/build/run-script-cjs.cjs @@ -0,0 +1,61 @@ +#!/usr/bin/env node +/** + * Cross-platform script runner for .js files that need to run as .cjs + * Usage: node build/run-script-cjs.js + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +const scriptPath = process.argv[2]; + +if (!scriptPath) { + console.error('Error: No script path provided'); + console.error('Usage: node build/run-script-cjs.js '); + process.exit(1); +} + +const absolutePath = path.resolve(scriptPath); +const cjsPath = absolutePath.replace(/\.js$/, '.cjs'); +let renamed = false; + +try { + // Rename .js to .cjs if needed + if (fs.existsSync(absolutePath) && absolutePath !== cjsPath) { + try { + fs.renameSync(absolutePath, cjsPath); + renamed = true; + } catch (e) { + // If rename fails, try to use the file as-is + console.warn(`Warning: Could not rename ${absolutePath} to ${cjsPath}`); + } + } + + // Run the script + const targetScript = renamed || fs.existsSync(cjsPath) ? cjsPath : absolutePath; + execSync(`node "${targetScript}"`, { + stdio: 'inherit', + cwd: process.cwd() + }); + +} catch (err) { + // Rename back before exiting with error + if (renamed && fs.existsSync(cjsPath)) { + try { + fs.renameSync(cjsPath, absolutePath); + } catch (e) { + // Ignore + } + } + process.exit(err.status || 1); +} finally { + // Rename back to .js + if (renamed && fs.existsSync(cjsPath)) { + try { + fs.renameSync(cjsPath, absolutePath); + } catch (e) { + console.warn(`Warning: Could not rename ${cjsPath} back to ${absolutePath}`); + } + } +} diff --git a/bun.lock b/bun.lock index d64941752c..83643980da 100644 --- a/bun.lock +++ b/bun.lock @@ -1,6 +1,5 @@ { "lockfileVersion": 1, - "configVersion": 0, "workspaces": { "": { "name": "stratos", diff --git a/justfile b/justfile new file mode 100644 index 0000000000..d07b2427d1 --- /dev/null +++ b/justfile @@ -0,0 +1,307 @@ +# Stratos Justfile - Simple, Powerful, Cross-Platform +# Usage: just + +# Configure shell for Windows PowerShell +set windows-shell := ["powershell.exe", "-NoLogo", "-Command"] + +# Version management +VERSION := env_var_or_default('VERSION', "dev") +BUILD_DATE := "" +GIT_COMMIT := "" + +# Colors for output (ANSI escape codes - may not display in all terminals) +# Use Write-Host in PowerShell for better color support +BLUE := "" +GREEN := "" +YELLOW := "" +RED := "" +CYAN := "" +NC := "" + +# Platform detection (works on Windows, Linux, and macOS) +PLATFORM := if os() == "linux" { "linux" } else if os() == "macos" { "darwin" } else { "windows" } +ARCH := if arch() == "x86_64" { "amd64" } else if arch() == "aarch64" { "arm64" } else { arch() } +CURRENT_PLATFORM := PLATFORM + "-" + ARCH + +# Cross-compilation platforms (space-separated string) +PLATFORMS := "linux-amd64 linux-arm64 darwin-amd64 darwin-arm64 windows-amd64 windows-arm64" + +# Directories +DIST_DIR := "dist" +RELEASE_DIR := DIST_DIR + "/release" +BIN_DIR := DIST_DIR + "/bin" + +# +# default +# +help: + @Write-Host "╔════════════════════════════════════════════════════════════╗" -ForegroundColor Blue; \ + Write-Host "║ Stratos Build System (v5.0.0 ) ║" -ForegroundColor Blue; \ + Write-Host "╚════════════════════════════════════════════════════════════╝" -ForegroundColor Blue; \ + Write-Host ""; \ + Write-Host "📦 Setup:" -ForegroundColor Cyan; \ + Write-Host " just install Install all dependencies (bootstrap automatic!)"; \ + Write-Host ""; \ + Write-Host "🚀 Development:" -ForegroundColor Cyan; \ + Write-Host " just dev-frontend Start frontend dev server (https://127.0.0.1:5440)"; \ + Write-Host " just dev-backend Start backend dev server"; \ + Write-Host " just dev-restart Quick rebuild and restart backend"; \ + Write-Host ""; \ + Write-Host "🔨 Building:" -ForegroundColor Cyan; \ + Write-Host " just build Build frontend + backend ({{CURRENT_PLATFORM}})"; \ + Write-Host " just build-frontend Build frontend only (production)"; \ + Write-Host " just build-backend Build backend only ({{CURRENT_PLATFORM}})"; \ + Write-Host " just build-backend-all Build backend for all 6 platforms"; \ + Write-Host ""; \ + Write-Host "🧪 Testing:" -ForegroundColor Cyan; \ + Write-Host " just test Run all tests"; \ + Write-Host " just test-unit Run unit tests (Vitest)"; \ + Write-Host " just test-e2e Run E2E tests (Playwright)"; \ + Write-Host " just lint Run linters"; \ + Write-Host ""; \ + Write-Host "📦 Release:" -ForegroundColor Cyan; \ + Write-Host " just release VERSION=v5.0.0 Create production release"; \ + Write-Host " just release-candidate VERSION=v5.0.0-rc.1 Create RC"; \ + Write-Host " just package Package current build"; \ + Write-Host ""; \ + Write-Host "🔒 Security:" -ForegroundColor Cyan; \ + Write-Host " just security Run all security scans"; \ + Write-Host " just gosec Run gosec security scanner"; \ + Write-Host " just trivy Run trivy vulnerability scanner"; \ + Write-Host " just vuln Run govulncheck"; \ + Write-Host ""; \ + Write-Host "🧹 Cleanup:" -ForegroundColor Cyan; \ + Write-Host " just clean Remove build artifacts"; \ + Write-Host " just clean-dev Remove development artifacts"; \ + Write-Host " just clean-deep Remove everything (including node_modules)"; \ + Write-Host ""; \ + Write-Host "🎯 Quick Start:" -ForegroundColor Cyan; \ + Write-Host " git clone stratos && cd stratos"; \ + Write-Host " just install # Bootstrap happens automatically!"; \ + Write-Host " just dev-frontend # Terminal 1"; \ + Write-Host " just dev-backend # Terminal 2"; \ + Write-Host " # Visit https://127.0.0.1:5440"; \ + Write-Host ""; \ + Write-Host "Current platform: {{CURRENT_PLATFORM}} | Version: {{VERSION}}" -ForegroundColor Yellow; \ + Write-Host "" + +# +# Setup +# +install: + @Write-Host "📦 Installing dependencies..." -ForegroundColor Blue; \ + Write-Host "Note: Bootstrap happens automatically via preinstall hook" -ForegroundColor Yellow + bun install + @Write-Host "✅ Dependencies installed!" -ForegroundColor Green; \ + Write-Host ""; \ + Write-Host "Next steps:" -ForegroundColor Cyan; \ + Write-Host " just dev-frontend # Start development"; \ + Write-Host " just build # Build for production" + +# Legacy bootstrap target (deprecated) +bootstrap: + @Write-Host "⚠️ Bootstrap is no longer required!" -ForegroundColor Yellow; \ + Write-Host "Just run: just install" -ForegroundColor Cyan; \ + Write-Host ""; \ + Write-Host "The bootstrap process now happens automatically during 'bun install'"; \ + Write-Host "via the preinstall hook (build/ensure-devkit.cjs)" + +# +# Building +# +build: build-frontend build-backend + @Write-Host "✅ Full build complete (frontend + backend)" -ForegroundColor Green + +build-frontend: + @Write-Host "🔨 Building frontend (production)..." -ForegroundColor Blue + bun run build + @Write-Host "✅ Frontend built" -ForegroundColor Green + +build-frontend-dev: + @Write-Host "🔨 Building frontend (development)..." -ForegroundColor Blue + bun run build-dev + @Write-Host "✅ Frontend built (dev mode)" -ForegroundColor Green + +build-backend: + @Write-Host "🔨 Building backend for {{CURRENT_PLATFORM}}..." -ForegroundColor Blue + node build-backend.cjs + @Write-Host "✅ Backend built: dist/bin/jetstream" -ForegroundColor Green +# Cross-platform directory dependency for BIN_DIR + +build-backend-all: + @Write-Host "🔨 Building backend for all 6 platforms..." -ForegroundColor Blue + @if (Test-Path build/cross-compile.sh) { sh build/cross-compile.sh "{{VERSION}}" "{{BUILD_DATE}}" "{{GIT_COMMIT}}" } else { Write-Host "cross-compile.sh not found" -ForegroundColor Yellow } + @Write-Host "✅ All platform binaries built in {{BIN_DIR}}/" -ForegroundColor Green + +# +# Development +# +dev-frontend: + @Write-Host "🚀 Starting frontend dev server..." -ForegroundColor Blue; \ + Write-Host "╔════════════════════════════════════════════════════════════╗" -ForegroundColor Cyan; \ + Write-Host "║ Frontend Dev Server ║" -ForegroundColor Cyan; \ + Write-Host "╠════════════════════════════════════════════════════════════╣" -ForegroundColor Cyan; \ + Write-Host "║ URL: https://127.0.0.1:5440 ║" -ForegroundColor Cyan; \ + Write-Host "║ Source Maps: ✅ Enabled ║" -ForegroundColor Cyan; \ + Write-Host "║ Hot Reload: ✅ Enabled ║" -ForegroundColor Cyan; \ + Write-Host "║ SSL/WSS: ✅ Enabled ║" -ForegroundColor Cyan; \ + Write-Host "║ API Proxy: → https://127.0.0.1:5443 ║" -ForegroundColor Cyan; \ + Write-Host "╚════════════════════════════════════════════════════════════╝" -ForegroundColor Cyan; \ + Write-Host "" + bun run start + +dev-backend: + @Write-Host "🚀 Starting backend dev server..." -ForegroundColor Blue + @if (!(Test-Path {{BIN_DIR}}/jetstream)) { \ + Write-Host "⚠️ Backend not built, building now..." -ForegroundColor Yellow; \ + just build-backend \ + } + @Write-Host "╔════════════════════════════════════════════════════════════╗" -ForegroundColor Cyan; \ + Write-Host "║ Jetstream Backend API ║" -ForegroundColor Cyan; \ + Write-Host "╠════════════════════════════════════════════════════════════╣" -ForegroundColor Cyan; \ + Write-Host "║ URL: https://127.0.0.1:5443 ║" -ForegroundColor Cyan; \ + Write-Host "║ API: /pp/* and /api/* ║" -ForegroundColor Cyan; \ + Write-Host "║ Admin User: admin/admin ║" -ForegroundColor Cyan; \ + Write-Host "║ CORS: ✅ Enabled for dev ║" -ForegroundColor Cyan; \ + Write-Host "╚════════════════════════════════════════════════════════════╝" -ForegroundColor Cyan; \ + Write-Host "" + cd src/jetstream && ../../{{BIN_DIR}}/jetstream + +dev-restart: + @Write-Host "🔄 Quick rebuild and restart..." -ForegroundColor Blue + @just build-backend + @Write-Host ""; \ + Write-Host "✅ Backend rebuilt!" -ForegroundColor Green; \ + Write-Host "Restart 'just dev-backend' to use new version" -ForegroundColor Yellow + +# Alias for compatibility +dev-full-build: build-backend + @Write-Host "✅ Backend built!" -ForegroundColor Green; \ + Write-Host ""; \ + Write-Host "Next steps:" -ForegroundColor Cyan; \ + Write-Host " Terminal 1: just dev-frontend"; \ + Write-Host " Terminal 2: just dev-backend" + +# +# Testing +# +test: test-unit + @Write-Host "✅ All tests passed!" -ForegroundColor Green + +test-unit: + @Write-Host "🧪 Running unit tests (Vitest)..." -ForegroundColor Blue + bun run test + @Write-Host "✅ Unit tests complete" -ForegroundColor Green + +test-e2e: + @Write-Host "🧪 Running E2E tests (Playwright)..." -ForegroundColor Blue + bun run e2e + @Write-Host "✅ E2E tests complete" -ForegroundColor Green + +lint: + @Write-Host "🔍 Running linters..." -ForegroundColor Blue + bun run lint + cd src/jetstream && go fmt ./... && go vet ./... + @Write-Host "✅ Linting complete" -ForegroundColor Green + +# +# Security +# +security: gosec trivy vuln + @Write-Host "✅ All security checks complete" -ForegroundColor Green + +install-tools: + @Write-Host "🔧 Installing security tools..." -ForegroundColor Blue + @go install github.com/securego/gosec/v2/cmd/gosec@latest + @go install golang.org/x/vuln/cmd/govulncheck@latest + @Write-Host "Note: Install trivy from https://github.com/aquasecurity/trivy" -ForegroundColor Yellow; \ + Write-Host "✅ Tool installation complete" -ForegroundColor Green + +gosec: + @Write-Host "🔒 Running gosec security scanner..." -ForegroundColor Blue + @if (!(Get-Command gosec -ErrorAction SilentlyContinue)) { Write-Host "gosec not installed. Run 'just install-tools'" -ForegroundColor Red; exit 1 } + @cd src/jetstream; if ($?) { gosec -quiet -fmt json -out gosec-report.json ./... }; if ($?) { gosec -quiet ./... } + @Write-Host "✅ Gosec scan complete" -ForegroundColor Green + +trivy: + @Write-Host "🔒 Running trivy vulnerability scanner..." -ForegroundColor Blue + @if (!(Get-Command trivy -ErrorAction SilentlyContinue)) { Write-Host "trivy not installed. Run 'just install-tools'" -ForegroundColor Red; exit 1 } + @trivy fs --security-checks vuln,config src/jetstream + @Write-Host "✅ Trivy scan complete" -ForegroundColor Green + +vuln: + @Write-Host "🔒 Running govulncheck..." -ForegroundColor Blue + @if (!(Get-Command govulncheck -ErrorAction SilentlyContinue)) { Write-Host "govulncheck not installed. Run 'just install-tools'" -ForegroundColor Red; exit 1 } + @cd src/jetstream; if ($?) { govulncheck ./... } + @Write-Host "✅ Govulncheck complete" -ForegroundColor Green + +# +# Release Management +# +release: verify-version + @Write-Host "📦 Creating release {{VERSION}}..." -ForegroundColor Blue + @just build + @just build-backend-all + @just package + @if (Test-Path build/create-checksums.sh) { sh build/create-checksums.sh "{{VERSION}}" } + @if (Test-Path build/create-git-tag.sh) { sh build/create-git-tag.sh "{{VERSION}}" } + @Write-Host ""; \ + Write-Host "✅ Release {{VERSION}} complete!" -ForegroundColor Green; \ + Write-Host "Artifacts in: {{RELEASE_DIR}}" -ForegroundColor Cyan; \ + Write-Host ""; \ + Write-Host "Next steps:" -ForegroundColor Yellow; \ + Write-Host " 1. Test release archives"; \ + Write-Host " 2. Push tag: git push origin {{VERSION}}"; \ + Write-Host " 3. Create GitHub release: gh release create {{VERSION}} {{RELEASE_DIR}}/*" + +release-candidate: verify-version + @Write-Host "📦 Creating release candidate {{VERSION}}..." -ForegroundColor Blue + @just build + @just build-backend-all + @just package + @if (Test-Path build/create-checksums.sh) { sh build/create-checksums.sh "{{VERSION}}" } + @Write-Host "✅ Release candidate {{VERSION}} complete!" -ForegroundColor Green + +package: + @Write-Host "📦 Packaging release archives..." -ForegroundColor Blue + @if (!(Test-Path build/package.sh)) { \ + Write-Host "❌ build/package.sh not found" -ForegroundColor Red; \ + Write-Host "This will be created in Phase 3" -ForegroundColor Yellow; \ + exit 0 \ + } + @sh build/package.sh "{{VERSION}}" + @Write-Host "✅ Archives created" -ForegroundColor Green + +verify-version: + @if ("{{VERSION}}" -eq "") { \ + Write-Host "❌ VERSION not set" -ForegroundColor Red; \ + exit 1 \ + } + @if ("{{VERSION}}" -notmatch '^v[0-9]+\.[0-9]+\.[0-9]+(-[a-z0-9\.]+)?$') { \ + Write-Host "❌ Invalid version format: {{VERSION}}" -ForegroundColor Red; \ + Write-Host "Expected: vMAJOR.MINOR.PATCH[-PRERELEASE]"; \ + exit 1 \ + } + @Write-Host "✅ Version {{VERSION}} validated" -ForegroundColor Green + +# +# Cleanup +# +clean: + @Write-Host "🧹 Cleaning build artifacts..." -ForegroundColor Blue + @Remove-Item -Recurse -Force -ErrorAction SilentlyContinue {{DIST_DIR}}, .angular, dist-devkit + @Remove-Item -Force -ErrorAction SilentlyContinue src/jetstream/jetstream, src/jetstream/jetstream.exe, src/jetstream/jetstream.darwin + @Write-Host "✅ Clean complete" -ForegroundColor Green + +clean-dev: + @Write-Host "🧹 Cleaning development artifacts..." -ForegroundColor Blue + @Remove-Item -Recurse -Force -ErrorAction SilentlyContinue {{DIST_DIR}}, .angular + @Remove-Item -Force -ErrorAction SilentlyContinue src/jetstream/jetstream, src/jetstream/jetstream.darwin + @Write-Host "✅ Development artifacts cleaned" -ForegroundColor Green + +clean-deep: clean + @Write-Host "🧹 Deep clean (including node_modules)..." -ForegroundColor Blue + @Remove-Item -Recurse -Force -ErrorAction SilentlyContinue node_modules + @Get-ChildItem -Path src/frontend/packages -Directory | ForEach-Object { Remove-Item -Recurse -Force -ErrorAction SilentlyContinue (Join-Path $_.FullName "node_modules") } + @Write-Host "✅ Deep clean complete" -ForegroundColor Green; \ + Write-Host "Run 'just install' to reinstall dependencies" -ForegroundColor Yellow diff --git a/package-lock.json b/package-lock.json index 526c8dd542..20a5fc2dfd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25959,8 +25959,7 @@ "rxjs": "^7.8.2" }, "devDependencies": { - "@types/node": "^24.2.1", - "typescript": "~5.8.3" + "@types/node": "^24.2.1" } }, "tools/builders/prebuild-application/node_modules/glob": { diff --git a/package.json b/package.json index 192ccac56b..c8c7e98f6c 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "build-cf": "ng build stratos --configuration production", "prebuild-dev": "node build/build-orchestrator.js", "build-dev": "ng build stratos --configuration development", - "build-builders": "cd tools/builders/prebuild-application && bun install && bun run build && mkdir -p ../../node_modules/@stratos/builders && cp -r dist ../../node_modules/@stratos/builders/", + "build-builders": "node build/build-builders.cjs", "prebuild-ui": "bun run build && bun run prebuild-zip", "prebuild-zip": "node build/prebuild-zip.js", "pre-build-only": "node build/build-orchestrator.js", @@ -74,11 +74,11 @@ "e2e:report": "playwright show-report e2e-reports/html", "climate": "codeclimate analyze $(git diff --name-only master)", "gate-check": "bun run lint && bun run test-headless", - "store-git-metadata": "sh -c 'mv build/store-git-metadata.js build/store-git-metadata.cjs 2>/dev/null || true && node build/store-git-metadata.cjs && mv build/store-git-metadata.cjs build/store-git-metadata.js 2>/dev/null || true'", + "store-git-metadata": "node build/run-script-cjs.cjs build/store-git-metadata.js", "build-devkit": "cd src/frontend/packages/devkit && bun run build", - "clean-symlinks": "sh -c 'mv build/clean-symlinks.js build/clean-symlinks.cjs 2>/dev/null || true && node build/clean-symlinks.cjs && mv build/clean-symlinks.cjs build/clean-symlinks.js 2>/dev/null || true'", - "dev-setup": "sh -c 'mv build/dev-setup.js build/dev-setup.cjs 2>/dev/null || true && node build/dev-setup.cjs && mv build/dev-setup.cjs build/dev-setup.js 2>/dev/null || true'", - "prepare-backend": "sh -c 'mv dist-devkit/backend.js dist-devkit/backend.cjs 2>/dev/null || true && node dist-devkit/backend.cjs && mv dist-devkit/backend.cjs dist-devkit/backend.js 2>/dev/null || true'" + "clean-symlinks": "node build/run-script-cjs.cjs build/clean-symlinks.js", + "dev-setup": "node build/run-script-cjs.cjs build/dev-setup.js", + "prepare-backend": "node build/run-script-cjs.cjs dist-devkit/backend.js" }, "author": "", "license": "Apache-2.0", diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.html b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.html index a5cc0fb451..cc01507ac6 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.html +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.html @@ -1,7 +1,7 @@

Manage AutoScaler Credentials: {{ (applicationService.application$ | async)?.app.entity.name }}

-
@@ -12,7 +12,7 @@

Manage AutoScaler Credentials: {{ (applicationService.application$ | async)? add_box

Create

-
+

Credentials are required when submitting custom metrics to the autoscaler. They can either be randomly generated or supplied.

@@ -84,7 +84,7 @@

Create

delete

Delete

-
+

Delete the last credentials that were created. diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.html b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.html index a87a15a864..32b770ccd3 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.html +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.html @@ -12,7 +12,7 @@

Rule {{index+1}}:

-
+
@if (editIndex!=index) {
If average {{rule.metric_type}} {{rule.operator}} {{rule.threshold}} diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.html b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.html index 87d1d0608c..b9da466e28 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.html +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.html @@ -12,7 +12,7 @@

Schedule {{index+1}}:

-
+
@if (editIndex!=index) {
@if (rule.initial_min_instance_count) { diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.html b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.html index c8da27da1c..ae78fca5d4 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.html +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.html @@ -12,7 +12,7 @@

Schedule {{index+1}}:

-
+
@if (editIndex!=index) {
@if (rule.initial_min_instance_count) { diff --git a/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.html b/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.html index d1ccb83ccf..bec6c6aa8e 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.html +++ b/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.html @@ -2,7 +2,7 @@

Instances

-
+
diff --git a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.html b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.html index 1c9079c2c7..2ff9756558 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.html +++ b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.html @@ -9,7 +9,7 @@

-
+
Applications @if (haveConnectedCf$ | async) {
- diff --git a/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.html b/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.html index 4867c733f5..7d382c31a6 100644 --- a/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.html +++ b/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.html @@ -3,7 +3,7 @@

Services

@if ((haveConnectedCf$ | async)) { - diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html index af2cf56eed..8451be640a 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html @@ -1,7 +1,7 @@
-

Instances

+

Instances

@if (!isEditing) { diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.html b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.html index 593f6e8964..5557878818 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.html +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.html @@ -1,7 +1,7 @@
-

Status

+

Status

diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.html b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.html index 9b695e3cf5..1f6278751b 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.html +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.html @@ -4,7 +4,7 @@
-

Uptime

+

Uptime

{{ appData.maxUptime | uptime }}
@@ -21,7 +21,7 @@

Uptime

-

Application is not running

+

Application is not running

diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.html b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.html index 91a7f84591..f6a35e123b 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.html +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.html @@ -1,7 +1,7 @@
-

Summary

+

Summary