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
import fs from 'fs'
import path from 'path'
import { spawnSync } from 'child_process'
import zlib from 'zlib'
// Packages
@ -22,21 +23,33 @@ import {
fetch.Promise = Promise
global.Promise = Promise
const now = path.join(__dirname, 'now')
const targetWin32 = path.join(__dirname, 'now.exe')
const target = process.platform === 'win32' ? targetWin32 : now
const partial = target + '.partial'
let { platform } = process
if (detectAlpine()) platform = 'alpine'
const packagePath = path.join(__dirname, '../../package.json')
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 = {
alpine: 'now-alpine',
darwin: 'now-macos',
linux: 'now-linux',
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 {
fs.writeFileSync(
now,
@ -76,7 +89,7 @@ async function main() {
showProgress(0)
try {
const name = platformToName[process.platform]
const name = platformToName[platform]
const url = `https://cdn.zeit.co/releases/now/${packageJSON.version}/${name}`
const resp = await fetch(url, { compress: false })
@ -85,6 +98,11 @@ async function main() {
}
const size = resp.headers.get('content-length')
if (!size) {
throw new Error('Not found (content-length is absent)')
}
const ws = fs.createWriteStream(partial)
await new Promise((resolve, reject) => {
@ -120,8 +138,17 @@ async function main() {
})
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
fs.unlinkSync(now)
// Workaround for https://github.com/npm/cmd-shim/pull/25

Loading…
Cancel
Save