Reputation: 15670
I have the following gulp task:
build.task('upload', {
execute: (config) => {
/*
THIS WORKS, BUT ONLY if i do "gulp upload".
"gulp upload -u < commandline options >" fails.
const uname = "[email protected]";
const pwd = "supersecret";
const siteUrl = "https://<mytenant>.sharepoint.com/sites";
const siteCatalogUrl = "https://<mytenant>.sharepoint.com/sites/CatalogSiteName";
const catalogName = "AppCatalog";
console.log(uname);
console.log(siteUrl);
console.log(siteCatalogUrl);
console.log(catalogName);
*/
const uname = config.args['u'];
const pwd = config.args['p'];
const siteUrl = config.args['sU'];
const siteCatalogUrl = config.args['cU'];
const catalogName = config.args['c'];
console.log(uname);
console.log(siteUrl);
console.log(siteCatalogUrl);
console.log(catalogName);
return new Promise((resolve, reject) => {
const pkgFile = require('./config/package-solution.json');
const folderLocation = `./sharepoint/${pkgFile.paths.zippedPackage}`;
return gulp.src(folderLocation)
.pipe(spsync({
"username": uname,
"password": pwd,
"site": siteCatalogUrl,
"libraryPath": catalog,
"publish": true
}))
.on('finish', resolve);
});
}
});
when I'm testing on the command line, i run this like this:
gulp upload
the first thing it does call gulp clean ... which blows away the sppkg. So the upload task fails.
The other artifact that I've noticed, which I can't explain is that when I run the gulp task, i see this:
Build target: SHIP
instead of the usual
Build target: DEBUG
Output
lab3:search-parts admin$ gulp upload
Build target: SHIP
[14:16:31] Using gulpfile /src/search/gulpfile.js
[14:16:31] Starting 'upload'...
[14:16:31] Starting gulp
[14:16:31] Starting subtask 'clean'...
[14:16:31] Finished subtask 'clean' after 119 ms
[14:16:31] The following tasks did not complete: upload
[14:16:31] Did you forget to signal async completion?
About to exit with code: 0
Process terminated before summary could be written, possible error in async code not continuing!
Trying to exit with exit code 1
Dunno if it's related, but sharing in case...
Thanks.
EDIT 1
I can consistently recreate the problem, and I found a fix too - albeit - not one that i can use in production. But I don't know what the root cause of the issue is yet.
To create the problem I simply need to pass in the arguments via the config object. In other words, I trigger this gulp method via command line like this:
gulp package-solution --ship
gulp upload --u "[email protected]" --p "supersecret" --sU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --cU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --c "AppCatalog"
When I run the script, the first thing it does is a gulp clean. If i comment out all the logic to grab the variables from the config.args[] and just use the hardcoded values... it works. But I have to make sure that I don't supply the arguments via the commandline. So in other words, this works:
lab3:spparts admin$ gulp upload
Build target: DEBUG
[14:27:27] Using gulpfile /src/sp/spparts/gulpfile.js
[14:27:27] Starting 'upload'...
[14:27:27] Starting gulp
[email protected]
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
AppCatalog
[14:27:27] Uploading spparts.sppkg
[14:27:32] Upload successful 5289ms
[14:27:35] Published file 2408ms
[14:27:35] Finished 'upload' after 7.73 s
[14:27:35] ==================[ Finished ]==================
[14:27:36] Project spparts version:4.3.0
[14:27:36] Build tools version:3.17.11
[14:27:36] Node version:v10.24.1
[14:27:36] Total duration:13 s
But this doesn't: (eventhough the js code is still using hardcoded values)
lab3:spparts admin$ gulp upload --u "[email protected]" --p "supersecret" --sU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --cU "https://<mytenant>.sharepoint.com/sites/CatalogSiteName" --c "AppCatalog"
Build target: SHIP
[14:27:27] Using gulpfile /src/sp/spparts/gulpfile.js
[14:27:27] Starting 'upload'...
[14:27:27] Starting gulp
[14:30:36] Starting subtask 'clean'...
[14:30:36] Finished subtask 'clean' after 68 ms
[email protected]
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
https://<mytenant>.sharepoint.com/sites/CatalogSiteName
AppCatalog
[14:30:36] 'upload' errored after 85 ms
[14:30:36] Error: File not found with singular glob: /src/spparts/sharepoint/solution/spparts.sppkg (if this was purposeful, use `allowEmpty` option)
So in summary, I think I can say when I pass in command line arguments, the script calls gulp clean. But I don't know why.
In case it helps, here's my version information:
lab3:spparts admin$ gulp -v
CLI version: 2.3.0
Local version: 4.0.2
version of sp-build-web is 1.12.1
Upvotes: 0
Views: 235
Reputation: 5307
I take it the upload task uploads the package to the [tenant|site collection] app catalog? This doesn't solve your problem in the post, but have you considered using the CLI for Microsoft 365? It's got a command that does this for you.
Best of all, there's no code to add to your project's gulpfile.js or code to maintain. Works great... using three commands you (1) login, (2) upload, and (3) deploy (ie: trust) the package.
# Sign into Microsoft 365
m365 login ${{ m365_target_site_url }} --authType password --userName ${{ m365_user_login }} --password ${{ m365_user_password }}
displayName:
# Upload SharePoint package to Site Collection App Catalog
m365 spo app add --filePath ${{ sppkg_filepath }} --appCatalogUrl ${{ m365_target_site_url }}/AppCatalog --scope sitecollection --overwrite
# Deploy SharePoint package
m365 spo app deploy --name ${{ spPkgFileName}} --appCatalogUrl ${{ m365_target_site_url }} --scope sitecollection --skipFeatureDeployment
Upvotes: 1