diff options
| author | codecalm <codecalm@gmail.com> | 2020-03-22 13:01:56 +0100 | 
|---|---|---|
| committer | codecalm <codecalm@gmail.com> | 2020-03-22 13:01:56 +0100 | 
| commit | 5fb2a9255c394d62b59f167dc922c5a05d5bd411 (patch) | |
| tree | 0105ec45ef42cecd784858b0d3305cc146eb02a9 | |
| parent | release it fix (diff) | |
| download | tabler-icons-5fb2a9255c394d62b59f167dc922c5a05d5bd411.tar.xz | |
new releases flow
| -rw-r--r-- | gulpfile.js | 147 | ||||
| -rw-r--r-- | package.json | 10 | 
2 files changed, 88 insertions, 69 deletions
diff --git a/gulpfile.js b/gulpfile.js index 75699b19..cb820ad8 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -5,7 +5,8 @@ const gulp = require('gulp'),  	path = require('path'),  	p = require('./package.json'),  	zip = require('gulp-zip'), -	puppeteer = require('puppeteer'); +	puppeteer = require('puppeteer'), +	argv = require('minimist')(process.argv.slice(2));  async function asyncForEach(array, callback) {  	for (let index = 0; index < array.length; index++) { @@ -47,7 +48,7 @@ const createScreenshot = async (filePath) => {  		const htmlFilePath = path.join("file:", filePath);  		const browser = await puppeteer.launch();  		const page = await browser.newPage(); -		 +  		await page.setViewport({  			height: 10,  			width: 10, @@ -70,15 +71,15 @@ const createScreenshot = async (filePath) => {  }; -const printChangelog = function(newIcons, modifiedIcons, renamedIcons) { -	if(newIcons.length > 0) { +const printChangelog = function (newIcons, modifiedIcons, renamedIcons) { +	if (newIcons.length > 0) {  		let str = '';  		str += `${newIcons.length} new icons: `; -		newIcons.forEach(function(icon, i){ +		newIcons.forEach(function (icon, i) {  			str += `\`${icon}\``; -			if((i + 1) <= newIcons.length - 1) { +			if ((i + 1) <= newIcons.length - 1) {  				str += ', '  			}  		}); @@ -87,14 +88,14 @@ const printChangelog = function(newIcons, modifiedIcons, renamedIcons) {  		console.log('');  	} -	if(modifiedIcons.length > 0) { +	if (modifiedIcons.length > 0) {  		let str = '';  		str += `Fixed icons: `; -		modifiedIcons.forEach(function(icon, i){ +		modifiedIcons.forEach(function (icon, i) {  			str += `\`${icon}\``; -			if((i + 1) <= modifiedIcons.length - 1) { +			if ((i + 1) <= modifiedIcons.length - 1) {  				str += ', '  			}  		}); @@ -103,18 +104,65 @@ const printChangelog = function(newIcons, modifiedIcons, renamedIcons) {  		console.log('');  	} -	if(renamedIcons.length > 0) { +	if (renamedIcons.length > 0) {  		console.log(`Renamed icons: `); -		renamedIcons.forEach(function(icon, i){ +		renamedIcons.forEach(function (icon, i) {  			console.log(`- \`${icon[0]}\` renamed to \`${icon[1]}\``);  		});  	}  }; +const generateIconsPreview = function(files, destFile, cb, columnsCount = 17) { + +	const padding = 29, +		paddingOuter = 5, +		iconSize = 24; + +	const iconsCount = files.length, +		rowsCount = Math.ceil(iconsCount / columnsCount), +		width = columnsCount * (iconSize + padding) + 2 * paddingOuter - padding, +		height = rowsCount * (iconSize + padding) + 2 * paddingOuter - padding; + +	let svgContentSymbols = '', +		svgContentIcons = '', +		x = paddingOuter, +		y = paddingOuter; + +	files.forEach(function (file, i) { +		let name = path.basename(file, '.svg'); +		let svgFile = fs.readFileSync(file), +			svgFileContent = svgFile.toString(); -gulp.task('build-zip', function() { +		svgFileContent = svgFileContent +			.replace('<svg xmlns="http://www.w3.org/2000/svg"', `<symbol id="${name}"`) +			.replace(' width="24" height="24"', '') +			.replace('</svg>', '</symbol>') +			.replace(/\n\s+/g, ''); + +		svgContentSymbols += `\t${svgFileContent}\n`; +		svgContentIcons += `\t<use xlink:href="#${name}" x="${x}" y="${y}" width="${iconSize}" height="${iconSize}" />\n`; + +		x += padding + iconSize; + +		if (i % columnsCount === columnsCount - 1) { +			x = paddingOuter; +			y += padding + iconSize; +		} +	}); + +	const svgContent = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" style="color: #354052"><rect x="0" y="0" width="${width}" height="${height}" fill="#fff"></rect>\n${svgContentSymbols}\n${svgContentIcons}\n</svg>`; + +	fs.writeFileSync(destFile, svgContent); +	createScreenshot(destFile); + +	cb(); +}; + +//********************************************************************************************* + +gulp.task('build-zip', function () {  	const version = p.version;  	return gulp.src('{icons/**/*,icons-png/**/*,tabler-sprite.svg,tabler-sprite-nostroke.svg}') @@ -122,20 +170,20 @@ gulp.task('build-zip', function() {  		.pipe(gulp.dest('packages'))  }); -gulp.task('build-jekyll', function(cb){ -	cp.exec('bundle exec jekyll build', function() { +gulp.task('build-jekyll', function (cb) { +	cp.exec('bundle exec jekyll build', function () {  		cb();  	});  }); -gulp.task('build-copy', function(cb){ -	cp.exec('mkdir -p icons/ && rm -fd ./icons/* && cp ./_site/icons/* ./icons', function() { +gulp.task('build-copy', function (cb) { +	cp.exec('mkdir -p icons/ && rm -fd ./icons/* && cp ./_site/icons/* ./icons', function () {  		cb();  	});  }); -gulp.task('clean-png', function(cb){ -	cp.exec('rm -fd ./icons-png/*', function() { +gulp.task('clean-png', function (cb) { +	cp.exec('rm -fd ./icons-png/*', function () {  		cb();  	});  }); @@ -169,49 +217,11 @@ gulp.task('icons-sprite', function (cb) {  });  gulp.task('icons-preview', function (cb) { -	const columnsCount = 17, -		padding = 29, -		paddingOuter = 5, -		iconSize = 24;  	glob("_site/icons/*.svg", {}, function (er, files) { -		const iconsCount = files.length, -			rowsCount = Math.ceil(iconsCount / columnsCount), -			width = columnsCount * (iconSize + padding) + 2 * paddingOuter - padding, -			height = rowsCount * (iconSize + padding) + 2 * paddingOuter - padding; - -		let svgContentSymbols = '', -			svgContentIcons = '', -			x = paddingOuter, -			y = paddingOuter; -		files.forEach(function (file, i) { -			let name = path.basename(file, '.svg'); - -			let svgFile = fs.readFileSync(file), -				svgFileContent = svgFile.toString(); - -			svgFileContent = svgFileContent -				.replace('<svg xmlns="http://www.w3.org/2000/svg"', `<symbol id="${name}"`) -				.replace(' width="24" height="24"', '') -				.replace('</svg>', '</symbol>') -				.replace(/\n\s+/g, ''); +		console.log('files', files); -			svgContentSymbols += `\t${svgFileContent}\n`; -			svgContentIcons += `\t<use xlink:href="#${name}" x="${x}" y="${y}" width="${iconSize}" height="${iconSize}" />\n`; - -			x += padding + iconSize; - -			if (i % columnsCount === columnsCount - 1) { -				x = paddingOuter; -				y += padding + iconSize; -			} -		}); - -		const svgContent = `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" style="color: #354052"><rect x="0" y="0" width="${width}" height="${height}" fill="#fff"></rect>\n${svgContentSymbols}\n${svgContentIcons}\n</svg>`; - -		fs.writeFileSync('.github/icons.svg', svgContent); -		createScreenshot('.github/icons.svg'); -		cb(); +		generateIconsPreview(files, '.github/icons.svg', cb);  	});  }); @@ -229,7 +239,7 @@ gulp.task('icons-stroke', gulp.series('build-jekyll', function (cb) {  	let svgContentSymbols = '',  		svgContentIcons = '',  		x = paddingOuter; -	 +  	strokes.forEach(function (stroke) {  		let svgFileContentStroked = svgFileContent  			.replace('<svg xmlns="http://www.w3.org/2000/svg"', `<symbol id="icon-${stroke}"`) @@ -275,8 +285,8 @@ gulp.task('optimize', function (cb) {  }); -gulp.task('changelog-commit', function(cb) { -	cp.exec('git status', function(err, ret) { +gulp.task('changelog-commit', function (cb) { +	cp.exec('git status', function (err, ret) {  		let newIcons = [], modifiedIcons = [], renamedIcons = [];  		ret.replace(/new file:\s+src\/_icons\/([a-z1-9-]+)\.svg/g, function (m, fileName) { @@ -291,8 +301,8 @@ gulp.task('changelog-commit', function(cb) {  			renamedIcons.push([fileNameBefore, fileNameAfter]);  		}); -		modifiedIcons = modifiedIcons.filter( function( el ) { -			return newIcons.indexOf( el ) < 0; +		modifiedIcons = modifiedIcons.filter(function (el) { +			return newIcons.indexOf(el) < 0;  		});  		printChangelog(newIcons, modifiedIcons, renamedIcons); @@ -301,9 +311,10 @@ gulp.task('changelog-commit', function(cb) {  	});  }); -gulp.task('changelog-diff', function(cb) { -	const version = p.version; -	cp.exec(`git diff v${version} HEAD --name-status`, function(err, ret) { +gulp.task('changelog-diff', function (cb) { +	const version = argv['latest-tag'] || `v${p.version}`; +	 +	cp.exec(`git diff ${version} HEAD --name-status`, function (err, ret) {  		let newIcons = [], modifiedIcons = [], renamedIcons = []; @@ -319,8 +330,8 @@ gulp.task('changelog-diff', function(cb) {  			renamedIcons.push([fileNameBefore, fileNameAfter]);  		}); -		modifiedIcons = modifiedIcons.filter( function( el ) { -			return newIcons.indexOf( el ) < 0; +		modifiedIcons = modifiedIcons.filter(function (el) { +			return newIcons.indexOf(el) < 0;  		});  		printChangelog(newIcons, modifiedIcons, renamedIcons); diff --git a/package.json b/package.json index da9e0d97..d6f8e615 100644 --- a/package.json +++ b/package.json @@ -35,12 +35,20 @@      "glob": "7.1.6",      "gulp": "4.0.2",      "gulp-zip": "5.0.1", +    "minimist": "1.2.5",      "puppeteer": "2.1.1",      "release-it": "13.1.2"    },    "release-it": { +    "hooks": { +      "after:bump": "npm run build && npm run png", +      "after:release": "echo Successfully released ${name} v${version} to ${repo.repository}." +    },      "git": { -      "tagName": "v${version}" +      "changelog": "gulp changelog-diff --silent --latest-tag ${latestTag}", +      "tagName": "v${version}", +      "requireBranch": "master", +      "requireCommits": true      },      "github": {        "release": true  | 
