diff --git a/RELEASE.md b/RELEASE.md index e5243e79..79738e4f 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -20,8 +20,11 @@ Ensure you've followed the instructions in the README.md for building the projec To make a release, bump the version of the package.json: ```bash +git checkout master +git pull upstream master git commit -a -m "Bump package version to " npm install +npm run package npm run upload npm publish ``` diff --git a/bin/get-tarball-name.js b/bin/get-tarball-name.js index 0bcac687..114916c9 100644 --- a/bin/get-tarball-name.js +++ b/bin/get-tarball-name.js @@ -1,11 +1,16 @@ 'use strict'; -var packageRoot = __dirname + '/..'; -var version = require(packageRoot + '/package.json').version; -var platform = process.platform; -var arch = process.arch; -var tarballName = 'libbitcoind-' + version + '-' + platform + '-' + arch + '.tgz'; +function getTarballName() { + var packageRoot = __dirname + '/..'; + var version = require(packageRoot + '/package.json').version; + var platform = process.platform; + var arch = process.arch; + var tarballName = 'libbitcoind-' + version + '-' + platform + '-' + arch + '.tgz'; + return tarballName; +} if (require.main === module) { - process.stdout.write(tarballName); + process.stdout.write(getTarballName()); } + +module.exports = getTarballName; diff --git a/bin/package.js b/bin/package.js new file mode 100644 index 00000000..3410c12f --- /dev/null +++ b/bin/package.js @@ -0,0 +1,58 @@ +'use strict'; + +var exec = require('child_process').exec; +var bindings = require('bindings'); +var chainlib = require('chainlib'); +var log = chainlib.log; + +var packageRoot = bindings.getRoot(bindings.getFileName()); +var binaryPath = bindings({ + path: true, + bindings: 'bitcoind.node' +}); +var relativeBinaryPath = binaryPath.replace(packageRoot + '/', ''); +var tarballName = require('./get-tarball-name')(); + +log.info('Signing binding binary: "' + binaryPath + '"'); + +var signCommand = 'gpg --yes --out ' + binaryPath + '.sig --detach-sig ' + binaryPath; + +var signchild = exec(signCommand, function(error, stdout, stderr) { + if (error) { + throw error; + } + + if (stdout) { + log.info('GPG:', stdout); + } + + if (stderr) { + log.error(stderr); + } + + log.info('Packaging tarball: "' + tarballName + '"'); + + // Create a tarball of both the binding and the signature + var tarCommand = 'tar -C ' + + packageRoot + ' -cvzf ' + + tarballName + ' ' + + relativeBinaryPath + ' ' + + relativeBinaryPath + '.sig'; + + var tarchild = exec(tarCommand, function (error, stdout, stderr) { + + if (error) { + throw error; + } + + if (stdout) { + log.info('Tar:', stdout); + } + + if (stderr) { + log.error(stderr); + } + + }); + +}); diff --git a/bin/upload.js b/bin/upload.js index 3d5a59d2..6bb2f9ac 100644 --- a/bin/upload.js +++ b/bin/upload.js @@ -1,9 +1,10 @@ 'use strict'; var fs = require('fs'); +var AWS = require('aws-sdk'); +var bindings = require('bindings'); var chainlib = require('chainlib'); var log = chainlib.log; -var AWS = require('aws-sdk'); var config = require(process.env.HOME + '/.bitcore-node-upload.json'); @@ -13,65 +14,39 @@ AWS.config.update({ secretAccessKey: config.secretAccessKey }); -var bindings = require('bindings'); var packageRoot = bindings.getRoot(bindings.getFileName()); -var binaryPath = bindings({ - path: true, - bindings: 'bitcoind.node' -}); - -var relativeBinaryPath = binaryPath.replace(packageRoot + '/', ''); -var exec = require('child_process').exec; -var version = require(packageRoot + '/package.json').version; -var platform = process.platform; -var arch = process.arch; -var tarballName = 'libbitcoind-' + version + '-' + platform + '-' + arch + '.tgz'; +var tarballName = require('./get-tarball-name')(); var bucketName = 'bitcore-node'; var url = 'https://' + bucketName + '.s3.amazonaws.com/' + tarballName; +var localPath = packageRoot + '/' + tarballName; -var child = exec('tar -C ' + packageRoot + ' -cvzf ' + tarballName + ' ' + relativeBinaryPath, - function (error, stdout, stderr) { +log.info('Uploading package: ' + localPath); - if (error) { - throw error; - } - - if (stdout) { - log.info('Tar:', stdout); - } - - if (stderr) { - log.error(stderr); - } - - var fileStream = fs.createReadStream(packageRoot + '/' + tarballName); - - fileStream.on('error', function(err) { - if (err) { - throw err; - } - }); - - fileStream.on('open', function() { - - var s3 = new AWS.S3(); - - var params = { - ACL: 'public-read', - Key: tarballName, - Body: fileStream, - Bucket: bucketName - }; - - s3.putObject(params, function(err, data) { - if (err) { - throw err; - } else { - log.info('Successfully uploaded to: ' + url); - } - }); - - }); +var fileStream = fs.createReadStream(localPath); +fileStream.on('error', function(err) { + if (err) { + throw err; } -); +}); + +fileStream.on('open', function() { + + var s3 = new AWS.S3(); + + var params = { + ACL: 'public-read', + Key: tarballName, + Body: fileStream, + Bucket: bucketName + }; + + s3.putObject(params, function(err, data) { + if (err) { + throw err; + } else { + log.info('Successfully uploaded to: ' + url); + } + }); + +}); diff --git a/package.json b/package.json index bfa7be6c..fa7abc50 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "install": "./bin/install", "build": "./bin/build", "clean": "./bin/clean", + "package": "node bin/package.js", "upload": "node bin/upload.js", "start": "node bin/start.js", "test": "NODE_ENV=test mocha --recursive",