Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

enable --force-upload to upload npm packages #266

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions bin/commands/info.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ module.exports = function info(args, rawArgs) {
errorCode = 'api_failed_build_info';

logger.info(message);
logger.error(utils.formatRequest(err, resp, body));
} else {
let build = null;
try {
Expand All @@ -66,6 +67,7 @@ module.exports = function info(args, rawArgs) {
message = Constants.userMessages.API_DEPRECATED;
logger.info(message);
}
logger.info(utils.formatRequest(err, resp, body));
} else if (resp.statusCode != 200) {
messageType = Constants.messageTypes.ERROR;
errorCode = 'api_failed_build_info';
Expand All @@ -80,6 +82,7 @@ module.exports = function info(args, rawArgs) {
message = Constants.userMessages.BUILD_INFO_FAILED;
logger.error(message);
}
logger.error(utils.formatRequest(err, resp, body));
} else {
messageType = Constants.messageTypes.SUCCESS;
message = `Build info for build id: \n ${JSON.stringify(
Expand Down
6 changes: 5 additions & 1 deletion bin/helpers/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ const request = require('request');
const config = require('./config'),
capabilityHelper = require("../helpers/capabilityHelper"),
Constants = require('../helpers/constants'),
utils = require('../helpers/utils');
utils = require('../helpers/utils'),
logger = require('../helpers/logger').winstonLogger;

const createBuild = (bsConfig, zip) => {
return new Promise(function (resolve, reject) {
Expand All @@ -24,6 +25,7 @@ const createBuild = (bsConfig, zip) => {

request.post(options, function (err, resp, body) {
if (err) {
logger.error(utils.formatRequest(err, resp, body));
reject(err);
} else {
let build = null;
Expand All @@ -37,9 +39,11 @@ const createBuild = (bsConfig, zip) => {
if (build) {
resolve(build.message);
} else {
logger.error(utils.formatRequest(err, resp, body));
reject(Constants.userMessages.API_DEPRECATED);
}
} else if (resp.statusCode != 201) {
logger.error(utils.formatRequest(err, resp, body));
if (build) {
reject(`${Constants.userMessages.BUILD_FAILED} Error: ${build.message}`);
} else {
Expand Down
5 changes: 5 additions & 0 deletions bin/helpers/buildArtifacts.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ const sendUpdatesToBstack = async (bsConfig, buildId, args, options, rawArgs) =>
request.post(options, function (err, resp, data) {
if(err) {
utils.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'api_failed_build_artifacts_status_update', null, rawArgs);
logger.error(utils.formatRequest(err, resp, body));
reject(err);
} else {
try {
Expand Down Expand Up @@ -203,6 +204,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => {
let buildDetails = null;
request.get(options, async function (err, resp, body) {
if(err) {
logger.error(utils.formatRequest(err, resp, body));
utils.sendUsageReport(bsConfig, args, err, Constants.messageTypes.ERROR, 'api_failed_build_artifacts', null, rawArgs);
process.exitCode = Constants.ERROR_EXIT_CODE;
} else {
Expand All @@ -211,6 +213,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => {
if(resp.statusCode != 200) {
logger.error('Downloading the build artifacts failed.');
logger.error(`Error: Request failed with status code ${resp.statusCode}`)
logger.error(utils.formatRequest(err, resp, body));
utils.sendUsageReport(bsConfig, args, buildDetails, Constants.messageTypes.ERROR, 'api_failed_build_artifacts', null, rawArgs);
process.exitCode = Constants.ERROR_EXIT_CODE;
} else {
Expand All @@ -220,6 +223,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => {
messageType = Constants.messageTypes.ERROR;
message = Constants.userMessages.DOWNLOAD_BUILD_ARTIFACTS_FAILED.replace('<build-id>', buildId).replace('<machine-count>', BUILD_ARTIFACTS_FAIL_COUNT);
logger.error(message);
logger.error(utils.formatRequest(err, resp, body));
process.exitCode = Constants.ERROR_EXIT_CODE;
} else {
messageType = Constants.messageTypes.SUCCESS;
Expand All @@ -241,6 +245,7 @@ exports.downloadBuildArtifacts = async (bsConfig, buildId, args, rawArgs) => {
}
utils.sendUsageReport(bsConfig, args, err, messageType, errorCode, null, rawArgs);
logger.error(`Error: Request failed with status code ${resp.statusCode}`)
logger.error(utils.formatRequest(err, resp, body));
process.exitCode = Constants.ERROR_EXIT_CODE;
}
}
Expand Down
2 changes: 1 addition & 1 deletion bin/helpers/checkUploaded.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ const checkUploadedMd5 = (bsConfig, args, instrumentBlocks) => {
zipUrlPresent: false,
packageUrlPresent: false,
};
if (args["force-upload"] && !utils.isTrueString(bsConfig.run_settings.cache_dependencies)) {
if (args["force-upload"]) {
return resolve(obj);
}

Expand Down
8 changes: 4 additions & 4 deletions bin/helpers/reporterHTML.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,14 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => {
let messageType = null;
let errorCode = null;
let build;

if (err) {
message = err;
messageType = Constants.messageTypes.ERROR;
errorCode = 'api_failed_build_report';

logger.error('Generating the build report failed.');
logger.error(message);
logger.error(utils.formatRequest(err, resp, body));

utils.sendUsageReport(bsConfig, args, message, messageType, errorCode, null, rawArgs);
return;
Expand Down Expand Up @@ -145,7 +145,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => {
logger.error(`Error generating the report: ${error}`);
response = {message: message};
}
logger.error(response.message);
logger.error(utils.formatRequest(err, resp, body));
} else if (resp.statusCode != 200) {
messageType = Constants.messageTypes.ERROR;
errorCode = 'api_failed_build_generate_report';
Expand All @@ -158,7 +158,7 @@ let reportGenerator = (bsConfig, buildId, args, rawArgs, cb) => {
if (build.message === 'Unauthorized') errorCode = 'api_auth_failed';
} else {
message = Constants.userMessages.BUILD_GENERATE_REPORT_FAILED.replace('<build-id>', buildId);
logger.error(message);
logger.error(utils.formatRequest(err, resp, body));
}
} else {
messageType = Constants.messageTypes.SUCCESS;
Expand Down
9 changes: 9 additions & 0 deletions bin/helpers/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const getmac = require('getmac').default;
const { v4: uuidv4 } = require('uuid');
const browserstack = require('browserstack-local');
const crypto = require('crypto');
const util = require('util');

const usageReporting = require("./usageReporting"),
logger = require("./logger").winstonLogger,
Expand Down Expand Up @@ -969,6 +970,14 @@ exports.setCLIMode = (bsConfig, args) => {
}
}

exports.formatRequest = (err, resp, body) => {
nagpalkaran95 marked this conversation as resolved.
Show resolved Hide resolved
return {
err,
status: resp ? resp.statusCode : null,
body: body ? util.format('%j', body) : null
}
}

exports.stopBrowserStackBuild = async (bsConfig, args, buildId, rawArgs) => {
let that = this;
return new Promise(function (resolve, reject) {
Expand Down
19 changes: 10 additions & 9 deletions bin/helpers/zipUpload.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => {
var r = request.post(options, function (err, resp, body) {

if (err) {
reject(err);
reject({message: err, stacktrace: utils.formatRequest(err, resp, body)});
} else {
try {
responseData = JSON.parse(body);
Expand All @@ -63,22 +63,22 @@ const uploadSuits = (bsConfig, filePath, opts, obj) => {
if (resp.statusCode == 401) {
if (responseData && responseData["error"]) {
responseData["time"] = Date.now() - obj.startTime;
return reject(responseData["error"]);
return reject({message: responseData["error"], stacktrace: utils.formatRequest(err, resp, body)});
} else {
return reject(Constants.validationMessages.INVALID_DEFAULT_AUTH_PARAMS);
return reject({message: Constants.validationMessages.INVALID_DEFAULT_AUTH_PARAMS, stacktrace: utils.formatRequest(err, resp, body)});
}
}
if (!opts.propogateError){
return resolve({});
}
if(responseData && responseData["error"]){
responseData["time"] = Date.now() - obj.startTime;
reject(responseData["error"]);
reject({message: responseData["error"], stacktrace: utils.formatRequest(err, resp, body)});
} else {
if (resp.statusCode == 413) {
reject(Constants.userMessages.ZIP_UPLOAD_LIMIT_EXCEEDED);
reject({message: Constants.userMessages.ZIP_UPLOAD_LIMIT_EXCEEDED, stacktrace: utils.formatRequest(err, resp, body)});
} else {
reject(Constants.userMessages.ZIP_UPLOADER_NOT_REACHABLE);
reject({message: Constants.userMessages.ZIP_UPLOADER_NOT_REACHABLE, stacktrace: utils.formatRequest(err, resp, body)});
}
}
} else {
Expand Down Expand Up @@ -147,9 +147,10 @@ const uploadCypressZip = (bsConfig, md5data, packageData) => {
});
return resolve(obj);
}).catch((error) => {
purgeUploadBar(testZipUploadObj);
purgeUploadBar(npmPackageZipUploadObj);
return reject(error);
testZipUploadObj.bar1 && purgeUploadBar(testZipUploadObj);
npmPackageZipUploadObj.bar1 && purgeUploadBar(npmPackageZipUploadObj);
logger.error(error.stacktrace)
return reject(error.message);
})
})
}
Expand Down
18 changes: 12 additions & 6 deletions test/unit/bin/commands/info.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ const chai = require("chai"),

const Constants = require("../../../../bin/helpers/constants"),
logger = require("../../../../bin/helpers/logger").winstonLogger,
testObjects = require("../../support/fixtures/testObjects");
testObjects = require("../../support/fixtures/testObjects"),
formatRequest = require('../../../../bin/helpers/utils').formatRequest;

const proxyquire = require("proxyquire").noCallThru();

Expand Down Expand Up @@ -60,7 +61,8 @@ describe("buildInfo", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
getUserAgent: getUserAgentStub,
getConfigPath: getConfigPathStub,
setDefaults: setDefaultsStub
setDefaults: setDefaultsStub,
formatRequest,
},
request: {get: requestStub},
});
Expand Down Expand Up @@ -98,7 +100,8 @@ describe("buildInfo", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
getUserAgent: getUserAgentStub,
getConfigPath: getConfigPathStub,
setDefaults: setDefaultsStub
setDefaults: setDefaultsStub,
formatRequest,
},
request: {get: requestStub},
});
Expand Down Expand Up @@ -160,7 +163,8 @@ describe("buildInfo", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
getUserAgent: getUserAgentStub,
getConfigPath: getConfigPathStub,
setDefaults: setDefaultsStub
setDefaults: setDefaultsStub,
formatRequest,
},
request: {get: requestStub},
});
Expand Down Expand Up @@ -204,7 +208,8 @@ describe("buildInfo", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
getUserAgent: getUserAgentStub,
getConfigPath: getConfigPathStub,
setDefaults: setDefaultsStub
setDefaults: setDefaultsStub,
formatRequest,
},
request: {get: requestStub},
});
Expand Down Expand Up @@ -243,7 +248,8 @@ describe("buildInfo", () => {
setCypressConfigFilename: setCypressConfigFilenameStub,
getUserAgent: getUserAgentStub,
getConfigPath: getConfigPathStub,
setDefaults: setDefaultsStub
setDefaults: setDefaultsStub,
formatRequest,
},
request: {get: requestStub},
});
Expand Down
7 changes: 6 additions & 1 deletion test/unit/bin/helpers/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ const chai = require("chai"),

const Constants = require("../../../../bin/helpers/constants"),
logger = require("../../../../bin/helpers/logger").winstonLogger,
testObjects = require("../../support/fixtures/testObjects");
testObjects = require("../../support/fixtures/testObjects"),
formatRequest = require("../../../../bin/helpers/utils").formatRequest;

const proxyquire = require("proxyquire").noCallThru();

Expand Down Expand Up @@ -37,6 +38,7 @@ describe("build", () => {
const build = proxyquire("../../../../bin/helpers/build", {
"../helpers/utils": {
getUserAgent: getUserAgentStub,
formatRequest,
},
"../helpers/capabilityHelper": {
caps: capsStub,
Expand Down Expand Up @@ -64,6 +66,7 @@ describe("build", () => {
const build = proxyquire("../../../../bin/helpers/build", {
"../helpers/utils": {
getUserAgent: getUserAgentStub,
formatRequest,
},
"../helpers/capabilityHelper": {
caps: capsStub,
Expand Down Expand Up @@ -121,6 +124,7 @@ describe("build", () => {
const build = proxyquire("../../../../bin/helpers/build", {
"../helpers/utils": {
getUserAgent: getUserAgentStub,
formatRequest,
},
"../helpers/capabilityHelper": {
caps: capsStub,
Expand Down Expand Up @@ -153,6 +157,7 @@ describe("build", () => {
const build = proxyquire("../../../../bin/helpers/build", {
"../helpers/utils": {
getUserAgent: getUserAgentStub,
formatRequest,
},
"../helpers/capabilityHelper": {
caps: capsStub,
Expand Down
9 changes: 5 additions & 4 deletions test/unit/bin/helpers/checkUploaded.js
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ describe("checkUploaded", () => {
});
});

it("resolves with zipUrlPresent false and packageUrlPresent true if force-upload enabled and cache_dependencies enabled", () => {
it("resolves with zipUrlPresent false and packageUrlPresent false if force-upload enabled and cache_dependencies enabled", () => {
let requestStub = sandbox
.stub(request, "post")
.yields(null, { statusCode: 200 }, '{"npmPackageUrl":"bs://random_hashid2"}');
Expand All @@ -219,11 +219,12 @@ describe("checkUploaded", () => {
bsConfig.run_settings.cache_dependencies = true
return checkUploadedMd5rewire(bsConfig, {"force-upload": true}, instrumentBlocks)
.then((data) => {
chai.assert.deepEqual(data, { zipUrlPresent: false, packageUrlPresent: true, npm_package_md5sum: 'random_md5sum', npmPackageUrl: 'bs://random_hashid2' })
sinon.assert.calledOnce(requestStub);
sinon.assert.calledOnce(checkSpecsMd5Stub);
chai.assert.deepEqual(data, { zipUrlPresent: false, packageUrlPresent: false })
sinon.assert.notCalled(requestStub);
sinon.assert.notCalled(checkSpecsMd5Stub);
})
.catch((_error) => {
console.log(_error)
chai.assert.fail("Promise error");
});
});
Expand Down
Loading