mirror of
https://github.com/tabler/tabler-icons.git
synced 2025-08-17 19:36:29 +02:00
new releases flow
This commit is contained in:
143
gulpfile.js
143
gulpfile.js
@@ -5,7 +5,8 @@ const gulp = require('gulp'),
|
|||||||
path = require('path'),
|
path = require('path'),
|
||||||
p = require('./package.json'),
|
p = require('./package.json'),
|
||||||
zip = require('gulp-zip'),
|
zip = require('gulp-zip'),
|
||||||
puppeteer = require('puppeteer');
|
puppeteer = require('puppeteer'),
|
||||||
|
argv = require('minimist')(process.argv.slice(2));
|
||||||
|
|
||||||
async function asyncForEach(array, callback) {
|
async function asyncForEach(array, callback) {
|
||||||
for (let index = 0; index < array.length; index++) {
|
for (let index = 0; index < array.length; index++) {
|
||||||
@@ -70,15 +71,15 @@ const createScreenshot = async (filePath) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const printChangelog = function(newIcons, modifiedIcons, renamedIcons) {
|
const printChangelog = function (newIcons, modifiedIcons, renamedIcons) {
|
||||||
if(newIcons.length > 0) {
|
if (newIcons.length > 0) {
|
||||||
let str = '';
|
let str = '';
|
||||||
str += `${newIcons.length} new icons: `;
|
str += `${newIcons.length} new icons: `;
|
||||||
|
|
||||||
newIcons.forEach(function(icon, i){
|
newIcons.forEach(function (icon, i) {
|
||||||
str += `\`${icon}\``;
|
str += `\`${icon}\``;
|
||||||
|
|
||||||
if((i + 1) <= newIcons.length - 1) {
|
if ((i + 1) <= newIcons.length - 1) {
|
||||||
str += ', '
|
str += ', '
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -87,14 +88,14 @@ const printChangelog = function(newIcons, modifiedIcons, renamedIcons) {
|
|||||||
console.log('');
|
console.log('');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(modifiedIcons.length > 0) {
|
if (modifiedIcons.length > 0) {
|
||||||
let str = '';
|
let str = '';
|
||||||
str += `Fixed icons: `;
|
str += `Fixed icons: `;
|
||||||
|
|
||||||
modifiedIcons.forEach(function(icon, i){
|
modifiedIcons.forEach(function (icon, i) {
|
||||||
str += `\`${icon}\``;
|
str += `\`${icon}\``;
|
||||||
|
|
||||||
if((i + 1) <= modifiedIcons.length - 1) {
|
if ((i + 1) <= modifiedIcons.length - 1) {
|
||||||
str += ', '
|
str += ', '
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -103,18 +104,65 @@ const printChangelog = function(newIcons, modifiedIcons, renamedIcons) {
|
|||||||
console.log('');
|
console.log('');
|
||||||
}
|
}
|
||||||
|
|
||||||
if(renamedIcons.length > 0) {
|
if (renamedIcons.length > 0) {
|
||||||
console.log(`Renamed icons: `);
|
console.log(`Renamed icons: `);
|
||||||
|
|
||||||
renamedIcons.forEach(function(icon, i){
|
renamedIcons.forEach(function (icon, i) {
|
||||||
console.log(`- \`${icon[0]}\` renamed to \`${icon[1]}\``);
|
console.log(`- \`${icon[0]}\` renamed to \`${icon[1]}\``);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const generateIconsPreview = function(files, destFile, cb, columnsCount = 17) {
|
||||||
|
|
||||||
|
const padding = 29,
|
||||||
|
paddingOuter = 5,
|
||||||
|
iconSize = 24;
|
||||||
|
|
||||||
gulp.task('build-zip', function() {
|
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, '');
|
||||||
|
|
||||||
|
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;
|
const version = p.version;
|
||||||
|
|
||||||
return gulp.src('{icons/**/*,icons-png/**/*,tabler-sprite.svg,tabler-sprite-nostroke.svg}')
|
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'))
|
.pipe(gulp.dest('packages'))
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('build-jekyll', function(cb){
|
gulp.task('build-jekyll', function (cb) {
|
||||||
cp.exec('bundle exec jekyll build', function() {
|
cp.exec('bundle exec jekyll build', function () {
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('build-copy', function(cb){
|
gulp.task('build-copy', function (cb) {
|
||||||
cp.exec('mkdir -p icons/ && rm -fd ./icons/* && cp ./_site/icons/* ./icons', function() {
|
cp.exec('mkdir -p icons/ && rm -fd ./icons/* && cp ./_site/icons/* ./icons', function () {
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('clean-png', function(cb){
|
gulp.task('clean-png', function (cb) {
|
||||||
cp.exec('rm -fd ./icons-png/*', function() {
|
cp.exec('rm -fd ./icons-png/*', function () {
|
||||||
cb();
|
cb();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -169,49 +217,11 @@ gulp.task('icons-sprite', function (cb) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('icons-preview', function (cb) {
|
gulp.task('icons-preview', function (cb) {
|
||||||
const columnsCount = 17,
|
|
||||||
padding = 29,
|
|
||||||
paddingOuter = 5,
|
|
||||||
iconSize = 24;
|
|
||||||
|
|
||||||
glob("_site/icons/*.svg", {}, function (er, files) {
|
glob("_site/icons/*.svg", {}, function (er, files) {
|
||||||
const iconsCount = files.length,
|
console.log('files', files);
|
||||||
rowsCount = Math.ceil(iconsCount / columnsCount),
|
|
||||||
width = columnsCount * (iconSize + padding) + 2 * paddingOuter - padding,
|
|
||||||
height = rowsCount * (iconSize + padding) + 2 * paddingOuter - padding;
|
|
||||||
|
|
||||||
let svgContentSymbols = '',
|
generateIconsPreview(files, '.github/icons.svg', cb);
|
||||||
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, '');
|
|
||||||
|
|
||||||
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();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -275,8 +285,8 @@ gulp.task('optimize', function (cb) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
gulp.task('changelog-commit', function(cb) {
|
gulp.task('changelog-commit', function (cb) {
|
||||||
cp.exec('git status', function(err, ret) {
|
cp.exec('git status', function (err, ret) {
|
||||||
let newIcons = [], modifiedIcons = [], renamedIcons = [];
|
let newIcons = [], modifiedIcons = [], renamedIcons = [];
|
||||||
|
|
||||||
ret.replace(/new file:\s+src\/_icons\/([a-z1-9-]+)\.svg/g, function (m, fileName) {
|
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]);
|
renamedIcons.push([fileNameBefore, fileNameAfter]);
|
||||||
});
|
});
|
||||||
|
|
||||||
modifiedIcons = modifiedIcons.filter( function( el ) {
|
modifiedIcons = modifiedIcons.filter(function (el) {
|
||||||
return newIcons.indexOf( el ) < 0;
|
return newIcons.indexOf(el) < 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
printChangelog(newIcons, modifiedIcons, renamedIcons);
|
printChangelog(newIcons, modifiedIcons, renamedIcons);
|
||||||
@@ -301,9 +311,10 @@ gulp.task('changelog-commit', function(cb) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('changelog-diff', function(cb) {
|
gulp.task('changelog-diff', function (cb) {
|
||||||
const version = p.version;
|
const version = argv['latest-tag'] || `v${p.version}`;
|
||||||
cp.exec(`git diff v${version} HEAD --name-status`, function(err, ret) {
|
|
||||||
|
cp.exec(`git diff ${version} HEAD --name-status`, function (err, ret) {
|
||||||
|
|
||||||
let newIcons = [], modifiedIcons = [], renamedIcons = [];
|
let newIcons = [], modifiedIcons = [], renamedIcons = [];
|
||||||
|
|
||||||
@@ -319,8 +330,8 @@ gulp.task('changelog-diff', function(cb) {
|
|||||||
renamedIcons.push([fileNameBefore, fileNameAfter]);
|
renamedIcons.push([fileNameBefore, fileNameAfter]);
|
||||||
});
|
});
|
||||||
|
|
||||||
modifiedIcons = modifiedIcons.filter( function( el ) {
|
modifiedIcons = modifiedIcons.filter(function (el) {
|
||||||
return newIcons.indexOf( el ) < 0;
|
return newIcons.indexOf(el) < 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
printChangelog(newIcons, modifiedIcons, renamedIcons);
|
printChangelog(newIcons, modifiedIcons, renamedIcons);
|
||||||
|
10
package.json
10
package.json
@@ -35,12 +35,20 @@
|
|||||||
"glob": "7.1.6",
|
"glob": "7.1.6",
|
||||||
"gulp": "4.0.2",
|
"gulp": "4.0.2",
|
||||||
"gulp-zip": "5.0.1",
|
"gulp-zip": "5.0.1",
|
||||||
|
"minimist": "1.2.5",
|
||||||
"puppeteer": "2.1.1",
|
"puppeteer": "2.1.1",
|
||||||
"release-it": "13.1.2"
|
"release-it": "13.1.2"
|
||||||
},
|
},
|
||||||
"release-it": {
|
"release-it": {
|
||||||
|
"hooks": {
|
||||||
|
"after:bump": "npm run build && npm run png",
|
||||||
|
"after:release": "echo Successfully released ${name} v${version} to ${repo.repository}."
|
||||||
|
},
|
||||||
"git": {
|
"git": {
|
||||||
"tagName": "v${version}"
|
"changelog": "gulp changelog-diff --silent --latest-tag ${latestTag}",
|
||||||
|
"tagName": "v${version}",
|
||||||
|
"requireBranch": "master",
|
||||||
|
"requireCommits": true
|
||||||
},
|
},
|
||||||
"github": {
|
"github": {
|
||||||
"release": true
|
"release": true
|
||||||
|
Reference in New Issue
Block a user