Improve build stages (#3744)

* travis precache

* rb change

* remove ut

* add cache warm up

* Prepare cache fix

* add test

* use env variabble to tag

* use env to label stages

* move lint step at start

* use dist for e2e

* upload dist in alfresco

* modify permissions

* travis script node

* remove polyfills

* revert some changes

* fix demo shell run test

* solve download

* revert debatable gallery change
This commit is contained in:
Eugenio Romano
2018-09-05 12:40:03 +01:00
committed by GitHub
parent c0acc53eb9
commit c6f56a2c2a
37 changed files with 10383 additions and 1450 deletions

19
scripts/copy-dist-node.sh Normal file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $DIR/../
echo "====== COPY new build in node_modules ===== "
rm -rf ../node_modules/@alfresco
mkdir -p $DIR/../node_modules/@alfresco/adf-core
mkdir -p $DIR/../node_modules/@alfresco/adf-content-services
mkdir -p $DIR/../node_modules/@alfresco/adf-process-services
mkdir -p $DIR/../node_modules/@alfresco/adf-insights
cp -R $DIR/../lib/dist/core/* $DIR/../node_modules/@alfresco/adf-core
cp -R $DIR/../lib/dist/content-services/* $DIR/../node_modules/@alfresco/adf-content-services
cp -R $DIR/../lib/dist/process-services/* $DIR/../node_modules/@alfresco/adf-process-services
cp -R $DIR/../lib/dist/insights/* $DIR/../node_modules/@alfresco/adf-insights

84
scripts/download-build-in-cs.js Executable file
View File

@@ -0,0 +1,84 @@
var program = require('commander');
var AlfrescoApi = require('alfresco-js-api-node');
var http = require('http');
var fs = require('fs');
var path = require('path');
var archiver = require('archiver');
var unzipper = require('unzipper');
var exec = require('child_process').exec;
replaceHrefInIndex = (folder) => {
fs.readFile(`demo-shell/${folder}/index.html`, 'utf8', function (err, data) {
if (err) {
return console.log(err);
}
var result = data.replace(`base href="/"`, `base href=\"/${folder}/\"`);
fs.writeFile(`demo-shell/${folder}/index.html`, result, 'utf8', function (err) {
if (err) return console.log(err);
});
});
}
async function main() {
program
.version('0.1.0')
.option('-p, --password [type]', 'password')
.option('-u, --username [type]', 'username')
.option('--base-href [type]', '')
.option('-f, --folder [type]', 'Name of the folder')
.option('-host, --host [type]', 'URL of the CS')
.parse(process.argv);
let alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: program.host
});
alfrescoJsApi.login(program.username, program.password);
let zipDemoNode;
try {
zipDemoNode = await alfrescoJsApi.nodes.getNode('-my-', {
'relativePath': `Builds/${program.folder}/demo.zip`
});
} catch (error) {
console.log('error: ' + error);
}
const url = await alfrescoJsApi.content.getContentUrl(zipDemoNode.entry.id, true);
console.log('Download zip');
let outputFolder = program.baseHref ? program.baseHref : 'dist';
var file = fs.createWriteStream('demo.zip');
http.get(`http://${url}`, (response) => {
response.pipe(file);
file.on('finish', async () => {
console.log('Unzip Demo ' + path.join(__dirname, '../demo.zip'));
fs.createReadStream(path.join(__dirname, '../demo.zip'))
.pipe(unzipper.Extract({path: path.join(__dirname, '../demo-shell')}))
.on('finish', () => {
exec(`mv demo-shell/demo.zip demo-shell/${outputFolder}`, (err, stdout, stderr) => {
if (err) {
console.log(`err: ${err}`);
return;
}
if(program.baseHref) {
replaceHrefInIndex(outputFolder);
}
});
})
});
});
}
main();

16
scripts/lint.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR/../"
echo "====== lint Lib ====="
npm run lint-lib || exit 1
echo "====== lint E2E ====="
npm run lint-e2e
echo "====== lint Demo shell ====="
ng lint dev --fix

View File

@@ -3,10 +3,6 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $DIR/..
echo "====== lint ====="
npm run lint-lib || exit 1
echo "====== clean ====="
rm -rf node_modules/@alfresco

View File

@@ -13,6 +13,7 @@ eval GIT_ISH=""
eval SINGLE_TEST=""
eval EXEC_VERSION_JSAPI=false
eval JSAPI_VERSION=""
eval EXECLINT=true
eval projects=( "core"
"content-services"
@@ -53,13 +54,11 @@ enable_testbrowser(){
test_project() {
echo "====== test project: $1 ====="
ng lint $1 || exit 1
ng test $1 --watch=false || exit 1
}
debug_project() {
echo "====== debug project: $1 ====="
ng lint $1 || exit 1
ng test $1 || exit 1
}
@@ -92,6 +91,10 @@ exec_install(){
EXEC_INSTALL=false
}
skip_lint(){
EXECLINT=false
}
while [[ $1 == -* ]]; do
case "$1" in
-h|--help|-\?) show_help; exit 0;;
@@ -107,12 +110,17 @@ while [[ $1 == -* ]]; do
-c|--clean) clean; shift;;
-si|--skipinstall) exec_install; shift;;
-sb|--skipbuild) exclude_build; shift;;
-sl|--skip-lint) skip_lint; shift;;
-*) echo "invalid option: $1" 1>&2; show_help; exit 1;;
esac
done
cd "$DIR/../"
if [[ EXECLINT == "true" ]]; then
npm run lint-lib || exit 1
fi
if $EXEC_CLEAN == true; then
echo "====== Clean components ====="
npm install rimraf -g

View File

@@ -4,6 +4,8 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$DIR/../"
BROWSER_RUN=false
DEVELOPMENT=false
EXECLINT=true
LITESERVER=false
show_help() {
echo "Usage: ./scripts/test-e2e-lib.sh -host adf.domain.com -u admin -p admin -e admin"
@@ -20,6 +22,7 @@ show_help() {
echo "-host or --host URL of the Front end to test"
echo "-save save the error screenshot in the remote env"
echo "-timeout or --timeout override the timeout foe the wait utils"
echo "-sl --skip-lint skip lint"
echo "-h or --help"
}
@@ -70,6 +73,14 @@ set_selenium(){
SELENIUM_SERVER=$1
}
skip_lint(){
EXECLINT=false
}
lite_server(){
LITESERVER=true
}
while [[ $1 == -* ]]; do
case "$1" in
-h|--help|-\?) show_help; exit 0;;
@@ -81,10 +92,12 @@ while [[ $1 == -* ]]; do
-b|--browser) set_browser; shift;;
-dev|--dev) set_development; shift;;
-s|--spec) set_test $2; shift 2;;
-ud|--use-dist) lite_server; shift;;
-save) set_save_screenshot; shift;;
-proxy|--proxy) set_proxy $2; shift 2;;
-s|--seleniumServer) set_selenium $2; shift 2;;
-host|--host) set_host $2; shift 2;;
-sl|--skip-lint) skip_lint; shift;;
-*) echo "invalid option: $1" 1>&2; show_help; exit 1;;
esac
done
@@ -104,14 +117,22 @@ export FOLDER=$FOLDER'/'
export SELENIUM_SERVER=$SELENIUM_SERVER
export NAME_TEST=$NAME_TEST
npm run lint-e2e || exit 1
if [[ EXECLINT == "true" ]]; then
npm run lint-e2e || exit 1
fi
if [[ $DEVELOPMENT == "true" ]]; then
echo "====== Run against local development ====="
echo "====== Run against local development ====="
npm run e2e-lib || exit 1
else
webdriver-manager update --gecko=false --versions.chrome=2.38
./node_modules/protractor/bin/protractor protractor.conf.js || exit 1
webdriver-manager update --gecko=false --versions.chrome=2.38
if [[ $LITESERVER == "true" ]]; then
echo "====== Run dist in lite-server ====="
ls demo-shell/dist
npm run lite-server-e2e>/dev/null & ./node_modules/protractor/bin/protractor protractor.conf.js || exit 1
else
./node_modules/protractor/bin/protractor protractor.conf.js || exit 1
fi
fi

93
scripts/upload-build-in-cs.js Executable file
View File

@@ -0,0 +1,93 @@
var program = require('commander');
var AlfrescoApi = require('alfresco-js-api-node');
var fs = require('fs');
var path = require('path');
var archiver = require('archiver');
writeZipLib = async function (zipFolder) {
if (!fs.existsSync(zipFolder)) {
fs.mkdirSync(zipFolder);
}
// create a file to stream archive data to.
let output = fs.createWriteStream(path.join(zipFolder, `demo.zip`));
let archive = archiver('zip', {
zlib: {level: 9} // Sets the compression level.
});
archive.pipe(output);
archive.directory(path.join(__dirname, `../demo-shell/dist/`), `demo.zip`);
return archive.finalize();
};
async function main() {
program
.version('0.1.0')
.option('-p, --password [type]', 'password')
.option('-u, --username [type]', 'username')
.option('-f, --folder [type]', 'Name of the folder')
.option('-host, --host [type]', 'URL of the CS')
.parse(process.argv);
let alfrescoJsApi = new AlfrescoApi({
provider: 'ECM',
hostEcm: program.host
});
let zipFolder = path.join(__dirname, '../demo-shell/zip/');
await this.writeZipLib(zipFolder);
let files = fs.readdirSync(path.join(__dirname, '../demo-shell/zip'));
if (files && files.length > 0) {
alfrescoJsApi.login(program.username, program.password);
let folder;
if (!program.folder) {
program.folder = Date.now();
}
try {
folder = await alfrescoJsApi.nodes.addNode('-my-', {
'name': program.folder,
'relativePath': `Builds`,
'nodeType': 'cm:folder'
}, {}, {
'overwrite': true
});
} catch (error) {
console.log('error' + error);
}
for (const fileName of files) {
let pathFile = path.join(__dirname, '../demo-shell/zip/demo.zip');
console.log('Upload ' + pathFile);
let file = fs.createReadStream(pathFile);
try {
await alfrescoJsApi.upload.uploadFile(
file,
'',
folder.entry.id,
null,
{
'name': file.name,
'nodeType': 'cm:content'
});
} catch (error) {
console.log('error' + error);
}
}
}
}
main();