import os import sys import shutil import subprocess import zipfile import json import re from lib import tools_lib as Tools def PrintInfo (message): print ('INFO: ' + message) def PrintError (message): print ('ERROR: ' + message) def GetVersion (rootDir): packageJson = None with open (os.path.join (rootDir, 'package.json')) as packageJsonFile: packageJson = json.load (packageJsonFile) return packageJson['version'] def JSHintFolder (folder): result = Tools.RunCommand (['jshint', folder]) if result != 0: return False return True def CompressFiles (inputFiles, outputFile): parameters = [] parameters.append ('google-closure-compiler') for inputFile in inputFiles: extension = os.path.splitext (inputFile)[1] if extension == '.js': parameters.append ('--js=' + os.path.join ('..', inputFile)) parameters.append ('--js_output_file=' + outputFile) result = Tools.RunCommand (parameters) if result != 0: return False return True def CreateDestinationDir (config, rootDir, websiteDir, version): if not os.path.exists (websiteDir): os.makedirs (websiteDir) webSourcesDir = os.path.join (websiteDir, 'o3dv') if not os.path.exists (webSourcesDir): os.makedirs (webSourcesDir) shutil.copy2 (os.path.join (rootDir, 'website', 'index.html'), websiteDir) shutil.copy2 (os.path.join (rootDir, 'website', 'embed.html'), websiteDir) shutil.copy2 (os.path.join (rootDir, 'website', 'robots.txt'), websiteDir) shutil.copy2 (os.path.join (rootDir, 'website', 'o3dv', 'website.css'), os.path.join (webSourcesDir, 'o3dv.website.css')) shutil.copytree (os.path.join (rootDir, 'libs'), os.path.join (websiteDir, 'libs')) shutil.copytree (os.path.join (rootDir, 'website', 'assets'), os.path.join (websiteDir, 'assets')) shutil.copytree (os.path.join (rootDir, 'website', 'info'), os.path.join (websiteDir, 'info')) libFiles = config['lib_files'] importerFiles = ['o3dv/o3dv.min.js'] websiteFiles = [ 'o3dv/o3dv.website.css', 'o3dv/o3dv.website.min.js' ] linePrefix = '\t' for htmlFileName in ['index.html', 'embed.html', os.path.join ('info', 'index.html')]: htmlFilePath = os.path.join (websiteDir, htmlFileName) replacer = Tools.TokenReplacer (htmlFilePath, False) replacer.ReplaceTokenFileLinks ('', '', libFiles, None) replacer.ReplaceTokenFileLinks ('', '', importerFiles, version) replacer.ReplaceTokenFileLinks ('', '', websiteFiles, version) metaFile = os.path.join (rootDir, 'tools', 'website_meta_data.txt') if os.path.exists (metaFile): metaContent = Tools.GetFileContent (metaFile) replacer.ReplaceTokenContent ('', '', metaContent) analyticsFile = os.path.join (rootDir, 'tools', 'website_analytics_data.txt') if os.path.exists (analyticsFile): analyticsContent = Tools.GetFileContent (analyticsFile) replacer.ReplaceTokenContent ('', '', analyticsContent) scriptFile = os.path.join (rootDir, 'tools', 'website_script_data.txt') if os.path.exists (scriptFile): scriptContent = Tools.GetFileContent (scriptFile) replacer.ReplaceTokenContent ('', '', scriptContent) replacer.WriteToFile (htmlFilePath) def CreatePackage (websiteDir, packageDir, version): if not os.path.exists (packageDir): os.makedirs (packageDir) zipPath = os.path.join (packageDir, 'o3dv_' + version + '.zip') zip = zipfile.ZipFile (zipPath, mode = 'w', compression = zipfile.ZIP_DEFLATED) zip.write (os.path.join (websiteDir, 'libs', 'three.min-126.js'), 'three.min.js') zip.write (os.path.join (websiteDir, 'o3dv', 'o3dv.min.js'), 'o3dv.min.js') zip.close () return True def Main (argv): currentDir = os.path.dirname (os.path.abspath (__file__)) os.chdir (currentDir) rootDir = os.path.abspath ('..') buildDir = os.path.join (rootDir, 'build') websiteDir = os.path.join (buildDir, 'website') packageDir = os.path.join (buildDir, 'package') if os.path.exists (buildDir): shutil.rmtree (buildDir) config = None with open ('config.json') as configJson: config = json.load (configJson) PrintInfo ('JSHint importer sources.') jsHintResult = JSHintFolder (os.path.join (rootDir, 'source')) if not jsHintResult: PrintError ('JSHint importer sources failed.') return 1 PrintInfo ('JSHint website sources.') jsHintResult = JSHintFolder (os.path.join (rootDir, 'website', 'o3dv')) if not jsHintResult: PrintError ('JSHint website sources failed.') return 1 version = GetVersion (rootDir) PrintInfo ('Create build directory') CreateDestinationDir (config, rootDir, websiteDir, version) PrintInfo ('Compress importer sources.') compressResult = CompressFiles (config['importer_files'], os.path.join (websiteDir, 'o3dv', 'o3dv.min.js')) if not compressResult: PrintError ('Compress importer sources failed.') return 1 PrintInfo ('Compress website sources.') compressResult = CompressFiles (config['website_files'], os.path.join (websiteDir, 'o3dv', 'o3dv.website.min.js')) if not compressResult: PrintError ('Compress website sources failed.') return 1 PrintInfo ('Create package.') packageResult = CreatePackage (websiteDir, packageDir, version) if not packageResult: PrintError ('Create package failed.') return 1 return 0 sys.exit (Main (sys.argv))