move pi-mono into companion-cloud as apps/companion-os

- Copy all pi-mono source into apps/companion-os/
- Update Dockerfile to COPY pre-built binary instead of downloading from GitHub Releases
- Update deploy-staging.yml to build pi from source (bun compile) before Docker build
- Add apps/companion-os/** to path triggers
- No more cross-repo dispatch needed

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Harivansh Rathi 2026-03-07 09:22:50 -08:00
commit 0250f72976
579 changed files with 206942 additions and 0 deletions

102
scripts/sync-versions.js Normal file
View file

@ -0,0 +1,102 @@
#!/usr/bin/env node
/**
* Syncs ALL @mariozechner/* package dependency versions to match their current versions.
* This ensures lockstep versioning across the monorepo.
*/
import { readFileSync, writeFileSync, readdirSync } from "fs";
import { join } from "path";
const packagesDir = join(process.cwd(), "packages");
const packageDirs = readdirSync(packagesDir, { withFileTypes: true })
.filter((dirent) => dirent.isDirectory())
.map((dirent) => dirent.name);
// Read all package.json files and build version map
const packages = {};
const versionMap = {};
for (const dir of packageDirs) {
const pkgPath = join(packagesDir, dir, "package.json");
try {
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
packages[dir] = { path: pkgPath, data: pkg };
versionMap[pkg.name] = pkg.version;
} catch (e) {
console.error(`Failed to read ${pkgPath}:`, e.message);
}
}
console.log("Current versions:");
for (const [name, version] of Object.entries(versionMap).sort()) {
console.log(` ${name}: ${version}`);
}
// Verify all versions are the same (lockstep)
const versions = new Set(Object.values(versionMap));
if (versions.size > 1) {
console.error("\n❌ ERROR: Not all packages have the same version!");
console.error("Expected lockstep versioning. Run one of:");
console.error(" npm run version:patch");
console.error(" npm run version:minor");
console.error(" npm run version:major");
process.exit(1);
}
console.log("\n✅ All packages at same version (lockstep)");
// Update all inter-package dependencies
let totalUpdates = 0;
for (const [dir, pkg] of Object.entries(packages)) {
let updated = false;
// Check dependencies
if (pkg.data.dependencies) {
for (const [depName, currentVersion] of Object.entries(
pkg.data.dependencies,
)) {
if (versionMap[depName]) {
const newVersion = `^${versionMap[depName]}`;
if (currentVersion !== newVersion) {
console.log(`\n${pkg.data.name}:`);
console.log(` ${depName}: ${currentVersion}${newVersion}`);
pkg.data.dependencies[depName] = newVersion;
updated = true;
totalUpdates++;
}
}
}
}
// Check devDependencies
if (pkg.data.devDependencies) {
for (const [depName, currentVersion] of Object.entries(
pkg.data.devDependencies,
)) {
if (versionMap[depName]) {
const newVersion = `^${versionMap[depName]}`;
if (currentVersion !== newVersion) {
console.log(`\n${pkg.data.name}:`);
console.log(
` ${depName}: ${currentVersion}${newVersion} (devDependencies)`,
);
pkg.data.devDependencies[depName] = newVersion;
updated = true;
totalUpdates++;
}
}
}
}
// Write if updated
if (updated) {
writeFileSync(pkg.path, JSON.stringify(pkg.data, null, "\t") + "\n");
}
}
if (totalUpdates === 0) {
console.log("\nAll inter-package dependencies already in sync.");
} else {
console.log(`\n✅ Updated ${totalUpdates} dependency version(s)`);
}