Compare commits

...

4 Commits

Author SHA1 Message Date
jkunz 9823b580bb v2.19.8
Default (tags) / security (push) Failing after 0s
Default (tags) / test (push) Failing after 0s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-06-06 07:38:49 +00:00
jkunz 2c34cca1a8 fix(tools): stream package update rows 2026-06-06 07:34:26 +00:00
jkunz 0d05df8591 v2.19.7
Default (tags) / security (push) Failing after 0s
Default (tags) / test (push) Failing after 0s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2026-06-05 17:08:20 +00:00
jkunz ae91c8f23d fix(tools): use pnpm update for global self updates 2026-06-05 17:03:16 +00:00
5 changed files with 83 additions and 15 deletions
+15
View File
@@ -1,5 +1,20 @@
# Changelog
## 2026-06-06 - 2.19.8
### Fixes
- stream `gitzone tools update` package rows while fetching versions
- Prints each installed package row as soon as its latest version lookup completes.
## 2026-06-05 - 2.19.7
### Fixes
- make global tool self-updates verify and use pnpm's update path
- Uses `pnpm update -g <package> --latest` before falling back to install for latest-version updates.
- Verifies installed package versions through `pnpm list -g` so pnpm v11 hash roots are handled correctly.
## 2026-06-05 - 2.19.6
### Fixes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@git.zone/cli",
"private": false,
"version": "2.19.6",
"version": "2.19.8",
"description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
+1 -1
View File
@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@git.zone/cli',
version: '2.19.6',
version: '2.19.8',
description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
}
+46 -3
View File
@@ -425,14 +425,48 @@ export class PackageManagerUtil {
return false;
}
const packageSpecifier = `${packageName}@${version}`;
console.log(` Installing ${packageSpecifier} via pnpm...`);
let effectiveVersion = version;
if (version === "latest") {
const latestVersion = await this.getLatestMatureVersion(packageName);
console.log(` Updating ${packageName} via pnpm...`);
try {
const updateResult = await this.shell.exec(
`${pnpmCommand} update -g ${shellQuote(packageName)} --latest`,
);
const installedVersion = await this.getCurrentInstalledPackageVersion(
packageName,
);
if (
updateResult.exitCode === 0 &&
installedVersion &&
(!latestVersion || installedVersion === latestVersion)
) {
return true;
}
} catch {
// Missing globals need an add instead of update.
}
effectiveVersion = latestVersion || version;
}
const packageSpecifier = `${packageName}@${effectiveVersion}`;
console.log(` Installing ${packageSpecifier} via pnpm...`);
try {
const result = await this.shell.exec(
`${pnpmCommand} add -g ${shellQuote(packageSpecifier)}`,
);
return result.exitCode === 0;
if (result.exitCode !== 0) {
return false;
}
if (effectiveVersion === "latest") {
return true;
}
const installedVersion = await this.getCurrentInstalledPackageVersion(
packageName,
);
return installedVersion === effectiveVersion;
} catch {
return false;
}
@@ -636,6 +670,15 @@ export class PackageManagerUtil {
return Array.from(packageMap.values());
}
private async getCurrentInstalledPackageVersion(
packageName: string,
): Promise<string | null> {
const installedPackage = (await this.getCurrentInstalledPackages()).find(
(packageInfo) => packageInfo.name === packageName,
);
return installedPackage?.version || null;
}
private async inspectGlobalRoot(
globalDir: string,
current: boolean,
+20 -10
View File
@@ -86,14 +86,17 @@ async function runUpdate(argvArg: any, mode: ICliMode): Promise<void> {
}
const installedPackages = await pmUtil.getInstalledPackages();
const packageInfos = await getPackageUpdateInfos(pmUtil, installedPackages);
const managedInstalledPackages = installedPackages.filter((packageInfo) =>
GITZONE_PACKAGES.includes(packageInfo.name),
);
let packageInfos: IPackageUpdateInfo[] = [];
const legacyRoots = await pmUtil.getLegacyGlobalRoots();
const legacyCleanupRoots = legacyRoots.filter(
(legacyRoot) => legacyRoot.safeToDelete,
);
const legacyCleanupNeeded = legacyCleanupRoots.length > 0;
if (packageInfos.length === 0) {
if (managedInstalledPackages.length === 0) {
console.log("No managed @git.zone packages found installed globally.");
} else {
console.log("Installed @git.zone packages:\n");
@@ -103,11 +106,11 @@ async function runUpdate(argvArg: any, mode: ICliMode): Promise<void> {
console.log(
" ------------------------------------------------------------",
);
for (const packageInfo of packageInfos) {
console.log(
` ${packageInfo.name.padEnd(28)}${packageInfo.currentVersion.padEnd(12)}${packageInfo.latestVersion.padEnd(12)}${getPackageStatus(packageInfo)}`,
);
}
packageInfos = await getPackageUpdateInfos(
pmUtil,
managedInstalledPackages,
true,
);
console.log("");
await printMissingPackages(pmUtil, installedPackages);
@@ -328,7 +331,7 @@ async function handleSelfUpdate(
return false;
}
const success = await pmUtil.installLatest("@git.zone/cli", latestVersion);
const success = await pmUtil.installLatest("@git.zone/cli");
if (!success) {
console.log(
"\ngitzone self-update failed. Continuing with the current version.\n",
@@ -347,6 +350,7 @@ async function handleSelfUpdate(
async function getPackageUpdateInfos(
pmUtil: PackageManagerUtil,
installedPackages: IInstalledPackage[],
logRows = false,
): Promise<IPackageUpdateInfo[]> {
const packageInfos: IPackageUpdateInfo[] = [];
for (const installedPackage of installedPackages) {
@@ -356,7 +360,7 @@ async function getPackageUpdateInfos(
const latestVersion = await pmUtil.getLatestMatureVersion(
installedPackage.name,
);
packageInfos.push({
const packageInfo: IPackageUpdateInfo = {
name: installedPackage.name,
currentVersion: installedPackage.version,
latestVersion: latestVersion || "unknown",
@@ -365,7 +369,13 @@ async function getPackageUpdateInfos(
: false,
needsMigration: installedPackage.legacy === true,
globalDir: installedPackage.globalDir,
});
};
packageInfos.push(packageInfo);
if (logRows) {
console.log(
` ${packageInfo.name.padEnd(28)}${packageInfo.currentVersion.padEnd(12)}${packageInfo.latestVersion.padEnd(12)}${getPackageStatus(packageInfo)}`,
);
}
}
return packageInfos;
}