Browse Source

Yarn artifacts + fix alpine download (#51)

* backup of binary to be included into yarn artifacts

* fix downloading alpine binary
master
Igor Klopov 7 years ago
committed by Leo Lamprecht
parent
commit
ebd3db90b0
  1. 41
      download/src/index.js

41
download/src/index.js

@ -3,6 +3,7 @@
// Native // Native
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
import { spawnSync } from 'child_process'
import zlib from 'zlib' import zlib from 'zlib'
// Packages // Packages
@ -22,21 +23,33 @@ import {
fetch.Promise = Promise fetch.Promise = Promise
global.Promise = Promise global.Promise = Promise
const now = path.join(__dirname, 'now') let { platform } = process
const targetWin32 = path.join(__dirname, 'now.exe') if (detectAlpine()) platform = 'alpine'
const target = process.platform === 'win32' ? targetWin32 : now
const partial = target + '.partial'
const packagePath = path.join(__dirname, '../../package.json') const packagePath = path.join(__dirname, '../../package.json')
const packageJSON = JSON.parse(fs.readFileSync(packagePath, 'utf8')) const packageJSON = JSON.parse(fs.readFileSync(packagePath, 'utf8'))
const now = path.join(__dirname, 'now')
const targetWin32 = path.join(__dirname, 'now.exe')
const target = platform === 'win32' ? targetWin32 : now
const partial = target + '.partial'
const backup = target + '.' + packageJSON.version + '.backup'
const platformToName = { const platformToName = {
alpine: 'now-alpine',
darwin: 'now-macos', darwin: 'now-macos',
linux: 'now-linux', linux: 'now-linux',
win32: 'now-win.exe' win32: 'now-win.exe'
} }
async function main() { function detectAlpine () {
if (platform !== 'linux') return false
// https://github.com/sass/node-sass/issues/1589#issuecomment-265292579
const ldd = spawnSync('ldd', [ process.execPath ]).stdout.toString()
return /\bmusl\b/.test(ldd)
}
async function download() {
try { try {
fs.writeFileSync( fs.writeFileSync(
now, now,
@ -76,7 +89,7 @@ async function main() {
showProgress(0) showProgress(0)
try { try {
const name = platformToName[process.platform] const name = platformToName[platform]
const url = `https://cdn.zeit.co/releases/now/${packageJSON.version}/${name}` const url = `https://cdn.zeit.co/releases/now/${packageJSON.version}/${name}`
const resp = await fetch(url, { compress: false }) const resp = await fetch(url, { compress: false })
@ -85,6 +98,11 @@ async function main() {
} }
const size = resp.headers.get('content-length') const size = resp.headers.get('content-length')
if (!size) {
throw new Error('Not found (content-length is absent)')
}
const ws = fs.createWriteStream(partial) const ws = fs.createWriteStream(partial)
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
@ -120,8 +138,17 @@ async function main() {
}) })
fs.renameSync(partial, target) fs.renameSync(partial, target)
fs.writeFileSync(backup, fs.readFileSync(target))
}
async function main() {
if (fs.existsSync(backup)) {
fs.writeFileSync(target, fs.readFileSync(backup))
} else {
await download()
}
if (process.platform === 'win32') { if (platform === 'win32') {
// Now.exe is executed only // Now.exe is executed only
fs.unlinkSync(now) fs.unlinkSync(now)
// Workaround for https://github.com/npm/cmd-shim/pull/25 // Workaround for https://github.com/npm/cmd-shim/pull/25

Loading…
Cancel
Save