def create_distribution_bundle_file(): '''Creates a distribution bundle file as zip archiv.''' if not SCOPE['scripts'].get('build:export', SCOPE['scripts'].get( 'build', False )) or Platform.run('/usr/bin/env yarn %s' % ( 'build:export' if SCOPE['scripts'].get('build:export') else 'build' ), error=False, log=True)['return_code'] == 0: __logger__.info('Pack to a zip archive.') distribution_bundle_file = FileHandler( location=make_secure_temporary_file()[1]) current_directory_path = FileHandler()._path file_path_list = SCOPE.get('files', []) if 'main' in SCOPE: file_path_list.append(SCOPE['main']) if len(file_path_list) == 0: return None with zipfile.ZipFile( distribution_bundle_file.path, 'w' ) as zip_file: for file_path in file_path_list: file = FileHandler(location=file_path) __logger__.debug( 'Add "%s" to distribution bundle.', file.path) zip_file.write(file._path, file.name) if file.is_directory() and not is_file_ignored(file): def add(sub_file): if is_file_ignored(sub_file): return None __logger__.debug( 'Add "%s" to distribution bundle.', sub_file.path) zip_file.write(sub_file._path, sub_file._path[len( current_directory_path):]) return True file.iterate_directory(function=add, recursive=True) return distribution_bundle_file
def main(): '''Entry point for this script.''' global API_DOCUMENTATION_PATH_SUFFIX, CONTENT, SCOPE if markdown is None: __logger__.critical( "You haven't install a suitable markdown version. Documentation " "couldn't be updated.") return None CommandLine.argument_parser(module_name=__name__) if '* master' in Platform.run('/usr/bin/env git branch')[ 'standard_output' ] and 'gh-pages' in Platform.run('/usr/bin/env git branch --all')[ 'standard_output' ]: package_file = FileHandler('package.json') if package_file.is_file(): SCOPE = json.loads(package_file.content) API_DOCUMENTATION_PATH_SUFFIX = API_DOCUMENTATION_PATH_SUFFIX.format( **SCOPE) temporary_documentation_folder = FileHandler( location=DOCUMENTATION_REPOSITORY[DOCUMENTATION_REPOSITORY.find( '/' ) + 1:-1]) if temporary_documentation_folder: temporary_documentation_folder.remove_deep() __logger__.info('Compile all readme markdown files to html5.') FileHandler().iterate_directory(function=add_readme, recursive=True) CONTENT = markdown.markdown( CONTENT, output='html5', extensions=builtins.list(MARKDOWN_EXTENSIONS)) distribution_bundle_file = create_distribution_bundle_file() if distribution_bundle_file is not None: data_location = FileHandler(location=DATA_PATH) data_location.make_directories() distribution_bundle_file.directory = data_location has_api_documentation = SCOPE['scripts'].get('document', False) if has_api_documentation: has_api_documentation = Platform.run( '/usr/bin/env yarn document', error=False, log=True )['return_code'] == 0 if Platform.run( ('/usr/bin/env git checkout gh-pages', '/usr/bin/env git pull'), error=False, log=True )['return_code'][0] == 0: existing_api_documentation_directory = FileHandler(location='.%s' % API_DOCUMENTATION_PATH[1]) if existing_api_documentation_directory.is_directory(): existing_api_documentation_directory.remove_deep() FileHandler(location=API_DOCUMENTATION_PATH[0]).path = \ existing_api_documentation_directory local_documentation_website_location = FileHandler( location='../%s' % temporary_documentation_folder.name) if local_documentation_website_location.is_directory(): temporary_documentation_folder.make_directories() local_documentation_website_location.iterate_directory( function=copy_repository_file, recursive=True, source=local_documentation_website_location, target=temporary_documentation_folder) node_modules_directory = FileHandler(location='%s%s' % ( local_documentation_website_location.path, 'node_modules')) if node_modules_directory.is_directory(): temporary_documentation_node_modules_directory = \ FileHandler('%snode_modules' % temporary_documentation_folder.path) ''' NOTE: Symlinking doesn't work since some node modules need the right absolute location to work. node_modules_directory.make_symbolic_link( target='%s%s' % ( temporary_documentation_folder, 'node_modules') ) return_code = 0 NOTE: Coping complete "node_modules" folder takes to long. node_modules_directory.copy(target='%s%s' % ( temporary_documentation_folder, 'node_modules')) return_code = 0 NOTE: Mounting "node_modules" folder needs root privileges. temporary_documentation_node_modules_directory\ .make_directory(right=777) return_code = Platform.run( "/usr/bin/env sudo mount --bind --options ro '%s' " "'%s'" % ( node_modules_directory.path, temporary_documentation_node_modules_directory.path ), native_shell=True, error=False, log=True )['return_code'] ''' return_code = Platform.run( "/usr/bin/env cp --dereference --recursive --reflink=auto '%s' '%s'" % ( node_modules_directory.path, temporary_documentation_node_modules_directory.path ), native_shell=True, error=False, log=True )['return_code'] else: return_code = Platform.run( '/usr/bin/env yarn --production=false', native_shell=True, error=False, log=True )['return_code'] if return_code == 0: current_working_directory_backup = FileHandler() temporary_documentation_folder.change_working_directory() return_code = Platform.run( '/usr/bin/env yarn clear', native_shell=True, error=False, log=True )['return_code'] current_working_directory_backup.change_working_directory() else: return_code = Platform.run(( 'unset GIT_WORK_TREE; /usr/bin/env git clone %s;' 'yarn --production=false' ) % DOCUMENTATION_REPOSITORY, native_shell=True, error=False, log=True)['return_code'] if return_code == 0: generate_and_push_new_documentation_page( temporary_documentation_folder, distribution_bundle_file, has_api_documentation, temporary_documentation_node_modules_directory) if existing_api_documentation_directory.is_directory(): existing_api_documentation_directory.remove_deep()