Skip to content

Commit 15070ee

Browse files
committed
fix: build or download kcov binary based on the ubuntu version
1 parent 8fb789d commit 15070ee

File tree

3 files changed

+54
-30
lines changed

3 files changed

+54
-30
lines changed

src/default_versions.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ const DefaultUbuntuVersion: Record<string, Record<number, string>> = {
6363
16: "legacy",
6464
14: "legacy",
6565
},
66+
kcov: {
67+
22: "40",
68+
20: "40-binary", // https://github.com/SimonKagstrom/kcov/releases
69+
18: "40",
70+
16: "40",
71+
14: "40",
72+
},
6673
}
6774

6875
/** Get the default version if passed true or undefined, otherwise return the version itself */

src/kcov/kcov.ts

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,31 @@ import { addBinExtension } from "../utils/extension/extension"
99
import { extractTarByExe } from "../utils/setup/extract"
1010
import { setupAptPack } from "../utils/setup/setupAptPack"
1111
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
12-
import { PackageInfo, setupBin } from "../utils/setup/setupBin"
12+
import { InstallationInfo, PackageInfo, setupBin } from "../utils/setup/setupBin"
1313
import { isArch } from "../utils/env/isArch"
1414
import { hasDnf } from "../utils/env/hasDnf"
1515
import { setupDnfPack } from "../utils/setup/setupDnfPack"
1616
import { isUbuntu } from "../utils/env/isUbuntu"
17+
import { removeVPrefix } from "../utils/setup/version"
1718

18-
function getKcovPackageInfo(version: string): PackageInfo {
19-
const version_number = parseInt(version.replace(/^v/, ""), 10)
20-
if (version_number === 38) {
21-
// eslint-disable-next-line no-param-reassign
22-
version = "v38"
19+
function getDownloadKcovPackageInfo(version_number: string): PackageInfo {
20+
return {
21+
url: `https://github.com/SimonKagstrom/kcov/releases/download/v${version_number}/kcov-amd64.tar.gz`,
22+
extractedFolderName: "",
23+
binRelativeDir: "usr/local/bin",
24+
binFileName: addBinExtension("kcov"),
25+
extractFunction: extractTarByExe,
2326
}
24-
if (version_number >= 39) {
25-
return {
26-
url: `https://github.com/SimonKagstrom/kcov/releases/download/v${version_number}/kcov-amd64.tar.gz`,
27-
extractedFolderName: "",
28-
binRelativeDir: "usr/local/bin",
29-
binFileName: addBinExtension("kcov"),
30-
extractFunction: extractTarByExe,
31-
}
32-
} else {
33-
return {
34-
url: `https://github.com/SimonKagstrom/kcov/archive/refs/tags/${version}.tar.gz`,
35-
extractedFolderName: `kcov-${version_number}`,
36-
binRelativeDir: "build/",
37-
binFileName: addBinExtension("kcov"),
38-
extractFunction: buildKcov,
39-
}
27+
}
28+
29+
function getBuildKcovPackageInfo(version: string): PackageInfo {
30+
const version_number = removeVPrefix(version)
31+
return {
32+
url: `https://github.com/SimonKagstrom/kcov/archive/refs/tags/${version}.tar.gz`,
33+
extractedFolderName: `kcov-${version_number}`,
34+
binRelativeDir: "build/",
35+
binFileName: addBinExtension("kcov"),
36+
extractFunction: buildKcov,
4037
}
4138
}
4239

@@ -64,16 +61,32 @@ async function buildKcov(file: string, dest: string) {
6461
return out
6562
}
6663

67-
export async function setupKcov(version: string, setupDir: string, arch: string) {
64+
export async function setupKcov(versionGiven: string, setupDir: string, arch: string) {
6865
switch (process.platform) {
6966
case "linux": {
70-
const installationInfo = await setupBin("kcov", version, getKcovPackageInfo, setupDir, arch)
71-
if (isArch()) {
72-
setupPacmanPack("binutils")
73-
} else if (hasDnf()) {
74-
setupDnfPack("binutils")
75-
} else if (isUbuntu()) {
76-
setupAptPack("libbinutils")
67+
// parse version
68+
const versionSplit = versionGiven.split("-")
69+
let version = versionSplit[0]
70+
const installMethod = versionSplit[1] as "binary" | undefined
71+
const version_number = removeVPrefix(version)
72+
// fix inconsistency in tagging
73+
if (version_number === 38) {
74+
version = "v38"
75+
}
76+
77+
let installationInfo: InstallationInfo
78+
if (installMethod === "binary" && version_number >= 39) {
79+
installationInfo = await setupBin("kcov", version, getDownloadKcovPackageInfo, setupDir, arch)
80+
if (isArch()) {
81+
setupPacmanPack("binutils")
82+
} else if (hasDnf()) {
83+
setupDnfPack("binutils")
84+
} else if (isUbuntu()) {
85+
setupAptPack("libbinutils")
86+
}
87+
return installationInfo
88+
} else {
89+
installationInfo = await setupBin("kcov", version, getBuildKcovPackageInfo, setupDir, arch)
7790
}
7891
return installationInfo
7992
}

src/utils/setup/version.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,7 @@ export function semverCoerceIfInvalid(version: string) {
115115
}
116116
return version
117117
}
118+
119+
export function removeVPrefix(version: string) {
120+
return parseInt(version.replace(/^v/, ""), 10)
121+
}

0 commit comments

Comments
 (0)