Skip to content

Commit d0d9f6f

Browse files
author
Saksham Saxena
committed
Completed the Release GitHub Task
1 parent cb230cf commit d0d9f6f

File tree

4 files changed

+135
-94
lines changed

4 files changed

+135
-94
lines changed

.jshintrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"trailing": true,
1212
"undef": true,
1313
"unused": "vars",
14-
14+
"esnext": true,
15+
"predef": ["Promise"],
1516
"node": true
1617
}

tasks/release/release-bower.js

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,45 +13,51 @@ module.exports = function(grunt) {
1313
var version = require('../../package.json').version;
1414
// Avoiding Callback Hell and using Promises
1515
new Promise(function(resolve, reject) {
16-
// Clone the repo. NEEDS TO BE QUIET. Took 3 hours to realise this.
16+
// Clone the repo. NEEDS TO BE QUIET. Took 3 hours to realise this.
1717
// Otherwise the stdout screws up
18-
console.log("Cloning the Release repo ...");
18+
console.log('Cloning the Release repo ...');
1919
exec('rm -rf bower-repo/ && git clone -q https://github.com/lmccart/p5.js-release.git bower-repo',function(err, stdout, stderr) {
20-
if (err)
20+
if (err) {
2121
reject(err);
22-
if (stderr)
22+
}
23+
if (stderr) {
2324
reject(stderr);
25+
}
2426
resolve();
25-
})
27+
});
2628
}).then(function(resolve, reject) {
27-
// Copy the lib to bower-repo.
28-
// NOTE : Uses "cp" of UNIX. Make sure it is unaliased in your .bashrc,
29+
// Copy the lib to bower-repo.
30+
// NOTE : Uses 'cp' of UNIX. Make sure it is unaliased in your .bashrc,
2931
// otherwise it may prompt always for overwrite (not desirable)
30-
console.log("Copying new files ...");
32+
console.log('Copying new files ...');
3133
return new Promise(function(resolve, reject) {
3234
exec('cp lib/*.js lib/addons bower-repo/lib -r', function(err, stdout, stderr) {
33-
if (err)
35+
if (err) {
3436
reject(err);
35-
if (stderr)
37+
}
38+
if (stderr) {
3639
reject(stderr);
40+
}
3741
resolve();
38-
})
39-
})
42+
});
43+
});
4044
}).then(function(resolve, reject) {
4145
// Git add, commit, push
42-
console.log("Pushing out changes ...");
46+
console.log('Pushing out changes ...');
4347
return new Promise(function(resolve, reject) {
4448
exec('git add --all && git commit -am "' + version + '" && git push -q', { cwd: './bower-repo' },function(err, stdout, stderr) {
45-
if (err)
49+
if (err) {
4650
reject(err);
47-
if (stderr)
51+
}
52+
if (stderr) {
4853
reject(stderr);
54+
}
4955
resolve();
50-
done()
51-
})
52-
})
56+
done();
57+
});
58+
});
5359
}).catch(function(err) {
5460
throw new Error(err);
55-
})
56-
})
57-
}
61+
});
62+
});
63+
};

tasks/release/release-docs.js

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,47 @@ module.exports = function(grunt) {
1414
// Avoiding Callback Hell and using Promises
1515
new Promise(function(resolve, reject) {
1616
// Clone the website locally
17-
console.log("Cloning the website ...");
17+
console.log('Cloning the website ...');
1818
exec('rm -rf p5-website/ && git clone -q https://github.com/sakshamsaxena/p5.js-website.git p5-website',function(err, stdout, stderr) {
19-
if (err)
19+
if (err) {
2020
reject(err);
21-
if (stderr)
21+
}
22+
if (stderr) {
2223
reject(stderr);
24+
}
2325
resolve();
24-
})
26+
});
2527
}).then(function() {
2628
// Copy the new docs over
27-
console.log("Copying new docs ...");
29+
console.log('Copying new docs ...');
2830
return new Promise(function(resolve, reject) {
2931
exec('cp -r docs/reference p5-website/dist/', function(err, stdout, stderr) {
30-
if (err)
32+
if (err) {
3133
reject(err);
32-
if (stderr)
34+
}
35+
if (stderr) {
3336
reject(stderr);
37+
}
3438
resolve();
35-
})
36-
})
39+
});
40+
});
3741
}).then(function() {
3842
// Add, Commit, Push
39-
console.log("Pushing to GitHub ...");
43+
console.log('Pushing to GitHub ...');
4044
return new Promise(function(resolve, reject) {
4145
exec('git add --all && git commit -am "Updated Reference for version ' + version + '" && git push', {cwd: './p5-website' }, function(err, stdout, stderr) {
42-
if (err)
46+
if (err) {
4347
reject(err);
44-
if (stderr)
48+
}
49+
if (stderr) {
4550
reject(stderr);
51+
}
4652
resolve();
4753
done();
48-
})
49-
})
54+
});
55+
});
5056
}).catch(function(err) {
5157
throw new Error(err);
52-
})
53-
})
54-
}
58+
});
59+
});
60+
};

tasks/release/release-github.js

Lines changed: 83 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,93 @@
11
/* Grunt task to release p5.js on GitHub */
22

3-
const fs = require('fs');
4-
const req = require('request');
3+
var fs = require('fs');
4+
var req = require('request');
55

66
module.exports = function(grunt) {
7-
grunt.registerTask('release-github', 'Publish a Release on GitHub', function(args) {
7+
grunt.registerTask('release-github', 'Publish a Release on GitHub', function(args) {
88

9-
// Async Task
10-
var done = this.async();
9+
// Async Task
10+
var done = this.async();
1111

12-
// Prepare the data
13-
var data = {
14-
"tag_name": "",
15-
"target_commitish": "master",
16-
"name": "",
17-
"body": "",
18-
"draft": true,
19-
"prerelease": false
20-
};
12+
// Prepare the data
13+
var data = {
14+
'tag_name': '',
15+
'target_commitish': 'master',
16+
'name': '',
17+
'body': '',
18+
'draft': true,
19+
'prerelease': false
20+
};
2121

22-
var newTag = require('../../package.json').version;
23-
data.tag_name = newTag;
24-
data.name = newTag;
22+
var newTag = require('../../package.json').version;
23+
data.tag_name = newTag;
24+
data.name = newTag;
2525

26-
// Set up vars for requests
27-
const createURL = 'https://api.github.com/repos/sakshamsaxena/p5.js/releases' + accessTokenParam;
28-
const uploadURL = 'https://uploads.github.com/repos/sakshamsaxena/p5.js/releases/';
29-
const accessTokenParam = '?access_token=' + process.env.GITHUB_TOKEN;
30-
var releaseID = '';
26+
// Set up vars for requests
27+
var accessTokenParam = '?access_token=' + process.env.GITHUB_TOKEN;
28+
var createURL = 'https://api.github.com/repos/processing/p5.js/releases' + accessTokenParam;
29+
var uploadURL = 'https://uploads.github.com/repos/processing/p5.js/releases/';
30+
var ID = '';
31+
var count = 0;
3132

32-
var createReleaseData = {
33-
url: createURL,
34-
headers: { 'User-Agent': 'Grunt Task' },
35-
body: JSON.stringify(data)
36-
}
33+
var createReleaseData = {
34+
url: createURL,
35+
headers: { 'User-Agent': 'Grunt Task' },
36+
body: JSON.stringify(data)
37+
};
3738

38-
new Promise(function(resolve, reject) {
39-
// Create the release
40-
req.post(createReleaseData, function(error, response, body) {
41-
if (error)
42-
reject(error);
43-
// Got the release ID
44-
releaseID = JSON.parse(body).id;
45-
resolve();
46-
})
47-
}).then(function() {
48-
// Upload assets
49-
req.post({
50-
url: uploadURL + releaseID + '/assets' + accessTokenParam + '&name=p5.dom.js',
51-
headers: {
52-
'User-Agent': 'Grunt',
53-
'Content-Type': 'application/javascript',
54-
'Content-Length': fs.statSync('./lib/addons/p5.dom.js').size
55-
},
56-
body: fs.createReadStream('./lib/addons/p5.dom.js')
57-
}, function(err, resp, body) {
58-
if (err)
59-
throw err;
60-
console.log(JSON.parse(body));
61-
done();
62-
});
63-
});
64-
});
65-
};
39+
var uploadReleaseData = {
40+
'p5js': ['p5.js', './lib/p5.js', 'application/javascript'],
41+
'p5minjs': ['p5.min.js', './lib/p5.min.js', 'application/javascript'],
42+
'p5domjs': ['p5.dom.js', './lib/addons/p5.dom.js', 'application/javascript'],
43+
'p5domminjs': ['p5.dom.min.js', './lib/addons/p5.dom.min.js', 'application/javascript'],
44+
'p5soundjs': ['p5.sound.js', './lib/addons/p5.sound.js', 'application/javascript'],
45+
'p5soundminjs': ['p5.sound.min.js', './lib/addons/p5.sound.min.js', 'application/javascript'],
46+
'p5zip': ['p5.zip', './p5.zip', 'application/zip']
47+
};
48+
49+
var uploadAsset = function(arr) {
50+
console.log('Uploading ' + arr[0] + ' ...');
51+
fs.createReadStream(arr[1]).pipe(
52+
req.post({
53+
url: uploadURL + ID + '/assets' + accessTokenParam + '&name=' + arr[0],
54+
headers: {
55+
'User-Agent': 'Grunt',
56+
'Content-Type': arr[2],
57+
'Content-Length': fs.statSync(arr[1]).size
58+
}
59+
}, function(err, resp, body) {
60+
if (err) {
61+
throw err;
62+
}
63+
console.log('Uploaded ' + arr[0]);
64+
count++;
65+
if (count === 7) {
66+
done();
67+
}
68+
}));
69+
};
70+
71+
new Promise(function(resolve, reject) {
72+
// Create the release
73+
console.log('Posting Release ...');
74+
req.post(createReleaseData, function(error, response, body) {
75+
if (error) {
76+
reject(error);
77+
}
78+
resolve(JSON.parse(body).id);
79+
});
80+
}).then(function(releaseID) {
81+
// Upload the Library
82+
console.log('Uploading Assets ...');
83+
ID = releaseID;
84+
// Upload assets
85+
for (var file in uploadReleaseData) {
86+
let arr = uploadReleaseData[file];
87+
uploadAsset(arr);
88+
}
89+
}).catch(function(err) {
90+
throw new Error(err);
91+
});
92+
});
93+
};

0 commit comments

Comments
 (0)