f12ce05454
no issue - we previously needed a config.json to provide the GitHub token for publishing new Casper releases - this commit removes the need for this file by pulling the token from the environment variable, which everyone in the Core team has set up
173 lines
4.9 KiB
JavaScript
173 lines
4.9 KiB
JavaScript
const {series, watch, src, dest, parallel} = require('gulp');
|
|
const pump = require('pump');
|
|
const path = require('path');
|
|
const releaseUtils = require('@tryghost/release-utils');
|
|
const inquirer = require('inquirer');
|
|
|
|
// gulp plugins and utils
|
|
const livereload = require('gulp-livereload');
|
|
const postcss = require('gulp-postcss');
|
|
const zip = require('gulp-zip');
|
|
const concat = require('gulp-concat');
|
|
const uglify = require('gulp-uglify');
|
|
const beeper = require('beeper');
|
|
const fs = require('fs');
|
|
|
|
// postcss plugins
|
|
const autoprefixer = require('autoprefixer');
|
|
const colorFunction = require('postcss-color-mod-function');
|
|
const cssnano = require('cssnano');
|
|
const easyimport = require('postcss-easy-import');
|
|
|
|
const REPO = 'TryGhost/Casper';
|
|
const REPO_READONLY = 'TryGhost/Casper';
|
|
const CHANGELOG_PATH = path.join(process.cwd(), '.', 'changelog.md');
|
|
|
|
function serve(done) {
|
|
livereload.listen();
|
|
done();
|
|
}
|
|
|
|
const handleError = (done) => {
|
|
return function (err) {
|
|
if (err) {
|
|
beeper();
|
|
}
|
|
return done(err);
|
|
};
|
|
};
|
|
|
|
function hbs(done) {
|
|
pump([
|
|
src(['*.hbs', 'partials/**/*.hbs']),
|
|
livereload()
|
|
], handleError(done));
|
|
}
|
|
|
|
function css(done) {
|
|
pump([
|
|
src('assets/css/*.css', {sourcemaps: true}),
|
|
postcss([
|
|
easyimport,
|
|
colorFunction(),
|
|
autoprefixer(),
|
|
cssnano()
|
|
]),
|
|
dest('assets/built/', {sourcemaps: '.'}),
|
|
livereload()
|
|
], handleError(done));
|
|
}
|
|
|
|
function js(done) {
|
|
pump([
|
|
src([
|
|
// pull in lib files first so our own code can depend on it
|
|
'assets/js/lib/*.js',
|
|
'assets/js/*.js'
|
|
], {sourcemaps: true}),
|
|
concat('casper.js'),
|
|
uglify(),
|
|
dest('assets/built/', {sourcemaps: '.'}),
|
|
livereload()
|
|
], handleError(done));
|
|
}
|
|
|
|
function zipper(done) {
|
|
const filename = require('./package.json').name + '.zip';
|
|
|
|
pump([
|
|
src([
|
|
'**',
|
|
'!node_modules', '!node_modules/**',
|
|
'!dist', '!dist/**',
|
|
'!yarn-error.log'
|
|
]),
|
|
zip(filename),
|
|
dest('dist/')
|
|
], handleError(done));
|
|
}
|
|
|
|
const cssWatcher = () => watch('assets/css/**', css);
|
|
const hbsWatcher = () => watch(['*.hbs', 'partials/**/*.hbs'], hbs);
|
|
const watcher = parallel(cssWatcher, hbsWatcher);
|
|
const build = series(css, js);
|
|
|
|
exports.build = build;
|
|
exports.zip = series(build, zipper);
|
|
exports.default = series(build, serve, watcher);
|
|
|
|
exports.release = async () => {
|
|
// @NOTE: https://yarnpkg.com/lang/en/docs/cli/version/
|
|
// require(./package.json) can run into caching issues, this re-reads from file everytime on release
|
|
let packageJSON = JSON.parse(fs.readFileSync('./package.json'));
|
|
const newVersion = packageJSON.version;
|
|
|
|
if (!newVersion || newVersion === '') {
|
|
console.log(`Invalid version: ${newVersion}`);
|
|
return;
|
|
}
|
|
|
|
console.log(`\nCreating release for ${newVersion}...`);
|
|
|
|
const githubToken = process.env.GST_TOKEN;
|
|
|
|
if (githubToken) {
|
|
console.log('Please configure your environment with a Github token located in GST_TOKEN');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const result = await inquirer.prompt([{
|
|
type: 'input',
|
|
name: 'compatibleWithGhost',
|
|
message: 'Which version of Ghost is it compatible with?',
|
|
default: '3.0.0'
|
|
}]);
|
|
|
|
const compatibleWithGhost = result.compatibleWithGhost;
|
|
|
|
const releasesResponse = await releaseUtils.releases.get({
|
|
userAgent: 'Casper',
|
|
uri: `https://api.github.com/repos/${REPO_READONLY}/releases`
|
|
});
|
|
|
|
if (!releasesResponse || !releasesResponse) {
|
|
console.log('No releases found. Skipping...');
|
|
return;
|
|
}
|
|
|
|
let previousVersion = releasesResponse[0].tag_name || releasesResponse[0].name;
|
|
console.log(`Previous version: ${previousVersion}`);
|
|
|
|
const changelog = new releaseUtils.Changelog({
|
|
changelogPath: CHANGELOG_PATH,
|
|
folder: path.join(process.cwd(), '.')
|
|
});
|
|
|
|
changelog
|
|
.write({
|
|
githubRepoPath: `https://github.com/${REPO}`,
|
|
lastVersion: previousVersion
|
|
})
|
|
.sort()
|
|
.clean();
|
|
|
|
const newReleaseResponse = await releaseUtils.releases.create({
|
|
draft: true,
|
|
preRelease: false,
|
|
tagName: newVersion,
|
|
releaseName: newVersion,
|
|
userAgent: 'Casper',
|
|
uri: `https://api.github.com/repos/${REPO}/releases`,
|
|
github: {
|
|
token: githubToken
|
|
},
|
|
content: [`**Compatible with Ghost ≥ ${compatibleWithGhost}**\n\n`],
|
|
changelogPath: CHANGELOG_PATH
|
|
});
|
|
console.log(`\nRelease draft generated: ${newReleaseResponse.releaseUrl}\n`);
|
|
} catch (err) {
|
|
console.error(err);
|
|
process.exit(1);
|
|
}
|
|
};
|