build(aio): copy examples boilerplate
This commit is contained in:
		
							parent
							
								
									4c21114087
								
							
						
					
					
						commit
						c05a8cf7bb
					
				
							
								
								
									
										6319
									
								
								aio/content/examples/yarn.lock
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6319
									
								
								aio/content/examples/yarn.lock
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -21,7 +21,9 @@ | ||||
|     "docs-test": "node ../dist/tools/cjs-jasmine/index-tools ../../transforms/**/*.spec.js", | ||||
|     "~~update-webdriver": "webdriver-manager update --standalone false --gecko false", | ||||
|     "pre~~deploy": "yarn build", | ||||
|     "~~deploy": "firebase deploy --message \"Commit: $TRAVIS_COMMIT\" --non-interactive --token \"$FIREBASE_TOKEN\"" | ||||
|     "~~deploy": "firebase deploy --message \"Commit: $TRAVIS_COMMIT\" --non-interactive --token \"$FIREBASE_TOKEN\"", | ||||
|     "boilerplate:add": "node ./scripts/add-example-boilerplate add", | ||||
|     "boilerplate:remove": "node ./scripts/add-example-boilerplate remove" | ||||
|   }, | ||||
|   "private": true, | ||||
|   "dependencies": { | ||||
| @ -53,6 +55,8 @@ | ||||
|     "entities": "^1.1.1", | ||||
|     "firebase-tools": "^3.2.1", | ||||
|     "html": "^1.0.0", | ||||
|     "fs-extra": "^2.1.1", | ||||
|     "globby": "^6.1.0", | ||||
|     "jasmine-core": "~2.5.2", | ||||
|     "jasmine-spec-reporter": "~3.2.0", | ||||
|     "karma": "~1.4.1", | ||||
| @ -65,6 +69,7 @@ | ||||
|     "protractor": "~5.1.0", | ||||
|     "rho": "https://github.com/petebacondarwin/rho#master", | ||||
|     "rimraf": "^2.6.1", | ||||
|     "shelljs": "^0.7.7", | ||||
|     "ts-node": "~2.0.0", | ||||
|     "tslint": "~4.5.0", | ||||
|     "typescript": "2.2.0" | ||||
|  | ||||
							
								
								
									
										147
									
								
								aio/scripts/add-example-boilerplate.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								aio/scripts/add-example-boilerplate.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,147 @@ | ||||
| const fs = fsExtra = require('fs-extra'); | ||||
| const globby = require('globby'); | ||||
| const path = require('path'); | ||||
| const Q = require("q"); | ||||
| const shelljs = require('shelljs'); | ||||
| 
 | ||||
| const EXAMPLES_PATH = path.join(__dirname, '/../content/examples'); | ||||
| const BOILERPLATE_PATH = path.join(EXAMPLES_PATH, '_boilerplate'); | ||||
| const EXAMPLES_TESTING_PATH = path.join(EXAMPLES_PATH, 'testing'); | ||||
| 
 | ||||
| const files = { | ||||
|   exampleBoilerplate: [ | ||||
|     'src/styles.css', | ||||
|     'src/systemjs.config.js', | ||||
|     'src/tsconfig.json', | ||||
|     'bs-config.json', | ||||
|     'bs-config.e2e.json', | ||||
|     'package.json', | ||||
|     'tslint.json' | ||||
|   ], | ||||
|   exampleUnitTestingBoilerplate: [ | ||||
|     'src/browser-test-shim.js', | ||||
|     'karma-test-shim.js', | ||||
|     'karma.conf.js' | ||||
|   ], | ||||
|   exampleConfigFilename: 'example-config.json' | ||||
| }; | ||||
| 
 | ||||
| // requires admin access because it adds symlinks
 | ||||
| function add() { | ||||
|   const realPath = path.join(EXAMPLES_PATH, '/node_modules'); | ||||
|   const nodeModulesPaths = getNodeModulesPaths(EXAMPLES_PATH); | ||||
| 
 | ||||
|   // we install the examples modules first
 | ||||
|   installNodeModules(); | ||||
| 
 | ||||
|   nodeModulesPaths.map((linkPath) => { | ||||
|     console.log("symlinking " + linkPath + ' -> ' + realPath) | ||||
|     fs.ensureSymlinkSync(realPath, linkPath); | ||||
|   }); | ||||
| 
 | ||||
|   return copyExampleBoilerplate(); | ||||
| } | ||||
| 
 | ||||
| function copyExampleBoilerplate() { | ||||
|   console.log('Copying example boilerplate files'); | ||||
|   const examplePaths = getExamplePaths(EXAMPLES_PATH); | ||||
|   // Make boilerplate files read-only to avoid that they be edited by mistake.
 | ||||
|   const destFileMode = '444'; | ||||
|   let foo = copyFiles(files.exampleBoilerplate, BOILERPLATE_PATH, examplePaths, destFileMode) | ||||
|     // copy the unit test boilerplate
 | ||||
|     .then(() => { | ||||
|       const unittestPaths = getUnitTestingPaths(EXAMPLES_PATH); | ||||
|       return copyFiles(files.exampleUnitTestingBoilerplate, EXAMPLES_TESTING_PATH, unittestPaths, destFileMode); | ||||
|     }) | ||||
|     .catch((err) => { | ||||
|       console.error(err); | ||||
|       throw err; | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| // Copies fileNames into destPaths, setting the mode of the
 | ||||
| // files at the destination as optional_destFileMode if given.
 | ||||
| // returns a promise
 | ||||
| function copyFiles(fileNames, originPath, destPaths, optional_destFileMode) { | ||||
|   const copy = Q.denodeify(fsExtra.copy); | ||||
|   const chmod = Q.denodeify(fsExtra.chmod); | ||||
|   let copyPromises = []; | ||||
|   destPaths.map((destPath) => { | ||||
|     fileNames.forEach((fileName) => { | ||||
|       const originName = path.join(originPath, fileName); | ||||
|       const destName = path.join(destPath, fileName); | ||||
|       let p = copy(originName, destName, { clobber: true}); | ||||
|       if(optional_destFileMode !== undefined) { | ||||
|         p = p.then(() => { | ||||
|           return chmod(destName, optional_destFileMode); | ||||
|         }); | ||||
|       } | ||||
|       copyPromises.push(p); | ||||
|     }); | ||||
|   }); | ||||
| 
 | ||||
|   return Q.all(copyPromises); | ||||
| } | ||||
| 
 | ||||
| function getExamplePaths(basePath, includeBase) { | ||||
|   // includeBase defaults to false
 | ||||
|   return getPaths(basePath, files.exampleConfigFilename, includeBase); | ||||
| } | ||||
| 
 | ||||
| function getFilenames(basePath, filename, includeBase) { | ||||
|   let includePatterns = [path.join(basePath, "**/" + filename)]; | ||||
|   if (!includeBase) { | ||||
|     // ignore (skip) the top level version.
 | ||||
|     includePatterns.push("!" + path.join(basePath, "/" + filename)); | ||||
|   } | ||||
|   // ignore (skip) the files in BOILERPLATE_PATH.
 | ||||
|   includePatterns.push("!" + path.join(BOILERPLATE_PATH, "/" + filename)); | ||||
|   const nmPattern = path.join(basePath, "**/node_modules/**"); | ||||
|   return globby.sync(includePatterns, {ignore: [nmPattern]}); | ||||
| } | ||||
| 
 | ||||
| function getNodeModulesPaths(basePath) { | ||||
|   return getExamplePaths(basePath).map((examplePath) => { | ||||
|     return path.join(examplePath, "/node_modules"); | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| function getPaths(basePath, filename, includeBase) { | ||||
|   const filenames = getFilenames(basePath, filename, includeBase); | ||||
|   return filenames.map((fileName) => { | ||||
|     return path.dirname(fileName); | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| function getUnitTestingPaths(basePath) { | ||||
|   const examples = getPaths(basePath, files.exampleConfigFilename, true); | ||||
|   return examples.filter((example) => { | ||||
|     const exampleConfig = fs.readJsonSync(`${example}/${files.exampleConfigFilename}`, {throws: false}); | ||||
|     return exampleConfig && !!exampleConfig.unittesting; | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| function installNodeModules() { | ||||
|   shelljs.exec('yarn', {cwd: EXAMPLES_PATH}); | ||||
| } | ||||
| 
 | ||||
| function remove() { | ||||
|   shelljs.exec('git clean -xdf', {cwd: EXAMPLES_PATH}); | ||||
| } | ||||
| 
 | ||||
| module.exports = { | ||||
|   add: add, | ||||
|   remove: remove | ||||
| }; | ||||
| 
 | ||||
| // being executed from shell script
 | ||||
| switch (process.argv[2]) { | ||||
|   case 'add': | ||||
|     add(); | ||||
|     break; | ||||
|   case 'remove': | ||||
|     remove(); | ||||
|     break; | ||||
|   default: | ||||
|     console.error(`There is no function with the name: ${process.argv}`); | ||||
| } | ||||
| @ -2235,9 +2235,9 @@ fs-extra@^0.30.0: | ||||
|     path-is-absolute "^1.0.0" | ||||
|     rimraf "^2.2.8" | ||||
| 
 | ||||
| fs-extra@^2.0.0: | ||||
|   version "2.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" | ||||
| fs-extra@^2.0.0, fs-extra@^2.1.1: | ||||
|   version "2.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" | ||||
|   dependencies: | ||||
|     graceful-fs "^4.1.2" | ||||
|     jsonfile "^2.1.0" | ||||
| @ -2393,6 +2393,16 @@ globby@^5.0.0: | ||||
|     pify "^2.0.0" | ||||
|     pinkie-promise "^2.0.0" | ||||
| 
 | ||||
| globby@^6.1.0: | ||||
|   version "6.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" | ||||
|   dependencies: | ||||
|     array-union "^1.0.1" | ||||
|     glob "^7.0.3" | ||||
|     object-assign "^4.0.1" | ||||
|     pify "^2.0.0" | ||||
|     pinkie-promise "^2.0.0" | ||||
| 
 | ||||
| globule@^1.0.0: | ||||
|   version "1.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" | ||||
| @ -5167,7 +5177,7 @@ sha.js@^2.3.6: | ||||
|   dependencies: | ||||
|     inherits "^2.0.1" | ||||
| 
 | ||||
| shelljs@^0.7.0: | ||||
| shelljs@^0.7.0, shelljs@^0.7.7: | ||||
|   version "0.7.7" | ||||
|   resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" | ||||
|   dependencies: | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user