mirror of https://github.com/aminya/setup-cpp
fix: fix parsing of gcc version on macos + sort gcc exes
This commit is contained in:
parent
c2e0936c40
commit
bd9b386672
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -21,6 +21,7 @@ import { type InstallationInfo, type PackageInfo, setupBin } from "../utils/setu
|
|||
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
|
||||
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
|
||||
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
|
||||
import { compareVersion } from "../utils/setup/version.js"
|
||||
|
||||
async function getGccPackageInfo(version: string, platform: NodeJS.Platform, arch: string): Promise<PackageInfo> {
|
||||
switch (platform) {
|
||||
|
@ -284,7 +285,13 @@ async function getGccCmdVersion(binDir: string, givenVersion: string) {
|
|||
gccExe = `${binDir}/gcc`
|
||||
} else {
|
||||
// try to find the gcc exe in the bin dir
|
||||
const files = await readdir(binDir)
|
||||
const files = (await readdir(binDir)).sort(
|
||||
(exe1, exe2) => {
|
||||
const version1 = exe1.match(/^gcc-?(.*)(\.exe)?$/)?.[1] || ""
|
||||
const version2 = exe2.match(/^gcc-?(.*)(\.exe)?$/)?.[1] || ""
|
||||
return compareVersion(version1, version2)
|
||||
},
|
||||
)
|
||||
for (const file of files) {
|
||||
if (file.startsWith("gcc")) {
|
||||
gccExe = `${binDir}/${file}`
|
||||
|
@ -295,7 +302,11 @@ async function getGccCmdVersion(binDir: string, givenVersion: string) {
|
|||
|
||||
const { stdout: versionStdout } = await execa(gccExe, ["--version"], { stdio: "pipe" })
|
||||
|
||||
const versionMatch = (versionStdout as string).match(/gcc \(.*\) ([\d.]+)/)
|
||||
// gcc-11 (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
|
||||
// gcc-12 (Homebrew GCC 12.4.0) 12.4.0
|
||||
// gcc (Ubuntu 13.1.0-8ubuntu1~22.04) 13.1.0
|
||||
|
||||
const versionMatch = (versionStdout as string).match(/gcc.* \(.*\) ([\d.]+)/)
|
||||
|
||||
if (versionMatch !== null) {
|
||||
return versionMatch[1]
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import { Octokit } from "@octokit/rest"
|
||||
import { writeFile } from "fs/promises"
|
||||
import JsonStringify from "safe-stable-stringify"
|
||||
import { type Assets, compareTag } from "./load-assets.ts"
|
||||
import { compareVersion } from "../setup/version.ts"
|
||||
import type { Assets } from "./load-assets.ts"
|
||||
|
||||
/**
|
||||
* Get the list of all releases of a GitHub repository
|
||||
|
@ -70,7 +71,7 @@ export async function saveGitHubAssetList(
|
|||
const assets = await fetchGitHubAssetList(owner, repo)
|
||||
|
||||
const jsonStringify = JsonStringify.configure({
|
||||
deterministic: compareTag,
|
||||
deterministic: compareVersion,
|
||||
})
|
||||
const data = jsonStringify(assets)
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { readFile } from "fs/promises"
|
||||
import coerce from "semver/functions/coerce.js"
|
||||
|
||||
/**
|
||||
* The list of assets of a GitHub release
|
||||
|
@ -8,18 +7,6 @@ import coerce from "semver/functions/coerce.js"
|
|||
*/
|
||||
export type Assets = Record<string, string[]>
|
||||
|
||||
export function compareTag(tag1: string, tag2: string) {
|
||||
const v1 = coerce(tag1)
|
||||
const v2 = coerce(tag2)
|
||||
if (v1 !== null && v2 !== null) {
|
||||
// put the latest version first
|
||||
return v2.compare(v1)
|
||||
}
|
||||
|
||||
// if the tags are not semver, compare them as strings, putting the latest tag first
|
||||
return tag2.localeCompare(tag1)
|
||||
}
|
||||
|
||||
export async function loadGitHubAssetList(path: string): Promise<Assets> {
|
||||
const data = await readFile(path, "utf-8")
|
||||
return JSON.parse(data)
|
||||
|
|
|
@ -147,3 +147,15 @@ export function addVPrefix(version: string) {
|
|||
}
|
||||
return version
|
||||
}
|
||||
|
||||
export function compareVersion(tag1: string, tag2: string) {
|
||||
const v1 = semverCoerce(tag1)
|
||||
const v2 = semverCoerce(tag2)
|
||||
if (v1 !== null && v2 !== null) {
|
||||
// put the latest version first
|
||||
return v2.compare(v1)
|
||||
}
|
||||
|
||||
// if the tags are not semver, compare them as strings, putting the latest tag first
|
||||
return tag2.localeCompare(tag1)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue