Files
gemini-cli/packages/vscode-ide-companion/scripts/check-vscode-release.js

100 lines
2.9 KiB
JavaScript
Executable File

/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { execSync } from 'node:child_process';
function checkRelease() {
try {
// Step 1: Find the commit hash of the last release
const bucketUri = 'gs://gemini-cli-vscode-extension/release/1p/signed';
const gcloudOutput = execSync(
`gcloud storage ls --recursive ${bucketUri}`,
{ encoding: 'utf-8' },
);
const files = gcloudOutput.trim().split('\n');
const vsixFiles = files.filter((file) =>
/signed-gemini-cli-vscode-ide-companion-\d+\.\d+\.\d+-[a-f0-9]{7}\.vsix$/.test(
file,
),
);
if (vsixFiles.length === 0) {
console.error('No .vsix files found in the bucket.');
process.exit(1);
}
vsixFiles.sort();
const latestFile = vsixFiles[vsixFiles.length - 1];
const fileName = latestFile.split('/').pop();
const match =
/signed-gemini-cli-vscode-ide-companion-(\d+\.\d+\.\d+)-([a-f0-9]{7})\.vsix$/.exec(
fileName,
);
if (!match || !match[1] || !match[2]) {
console.error(
`Could not extract version and commit hash from filename: ${fileName}`,
);
process.exit(1);
}
const lastReleaseVersion = match[1];
const lastReleaseCommit = match[2];
// Step 2: Check for new commits
execSync('git fetch origin main', { stdio: 'pipe' });
const gitLog = execSync(
`git log ${lastReleaseCommit}..origin/main --invert-grep --grep="chore(release): bump version to" -- packages/vscode-ide-companion`,
{ encoding: 'utf-8' },
).trim();
// Step 3: Check for dependency changes
const noticesDiff = execSync(
`git diff ${lastReleaseCommit}..origin/main -- packages/vscode-ide-companion/NOTICES.txt`,
{ encoding: 'utf-8' },
).trim();
if (gitLog) {
console.log('\n--- New Commits ---');
console.log(gitLog);
console.log('-------------------');
}
if (noticesDiff) {
console.log('\n--- Dependency Changes ---');
console.log(noticesDiff);
console.log('------------------------');
}
console.log('\n--- Summary ---');
if (gitLog) {
console.log(
'New commits found for `packages/vscode-ide-companion` since last release. A new release is needed.',
);
} else {
console.log(
'No new commits found since last release. No release is necessary.',
);
}
if (noticesDiff) {
console.log(
'Dependencies have changed. The license review form will require extra details.',
);
} else {
console.log('No dependency changes found.');
}
console.log(`Last release version: ${lastReleaseVersion}`);
console.log(`Last release commit hash: ${lastReleaseCommit}`);
console.log('---------------');
} catch (error) {
console.error('Error checking for release:', error.message);
process.exit(1);
}
}
checkRelease();