From 4aa1201d9f620e569718519dcc0dcba3893365fe Mon Sep 17 00:00:00 2001 From: Avital Oliver Date: Wed, 20 Feb 2013 14:32:31 -0800 Subject: [PATCH] Publish release --- lib/warehouse.js | 33 ++-- tools/admin/build-package-tarballs.sh | 11 +- tools/admin/publish-release-packages/README | 2 + tools/admin/publish-release-packages/awssum | 1 + tools/admin/publish-release.sh | 25 +++ .../admin/publish-release/.meteor/.gitignore | 1 + tools/admin/publish-release/.meteor/packages | 9 + .../publish-release/server/publish-release.js | 167 ++++++++++++++++++ 8 files changed, 234 insertions(+), 15 deletions(-) create mode 100644 tools/admin/publish-release-packages/README create mode 160000 tools/admin/publish-release-packages/awssum create mode 100755 tools/admin/publish-release.sh create mode 100644 tools/admin/publish-release/.meteor/.gitignore create mode 100644 tools/admin/publish-release/.meteor/packages create mode 100644 tools/admin/publish-release/server/publish-release.js diff --git a/lib/warehouse.js b/lib/warehouse.js index f4b997b330..154c32bb8d 100644 --- a/lib/warehouse.js +++ b/lib/warehouse.js @@ -116,13 +116,19 @@ var warehouse = module.exports = { files.mkdir_p(releasesDir, 0755); var releaseManifestPath = path.join(releasesDir, releaseVersion + '.json'); + // get release manifest, but only write it after we're done + // writing packages + var releaseManifest; try { - // get release manifest, but only write it after we're done - // writing packages - var releaseManifest = JSON.parse(Future.wrap(files.getUrl)( - PACKAGES_URLBASE + "/manifest/" + releaseVersion + ".json").wait()); + releaseManifest = JSON.parse(Future.wrap(files.getUrl)( + PACKAGES_URLBASE + "/releases/" + releaseVersion + ".json").wait()); + } catch (e) { + console.error("Can't find release " + releaseVersion); + process.exit(1); + } - // populate warehouse with missing packages + // populate warehouse with missing packages + try { var missingPackages = {}; _.each(releaseManifest.packages, function (version, name) { if (!warehouse.existsInWarehouse(name, version)) { @@ -130,18 +136,17 @@ var warehouse = module.exports = { } }); warehouse._populateWarehouseWithPackages(missingPackages); - - // now that we have written all packages, it's safe to write the - // release manifest - fs.writeFileSync(releaseManifestPath, JSON.stringify(releaseManifest)); - - // return manifest - return releaseManifest; } catch (e) { - console.error( - "Can't find manifest for meteor release version " + releaseVersion); + console.error("Failed to load packages for release " + releaseVersion); throw e; } + + // now that we have written all packages, it's safe to write the + // release manifest + fs.writeFileSync(releaseManifestPath, JSON.stringify(releaseManifest)); + + // return manifest + return releaseManifest; }, // @param packagesToPopulate {Object} eg {"less": "0.5.0"} diff --git a/tools/admin/build-package-tarballs.sh b/tools/admin/build-package-tarballs.sh index 0b00c066c9..f5b222d178 100755 --- a/tools/admin/build-package-tarballs.sh +++ b/tools/admin/build-package-tarballs.sh @@ -16,10 +16,15 @@ if [ -e "$TOPDIR/.package_manifest_chunk" ]; then rm "$TOPDIR/.package_manifest_chunk" fi +FIRST_RUN=true # keep track to place commas correctly cd packages for PACKAGE in `ls` do if [ -a "$PACKAGE/package.js" ]; then + if [ $FIRST_RUN == false ]; then + echo "," >> "$TOPDIR/.package_manifest_chunk" + fi + cd $PACKAGE PACKAGE_VERSION=$($TOPDIR/tools/admin/hash-dir.sh) echo "$PACKAGE version $PACKAGE_VERSION" @@ -27,6 +32,10 @@ do cd .. # this is used in build-release.sh, which constructs the manifest json. - echo " \"$PACKAGE\": \"$PACKAGE_VERSION\"" >> "$TOPDIR/.package_manifest_chunk" + echo -n " \"$PACKAGE\": \"$PACKAGE_VERSION\"" >> "$TOPDIR/.package_manifest_chunk" + FIRST_RUN=false fi done + +# Add one newline at the end +echo >> "$TOPDIR/.package_manifest_chunk" diff --git a/tools/admin/publish-release-packages/README b/tools/admin/publish-release-packages/README new file mode 100644 index 0000000000..8f0d718eaf --- /dev/null +++ b/tools/admin/publish-release-packages/README @@ -0,0 +1,2 @@ +To generate: + git clone https://github.com/avital/meteor-awssum awssum \ No newline at end of file diff --git a/tools/admin/publish-release-packages/awssum b/tools/admin/publish-release-packages/awssum new file mode 160000 index 0000000000..e8781acbfb --- /dev/null +++ b/tools/admin/publish-release-packages/awssum @@ -0,0 +1 @@ +Subproject commit e8781acbfb616fb5c5972993e4769addfacacbbe diff --git a/tools/admin/publish-release.sh b/tools/admin/publish-release.sh new file mode 100755 index 0000000000..8ab268abeb --- /dev/null +++ b/tools/admin/publish-release.sh @@ -0,0 +1,25 @@ +#!/bin/bash +DIR="$(pwd)" +METEOR_DIR="$(pwd)/../.." + +# publish-release is a meteor app +cd publish-release + +# prepare settings file with git sha of last commit +TMPDIR=$(mktemp -d -t meteor-publish-release-XXXXXXXX) +GIT_SHA=$(git rev-parse HEAD) +cat > "$TMPDIR/settings.json" <