From 8facd65d0342bf5f437f900519ff718e956a846e Mon Sep 17 00:00:00 2001 From: horihiro Date: Wed, 10 Nov 2021 06:16:46 +0900 Subject: [PATCH 1/4] Add `list --remote` feature --- index.js | 67 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/index.js b/index.js index 9dca74c..3d50e83 100755 --- a/index.js +++ b/index.js @@ -39,23 +39,48 @@ async function main() { const isRemoveCommand = command === 'remove'; if (isListCommand) { - const versions = fs.readdirSync(downloadDir); + const versions = fs.readdirSync(downloadDir).filter(v => /^\d+\.\d+\.\d+/.test(v) && fs.lstatSync(path.join(downloadDir, v)).isDirectory()); const versionFile = path.join(downloadDir, 'funcvm-core-tools-version.txt'); const localVersionFile = path.join(process.cwd(), '.func-version'); let currentVersion, localVersion; if (fs.existsSync(versionFile)) { - currentVersion = fs.readFileSync(versionFile, 'utf8'); + currentVersion = fs.readFileSync(versionFile, 'utf8').trim(); } if (fs.existsSync(localVersionFile)) { - localVersion = fs.readFileSync(localVersionFile, 'utf8'); + localVersion = fs.readFileSync(localVersionFile, 'utf8').trim(); } - for (const version of versions) { - if (/^\d+\.\d+\.\d+/.test(version) && fs.lstatSync(path.join(downloadDir, version)).isDirectory()) { - const tags = []; - currentVersion === version && tags.push('global'); - localVersion === version && tags.push('local'); - console.log(`${version}${tags.length > 0 ? ` (${tags.join(', ')})`: ''}`); + if (args.includes('--remote')) { + const feedResponse = await fetch("https://aka.ms/AAeq1v7"); + const feed = await feedResponse.json(); + const releases = []; + for (const [release, releaseInfo] of Object.entries(feed.releases)) { + const coreTool = releaseInfo.coreTools.find(tools => tools.OS === getPlatform().os); + if (!coreTool) { + continue; + }; + try { + const version = coreTool.downloadLink.match(/\d+\.\d+\.\d+/)[0]; + if (releases.find(r => r.version === version)) { + continue; + }; + const tags = []; + versions.includes(version) && tags.push('installed'); + currentVersion === version && tags.push('global'); + localVersion === version && tags.push('local'); + releases.push({ + version, + tags: `${tags.length > 0 ? ` (${tags.join(', ')})`: ''}` + }) + } catch { } } + console.log(releases.sort((r1, r2) => r1.version >= r2.version ? 1 : -1).map(r => `${r.version}${r.tags}`).join('\n')); + process.exit(0); + } + for (const version of versions) { + const tags = []; + currentVersion === version && tags.push('global'); + localVersion === version && tags.push('local'); + console.log(`${version}${tags.length > 0 ? ` (${tags.join(', ')})`: ''}`); } process.exit(0); } else if (isRemoveCommand && !!version) { @@ -114,18 +139,20 @@ Examples: const releaseCoreTool = release.coreTools.find( tool => tool.OS === platform.os && tool.Architecture === archToFind && tool.size == 'full'); - if (releaseCoreTool) { - tagInfo.coreToolsUrl = releaseCoreTool.downloadLink; - // hack for Windows, there's no x64 in the feed - if (platform.os === 'Windows') { - tagInfo.coreToolsUrl = tagInfo.coreToolsUrl.replace('x86', 'x64'); - } - const match = releaseCoreTool.downloadLink.match(/\/(\d+\.\d+\.\d+)\//); - if (match) { - tagInfo.coreToolsVersion = match[1]; - } - tags[tagName] = tagInfo; + if (!releaseCoreTool) { + continue; + } + tagInfo.coreToolsUrl = releaseCoreTool.downloadLink; + // hack for Windows, there's no x64 in the feed + if (platform.os === 'Windows') { + tagInfo.coreToolsUrl = tagInfo.coreToolsUrl.replace('x86', 'x64'); } + const match = releaseCoreTool.downloadLink.match(/\/(\d+\.\d+\.\d+)\//); + if (match) { + tagInfo.coreToolsVersion = match[1]; + } + tags[tagName] = tagInfo; + } let tag = tags[`v${version}`]; From 1feed8db63919acb1ea403c4a0575ac38e4feb59 Mon Sep 17 00:00:00 2001 From: horihiro Date: Wed, 10 Nov 2021 08:56:28 +0900 Subject: [PATCH 2/4] Fix sorting --- index.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index 3d50e83..99b6a64 100755 --- a/index.js +++ b/index.js @@ -52,28 +52,25 @@ async function main() { if (args.includes('--remote')) { const feedResponse = await fetch("https://aka.ms/AAeq1v7"); const feed = await feedResponse.json(); - const releases = []; - for (const [release, releaseInfo] of Object.entries(feed.releases)) { + const releases = {}; + for (const [, releaseInfo] of Object.entries(feed.releases).sort()) { const coreTool = releaseInfo.coreTools.find(tools => tools.OS === getPlatform().os); if (!coreTool) { continue; }; try { const version = coreTool.downloadLink.match(/\d+\.\d+\.\d+/)[0]; - if (releases.find(r => r.version === version)) { + if (releases[version]) { continue; }; const tags = []; versions.includes(version) && tags.push('installed'); currentVersion === version && tags.push('global'); localVersion === version && tags.push('local'); - releases.push({ - version, - tags: `${tags.length > 0 ? ` (${tags.join(', ')})`: ''}` - }) + releases[version] = `${tags.length > 0 ? ` (${tags.join(', ')})`: ''}`; } catch { } } - console.log(releases.sort((r1, r2) => r1.version >= r2.version ? 1 : -1).map(r => `${r.version}${r.tags}`).join('\n')); + console.log(Object.entries(releases).sort((r1, r2) => r1[0] > r2[0] ? 1 : -1).map(r => r.join(' ')).join('\n')); process.exit(0); } for (const version of versions) { From 676fa3aba9a4e723c994d19db2f80ee776303825 Mon Sep 17 00:00:00 2001 From: horihiro Date: Wed, 10 Nov 2021 16:28:40 +0900 Subject: [PATCH 3/4] Show the version specified by `FUNCVM_CORE_TOOLS_VERSION` as `env` --- index.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 99b6a64..8c548df 100755 --- a/index.js +++ b/index.js @@ -65,8 +65,10 @@ async function main() { }; const tags = []; versions.includes(version) && tags.push('installed'); - currentVersion === version && tags.push('global'); + process.env[constants.versionEnvironmentVariableName] === version && tags.push('env'); localVersion === version && tags.push('local'); + currentVersion === version && tags.push('global'); + !versions.includes(version) && tags.length > 0 && tags.push('not installed'); releases[version] = `${tags.length > 0 ? ` (${tags.join(', ')})`: ''}`; } catch { } } @@ -75,8 +77,9 @@ async function main() { } for (const version of versions) { const tags = []; - currentVersion === version && tags.push('global'); + process.env[constants.versionEnvironmentVariableName] === version && tags.push('env'); localVersion === version && tags.push('local'); + currentVersion === version && tags.push('global'); console.log(`${version}${tags.length > 0 ? ` (${tags.join(', ')})`: ''}`); } process.exit(0); @@ -111,6 +114,9 @@ Examples: List installed versions: funcvm list + List published versions: + funcvm list --remote + Remove an installed version: funcvm remove 4.0.3928\n`); process.exit(0); From 8d4dc767a1fe50a393ede315632c1c22a8fb0dd9 Mon Sep 17 00:00:00 2001 From: horihiro Date: Wed, 10 Nov 2021 18:44:24 +0900 Subject: [PATCH 4/4] fix labeling `installed` --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 8c548df..b76938c 100755 --- a/index.js +++ b/index.js @@ -64,11 +64,11 @@ async function main() { continue; }; const tags = []; - versions.includes(version) && tags.push('installed'); process.env[constants.versionEnvironmentVariableName] === version && tags.push('env'); localVersion === version && tags.push('local'); currentVersion === version && tags.push('global'); !versions.includes(version) && tags.length > 0 && tags.push('not installed'); + versions.includes(version) && tags.length === 0 && tags.push('installed'); releases[version] = `${tags.length > 0 ? ` (${tags.join(', ')})`: ''}`; } catch { } }