mirror of
https://github.com/plebbit/seedit.git
synced 2026-06-14 02:56:04 -04:00
111 lines
4.1 KiB
JavaScript
111 lines
4.1 KiB
JavaScript
// download the ipfs binaries before building the electron clients
|
|
|
|
import fs from 'fs-extra'
|
|
import ProgressBar from 'progress'
|
|
import https from 'https'
|
|
import decompress from 'decompress'
|
|
import path from 'path'
|
|
import {fileURLToPath} from 'url'
|
|
const ipfsClientsPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'bin')
|
|
const ipfsClientWindowsPath = path.join(ipfsClientsPath, 'win')
|
|
const ipfsClientMacPath = path.join(ipfsClientsPath, 'mac')
|
|
const ipfsClientLinuxPath = path.join(ipfsClientsPath, 'linux')
|
|
|
|
// plebbit kubu download links https://github.com/plebbit/kubo/releases
|
|
// const ipfsClientVersion = '0.20.0'
|
|
// const ipfsClientWindowsUrl = `https://github.com/plebbit/kubo/releases/download/v${ipfsClientVersion}/ipfs-windows-amd64`
|
|
// const ipfsClientMacUrl = `https://github.com/plebbit/kubo/releases/download/v${ipfsClientVersion}/ipfs-darwin-amd64`
|
|
// const ipfsClientLinuxUrl = `https://github.com/plebbit/kubo/releases/download/v${ipfsClientVersion}/ipfs-linux-amd64`
|
|
|
|
// official kubo download links https://docs.ipfs.tech/install/command-line/#install-official-binary-distributions
|
|
const ipfsClientVersion = '0.28.0'
|
|
const ipfsClientWindowsUrl = `https://dist.ipfs.io/kubo/v${ipfsClientVersion}/kubo_v${ipfsClientVersion}_windows-amd64.zip`
|
|
const ipfsClientMacUrl = `https://dist.ipfs.io/kubo/v${ipfsClientVersion}/kubo_v${ipfsClientVersion}_darwin-amd64.tar.gz`
|
|
const ipfsClientLinuxUrl = `https://dist.ipfs.io/kubo/v${ipfsClientVersion}/kubo_v${ipfsClientVersion}_linux-amd64.tar.gz`
|
|
|
|
const downloadWithProgress = (url) =>
|
|
new Promise((resolve) => {
|
|
const split = url.split('/')
|
|
const fileName = split[split.length - 1]
|
|
const chunks = []
|
|
const req = https.request(url)
|
|
req.on('response', (res) => {
|
|
// handle redirects
|
|
if (res.statusCode == 301 || res.statusCode === 302) {
|
|
resolve(downloadWithProgress(res.headers.location))
|
|
return
|
|
}
|
|
|
|
const len = parseInt(res.headers['content-length'], 10)
|
|
console.log()
|
|
const bar = new ProgressBar(` ${fileName} [:bar] :rate/bps :percent :etas`, {
|
|
complete: '=',
|
|
incomplete: ' ',
|
|
width: 20,
|
|
total: len,
|
|
})
|
|
res.on('data', (chunk) => {
|
|
chunks.push(chunk)
|
|
bar.tick(chunk.length)
|
|
})
|
|
res.on('end', () => {
|
|
console.log('\n')
|
|
resolve(Buffer.concat(chunks))
|
|
})
|
|
})
|
|
req.end()
|
|
})
|
|
|
|
// plebbit kubo downloads dont need to be extracted
|
|
const download = async (url, destinationPath) => {
|
|
let binName = 'ipfs'
|
|
if (destinationPath.endsWith('win')) {
|
|
binName += '.exe'
|
|
}
|
|
const binPath = path.join(destinationPath, binName)
|
|
// already downloaded, don't download again
|
|
if (fs.pathExistsSync(binPath)) {
|
|
return
|
|
}
|
|
const split = url.split('/')
|
|
const fileName = split[split.length - 1]
|
|
const dowloadPath = path.join(destinationPath, fileName)
|
|
const file = await downloadWithProgress(url)
|
|
fs.ensureDirSync(destinationPath)
|
|
await fs.writeFile(binPath, file)
|
|
}
|
|
|
|
// official kubo downloads need to be extracted
|
|
const downloadAndExtract = async (url, destinationPath) => {
|
|
let binName = 'ipfs'
|
|
if (destinationPath.endsWith('win')) {
|
|
binName += '.exe'
|
|
}
|
|
const binPath = path.join(destinationPath, binName)
|
|
if (fs.pathExistsSync(binPath)) {
|
|
return
|
|
}
|
|
const split = url.split('/')
|
|
const fileName = split[split.length - 1]
|
|
const dowloadPath = path.join(destinationPath, fileName)
|
|
const file = await downloadWithProgress(url)
|
|
fs.ensureDirSync(destinationPath)
|
|
await fs.writeFile(dowloadPath, file)
|
|
await decompress(dowloadPath, destinationPath)
|
|
const extractedPath = path.join(destinationPath, 'kubo')
|
|
const extractedBinPath = path.join(extractedPath, binName)
|
|
fs.moveSync(extractedBinPath, binPath)
|
|
fs.removeSync(extractedPath)
|
|
fs.removeSync(dowloadPath)
|
|
}
|
|
|
|
export const downloadIpfsClients = async () => {
|
|
await downloadAndExtract(ipfsClientWindowsUrl, ipfsClientWindowsPath)
|
|
await downloadAndExtract(ipfsClientMacUrl, ipfsClientMacPath)
|
|
await downloadAndExtract(ipfsClientLinuxUrl, ipfsClientLinuxPath)
|
|
}
|
|
|
|
export default async (context) => {
|
|
await downloadIpfsClients()
|
|
}
|