Browse Source

Remove Meteor .sh files, automate testing

pull/829/head
Dan Dascalescu 10 years ago
parent
commit
0b49834e68
  1. 32
      Gruntfile.js
  2. 2
      meteor/package.js
  3. 76
      meteor/publish.sh
  4. 37
      meteor/runtests.sh
  5. 2
      meteor/test.js
  6. 3
      package.json

32
Gruntfile.js

@ -56,12 +56,26 @@ module.exports = function( grunt ) {
}
},
shell: {
exec: {
'meteor-init': {
command: [
// Make sure Meteor is installed, per https://meteor.com/install.
// The curl'ed script is safe; takes 2 minutes to read source & check.
'type meteor >/dev/null 2>&1 || { curl https://install.meteor.com/ | sh; }',
// Meteor expects package.js to be in the root directory of
// the checkout, so copy it there temporarily
'cp meteor/package.js .'
].join(';')
},
'meteor-cleanup': {
// remove build files and package.js
command: 'rm -rf .build.* versions.json package.js'
},
'meteor-test': {
command: 'meteor/runtests.sh'
command: 'spacejam --mongo-url mongodb:// test-packages ./'
},
'meteor-publish': {
command: 'meteor/publish.sh'
command: 'meteor publish'
}
}
@ -70,7 +84,7 @@ module.exports = function( grunt ) {
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-requirejs');
grunt.loadNpmTasks('grunt-shell');
grunt.loadNpmTasks('grunt-exec');
grunt.registerTask( 'pkgd-edit', function() {
var outFile = grunt.config.get('requirejs.pkgd.options.out');
@ -87,12 +101,10 @@ module.exports = function( grunt ) {
grunt.log.writeln( 'Edited ' + outFile );
});
grunt.registerTask('meteor-test', 'shell:meteor-test');
grunt.registerTask('meteor-publish', 'shell:meteor-publish');
// ideally we'd run tests before publishing, but the chances of tests breaking (given that
// Meteor is orthogonal to the library) are so small that it's not worth the maintainer's time
// grunt.regsterTask('meteor', ['shell:meteor-test', 'shell:meteor-publish']);
grunt.registerTask('meteor', 'shell:meteor-publish');
// Meteor tasks
grunt.registerTask('meteor-test', ['exec:meteor-init', 'exec:meteor-test', 'exec:meteor-cleanup']);
grunt.registerTask('meteor-publish', ['exec:meteor-init', 'exec:meteor-publish', 'exec:meteor-cleanup']);
grunt.registerTask('meteor', ['exec:meteor-init', 'exec:meteor-test', 'exec:meteor-publish', 'exec:meteor-cleanup']);
grunt.registerTask( 'default', [
'jshint',

2
meteor/package.js

@ -14,7 +14,7 @@ Package.describe({
});
Package.onUse(function (api) {
api.versionsFrom('METEOR@1.0');
api.versionsFrom(['METEOR@0.9.0', 'METEOR@1.0']);
api.export('Isotope');
api.addFiles([
'dist/isotope.pkgd.js',

76
meteor/publish.sh

@ -1,76 +0,0 @@
#!/bin/bash
# Publish package on Meteor's Atmosphere.js
# Make sure Meteor is installed, per https://www.meteor.com/install. The curl'ed script is totally safe; takes 2 minutes to read its source and check.
type meteor >/dev/null 2>&1 || { curl https://install.meteor.com/ | sh; }
# sanity check: make sure we're in the root directory of the checkout
cd "$( dirname "$0" )/.."
function cleanup() {
# we copied the file as package.js, regardless of its original name
rm package.js
# temporary build files
rm -rf ".build.$PACKAGE_NAME" versions.json
}
# publish separately any package*.js files we have, e.g. package.js, package-compat.js
for PACKAGE_FILE in meteor/package*.js; do
# Meteor expects package.js to be in the root directory of the checkout, so copy there our package file under that name, temporarily
cp $PACKAGE_FILE ./package.js
# publish package, creating it if it's the first time we're publishing
PACKAGE_NAME=$(grep -i name $PACKAGE_FILE | head -1 | cut -d "'" -f 2)
ATMOSPHERE_NAME=${PACKAGE_NAME/://}
echo "Publishing $PACKAGE_NAME..."
# attempt to re-publish the package - the most common operation once the initial release has been made
OUTPUT=$( meteor publish 2>&1 )
if (( $? > 0 )); then
# there was an error
if [[ $OUTPUT =~ "There is no package named" ]]; then
# actually this is the first time the package is created, so pass the special --create flag and congratulate the maintainer
echo "Thank you for creating the official Meteor package for this library!"
if meteor publish --create; then
echo "Please post the following to https://github.com/raix/Meteor-community-discussions/issues/14:
--------------------------------------------- 8< --------------------------------------------------------
Happy to announce that I've published the official $PACKAGE_NAME to Atmosphere. Please star!
https://atmospherejs.com/$ATMOSPHERE_NAME
--------------------------------------------- >8 --------------------------------------------------------
"
else
echo "We got an error. Please post it at https://github.com/raix/Meteor-community-discussions/issues/14"
cleanup
exit 1
fi
else
# the error wasn't that the package didn't exist, so we need to ask for help
echo "We got an error. Please post it at https://github.com/raix/Meteor-community-discussions/issues/14:
--------------------------------------------- 8< --------------------------------------------------------
$OUTPUT
--------------------------------------------- >8 --------------------------------------------------------
"
cleanup
exit 1
fi
else
# no error on the first `meteor publish` attempt
echo "$OUTPUT" # just in case meteor said something interesting
echo "Thanks for releasing a new version of $PACKAGE_NAME! You can see it at
https://atmospherejs.com/$ATMOSPHERE_NAME"
fi
cleanup
done

37
meteor/runtests.sh

@ -1,37 +0,0 @@
#!/bin/sh
# Test Meteor package before publishing to Atmospherejs.com
# Make sure Meteor is installed, per https://www.meteor.com/install. The curl'ed script is totally safe; takes 2 minutes to read its source and check.
type meteor >/dev/null 2>&1 || { curl https://install.meteor.com/ | sh; }
# sanity check: make sure we're in the root directory of the checkout
cd "$( dirname "$0" )/.."
# run tests and delete the temporary package.js even if Ctrl+C is pressed
int_trap() {
echo
printf "Tests interrupted. Hopefully you verified in the browser that tests pass?\n\n"
}
trap int_trap INT
# test any package*.js packages we may have, e.g. package.js, package-compat.js
for PACKAGE_FILE in meteor/package*.js; do
PACKAGE_NAME=$(grep -i name $PACKAGE_FILE | head -1 | cut -d "'" -f 2)
echo "Testing $PACKAGE_NAME..."
# Meteor expects package.js to be in the root directory of the checkout, so copy there our package file under that name, temporarily
cp $PACKAGE_FILE ./package.js
# provide an invalid MONGO_URL so Meteor doesn't bog us down with an empty Mongo database
MONGO_URL=mongodb:// meteor test-packages ./
rm -rf ".build.$PACKAGE_NAME"
rm -rf ".build.local-test:$PACKAGE_NAME"
rm versions.json 2>/dev/null
rm package.js
done

2
meteor/test.js

@ -5,7 +5,7 @@ Tinytest.addAsync('Isotope - fitRows', function (test, done) {
document.body.appendChild(isotopeDropZone);
// TODO ideally we'd get the htmls straight from this repo, but no idea how to do this from TinyTest - http://stackoverflow.com/questions/27180892/pull-an-html-file-into-a-tinytest
HTTP.get('https://rawgit.com/metafizzy/isotope/master/test/index.html', function callback(error, result) {
HTTP.get('http://rawgit.com/metafizzy/isotope/master/test/index.html', function callback(error, result) {
// adapted from test/fit-rows.js
function checkPosition(item, x, y) {

3
package.json

@ -24,7 +24,8 @@
"grunt-contrib-jshint": "~0.4.1",
"grunt-contrib-uglify": "~0.1.1",
"grunt-requirejs": "~0.4.0",
"grunt-shell": "*"
"grunt-exec": "^0.4.6",
"spacejam": "^1.1.1"
},
"repository": {
"type": "git",

Loading…
Cancel
Save