-
Notifications
You must be signed in to change notification settings - Fork 545
Expand file tree
/
Copy pathlinuxSetup.ts
More file actions
101 lines (85 loc) · 3.42 KB
/
linuxSetup.ts
File metadata and controls
101 lines (85 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import fs from 'fs';
import path from 'path';
import { checkCommandExists } from '../utils/cliUtils';
import { DevSetupHelper, HOME_DIR } from './DevSetupHelper';
import { ANDROID_LINUX_COMMANDLINE_TOOLS } from './versions';
import { wrapInColor } from '../utils/logUtils';
import { ANSI_COLORS } from '../core/constants';
import { execSync } from 'child_process';
const BAZELISK_URL = 'https://github.com/bazelbuild/bazelisk/releases/download/v1.26.0/bazelisk-linux-amd64';
export async function getLinuxPackageManager(): Promise<string | null> {
let pm: string | null = null;
const distro = await fs.promises.readFile('/etc/os-release', 'utf8');
const match = distro.match(/^ID="?([^"\n]*)"?$/m);
const distroToPackageManager: { [key: string]: string } = {
ubuntu: "apt",
fedora: "dnf",
debian: "apt",
arch: "pacman",
linuxmint: "apt",
opensuse: "zypper",
rhel: "dnf",
centos: "dnf",
manjaro: "pacman",
};
if (match && match[1]) {
return distroToPackageManager[match[1]] || null;
} else {
if (checkCommandExists('pacman')) {
pm = 'pacman';
} else if (checkCommandExists('dnf')) {
pm = 'dnf';
} else if (checkCommandExists('yum')) {
pm = 'yum';
} else if (checkCommandExists('apt')) {
pm = 'apt';
}
}
return pm;
}
export async function linuxSetup(): Promise<void> {
const devSetup = new DevSetupHelper();
const pm = await getLinuxPackageManager();
if (pm === "apt") {
await devSetup.runShell('Installing dependencies from apt', [
`sudo apt-get install zlib1g-dev git-lfs watchman libfontconfig-dev adb`,
]);
await devSetup.runShell('Installing libtinfo5', [
`wget https://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb`,
`sudo apt install ./libtinfo5_6.3-2ubuntu0.1_amd64.deb`,
]);
if (!checkCommandExists('java')) {
await devSetup.runShell('Installing Java Runtime Environment', ['sudo apt install default-jre']);
}
} else if (pm === "pacman") {
await devSetup.runShell('Installing dependencies from pacman', [
`sudo pacman -S zlib git-lfs watchman libfontconfig-dev adb`,
]);
try {
execSync("pacman -Q ncurses5-compat-libs", { stdio: 'ignore' });
} catch {
await devSetup.runShell('Installing libtinfo5', [
`git clone https://aur.archlinux.org/ncurses5-compat-libs.git`,
`cd ncurses5-compat-libs`,
`makepkg -sic`,
`cd ..`
]);
}
if (!checkCommandExists('java')) {
await devSetup.runShell('Installing Java Runtime Environment', ['sudo pacman -S jdk17-openjdk']);
}
} else {
console.log(wrapInColor('Unsupported package manager, please install the required dependencies manually:', ANSI_COLORS.RED_COLOR));
console.log(wrapInColor('zlib git-lfs watchman libfontconfig-dev adb libtinfo5 openjdk-17', ANSI_COLORS.RED_COLOR));
console.log()
}
const bazeliskPathSuffix = '.valdi/bin/bazelisk';
const bazeliskTargetPath = path.join(HOME_DIR, bazeliskPathSuffix);
await devSetup.downloadToPath(BAZELISK_URL, bazeliskTargetPath);
// Add executable permission to the downloaded binary
const stats = fs.statSync(bazeliskTargetPath);
fs.chmodSync(bazeliskTargetPath, stats.mode | 0o111);
await devSetup.writeEnvVariablesToRcFile([{ name: 'PATH', value: `"$HOME/.valdi/bin:$PATH"` }]);
await devSetup.setupAndroidSDK(ANDROID_LINUX_COMMANDLINE_TOOLS);
devSetup.onComplete();
}