Skip to content

Commit 860e5b6

Browse files
committed
add autotools tarball support
Fixes: libuv/libuv#1679 PR-URL: #13 Reviewed-By: Ben Noordhuis <[email protected]>
1 parent da4b362 commit 860e5b6

2 files changed

Lines changed: 81 additions & 22 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Command line utility for creating new releases of libuv.
66

77
1. Make sure you have the most up-to-date version of this tool and the libuv
88
branch that will be used to create the release.
9-
2. Currently, the release tool requires Node.js v0.10.x. You may want to use
10-
something like `nvm` to change Node versions.
9+
2. Currently, the release tool requires Node.js v12 or later. You may want to
10+
use something like `nvm` to change Node versions.
1111
3. Run `node ./release.js --version x.x.x --dir path --remote name`, where
1212
`x.x.x` is the version of libuv you are creating, `path` is the location of
1313
the libuv core repository on your machine, and `name` is the libuv core git

release.js

Lines changed: 79 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
var child_process = require('child_process'),
44
format = require('util').format,
55
fs = require('fs'),
6+
os = require('os'),
67
path = require('path'),
78
resolve = require('path').resolve,
89
git = require('./lib/git'),
@@ -31,13 +32,14 @@ var SCHEDULE = [
3132
tagRelease,
3233
addSHASumsToChangeLog,
3334
reviewTagAndCommits,
35+
createDistDirectory,
36+
createCMakeTarBall,
37+
createAutotoolsTarBall,
38+
signTarballs,
3439
createWebsiteDirectory,
3540
pushTag,
3641
pushBranch,
37-
createDistDirectory,
38-
createTarBall,
39-
signTarball,
40-
uploadTarBall,
42+
uploadTarBalls,
4143
done
4244
];
4345

@@ -374,46 +376,103 @@ function createWebsiteDirectory() {
374376

375377

376378
function createDistDirectory() {
377-
fs.mkdir(dir + '/dist', function(err) {
379+
var distdir = dir + '/dist';
380+
fs.mkdir(distdir, function(err) {
378381
if (err && err.code !== 'EEXIST')
379-
return pauseRetry(err);
382+
return pauseRetry(err);
383+
if (fs.readdirSync(distdir).length !== 0)
384+
return pauseRetry("dist dir is not empty");
380385

381386
next();
382387
});
383388
}
384389

385390

386-
function createTarBall() {
391+
function createCMakeTarBall() {
387392
var tag = ver.format(state.releaseVersion);
388393
var filename = format('libuv-%s.tar.gz', tag);
389394
var prefix = format('libuv-%s/', tag);
390395
var command = format('git archive %s --format=tar --prefix=%s | gzip -9 > dist/%s',
391396
tag,
392397
prefix,
393398
filename);
394-
child_process.exec(command, { stdio: 'inherit', cwd: dir}, nextOrRetry);
399+
child_process.exec(command, { stdio: 'inherit', cwd: dir }, nextOrRetry);
395400
}
396401

397402

398-
function signTarball() {
403+
function createAutotoolsTarBall() {
399404
var tag = ver.format(state.releaseVersion);
400-
var filename = format('libuv-%s.tar.gz', tag);
401-
var signFilename = format('libuv-%s.tar.gz.sign', tag);
402-
var command = format('gpg -a --output dist/%s --detach-sign dist/%s',
403-
signFilename,
404-
filename);
405-
child_process.exec(command, { stdio: 'inherit', cwd: dir}, nextOrRetry);
405+
var distver = format('%d.%d.%d',
406+
state.releaseVersion.major,
407+
state.releaseVersion.minor,
408+
state.releaseVersion.patch);
409+
child_process.execFile('./autogen.sh', [], { stdio: 'inherit', cwd: dir },
410+
function(err, stdout, stderr) {
411+
if (err) {
412+
console.log(stdout);
413+
console.log(stderr);
414+
return pauseRetry(err);
415+
}
416+
try {
417+
var builddir = fs.mkdtempSync(path.join(os.tmpdir(), 'libuv-build-'));
418+
console.log(' attempting build in %s', builddir);
419+
} catch (err) {
420+
return pauseRetry(err);
421+
}
422+
child_process.execFile(dir + '/configure', [],
423+
{ stdio: 'inherit', cwd: builddir },
424+
function(err, stdout, stderr) {
425+
if (err) {
426+
console.log(stdout);
427+
console.log(stderr);
428+
return pauseRetry(err);
429+
}
430+
child_process.execFile('make', ['dist', '-j' + os.cpus().length], // TODO: use distcheck here
431+
{ stdio: 'pipe', cwd: builddir },
432+
function(err, stdout, stderr) {
433+
if (err) {
434+
console.log(stdout);
435+
console.log(stderr);
436+
return pauseRetry(err);
437+
}
438+
var srcfilename = path.join(builddir, format('libuv-%s.tar.gz', distver));
439+
var dstfilename = path.join(dir, 'dist', format('libuv-%s-dist.tar.gz', tag));
440+
try {
441+
fs.renameSync(srcfilename, dstfilename);
442+
fs.rmdirSync(builddir, { recursive: true }); // in future nodejs, this will be called rmSync
443+
} catch (err) {
444+
return pauseRetry(err);
445+
}
446+
next();
447+
});
448+
});
449+
});
450+
}
451+
452+
453+
function signTarballs() {
454+
var tag = ver.format(state.releaseVersion);
455+
var filename = format('dist/libuv-%s.tar.gz', tag);
456+
var signFilename = filename + ".sign";
457+
var args = ['-a', '--output', signFilename, '--detach-sign', filename];
458+
child_process.execFile('gpg', args, { stdio: 'inherit', cwd: dir }, function(err) {
459+
if (err)
460+
return pauseRetry(err);
461+
var filename = format('dist/libuv-%s-dist.tar.gz', tag);
462+
var signFilename = filename + ".sign";
463+
var args = ['-a', '--output', signFilename, '--detach-sign', filename];
464+
child_process.execFile('gpg', args, { stdio: 'inherit', cwd: dir }, nextOrRetry);
465+
});
406466
}
407467

408468

409-
function uploadTarBall() {
469+
function uploadTarBalls() {
410470
var tag = ver.format(state.releaseVersion);
411471
var baseFilename = format('libuv-%s.tar.gz', tag);
412472
var directory = format('~/www/dist/%s/', tag);
413-
var command = format('scp dist/%s* [email protected]:%s',
414-
baseFilename,
415-
directory);
416-
child_process.exec(command, { stdio: 'inherit', cwd: dir}, nextOrRetry);
473+
var args = [format('dist/%s*', baseFilename),
474+
"[email protected]:" + directory];
475+
child_process.execFile('scp', args, { stdio: 'inherit', cwd: dir }, nextOrRetry);
417476
}
418477

419478

0 commit comments

Comments
 (0)