mirror of
https://github.com/atom/atom.git
synced 2026-01-28 00:08:13 -05:00
57 lines
2.3 KiB
JavaScript
57 lines
2.3 KiB
JavaScript
'use strict'
|
|
|
|
const assert = require('assert')
|
|
const downloadFileFromGithub = require('./download-file-from-github')
|
|
const fs = require('fs-extra')
|
|
const path = require('path')
|
|
const semver = require('semver')
|
|
const spawnSync = require('./spawn-sync')
|
|
const syncRequest = require('sync-request')
|
|
|
|
const CONFIG = require('../config')
|
|
|
|
module.exports = function () {
|
|
if (process.platform === 'darwin') {
|
|
// Chromedriver is only distributed with the first patch release for any given
|
|
// major and minor version of electron.
|
|
const electronVersion = semver.parse(CONFIG.appMetadata.electronVersion)
|
|
const electronVersionWithChromedriver = `${electronVersion.major}.${electronVersion.minor}.0`
|
|
const electronAssets = getElectronAssetsForVersion(electronVersionWithChromedriver)
|
|
const chromedriverAssets = electronAssets.filter(e => /chromedriver.*darwin-x64/.test(e.name))
|
|
assert(chromedriverAssets.length === 1, 'Found more than one chrome driver asset to download!')
|
|
const chromedriverAsset = chromedriverAssets[0]
|
|
|
|
const chromedriverZipPath = path.join(CONFIG.electronDownloadPath, `electron-${electronVersionWithChromedriver}-${chromedriverAsset.name}`)
|
|
if (!fs.existsSync(chromedriverZipPath)) {
|
|
downloadFileFromGithub(chromedriverAsset.url, chromedriverZipPath)
|
|
}
|
|
|
|
const chromedriverDirPath = path.join(CONFIG.electronDownloadPath, 'chromedriver')
|
|
unzipPath(chromedriverZipPath, chromedriverDirPath)
|
|
} else {
|
|
console.log('Skipping Chromedriver download because it is used only on macOS'.gray)
|
|
}
|
|
}
|
|
|
|
function getElectronAssetsForVersion (version) {
|
|
const releaseURL = `https://api.github.com/repos/electron/electron/releases/tags/v${version}`
|
|
const response = syncRequest('GET', releaseURL, {'headers': {'User-Agent': 'Atom Build'}})
|
|
|
|
if (response.statusCode === 200) {
|
|
const release = JSON.parse(response.body)
|
|
return release.assets.map(a => { return {name: a.name, url: a.browser_download_url} })
|
|
} else {
|
|
throw new Error(`Error getting assets for ${releaseURL}. HTTP Status ${response.statusCode}.`)
|
|
}
|
|
}
|
|
|
|
function unzipPath (inputPath, outputPath) {
|
|
if (fs.existsSync(outputPath)) {
|
|
console.log(`Removing "${outputPath}"`)
|
|
fs.removeSync(outputPath)
|
|
}
|
|
|
|
console.log(`Unzipping "${inputPath}" to "${outputPath}"`)
|
|
spawnSync('unzip', [inputPath, '-d', outputPath])
|
|
}
|