Skip to content

Commit 1c7a255

Browse files
committed
refactor: use octokit for fetching from github
1 parent 76fcb68 commit 1c7a255

File tree

7 files changed

+207
-114
lines changed

7 files changed

+207
-114
lines changed

lib/loader/octokit-wrapper.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
'use strict';
2+
3+
const { Octokit } = require('@octokit/rest');
4+
5+
exports.create = () => {
6+
7+
const octokit = new Octokit();
8+
9+
// @todo: onRateLimit
10+
// @todo: auth
11+
// @todo: user agent
12+
13+
return octokit;
14+
};

lib/loader/repository.js

+31-16
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
'use strict';
22

33
const GitUrlParse = require('git-url-parse');
4-
const Wreck = require('@hapi/wreck');
54

65
const Logger = require('../logger');
6+
const OctokitWrapper = require('./octokit-wrapper');
77
const Utils = require('../utils');
88

99

@@ -30,40 +30,55 @@ exports.create = (repository) => {
3030

3131
return head;
3232
},
33-
loadFile: async (filename, options) => {
33+
loadFile: async (filename, options = {}) => {
3434

3535
if (parsedRepository.source !== 'github.com') {
3636
throw new Error('Only github.com paths supported, feel free to PR at https://github.com/pkgjs/detect-node-support');
3737
}
3838

39-
const url = `https://raw.githubusercontent.com/${parsedRepository.full_name}/HEAD/${filename}`;
40-
Logger.log(['loader'], 'Loading: %s', url);
39+
const resource = `${parsedRepository.full_name}:${filename}@HEAD`;
40+
Logger.log(['loader'], 'Loading: %s', resource);
4141

42-
if (options === undefined && internals.cache.has(url)) {
43-
Logger.log(['loader'], 'From cache: %s', url);
44-
return internals.cache.get(url);
45-
}
42+
const octokit = OctokitWrapper.create();
4643

4744
try {
48-
const { payload } = await Wreck.get(url, options);
4945

50-
if (options === undefined) {
51-
internals.cache.set(url, payload);
46+
let result;
47+
if (internals.cache.has(resource)) {
48+
Logger.log(['loader'], 'From cache: %s', resource);
49+
result = internals.cache.get(resource);
50+
}
51+
else {
52+
result = await octokit.repos.getContent({
53+
owner: parsedRepository.owner,
54+
repo: parsedRepository.name,
55+
path: filename
56+
});
57+
}
58+
59+
internals.cache.set(resource, result);
60+
61+
Logger.log(['loader'], 'Loaded: %s', resource);
62+
63+
const content = Buffer.from(result.data.content, 'base64');
64+
65+
if (options.json) {
66+
// @todo: cache parsed JSON, parse YAML
67+
return JSON.parse(content.toString());
5268
}
5369

54-
Logger.log(['loader'], 'Loaded: %s', url);
55-
return payload;
70+
return content;
5671
}
5772
catch (err) {
5873

59-
if (err.data && err.data.res.statusCode === 404) {
60-
Logger.log(['loader'], 'Not found: %s', url);
74+
if (err.status === 404) {
75+
Logger.log(['loader'], 'Not found: %s', resource);
6176
const error = new Error(`${repository} does not contain a ${filename}`);
6277
error.code = 'ENOENT';
6378
throw error;
6479
}
6580

66-
Logger.error(['loader'], 'Failed to load: %s', url);
81+
Logger.error(['loader'], 'Failed to load: %s', resource);
6782
throw err;
6883
}
6984
}

lib/package.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ exports.detect = async (what) => {
4545

4646
const { loadFile, getCommit } = await Loader.create({ path, repository, packageName });
4747

48-
const packageJson = await loadFile('package.json', { json: 'force' });
48+
const packageJson = await loadFile('package.json', { json: true });
4949

5050
const meta = {
5151
packageJson,

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
"sinon": "^9.0.0"
3636
},
3737
"dependencies": {
38-
"@hapi/wreck": "^17.0.0",
3938
"@npmcli/arborist": "0.0.15",
39+
"@octokit/rest": "^18.0.0",
4040
"@pkgjs/nv": "0.0.3",
4141
"debug": "^4.1.1",
4242
"git-url-parse": "^11.1.2",

test/fixtures/index.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,12 @@ module.exports = class TestContext {
7070
.get('/dist/index.json')
7171
.reply(200, Fs.readFileSync(Path.join(__dirname, 'node-release-dist.json')));
7272

73-
Nock('https://raw.githubusercontent.com')
73+
Nock('https://api.github.com')
7474
.persist()
75-
.get('/nodejs/ci-config-travis/HEAD/lts/gte-10.yml')
76-
.reply(200, Fs.readFileSync(Path.join(__dirname, 'travis-ymls', 'nodejs-ci-config-travis-gte-10.yml')));
75+
.get('/repos/nodejs/ci-config-travis/contents/lts%2Fgte-10.yml')
76+
.reply(200, {
77+
content: Fs.readFileSync(Path.join(__dirname, 'travis-ymls', 'nodejs-ci-config-travis-gte-10.yml')).toString('base64')
78+
});
7779

7880
this._cleanup.push(() => {
7981

0 commit comments

Comments
 (0)