103 lines
3.2 KiB
JavaScript
Executable File
103 lines
3.2 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
||
import { readFileSync, existsSync } from 'node:fs';
|
||
import { join, dirname, resolve } from 'node:path';
|
||
import { fileURLToPath } from 'node:url';
|
||
|
||
const __filename = fileURLToPath(import.meta.url);
|
||
const __dirname = dirname(__filename);
|
||
|
||
// Get context from command line argument or environment
|
||
const context = process.argv[2] || process.env.GITHUB_WORKFLOW || 'manual';
|
||
|
||
function findRootDir(startDir) {
|
||
let currentDir = resolve(startDir);
|
||
while (currentDir !== '/') {
|
||
if (existsSync(join(currentDir, 'package.json'))) {
|
||
try {
|
||
const pkg = JSON.parse(
|
||
readFileSync(join(currentDir, 'package.json'), 'utf8')
|
||
);
|
||
if (pkg.name === 'task-master-ai' || pkg.repository) {
|
||
return currentDir;
|
||
}
|
||
} catch {}
|
||
}
|
||
currentDir = dirname(currentDir);
|
||
}
|
||
throw new Error('Could not find root directory');
|
||
}
|
||
|
||
function checkPreReleaseMode() {
|
||
console.log('🔍 Checking if branch is in pre-release mode...');
|
||
|
||
const rootDir = findRootDir(__dirname);
|
||
const preJsonPath = join(rootDir, '.changeset', 'pre.json');
|
||
|
||
// Check if pre.json exists
|
||
if (!existsSync(preJsonPath)) {
|
||
console.log('✅ Not in active pre-release mode - safe to proceed');
|
||
process.exit(0);
|
||
}
|
||
|
||
try {
|
||
// Read and parse pre.json
|
||
const preJsonContent = readFileSync(preJsonPath, 'utf8');
|
||
const preJson = JSON.parse(preJsonContent);
|
||
|
||
// Check if we're in active pre-release mode
|
||
if (preJson.mode === 'pre') {
|
||
console.error('❌ ERROR: This branch is in active pre-release mode!');
|
||
console.error('');
|
||
|
||
// Provide context-specific error messages
|
||
if (context === 'Release Check' || context === 'pull_request') {
|
||
console.error(
|
||
'Pre-release mode must be exited before merging to main.'
|
||
);
|
||
console.error('');
|
||
console.error(
|
||
'To fix this, run the following commands in your branch:'
|
||
);
|
||
console.error(' npx changeset pre exit');
|
||
console.error(' git add -u');
|
||
console.error(' git commit -m "chore: exit pre-release mode"');
|
||
console.error(' git push');
|
||
console.error('');
|
||
console.error('Then update this pull request.');
|
||
} else if (context === 'Release' || context === 'main') {
|
||
console.error(
|
||
'Pre-release mode should only be used on feature branches, not main.'
|
||
);
|
||
console.error('');
|
||
console.error('To fix this, run the following commands locally:');
|
||
console.error(' npx changeset pre exit');
|
||
console.error(' git add -u');
|
||
console.error(' git commit -m "chore: exit pre-release mode"');
|
||
console.error(' git push origin main');
|
||
console.error('');
|
||
console.error('Then re-run this workflow.');
|
||
} else {
|
||
console.error('Pre-release mode must be exited before proceeding.');
|
||
console.error('');
|
||
console.error('To fix this, run the following commands:');
|
||
console.error(' npx changeset pre exit');
|
||
console.error(' git add -u');
|
||
console.error(' git commit -m "chore: exit pre-release mode"');
|
||
console.error(' git push');
|
||
}
|
||
|
||
process.exit(1);
|
||
}
|
||
|
||
console.log('✅ Not in active pre-release mode - safe to proceed');
|
||
process.exit(0);
|
||
} catch (error) {
|
||
console.error(`❌ ERROR: Unable to parse .changeset/pre.json – aborting.`);
|
||
console.error(`Error details: ${error.message}`);
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
// Run the check
|
||
checkPreReleaseMode();
|