Skip to content

Commit cfdb567

Browse files
authored
Merge pull request #514 from Synthetixio/dev
promote dev to master
2 parents b4ffe99 + 979c0c5 commit cfdb567

File tree

3 files changed

+437
-56
lines changed

3 files changed

+437
-56
lines changed

helpers.js

+74-35
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const axios = require('axios');
2-
const fs = require('fs');
3-
const zip = require('cross-zip');
2+
const fs = require('fs').promises;
43
const path = require('path');
4+
const download = require('download');
55
const packageJson = require('./package.json');
66

77
let networkName = 'mainnet';
@@ -47,51 +47,90 @@ module.exports = {
4747
return path.dirname(require.resolve(packageJson.name));
4848
}
4949
},
50+
createDirIfNotExist: async path => {
51+
try {
52+
await fs.access(path);
53+
} catch (e) {
54+
if (e.code === 'ENOENT') {
55+
await fs.mkdir(path);
56+
} else {
57+
throw new Error(
58+
`[prepareMetamask] Unhandled error from fs.access() with following error:\n${e}`,
59+
);
60+
}
61+
}
62+
},
63+
checkDirOrFileExist: async path => {
64+
try {
65+
await fs.access(path);
66+
return true;
67+
} catch (e) {
68+
if (e.code === 'ENOENT') {
69+
return false;
70+
} else {
71+
throw new Error(
72+
`[checkDirOrFileExist] Unhandled error from fs.access() with following error:\n${e}`,
73+
);
74+
}
75+
}
76+
},
5077
getMetamaskReleases: async version => {
5178
let filename;
5279
let downloadUrl;
80+
let tagName;
5381

54-
const response = await axios.get(
55-
'https://api.github.com/repos/metamask/metamask-extension/releases',
56-
);
57-
58-
if (version === 'latest' || !version) {
59-
filename = response.data[0].assets[0].name;
60-
downloadUrl = response.data[0].assets[0].browser_download_url;
61-
} else if (version) {
62-
filename = `metamask-chrome-${version}.zip`;
63-
downloadUrl = `https://github.com/MetaMask/metamask-extension/releases/download/v${version}/metamask-chrome-${version}.zip`;
82+
try {
83+
const response = await axios.get(
84+
'https://api.github.com/repos/metamask/metamask-extension/releases',
85+
);
86+
if (version === 'latest' || !version) {
87+
filename = response.data[0].assets[0].name;
88+
downloadUrl = response.data[0].assets[0].browser_download_url;
89+
tagName = response.data[0].tag_name;
90+
} else if (version) {
91+
filename = `metamask-chrome-${version}.zip`;
92+
downloadUrl = `https://github.com/MetaMask/metamask-extension/releases/download/v${version}/metamask-chrome-${version}.zip`;
93+
tagName = `metamask-chrome-${version}`;
94+
}
95+
return {
96+
filename,
97+
downloadUrl,
98+
tagName,
99+
};
100+
} catch (e) {
101+
throw new Error(
102+
`[getMetamaskReleases] Unable to fetch metamask releases from: ${downloadUrl} with following error:\n${e}`,
103+
);
64104
}
65-
66-
return {
67-
filename,
68-
downloadUrl,
69-
};
70105
},
71106
download: async (url, destination) => {
72-
const writer = fs.createWriteStream(destination);
73-
const result = await axios({
74-
url,
75-
method: 'GET',
76-
responseType: 'stream',
77-
});
78-
await new Promise(resolve =>
79-
result.data.pipe(writer).on('finish', resolve),
80-
);
81-
},
82-
extract: async (file, destination) => {
83-
await zip.unzip(file, destination);
107+
try {
108+
await download(url, destination, { extract: true });
109+
} catch (e) {
110+
throw new Error(
111+
`[download] Unable to download metamask release from: ${url} to: ${destination} with following error:\n${e}`,
112+
);
113+
}
84114
},
85115
prepareMetamask: async version => {
86116
const release = await module.exports.getMetamaskReleases(version);
87117
const downloadsDirectory = path.resolve(__dirname, 'downloads');
88-
if (!fs.existsSync(downloadsDirectory)) {
89-
fs.mkdirSync(downloadsDirectory);
118+
await module.exports.createDirIfNotExist(downloadsDirectory);
119+
const metamaskDirectory = path.join(downloadsDirectory, release.tagName);
120+
const metamaskDirectoryExists = await module.exports.checkDirOrFileExist(
121+
metamaskDirectory,
122+
);
123+
const metamaskManifestFilePath = path.join(
124+
downloadsDirectory,
125+
release.tagName,
126+
'manifest.json',
127+
);
128+
const metamaskManifestFileExists = await module.exports.checkDirOrFileExist(
129+
metamaskManifestFilePath,
130+
);
131+
if (!metamaskDirectoryExists && !metamaskManifestFileExists) {
132+
await module.exports.download(release.downloadUrl, metamaskDirectory);
90133
}
91-
const downloadDestination = path.join(downloadsDirectory, release.filename);
92-
await module.exports.download(release.downloadUrl, downloadDestination);
93-
const metamaskDirectory = path.join(downloadsDirectory, 'metamask');
94-
await module.exports.extract(downloadDestination, metamaskDirectory);
95134
return metamaskDirectory;
96135
},
97136
};

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@
6161
"babel-plugin-transform-react-styled-components-qa": "^2.1.0",
6262
"bytes32": "^0.0.3",
6363
"commander": "^9.4.0",
64-
"cross-zip": "^4.0.0",
6564
"cypress": "^10.8.0",
6665
"cypress-wait-until": "^1.7.2",
6766
"dotenv": "^16.0.2",
6867
"dotenv-parse-variables": "^2.0.0",
68+
"download": "^8.0.0",
6969
"eslint": "^7.32.0",
7070
"eslint-config-prettier": "^8.5.0",
7171
"eslint-config-standard": "^17.0.0",

0 commit comments

Comments
 (0)