forked from GoogleChrome/developer.chrome.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension-samples.js
67 lines (52 loc) · 1.73 KB
/
extension-samples.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
* @fileoverview Fetches chrome extension samples list from GitHub artifacts
* and writes to storage.
* https://github.com/GoogleChrome/chrome-extensions-samples
*/
const {
getGitHubApiClient,
} = require('../../gulp-tasks/stageGitHub/lib/gitHubApi.js');
const AdmZip = require('adm-zip');
const fs = require('fs');
const path = require('path');
const REPO_OWNER = 'GoogleChrome';
const REPO_NAME = 'chrome-extensions-samples';
async function run() {
const client = await getGitHubApiClient();
const response = await client.request(
`GET /repos/${REPO_OWNER}/${REPO_NAME}/actions/artifacts`
);
if (response.status !== 200) {
throw new Error(
`Could not fetch artifacts. Status code: ${response.status}`
);
}
const artifacts = response.data.artifacts.filter(
artifact => artifact.name === 'extension-samples.json' && !artifact.expired
);
if (!artifacts.length) {
throw new Error('No artifacts found.');
}
const sortedArtifacts = artifacts.sort((a, b) => {
return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();
});
const latestArtifactId = sortedArtifacts[0].id;
const artifactResponse = await client.request(
`GET /repos/${REPO_OWNER}/${REPO_NAME}/actions/artifacts/${latestArtifactId}/zip`
);
if (artifactResponse.status !== 200) {
throw new Error(
`Could not fetch artifact data. Status code: ${artifactResponse.status}`
);
}
const zip = new AdmZip(Buffer.from(artifactResponse.data));
const zipEntries = zip
.getEntries()
.filter(entry => entry.entryName === 'extension-samples.json')
.map(entry => entry.getData());
fs.writeFileSync(
path.join(__dirname, '../data/extension-samples.json'),
zipEntries[0]
);
}
run();