Skip to content

Instantly share code, notes, and snippets.

@mojoaxel
Last active September 3, 2022 13:39
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save mojoaxel/4fa8947905472818a72a97c113b535ae to your computer and use it in GitHub Desktop.
Save mojoaxel/4fa8947905472818a72a97c113b535ae to your computer and use it in GitHub Desktop.
node.js script to install the latest version of zeit/hyper using the debian package

This skript downloads and installs the most recent version of Hyper using last DEP package for linux.

Setup

git clone https://gist.github.com/mojoaxel/4fa8947905472818a72a97c113b535ae update-hyper
cd update-hyper
npm install

Update Hyper

npm run update
{
"name": "hyper-updater",
"version": "1.0.1",
"description": "node.js script to install the latest version of zeit/hyper using the debian package",
"main": "update.js",
"scripts": {
"update": "node update.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Alexander Wunschik <dev@wunschik.net>",
"license": "GPL-3.0",
"dependencies": {
"download": "^6.2.5",
"github": "^11.0.0",
"prettyjson": "^1.2.1",
"progress": "^2.0.0",
"rimraf": "^2.6.2",
"sudo": "^1.0.3",
"temp-dir": "^1.0.0",
"underscore": "^1.8.3"
}
}
const GitHubApi = require("github");
const prettyjson = require('prettyjson');
const _ = require('underscore');
const download = require('download');
const ProgressBar = require('progress');
const tempDir = require('temp-dir');
const path = require('path');
var sudo = require('sudo');
var rimfaf = require('rimraf');
var github = new GitHubApi();
const MAX_VERSION_INDEX = 10;
github.repos.getReleases({
owner: 'zeit',
repo: 'hyper',
page: 1,
per_page: MAX_VERSION_INDEX
}, function(err, res) {
let packageIndex = 0;
let packageFound = false;
while (!packageFound && packageIndex <= res.data.length && packageIndex <= MAX_VERSION_INDEX) {
var debianAsset = _.find(res.data[packageIndex].assets, (asset) => {
return asset && asset.browser_download_url && asset.browser_download_url.endsWith('.deb');
});
packageFound = !!debianAsset;
packageIndex++;
}
if (!packageFound) {
console.error(`No debian package found for the last ${MAX_VERSION_INDEX} versions.`);
process.exit()
}
var filePath = path.join(tempDir, debianAsset.name);
console.log(`Downloading ${filePath}`);
const bar = new ProgressBar('[:bar] :percent :etas', {
complete: '=',
incomplete: ' ',
width: 40,
total: 0
});
download(debianAsset.browser_download_url, tempDir)
.on('response', res => {
bar.total = res.headers['content-length'];
res.on('data', data => bar.tick(data.length));
})
.then(() => {
console.log('Downloaded finished!');
var options = {
cachePassword: true,
prompt: '*** sudo Password: '
};
console.log("Starting installation...");
var child = sudo([ 'dpkg', '-i', filePath ], options);
child.stdout.on('end', function (data) {
console.log("Installed finished");
rimfaf(filePath, () => {
console.log("removed tmp file");
});
});
})
.catch((e) => {
console.error("Error downloading file: ", e);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment