|
1 | 1 | const { resolve } = require('path');
|
2 | 2 | const fs = require('fs');
|
3 | 3 | const { execSync } = require('child_process');
|
| 4 | +const https = require('https'); |
4 | 5 |
|
5 | 6 | const repoRoot = resolve(__dirname, '..');
|
6 | 7 |
|
7 |
| -const commitHash = process.env.GITHUB_SHA || execSync('git rev-parse HEAD').toString(); |
8 | 8 | const runId = process.env.GITHUB_RUN_ID || 'local-run-id';
|
9 | 9 |
|
| 10 | +const METRICS_SERVICE_URL = process.env.METRICS_SERVICE_URL; |
| 11 | + |
10 | 12 | // CDN scripts
|
11 | 13 | function generateReportForCDNScripts() {
|
12 | 14 | const reports = [];
|
13 | 15 | const firebaseRoot = resolve(__dirname, '../packages/firebase');
|
14 | 16 | const pkgJson = require(`${firebaseRoot}/package.json`);
|
15 |
| - |
| 17 | + |
16 | 18 | const special_files = [
|
17 | 19 | 'firebase-performance-standalone.es2017.js',
|
18 | 20 | 'firebase-performance-standalone.js',
|
19 | 21 | 'firebase.js'
|
20 | 22 | ];
|
21 |
| - |
| 23 | + |
22 | 24 | const files = [
|
23 |
| - ...special_files.map(file => `${firebaseRoot}/${file}`), |
| 25 | + ...special_files.map(file => `${firebaseRoot}/${file}`), |
24 | 26 | ...pkgJson.components.map(component => `${firebaseRoot}/firebase-${component}.js`)
|
25 | 27 | ];
|
26 |
| - |
| 28 | + |
27 | 29 | for (const file of files) {
|
28 | 30 | const { size } = fs.statSync(file);
|
29 | 31 | const fileName = file.split('/').slice(-1)[0];
|
@@ -83,13 +85,64 @@ function generateSizeReport() {
|
83 | 85 | console.log(r.sdk, r.type, r.value);
|
84 | 86 | }
|
85 | 87 |
|
86 |
| - console.log(`Github Action URL: https://github.com/firebase/firebase-js-sdk/actions/runs/${runId}`); |
| 88 | + console.log(`Github Action URL: https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${runId}`); |
87 | 89 |
|
88 | 90 | return {
|
89 |
| - log: `https://github.com/firebase/firebase-js-sdk/actions/runs/${runId}`, |
| 91 | + log: `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${runId}`, |
90 | 92 | metric: "BinarySize",
|
91 | 93 | results: reports
|
92 | 94 | };
|
93 | 95 | }
|
94 | 96 |
|
95 |
| -generateSizeReport(); |
| 97 | +function constructRequestPath() { |
| 98 | + const repo = process.env.GITHUB_REPOSITORY; |
| 99 | + const commit = process.env.GITHUB_SHA; |
| 100 | + let path = `/repos/${repo}/commits/${commit}/reports`; |
| 101 | + if (process.env.GITHUB_EVENT_NAME === 'pull_request') { |
| 102 | + const pullRequestNumber = process.env.GITHUB_PULL_REQUEST_NUMBER; |
| 103 | + const pullRequestBaseSha = process.env.GITHUB_PULL_REQUEST_BASE_SHA; |
| 104 | + path += `?pull_request=${pullRequestNumber}&base_commit=${pullRequestBaseSha}`; |
| 105 | + } |
| 106 | + return path; |
| 107 | +} |
| 108 | + |
| 109 | +function constructRequestOptions(path) { |
| 110 | + const accessToken = execSync('gcloud auth print-identity-token', { encoding: 'utf8' }).trim(); |
| 111 | + return { |
| 112 | + path: path, |
| 113 | + method: 'POST', |
| 114 | + headers: { |
| 115 | + 'Authorization': `Bearer ${accessToken}`, |
| 116 | + 'Content-Type': 'application/json' |
| 117 | + } |
| 118 | + }; |
| 119 | +} |
| 120 | + |
| 121 | +function upload(report) { |
| 122 | + if (!process.env.GITHUB_ACTIONS) { |
| 123 | + console.log('Metrics upload is only enabled on CI.'); |
| 124 | + return; |
| 125 | + } |
| 126 | + |
| 127 | + const path = constructRequestPath(); |
| 128 | + const options = constructRequestOptions(path); |
| 129 | + |
| 130 | + console.log(`${report.metric} report:`, report); |
| 131 | + console.log(`Posting to metrics service endpoint: ${path} ...`); |
| 132 | + |
| 133 | + const request = https.request(METRICS_SERVICE_URL, options, response => { |
| 134 | + response.setEncoding('utf8'); |
| 135 | + console.log(`Response status code: ${response.statusCode}`); |
| 136 | + response.on('data', console.log); |
| 137 | + response.on('end', () => { |
| 138 | + if (response.statusCode !== 202) { |
| 139 | + process.exit(1); |
| 140 | + } |
| 141 | + }) |
| 142 | + }); |
| 143 | + request.write(JSON.stringify(report)); |
| 144 | + request.end(); |
| 145 | +} |
| 146 | + |
| 147 | +const report = generateSizeReport(); |
| 148 | +upload(report); |
0 commit comments