consume implementation code from jsforce-deploy and jsforce-connection
This commit is contained in:
Родитель
74c08523da
Коммит
3a3d68a0ee
12
bin/compile
12
bin/compile
|
@ -49,17 +49,5 @@ status "Installing modules"
|
|||
cd $SALESFORCE_DIR
|
||||
npm install | indent
|
||||
|
||||
# Allow the user to specify the salesforce source. We only want to zip one
|
||||
# level above the source, and zip includes relative paths. So we first cd one
|
||||
# level above, the SRC_DIR, then zip the source folder, the SRC_FOLDER.
|
||||
SRC_PATH=${SALESFORCE_SRC_PATH:-"salesforce/src"}
|
||||
SRC_DIR=$(dirname $SRC_PATH)
|
||||
SRC_FOLDER=$(basename $SRC_PATH)
|
||||
|
||||
status "Building ZIP from $SRC_DIR to $SALESFORCE_DIR_NAME/src.zip"
|
||||
rm -f $SALESFORCE_DIR/src.zip
|
||||
cd $BUILD_DIR/$SRC_DIR
|
||||
zip -r $SALESFORCE_DIR/src.zip $SRC_FOLDER | indent
|
||||
|
||||
echo ""
|
||||
echo "Configure your application to invoke '$SALESFORCE_DIR_NAME/deploy' in your release phase script or Procfile"
|
||||
|
|
|
@ -1,47 +1,8 @@
|
|||
const zipPath = '.salesforce/src.zip';
|
||||
|
||||
const fs = require('fs');
|
||||
const jsforceConnection = require('./jsforce-connection');
|
||||
const connection = require('jsforce-connection').connection;
|
||||
const jsforceDeploy = require('jsforce-deploy');
|
||||
|
||||
const prompt = function(message) {
|
||||
console.log(`-----> ${message}`);
|
||||
};
|
||||
|
||||
const info = function(message) {
|
||||
console.log(` ${message}`);
|
||||
};
|
||||
|
||||
const error = function(message) {
|
||||
console.error(` ! ${message}`);
|
||||
};
|
||||
|
||||
return jsforceConnection()
|
||||
.then( conn => {
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log('-----> Deploying metadata');
|
||||
const zipStream = fs.createReadStream(zipPath);
|
||||
conn.metadata.pollTimeout = 240*1000;
|
||||
const deployLocator = conn.metadata.deploy(zipStream, {});
|
||||
deployLocator.complete(true, function(err, result) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
resolve(result);
|
||||
});
|
||||
})
|
||||
})
|
||||
.then( result => {
|
||||
info('done ? :' + result.done);
|
||||
info('success ? : ' + result.true);
|
||||
info('state : ' + result.state);
|
||||
info('component errors: ' + result.numberComponentErrors);
|
||||
info('components deployed: ' + result.numberComponentsDeployed);
|
||||
info('tests completed: ' + result.numberTestsCompleted);
|
||||
info(' ' + (result.success ? 'Success' : 'Failed'));
|
||||
})
|
||||
.catch( err => {
|
||||
error(err.stack);
|
||||
process.exit(1);
|
||||
});
|
||||
const srcPath = process.env.SALESFORCE_SRC_PATH || 'salesforce/src';
|
||||
return connection().then((conn) => jsforceDeploy(conn)(srcPath));
|
||||
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
const fetch = require('node-fetch');
|
||||
|
||||
module.exports = function getSalesforceIdentity(accessToken, idUrl) {
|
||||
console.log('-----> Get Salesforce identity');
|
||||
return fetch(idUrl, {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${accessToken}`,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
.then( response => {
|
||||
const status = response.status;
|
||||
if (status >= 300) { throw new Error(`Request status ${status} for ${idUrl}`) }
|
||||
//console.log(' response status', status);
|
||||
return response.json();
|
||||
})
|
||||
.then( salesforceIdentity => {
|
||||
//console.log(' Identity', salesforceIdentity);
|
||||
return salesforceIdentity;
|
||||
});
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
const url = require('url');
|
||||
const jsforce = require('jsforce');
|
||||
const requireEnvVar = require('./require-env-var');
|
||||
const refreshSalesforceAuth = require('./refresh-salesforce-auth');
|
||||
const getSalesforceIdentity = require('./get-salesforce-identity');
|
||||
|
||||
// Return Promise of authenticated jsForce connection.
|
||||
module.exports = function createJsforceConnection(forceComVersion = '37.0') {
|
||||
|
||||
const forceComAlmUrl = url.parse(requireEnvVar('SALESFORCE_URL'));
|
||||
const forceComAuth = forceComAlmUrl.auth.split(':');
|
||||
const forceComId = forceComAuth[0];
|
||||
const forceComSecret = forceComAuth[1];
|
||||
const forceComRefreshToken = forceComAuth[2];
|
||||
const forceComHost = forceComAlmUrl.host;
|
||||
const forceComUrl = `https://${forceComHost}`;
|
||||
|
||||
console.log('-----> Force.com connecting', forceComUrl);
|
||||
|
||||
// Dynamic assignments with top-level scope
|
||||
let forceComAuthToken;
|
||||
let forceComUserId;
|
||||
let forceComUsername;
|
||||
|
||||
let connection;
|
||||
|
||||
return refreshSalesforceAuth(forceComHost, forceComId, forceComSecret, forceComRefreshToken)
|
||||
.then( ({accessToken, idUrl}) => {
|
||||
forceComAuthToken = accessToken;
|
||||
connection = new jsforce.Connection({
|
||||
accessToken: accessToken,
|
||||
loginUrl: forceComUrl,
|
||||
instanceUrl: forceComUrl,
|
||||
serverUrl: `${forceComUrl}/services/Soap/u/${forceComVersion}`,
|
||||
version: forceComVersion
|
||||
});
|
||||
return getSalesforceIdentity(accessToken, idUrl);
|
||||
})
|
||||
.then( res => {
|
||||
console.log('-----> Salesforce org ID', res.organization_id);
|
||||
console.log('-----> Salesforce admin user ID', res.user_id);
|
||||
console.log('-----> Salesforce admin username', res.username);
|
||||
return connection;
|
||||
});
|
||||
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
const url = require('url');
|
||||
const fetch = require('node-fetch');
|
||||
|
||||
module.exports = function refreshSalesforceAuth(forceComHost, forceComId, forceComSecret, forceComRefreshToken) {
|
||||
if (forceComHost == null || forceComId == null || forceComSecret == null || forceComRefreshToken == null) {
|
||||
throw new Error('Requires arguments `forceComHost, forceComId, forceComSecret, forceComRefreshToken`');
|
||||
}
|
||||
const query = `grant_type=refresh_token&client_id=${
|
||||
encodeURIComponent(forceComId)}&client_secret=${
|
||||
encodeURIComponent(forceComSecret)}&refresh_token=${
|
||||
encodeURIComponent(forceComRefreshToken)}`;
|
||||
const refreshAuthUrl = `https://${forceComHost}/services/oauth2/token?${query}`;
|
||||
|
||||
console.log('-----> Refresh Salesforce auth');
|
||||
return fetch(refreshAuthUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Accept: 'application/json'
|
||||
}
|
||||
})
|
||||
.then( response => {
|
||||
const status = response.status;
|
||||
if (status >= 300) { throw new Error(`Request status ${status} for ${refreshAuthUrl}`) }
|
||||
//console.log(' response status', status);
|
||||
return response.json();
|
||||
})
|
||||
.then( salesforceAuth => {
|
||||
// Reset the identity URL to the specified instance host, otherwise Salesforce always uses "login.salesforce.com"
|
||||
const salesforceIdentityUrl = url.parse(salesforceAuth.id);
|
||||
salesforceIdentityUrl.host = forceComHost;
|
||||
const idUrl = url.format(salesforceIdentityUrl);
|
||||
//console.log(` instance identity URL ${idUrl}`);
|
||||
return {
|
||||
accessToken: salesforceAuth.access_token,
|
||||
idUrl
|
||||
}
|
||||
});
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
module.exports = function requireEnvVar(name) {
|
||||
var value = process.env[name];
|
||||
|
||||
if (value != null) {
|
||||
return value;
|
||||
} else {
|
||||
throw new Error(`! Environment variable "${name}" is required`);
|
||||
}
|
||||
}
|
|
@ -13,7 +13,7 @@
|
|||
},
|
||||
"homepage": "https://github.com/forcedotcom/force-com-buildpack#readme",
|
||||
"dependencies": {
|
||||
"jsforce": "^1.6.5",
|
||||
"node-fetch": "^1.5.3"
|
||||
"jsforce-deploy": "git+https://github.com/ntblack/jsforce-deploy.git",
|
||||
"jsforce-connection": "git+https://github.com/ntblack/jsforce-connection.git"
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче