Skip to content

Commit

Permalink
Merge pull request #2 from RecuencoJones/feature/allow-specific-platf…
Browse files Browse the repository at this point in the history
…orm-arch-url-patterns

ALLOW platform specific url patterns
  • Loading branch information
RecuencoJones authored Feb 5, 2020
2 parents 71ac4c1 + 9274e3d commit 695a64f
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 2 deletions.
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package-lock=false
52 changes: 52 additions & 0 deletions __test__/common.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,58 @@ describe('common', () => {
});
});

describe('getUrl', () => {
it('should get url from given string url', () => {
const url = common.getUrl('http://url');

expect(url).toEqual('http://url');
});

it('should get specific url for current platform', () => {
const url = common.getUrl({
default: 'http://url.tar.gz',
windows: 'http://url.exe.zip'
}, { platform: 'windows' });

expect(url).toEqual('http://url.exe.zip');
});

it('should get default url for current platform', () => {
const url = common.getUrl({
default: 'http://url.tar.gz',
windows: 'http://url.exe.zip'
}, { platform: 'linux' });

expect(url).toEqual('http://url.tar.gz');
});

it('should get specific url for current platform and architecture', () => {
const url = common.getUrl({
default: 'http://url.tar.gz',
windows: 'http://url.exe.zip',
darwin: {
default: 'http://url_darwin.tar.gz',
386: 'http://url_darwin_i386.tar.gz'
}
}, { platform: 'darwin', arch: '386' });

expect(url).toEqual('http://url_darwin_i386.tar.gz');
});

it('should get default url for current platform and architecture', () => {
const url = common.getUrl({
default: 'http://url.tar.gz',
windows: 'http://url.exe.zip',
darwin: {
default: 'http://url_darwin.tar.gz',
386: 'http://url_darwin_i386.tar.gz'
}
}, { platform: 'darwin', arch: 'amd64' });

expect(url).toEqual('http://url_darwin.tar.gz');
});
});

describe('parsePackageJson()', () => {
let _process;

Expand Down
35 changes: 33 additions & 2 deletions src/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,32 @@ function validateConfiguration({ version, goBinary }) {
}
}

function getUrl(url, process) {
if (typeof url === 'string') {
return url;
}

let _url;

if (url[process.platform]) {
_url = url[process.platform];
} else {
_url = url.default;
}

if (typeof _url === 'string') {
return _url;
}

if (_url[process.arch]) {
_url = _url[process.arch]
} else {
_url = _url.default;
}

return _url;
}

function parsePackageJson() {
if (!(process.arch in ARCH_MAPPING)) {
console.error('Installation is not supported for this architecture: ' + process.arch);
Expand Down Expand Up @@ -99,9 +125,14 @@ function parsePackageJson() {
// We have validated the config. It exists in all its glory
const binPath = packageJson.goBinary.path;
let binName = packageJson.goBinary.name;
let url = packageJson.goBinary.url;
let url = getUrl(packageJson.goBinary.url, process);
let version = packageJson.version;

if (!url) {
console.error('Could not find url matching platform and architecture');
return
}

if (version[0] === 'v') version = version.substr(1); // strip the 'v' if necessary v0.0.1 => 0.0.1

// Binary name on Windows has .exe suffix
Expand All @@ -127,4 +158,4 @@ function parsePackageJson() {
};
}

module.exports = { parsePackageJson, getInstallationPath };
module.exports = { parsePackageJson, getUrl, getInstallationPath };

0 comments on commit 695a64f

Please sign in to comment.