From 07c016c595146e4bbe59fdb951982a965fe95cd4 Mon Sep 17 00:00:00 2001 From: Emily Stark Date: Fri, 7 Mar 2014 11:23:54 -0800 Subject: [PATCH] Add publish-for-arch command --- tools/commands.js | 80 ++++++++++++++++++++++++++++++----------- tools/package-client.js | 33 +++++++++++++++-- 2 files changed, 90 insertions(+), 23 deletions(-) diff --git a/tools/commands.js b/tools/commands.js index 576b9424b1..95ef9eb1d0 100644 --- a/tools/commands.js +++ b/tools/commands.js @@ -19,6 +19,7 @@ var utils = require('./utils.js'); var httpHelpers = require('./http-helpers.js'); var archinfo = require('./archinfo.js'); var tropohouse = require('./tropohouse.js'); +var packages = require('./packages.js'); // Given a site name passed on the command line (eg, 'mysite'), return // a fully-qualified hostname ('mysite.meteor.com'). @@ -1486,28 +1487,9 @@ main.registerCommand({ conn.call('publishPackageVersion', uploadInfo.uploadToken, bundleResult.tarballHash); - process.stdout.write('Creating package build...\n'); - uploadInfo = conn.call('createPackageBuild', { - packageName: pkg.name, - version: version, - architecture: pkg.architectures().join('+') - }); + packageClient.createAndPublishBuiltPackage(conn, pkg, + options.packageDir); - bundleResult = packageClient.bundleBuild(pkg, options.packageDir); - - process.stdout.write('Uploading build...\n'); - packageClient.uploadTarball(uploadInfo.uploadUrl, - bundleResult.buildTarball); - - process.stdout.write('Publishing package build...\n'); - conn.call('publishPackageBuild', - uploadInfo.uploadToken, bundleResult.tarballHash); - - conn.close(); - process.stdout.write('Published ' + pkg.name + - ', version ' + version); - - process.stdout.write('\nDone!\n'); return 0; }); @@ -1528,6 +1510,62 @@ main.registerCommand({ }); }); +main.registerCommand({ + name: 'publish-for-arch', + minArgs: 0, + maxArgs: 0, + options: { + versionString: { type: String, required: true }, + name: { type: String, required: true } + } +}, function (options) { + var cat = release.current.catalog; + if (! cat.getPackage(options.name)) { + process.stderr.write('No package named ' + options.name); + return 1; + } + var pkgVersion = cat.getVersion(options.name, options.versionString); + if (! pkgVersion) { + process.stderr.write('There is no version ' + + options.versionString + ' for package ' + + options.name); + return 1; + } + + if (! pkgVersion.source || ! pkgVersion.source.url) { + process.stderr.write('There is no source uploaded for ' + + options.name + ' ' + options.versionString); + return 1; + } + + var sourceTarball = httpHelpers.getUrl({ + url: pkgVersion.source.url, + encoding: null + }); + var sourcePath = files.mkdtemp(options.name + '-' + + options.versionString + '-source-'); + files.extractTarGz(sourceTarball, sourcePath); + + // XXX Factor out with packageClient.bundleSource so that we don't + // have knowledge of the tarball structure in two places. + var packageDir = path.join(sourcePath, options.name); + + if (! fs.existsSync(packageDir)) { + process.stderr.write('Malformed source tarball'); + return 1; + } + + var pkg = new packages.Package(release.current.library, packageDir); + pkg.initFromPackageDir(options.name, packageDir); + pkg.build(); + pkg.saveAsUnipackage(path.join(packageDir, '.build')); + + var conn = packageClient.loggedInPackagesConnection(); + packageClient.createAndPublishBuiltPackage(conn, pkg, packageDir); + + return 0; +}); + /////////////////////////////////////////////////////////////////////////////// // dummy /////////////////////////////////////////////////////////////////////////////// diff --git a/tools/package-client.js b/tools/package-client.js index 35fb422cee..f747c8dade 100644 --- a/tools/package-client.js +++ b/tools/package-client.js @@ -267,7 +267,7 @@ exports.bundleSource = function (pkg, packageDir) { }; }; -exports.uploadTarball = function (putUrl, tarball) { +var uploadTarball = function (putUrl, tarball) { var size = fs.statSync(tarball).size; var rs = fs.createReadStream(tarball); httpHelpers.request({ @@ -283,7 +283,9 @@ exports.uploadTarball = function (putUrl, tarball) { rs.close(); }; -exports.bundleBuild = function (pkg, packageDir) { +exports.uploadTarball = uploadTarball; + +var bundleBuild = function (pkg, packageDir) { var tempDir = files.mkdtemp('build-package-'); var packageTarName = pkg.name + '-' + pkg.metadata.version + '-' + pkg.architectures().join('+'); @@ -307,3 +309,30 @@ exports.bundleBuild = function (pkg, packageDir) { tarballHash: tarballHash }; }; + +exports.bundleBuild = bundleBuild; + +exports.createAndPublishBuiltPackage = function (conn, pkg, packageDir) { + process.stdout.write('Creating package build...\n'); + var uploadInfo = conn.call('createPackageBuild', { + packageName: pkg.name, + version: pkg.metadata.version, + architecture: pkg.architectures().join('+') + }); + + var bundleResult = bundleBuild(pkg, packageDir); + + process.stdout.write('Uploading build...\n'); + uploadTarball(uploadInfo.uploadUrl, + bundleResult.buildTarball); + + process.stdout.write('Publishing package build...\n'); + conn.call('publishPackageBuild', + uploadInfo.uploadToken, bundleResult.tarballHash); + + conn.close(); + process.stdout.write('Published ' + pkg.name + + ', version ' + pkg.metadata.version); + + process.stdout.write('\nDone!\n'); +};