Fix centos image for arm64

This commit is contained in:
Asher 2020-03-04 10:31:59 -06:00
parent cc139acfd1
commit 308a84e6ec
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
3 changed files with 47 additions and 49 deletions

View File

@ -1,29 +1,23 @@
FROM centos:7 FROM centos:7
RUN yum update -y \ RUN yum update -y && yum install -y \
&& yum install -y epel-release centos-release-scl \ devtoolset-6 \
&& yum-config-manager --enable rhel-server-rhscl-7-rpms \ gcc-c++ \
&& yum update -y \ xz \
&& yum install -y \ ccache \
devtoolset-6 \ git \
gcc-c++ \ wget \
xz \ openssl \
ccache \ libxkbfile-devel \
git \ libsecret-devel \
wget \ libx11-devel
openssl \
libxkbfile-devel \
libsecret-devel \
libx11-devel
RUN mkdir /usr/share/node && cd /usr/share/node \ RUN mkdir /usr/share/node && cd /usr/share/node \
&& curl https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-x64.tar.xz | tar xJ --strip-components=1 -- && curl "https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-$(uname -m | sed 's/86_//; s/aarch/arm/').tar.xz" | tar xJ --strip-components=1 --
ENV PATH "$PATH:/usr/share/node/bin" ENV PATH "$PATH:/usr/share/node/bin"
RUN npm install -g yarn RUN npm install -g yarn
RUN curl -L https://github.com/mvdan/sh/releases/download/v3.0.1/shfmt_v3.0.1_linux_amd64 > /usr/local/bin/shfmt \ RUN curl -L "https://github.com/mvdan/sh/releases/download/v3.0.1/shfmt_v3.0.1_linux_$(uname -m | sed 's/x86_/amd/; s/aarch64/arm/')" > /usr/local/bin/shfmt \
&& chmod +x /usr/local/bin/shfmt && chmod +x /usr/local/bin/shfmt
RUN echo 'source /opt/rh/devtoolset-6/enable' >> /root/.bashrc
ENTRYPOINT ["/bin/bash", "-c"] ENTRYPOINT ["/bin/bash", "-c"]

View File

@ -194,8 +194,8 @@ export class UpdateHttpProvider extends HttpProvider {
} }
} }
public async downloadAndApplyUpdate(update: Update, targetPath?: string, target?: string): Promise<void> { public async downloadAndApplyUpdate(update: Update, targetPath?: string): Promise<void> {
const releaseName = await this.getReleaseName(update, target) const releaseName = await this.getReleaseName(update)
const url = this.downloadUrl.replace("{{VERSION}}", update.version).replace("{{RELEASE_NAME}}", releaseName) const url = this.downloadUrl.replace("{{VERSION}}", update.version).replace("{{RELEASE_NAME}}", releaseName)
let downloadPath = path.join(tmpdir, "updates", releaseName) let downloadPath = path.join(tmpdir, "updates", releaseName)
@ -298,7 +298,8 @@ export class UpdateHttpProvider extends HttpProvider {
/** /**
* Given an update return the name for the packaged archived. * Given an update return the name for the packaged archived.
*/ */
private async getReleaseName(update: Update, target: string = os.platform()): Promise<string> { public async getReleaseName(update: Update): Promise<string> {
let target: string = os.platform()
if (target === "linux") { if (target === "linux") {
const result = await util const result = await util
.promisify(cp.exec)("ldd --version") .promisify(cp.exec)("ldd --version")

View File

@ -2,6 +2,7 @@ import zip from "adm-zip"
import * as assert from "assert" import * as assert from "assert"
import * as fs from "fs-extra" import * as fs from "fs-extra"
import * as http from "http" import * as http from "http"
import * as os from "os"
import * as path from "path" import * as path from "path"
import * as tar from "tar-fs" import * as tar from "tar-fs"
import * as zlib from "zlib" import * as zlib from "zlib"
@ -65,7 +66,20 @@ describe("update", () => {
} }
before(async () => { before(async () => {
const archiveName = "code-server-9999999.99999.9999-linux-x86_64" await new Promise((resolve, reject) => {
server.on("error", reject)
server.on("listening", resolve)
server.listen({
port: 0,
host: "localhost",
})
})
const p = provider()
const archiveName = (await p.getReleaseName({ version: "9999999.99999.9999", checked: 0 })).replace(
/.tar.gz$|.zip$/,
"",
)
await fs.remove(path.join(tmpdir, "tests/updates")) await fs.remove(path.join(tmpdir, "tests/updates"))
await fs.mkdirp(path.join(archivePath, archiveName)) await fs.mkdirp(path.join(archivePath, archiveName))
@ -74,8 +88,16 @@ describe("update", () => {
fs.writeFile(path.join(archivePath, archiveName, "node"), `NODE BINARY`), fs.writeFile(path.join(archivePath, archiveName, "node"), `NODE BINARY`),
]) ])
await Promise.all([ if (os.platform() === "darwin") {
new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
const zipFile = new zip()
zipFile.addLocalFolder(archivePath)
zipFile.writeZip(archivePath + ".zip", (error) => {
return error ? reject(error) : resolve(error)
})
})
} else {
await new Promise((resolve, reject) => {
const write = fs.createWriteStream(archivePath + ".tar.gz") const write = fs.createWriteStream(archivePath + ".tar.gz")
const compress = zlib.createGzip() const compress = zlib.createGzip()
compress.pipe(write) compress.pipe(write)
@ -86,24 +108,8 @@ describe("update", () => {
write.on("finish", () => { write.on("finish", () => {
resolve() resolve()
}) })
}),
new Promise((resolve, reject) => {
const zipFile = new zip()
zipFile.addLocalFolder(archivePath)
zipFile.writeZip(archivePath + ".zip", (error) => {
return error ? reject(error) : resolve(error)
})
}),
])
await new Promise((resolve, reject) => {
server.on("error", reject)
server.on("listening", resolve)
server.listen({
port: 0,
host: "localhost",
}) })
}) }
}) })
after(() => { after(() => {
@ -205,18 +211,15 @@ describe("update", () => {
assert.equal(`console.log("OLD")`, await fs.readFile(entry, "utf8")) assert.equal(`console.log("OLD")`, await fs.readFile(entry, "utf8"))
// Updating should replace the existing version. // Updating should replace the existing version.
await p.downloadAndApplyUpdate(update, destination, "linux") await p.downloadAndApplyUpdate(update, destination)
assert.equal(`console.log("UPDATED")`, await fs.readFile(entry, "utf8")) assert.equal(`console.log("UPDATED")`, await fs.readFile(entry, "utf8"))
// Should still work if there is no existing version somehow. // Should still work if there is no existing version somehow.
await fs.remove(destination) await fs.remove(destination)
await p.downloadAndApplyUpdate(update, destination, "linux") await p.downloadAndApplyUpdate(update, destination)
assert.equal(`console.log("UPDATED")`, await fs.readFile(entry, "utf8")) assert.equal(`console.log("UPDATED")`, await fs.readFile(entry, "utf8"))
assert.deepEqual(spy, [ const archiveName = await p.getReleaseName(update)
"/latest", assert.deepEqual(spy, ["/latest", `/download/${version}/${archiveName}`, `/download/${version}/${archiveName}`])
`/download/${version}/code-server-${version}-linux-x86_64.tar.gz`,
`/download/${version}/code-server-${version}-linux-x86_64.tar.gz`,
])
}) })
}) })