52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
const fetch = require('node-fetch')
|
|
const fs = require('fs')
|
|
const util = require('util')
|
|
const streamPipeline = util.promisify(require('stream').pipeline)
|
|
|
|
async function download (url, opts, path) {
|
|
const response = await fetch(url, opts)
|
|
if (!response.ok) throw new Error(`unexpected response ${response.statusText}`)
|
|
await streamPipeline(response.body, fs.createWriteStream(path))
|
|
}
|
|
|
|
const install = async () => {
|
|
// get github token
|
|
const token = process.env.GITHUB_TOKEN
|
|
if (!token) {
|
|
throw new Error("Missing token")
|
|
}
|
|
|
|
// get version from package.json
|
|
let packageJson = JSON.parse(fs.readFileSync('package.json'))
|
|
let version = packageJson.dependencies['@budibase/pro']
|
|
if (version.startsWith('^')) {
|
|
version = version.substring(1)
|
|
}
|
|
const ghVersion = `v${version}`
|
|
|
|
// get the package url
|
|
// TODO: Add semver support
|
|
// TODO: Potentially can use yarn to download directly from github if pro becomes a non monorepo
|
|
const resp = await fetch(`https://api.github.com/repos/budibase/budibase-pro/releases`, {
|
|
headers: {
|
|
Authorization: `token ${token}`,
|
|
Accept: "application/vnd.github.v3.raw"
|
|
}
|
|
})
|
|
|
|
if (!resp.ok) {
|
|
throw new Error("Failed to get release info. Aborting")
|
|
}
|
|
const releases = await resp.json()
|
|
const release = releases.filter(r => r.name === ghVersion)[0]
|
|
const url = release.assets.filter(a => a.name === "pro.zip")[0].url
|
|
|
|
console.log("Downloading pro package")
|
|
// download the package
|
|
await download(url, { headers: { Authorization: `token ${token}`, Accept: 'application/octet-stream' }}, './pro.zip')
|
|
}
|
|
|
|
install().catch(e => {
|
|
console.error(e)
|
|
process.exit(1)
|
|
}) |