mirror of https://github.com/keeweb/keeweb.git
release stats script
This commit is contained in:
parent
d796dd36e1
commit
6626fde49f
|
@ -0,0 +1,87 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>KeeWeb Release Stats</title>
|
||||
<!--<script src="http://code.highcharts.com/highcharts.js"></script>-->
|
||||
<script src="https://code.highcharts.com/stock/highstock.js"></script>
|
||||
<script>
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.responseType = 'json';
|
||||
xhr.open('GET', 'release-stats.json', true);
|
||||
xhr.addEventListener('load', () => {
|
||||
drawChart(xhr.response);
|
||||
});
|
||||
xhr.send();
|
||||
|
||||
function drawChart(data) {
|
||||
Highcharts.chart('chart-size', {
|
||||
title: {
|
||||
text: 'KeeWeb Code Size'
|
||||
},
|
||||
chart: {
|
||||
zoomType: 'x'
|
||||
},
|
||||
xAxis: {
|
||||
type: 'datetime'
|
||||
},
|
||||
yAxis: {
|
||||
title: {
|
||||
text: 'Bytes'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
enabled: true
|
||||
},
|
||||
plotOptions: {
|
||||
area: {
|
||||
marker: {
|
||||
radius: 2
|
||||
},
|
||||
lineWidth: 1,
|
||||
states: {
|
||||
hover: {
|
||||
lineWidth: 1
|
||||
}
|
||||
},
|
||||
threshold: null
|
||||
},
|
||||
series: {
|
||||
stacking: 'normal'
|
||||
}
|
||||
},
|
||||
tooltip: {
|
||||
split: true
|
||||
},
|
||||
series: [{
|
||||
type: 'area',
|
||||
name: 'Favicons',
|
||||
data: data.map(item => [item.dt, item.size.favicons])
|
||||
}, {
|
||||
type: 'area',
|
||||
name: 'CSS',
|
||||
data: data.map(item => [item.dt, item.size.css])
|
||||
}, {
|
||||
type: 'area',
|
||||
name: 'JS-Vendor',
|
||||
data: data.map(item => [item.dt, item.size.jsVendor])
|
||||
}, {
|
||||
type: 'area',
|
||||
name: 'JS-App',
|
||||
data: data.map(item => [item.dt, item.size.jsApp])
|
||||
}, {
|
||||
type: 'flags',
|
||||
shape: 'squarepin',
|
||||
y: -55,
|
||||
showInLegend: false,
|
||||
stacking: false,
|
||||
data: data.filter(item => /.0$/.test(item.tag)).map(item => ({ x: item.dt, title: item.tag }))
|
||||
}]
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="chart-size" style="height: 90vh;"></div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,62 @@
|
|||
/* eslint-disable no-console */
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const ps = require('child_process');
|
||||
|
||||
const cwd = path.resolve(__dirname, 'keeweb');
|
||||
|
||||
if (!fs.existsSync(cwd)) {
|
||||
console.log('Cloning...');
|
||||
ps.spawnSync('git', ['clone', 'git@github.com:keeweb/keeweb.git', '-b', 'gh-pages'], {cwd: __dirname});
|
||||
}
|
||||
|
||||
console.log('Getting log...');
|
||||
|
||||
ps.spawnSync('git', ['reset', '--hard'], {cwd});
|
||||
ps.spawnSync('git', ['checkout', 'gh-pages'], {cwd});
|
||||
const gitLog = ps.spawnSync('git', ['log'], {cwd}).stdout.toString();
|
||||
|
||||
console.log('Gettings tags...');
|
||||
|
||||
const tags = ps.spawnSync('git', ['tag', '-l'], {cwd})
|
||||
.stdout.toString()
|
||||
.split('\n')
|
||||
.filter(tag => tag);
|
||||
|
||||
console.log(`Found ${tags.length} tags`);
|
||||
|
||||
const stats = [];
|
||||
for (const tag of tags) {
|
||||
console.log(`Tag: ${tag}`);
|
||||
const match = new RegExp(`commit (\\w+)\\nAuthor[^\\n]+\\nDate:\\s*([^\\n]+)\\n\\n\\s*${tag}`).exec(gitLog);
|
||||
const [, rev, date] = match;
|
||||
const dt = new Date(date).getTime();
|
||||
const checkoutRes = ps.spawnSync('git', ['checkout', rev], {cwd});
|
||||
if (checkoutRes.error) {
|
||||
console.error('Checkout error', checkoutRes.error);
|
||||
throw 'Checkout error';
|
||||
}
|
||||
|
||||
const size = {};
|
||||
|
||||
const data = fs.readFileSync(path.join(cwd, 'index.html'));
|
||||
const html = data.toString();
|
||||
|
||||
size.total = data.byteLength;
|
||||
size.favicons = /<link rel="shortcut icon"[^>]+>/.exec(html)[0].length +
|
||||
(/<link rel="apple-touch-icon"[^>]+>/.exec(html) || [''])[0].length;
|
||||
size.css = /<style>.*?<\/style>/.exec(html)[0].length;
|
||||
size.jsVendor = /<\/style><script>[\s\S]*?<\/script>/.exec(html)[0].length;
|
||||
size.jsApp = /<\/script><script>[\s\S]*?<\/script>/.exec(html)[0].length;
|
||||
|
||||
stats.push({ tag, rev, dt, size });
|
||||
}
|
||||
|
||||
// https://api.github.com/repos/keeweb/keeweb/issues?state=all&sort=created&direction=asc
|
||||
|
||||
console.log('Saving stats...');
|
||||
|
||||
fs.writeFileSync(path.resolve(__dirname, 'release-stats.json'), JSON.stringify(stats, null, 2));
|
||||
|
||||
console.log('Done');
|
Loading…
Reference in New Issue