Add support for musl and centos
This commit is contained in:
parent
bcdbd90197
commit
a2e0638c6a
@ -7,6 +7,12 @@ matrix:
|
|||||||
include:
|
include:
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: trusty
|
dist: trusty
|
||||||
|
env:
|
||||||
|
- TARGET="centos"
|
||||||
|
- os: linux
|
||||||
|
dist: trusty
|
||||||
|
env:
|
||||||
|
- TARGET="alpine"
|
||||||
- os: osx
|
- os: osx
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libxkbfile-dev
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libxkbfile-dev
|
||||||
|
42
build/platform.ts
Normal file
42
build/platform.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* Script that detects platform name and arch.
|
||||||
|
* Cannot use os.platform() as that won't detect libc version
|
||||||
|
*/
|
||||||
|
import * as cp from "child_process";
|
||||||
|
import * as fs from "fs";
|
||||||
|
import * as os from "os";
|
||||||
|
|
||||||
|
enum Lib {
|
||||||
|
GLIBC,
|
||||||
|
MUSL,
|
||||||
|
}
|
||||||
|
|
||||||
|
const CLIB: Lib | undefined = ((): Lib | undefined => {
|
||||||
|
if (os.platform() !== "linux") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const glibc = cp.spawnSync("getconf", ["GNU_LIBC_VERSION"]);
|
||||||
|
if (glibc.status === 0) {
|
||||||
|
return Lib.GLIBC;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ldd = cp.spawnSync("ldd", ["--version"]);
|
||||||
|
if (ldd.stdout && ldd.stdout.indexOf("musl") !== -1) {
|
||||||
|
return Lib.MUSL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const muslFile = fs.readdirSync("/lib").find((value) => value.startsWith("libc.musl"));
|
||||||
|
if (muslFile) {
|
||||||
|
return Lib.MUSL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Lib.GLIBC;
|
||||||
|
})();
|
||||||
|
|
||||||
|
export const platform = (): NodeJS.Platform | "musl" => {
|
||||||
|
if (CLIB === Lib.MUSL) {
|
||||||
|
return "musl";
|
||||||
|
}
|
||||||
|
|
||||||
|
return os.platform();
|
||||||
|
};
|
@ -2,6 +2,7 @@ import { register, run } from "@coder/runner";
|
|||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import * as fse from "fs-extra";
|
import * as fse from "fs-extra";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
|
import { platform } from "./platform";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import * as zlib from "zlib";
|
import * as zlib from "zlib";
|
||||||
import * as https from "https";
|
import * as https from "https";
|
||||||
@ -180,12 +181,12 @@ register("package", async (runner, releaseTag) => {
|
|||||||
|
|
||||||
const releasePath = path.resolve(__dirname, "../release");
|
const releasePath = path.resolve(__dirname, "../release");
|
||||||
|
|
||||||
const archiveName = `code-server${releaseTag}-${os.platform()}-${os.arch()}`;
|
const archiveName = `code-server${releaseTag}-${platform()}-${os.arch()}`;
|
||||||
const archiveDir = path.join(releasePath, archiveName);
|
const archiveDir = path.join(releasePath, archiveName);
|
||||||
fse.removeSync(archiveDir);
|
fse.removeSync(archiveDir);
|
||||||
fse.mkdirpSync(archiveDir);
|
fse.mkdirpSync(archiveDir);
|
||||||
|
|
||||||
const binaryPath = path.join(__dirname, `../packages/server/cli-${os.platform()}-${os.arch()}`);
|
const binaryPath = path.join(__dirname, `../packages/server/cli-${platform()}-${os.arch()}`);
|
||||||
const binaryDestination = path.join(archiveDir, "code-server");
|
const binaryDestination = path.join(archiveDir, "code-server");
|
||||||
fse.copySync(binaryPath, binaryDestination);
|
fse.copySync(binaryPath, binaryDestination);
|
||||||
fs.chmodSync(binaryDestination, "755");
|
fs.chmodSync(binaryDestination, "755");
|
||||||
|
@ -2,11 +2,13 @@ import { Binary } from "@coder/nbin";
|
|||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
|
import { platform } from "../../../build/platform";
|
||||||
|
|
||||||
const target = `${os.platform()}-${os.arch()}`;
|
const target = `${platform()}-${os.arch()}`;
|
||||||
const rootDir = path.join(__dirname, "..");
|
const rootDir = path.join(__dirname, "..");
|
||||||
const bin = new Binary({
|
const bin = new Binary({
|
||||||
mainFile: path.join(rootDir, "out", "cli.js"),
|
mainFile: path.join(rootDir, "out", "cli.js"),
|
||||||
|
target: platform() === "darwin" ? "darwin" : platform() === "musl" ? "alpine" : "linux",
|
||||||
});
|
});
|
||||||
bin.writeFiles(path.join(rootDir, "build", "**"));
|
bin.writeFiles(path.join(rootDir, "build", "**"));
|
||||||
bin.writeFiles(path.join(rootDir, "out", "**"));
|
bin.writeFiles(path.join(rootDir, "out", "**"));
|
||||||
|
@ -1,4 +1,32 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -euxo pipefail
|
||||||
|
|
||||||
yarn task build:server:binary
|
# Variables to be set:
|
||||||
|
# $IMAGE
|
||||||
|
function docker_build() {
|
||||||
|
containerID=$(docker create -it -v $(pwd)/.cache:/src/.cache $IMAGE)
|
||||||
|
docker start $containerID
|
||||||
|
docker exec $containerID mkdir -p /src
|
||||||
|
|
||||||
|
function exec() {
|
||||||
|
docker exec $containerID bash -c "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
docker cp ./. $containerID:/src
|
||||||
|
exec "cd /src && yarn"
|
||||||
|
exec "cd /src && npm rebuild"
|
||||||
|
exec "cd /src && yarn task build:server:binary"
|
||||||
|
exec "cd /src && yarn task package $VERSION"
|
||||||
|
docker cp $containerID:/src/release/. ./release/
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
yarn task build:server:binary
|
||||||
|
else
|
||||||
|
if [[ "$TARGET" == "alpine" ]]; then
|
||||||
|
IMAGE="codercom/nbin-alpine"
|
||||||
|
else
|
||||||
|
IMAGE="codercom/nbin-centos"
|
||||||
|
fi
|
||||||
|
docker_build
|
||||||
|
fi
|
||||||
|
Reference in New Issue
Block a user