Merge pull request #490 from aminya/apt-upgrade · aminya/setup-cpp@8aaad3b · GitHub
Skip to content

Commit 8aaad3b

Browse files
authored
Merge pull request #490 from aminya/apt-upgrade
feat: allow apt to upgrade packages if available
2 parents af505db + 0f7243c commit 8aaad3b

12 files changed

Lines changed: 146 additions & 38 deletions

File tree

‎.vscode/settings.json‎

Lines changed: 2 additions & 1 deletion

‎dev/docker/ci/ubuntu-mingw.dockerfile‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ FROM aminya/setup-cpp-ubuntu:latest AS setup-cpp-ubuntu-mingw
33
# install mingw/powershell
44
RUN setup-cpp \
55
--compiler mingw \
6+
--gcc true \
67
--powershell true && \
78
# cleanup
89
apt-get clean autoclean && \

‎dev/docker/setup-cpp/setup-cpp-ubuntu-mingw.dockerfile‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ RUN apt-get update -qq && \
1717
--autoreconf true \
1818
--nala true \
1919
--compiler mingw \
20+
--gcc true \
2021
--cmake true \
2122
--ninja true \
2223
--task true \

‎dist/legacy/setup-cpp.js‎

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎dist/legacy/setup-cpp.js.map‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎dist/modern/setup-cpp.mjs‎

Lines changed: 13 additions & 13 deletions
Large diffs are not rendered by default.

‎dist/modern/setup-cpp.mjs.map‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { execaSync } from "execa"
2+
3+
import { getAptEnv } from "../src/apt-env.js"
4+
import { hasAptGet } from "../src/get-apt.js"
5+
import { filterAndQualifyAptPackages } from "../src/qualify-install.js"
6+
7+
function indexedGccVariants() {
8+
try {
9+
const { stdout } = execaSync("apt-cache", ["search", "--names-only", "^gcc-[0-9]+$"], {
10+
env: getAptEnv("apt-get"),
11+
stdio: "pipe",
12+
})
13+
return stdout.split("\n")
14+
.map((line) => line.trim().split(/\s+/u)[0])
15+
.filter((name): name is string => name !== undefined && /^gcc-\d+$/u.test(name))
16+
.sort((first, second) => {
17+
const firstVersion = Number.parseInt(first.slice("gcc-".length), 10)
18+
const secondVersion = Number.parseInt(second.slice("gcc-".length), 10)
19+
return secondVersion - firstVersion
20+
})
21+
} catch {
22+
return []
23+
}
24+
}
25+
26+
describe("filterAndQualifyAptPackages", () => {
27+
if (!hasAptGet()) {
28+
test.skip("filters installed packages", () => {})
29+
return
30+
}
31+
32+
it("filters an installed package when upgrade is disabled", async () => {
33+
await expect(filterAndQualifyAptPackages([{ name: "apt", upgrade: false }])).resolves.toEqual([])
34+
})
35+
36+
it("retains an installed package when upgrade is requested", async () => {
37+
await expect(filterAndQualifyAptPackages([{ name: "apt", upgrade: true }])).resolves.toEqual(["apt"])
38+
})
39+
40+
const gccVariants = indexedGccVariants()
41+
if (gccVariants.length === 0) {
42+
test.skip("resolves the highest indexed gcc-N package", () => {})
43+
return
44+
}
45+
46+
it("resolves an unversioned package to its highest indexed numeric variant", async () => {
47+
await expect(filterAndQualifyAptPackages([{ name: "gcc" }])).resolves.toEqual([gccVariants[0]])
48+
})
49+
})

‎packages/setup-apt/src/install.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ export type AptPackage = {
3030
name: string
3131
/** The version of the package (optional) */
3232
version?: string
33+
/**
34+
* Whether to allow apt to upgrade the latest package available in the default repositories.
35+
* This would could do a major upgrade for unversioned meta packages (e.g. gcc) or minor upgrade for versioned packages (e.g. gcc-9)
36+
*/
37+
upgrade?: boolean
3338
/** The repository to add before installing the package (optional) */
3439
repository?: string
3540
/** The key to add before installing the package (optional) */

‎packages/setup-apt/src/qualify-install.ts‎

Lines changed: 34 additions & 4 deletions

0 commit comments

Comments
 (0)