Compare commits
2 Commits
chore/fix.
...
task-maste
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0d1d03f33 | ||
|
|
4a4bca905d |
72
.github/scripts/tag-extension.mjs
vendored
72
.github/scripts/tag-extension.mjs
vendored
@@ -1,15 +1,37 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import { spawnSync } from 'node:child_process';
|
import { spawnSync } from 'node:child_process';
|
||||||
import { readFileSync } from 'node:fs';
|
import { readFileSync, existsSync } from 'node:fs';
|
||||||
import { join, dirname } from 'node:path';
|
import { join, dirname, resolve } from 'node:path';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = dirname(__filename);
|
const __dirname = dirname(__filename);
|
||||||
|
|
||||||
|
// Find the root directory by looking for package.json
|
||||||
|
function findRootDir(startDir) {
|
||||||
|
let currentDir = resolve(startDir);
|
||||||
|
while (currentDir !== '/') {
|
||||||
|
if (existsSync(join(currentDir, 'package.json'))) {
|
||||||
|
// Verify it's the root package.json by checking for expected fields
|
||||||
|
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');
|
||||||
|
}
|
||||||
|
|
||||||
|
const rootDir = findRootDir(__dirname);
|
||||||
|
|
||||||
// Read the extension's package.json
|
// Read the extension's package.json
|
||||||
const extensionDir = join(__dirname, '..', 'apps', 'extension');
|
const extensionDir = join(rootDir, 'apps', 'extension');
|
||||||
const pkgPath = join(extensionDir, 'package.json');
|
const pkgPath = join(extensionDir, 'package.json');
|
||||||
|
|
||||||
let pkg;
|
let pkg;
|
||||||
@@ -22,7 +44,7 @@ try {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read root package.json for repository info
|
// Read root package.json for repository info
|
||||||
const rootPkgPath = join(__dirname, '..', 'package.json');
|
const rootPkgPath = join(rootDir, 'package.json');
|
||||||
let rootPkg;
|
let rootPkg;
|
||||||
try {
|
try {
|
||||||
const rootPkgContent = readFileSync(rootPkgPath, 'utf8');
|
const rootPkgContent = readFileSync(rootPkgPath, 'utf8');
|
||||||
@@ -40,13 +62,47 @@ assert(rootPkg.repository, 'root package.json must have a repository field');
|
|||||||
const tag = `${pkg.name}@${pkg.version}`;
|
const tag = `${pkg.name}@${pkg.version}`;
|
||||||
|
|
||||||
// Get repository URL from root package.json
|
// Get repository URL from root package.json
|
||||||
const repoUrl = rootPkg.repository.url;
|
// Get repository URL and clean it up for git ls-remote
|
||||||
|
let repoUrl = rootPkg.repository.url || rootPkg.repository;
|
||||||
|
if (typeof repoUrl === 'string') {
|
||||||
|
// Convert git+https://github.com/... to https://github.com/...
|
||||||
|
repoUrl = repoUrl.replace(/^git\+/, '');
|
||||||
|
// Ensure it ends with .git for proper remote access
|
||||||
|
if (!repoUrl.endsWith('.git')) {
|
||||||
|
repoUrl += '.git';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const { status, stdout, error } = spawnSync('git', ['ls-remote', repoUrl, tag]);
|
console.log(`Checking remote repository: ${repoUrl} for tag: ${tag}`);
|
||||||
|
|
||||||
assert.equal(status, 0, error);
|
let gitResult = spawnSync('git', ['ls-remote', repoUrl, tag], {
|
||||||
|
encoding: 'utf8',
|
||||||
|
env: { ...process.env }
|
||||||
|
});
|
||||||
|
|
||||||
const exists = String(stdout).trim() !== '';
|
if (gitResult.status !== 0) {
|
||||||
|
console.error('Git ls-remote failed:');
|
||||||
|
console.error('Exit code:', gitResult.status);
|
||||||
|
console.error('Error:', gitResult.error);
|
||||||
|
console.error('Stderr:', gitResult.stderr);
|
||||||
|
console.error('Command:', `git ls-remote ${repoUrl} ${tag}`);
|
||||||
|
|
||||||
|
// For CI environments, try using origin instead of the full URL
|
||||||
|
if (process.env.CI) {
|
||||||
|
console.log('Retrying with origin remote...');
|
||||||
|
gitResult = spawnSync('git', ['ls-remote', 'origin', tag], {
|
||||||
|
encoding: 'utf8'
|
||||||
|
});
|
||||||
|
|
||||||
|
if (gitResult.status !== 0) {
|
||||||
|
throw new Error(`Failed to check remote for tag ${tag}. Exit code: ${gitResult.status}`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new Error(`Failed to check remote for tag ${tag}. Exit code: ${gitResult.status}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const exists = String(gitResult.stdout).trim() !== '';
|
||||||
|
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
console.log(`Creating new extension tag: ${tag}`);
|
console.log(`Creating new extension tag: ${tag}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user