const glob = require('glob'); const semver = require('semver'); const { execSync } = require('child_process'); const path = require('path'); function getLatestVersion(files) { console.log('Files passed to getLatestVersion:', files); const versions = files.map(file => { const match = file.match(/@([\d\.]+)-/); console.log('Matching file:', file, 'Version found:', match ? match[1] : 'None'); if (!match) return null; const fullVersion = match[1]; // Original version (e.g., 3.4.5.1) const semverVersion = fullVersion.split('.').slice(0, 3).join('.'); // Trim to 3.4.5 return { fullVersion, semverVersion }; }).filter(Boolean); console.log('Extracted versions:', versions.map(v => v.semverVersion)); // Find latest version using the trimmed semver format const latestSemver = semver.maxSatisfying(versions.map(v => v.semverVersion), '*'); console.log('Latest SemVer-compatible version:', latestSemver); // Get the full version that matches the latest SemVer version const latestVersion = versions.find(v => v.semverVersion === latestSemver)?.fullVersion || null; console.log('Final selected latest version:', latestVersion); return latestVersion; } function getLatestFiles(browser) { const pattern = `dist/betterseqtaplus@*-*${browser}.zip`; console.log('Glob pattern:', pattern); const files = glob.sync(pattern); console.log('Files found for browser', browser, ':', files); const latestVersion = getLatestVersion(files); // Find the exact file by matching the original full version const latestFile = files.find(file => file.includes(`@${latestVersion}-`)); console.log('Latest file for browser', browser, ':', latestFile); return latestFile; } function zipSources() { const zipFileName = `dist/betterseqtaplus@latest-sources.zip`; const excludePatterns = [ 'node_modules', 'dist', '.env*', '.git', '.github', '.vscode', 'LICENSE', 'package.json' ].map(pattern => `-x!${pattern}`).join(' '); const zipCommand = `7z a ${zipFileName} . ${excludePatterns}`; console.log('Zipping project sources with command:', zipCommand); execSync(zipCommand, { stdio: 'inherit' }); return zipFileName; } function runPublishCommand(browsers) { const chromeZip = browsers.includes('chrome') ? getLatestFiles('chrome') : null; const firefoxZip = browsers.includes('firefox') ? getLatestFiles('firefox') : null; const firefoxSourcesZip = browsers.includes('firefox') ? zipSources() : null; console.log('Chrome zip:', chromeZip); console.log('Firefox zip:', firefoxZip); console.log('Firefox sources zip:', firefoxSourcesZip); if (browsers.length === 0) { console.log('No browsers specified. Exiting.'); process.exit(0); } if ((browsers.includes('chrome') && !chromeZip) || (browsers.includes('firefox') && (!firefoxZip || !firefoxSourcesZip))) { console.error('Could not find required zip files for specified browsers.'); process.exit(1); } let command = 'publish-extension'; if (chromeZip) { command += ` --chrome-zip ${chromeZip}`; } if (firefoxZip && firefoxSourcesZip) { command += ` --firefox-zip ${firefoxZip} --firefox-sources-zip ${firefoxSourcesZip}`; } console.log('Running command:', command); execSync(command, { stdio: 'inherit' }); } // Parse command-line arguments const args = process.argv.slice(2); const browserIndex = args.indexOf('--b'); const browsers = browserIndex !== -1 ? args.slice(browserIndex + 1) : []; runPublishCommand(browsers);