def make_instance(self, include_optional): """Test VersionInfo include_option is a boolean, when False only required params are included, when True both required and optional params are included """ # model = tilt-dev/python-kubernetes.client.models.version_info.VersionInfo() # noqa: E501 if include_optional : return VersionInfo( build_date = '0', compiler = '0', git_commit = '0', git_tree_state = '0', git_version = '0', go_version = '0', major = '0', minor = '0', platform = '0' ) else : return VersionInfo( build_date = '0', compiler = '0', git_commit = '0', git_tree_state = '0', git_version = '0', go_version = '0', major = '0', minor = '0', platform = '0', )
def pushIt(lab, docker_dir, registry, base_registry, logger): ''' Set the label and tags on any newly built image and push it to the given registry. ''' df_list = [f for f in os.listdir(docker_dir) if os.path.isfile(os.path.join(docker_dir, f))] did_one = False for df in df_list: if df.endswith('.swp'): continue logger.debug('tag and push %s' % df) try: parts = df.split('.') image = '%s.%s.student' % (parts[1], parts[2]) except: logger.error('could not get image from %s' % df); continue image_exists, dumb, dumb1 = labutils.ImageExists(image, None) if image_exists: dfile_path = os.path.join(docker_dir,df) image_base = VersionInfo.getFrom(dfile_path, base_registry) base_id = VersionInfo.getImageId(image_base, True) framework_version = labutils.framework_version relabel(image, framework_version, image_base, base_id, registry, logger) logger.debug('Did relabel of %s using base_id %s' % (image, base_id)) did_one = True else: logger.debug('Have not built %s, nothing to push' % image) ''' Delete the lab images. Two reasons: 1) ensure we run registry or dockerHub copy, 2) don't push on a rebuild if not rebuilt. ''' if did_one: removelab.removeLab(lab)
def do_lab(lab_dir, lab, role, registry): framework_version = labutils.framework_version docker_dir = os.path.join(lab_dir, lab, 'dockerfiles') if not os.path.isdir(docker_dir): print('%s not a directory' % docker_dir) return print('LAB: %s' % lab) df_list = [ f for f in os.listdir(docker_dir) if os.path.isfile(os.path.join(docker_dir, f)) ] for df in df_list: if df.endswith('.swp'): continue dfile_path = os.path.join(docker_dir, df) image_base = VersionInfo.getFrom(dfile_path, registry) print('image base from %s is %s' % (dfile_path, image_base)) base_id = VersionInfo.getImageId(image_base) try: parts = df.split('.') image = '%s.%s.%s' % (parts[1], parts[2], role) except: print('could not get image from %s' % df) continue print('image: %s expect base %s' % (image, image_base)) created, user, version, use_tag, base = InspectLocalReg.inspectLocal( image, registry, True) print('created: %s user: %s version: %s tag %s base %s' % (created, user, version, use_tag, base)) if not base.startswith(image_base): cmd = './relabel.sh %s %s %s %s %s' % (registry, framework_version, image, image_base, base_id) print("MISMATCH") print(cmd) os.system(cmd)
def do_lab(lab_dir, lab, role, registry): framework_version = labutils.framework_version ''' use docker files to identify each docker image to relabel ''' docker_dir = os.path.join(lab_dir, lab, 'dockerfiles') if not os.path.isdir(docker_dir): print('%s not a directory' % docker_dir) return df_list = [ f for f in os.listdir(docker_dir) if os.path.isfile(os.path.join(docker_dir, f)) ] for df in df_list: if df.endswith('.swp'): continue dfile_path = os.path.join(docker_dir, df) ''' get the image name from the docker file ''' image_base = VersionInfo.getFrom(dfile_path, registry) ''' get the base identifier of the image present on this installation for that image ''' base_id = VersionInfo.getImageId(image_base) try: parts = df.split('.') image = '%s.%s.%s' % (parts[1], parts[2], role) except: print('could not get image from %s' % df) continue cmd = './relabel.sh %s %s %s %s %s' % (registry, framework_version, image, image_base, base_id) print cmd os.system(cmd)
def create_version_file(target, source, env): # Find version information in env['CPPDEFINES'] version_number = 0 version_string = 'none' for cpp_define in env['CPPDEFINES']: if 'APPLICATION_VERSION_NUMBER' in cpp_define: version_number = cpp_define[1] if 'APPLICATION_VERSION_STRING' in cpp_define: version_string = str( cpp_define[1])[2:-2] # Remove leading and trailing \" with open(str(target[0]), "w") as ver_file: if version_number > 0: ver_file.write('VERSION_NUMBER: %s\n' % str(version_number)) if version_string is not 'none': ver_file.write('VERSION_STRING: %s\n' % (NeulBuildConfig.get_build_time_string() + ' ' + version_string)) else: ver_file.write('VERSION_STRING: %s\n' % (NeulBuildConfig.get_build_time_string() + ' ' + VersionInfo.read_string("VERSION_STRING"))) ver_file.write('TIMESTAMP: %s\n' % hex(NeulBuildConfig.get_build_timestamp())[2:]) ver_file.write('GITHASH: %s\n' % VersionInfo.read_string("GIT_HASH")) ver_file.close()
def pushIt(lab, docker_dir, registry, logger): ''' Set the label and tags on any newly built image and push it to the given registry. ''' df_list = [ f for f in os.listdir(docker_dir) if os.path.isfile(os.path.join(docker_dir, f)) ] for df in df_list: if df.endswith('.swp'): continue logger.DEBUG('tag and push %s' % df) try: parts = df.split('.') image = '%s.%s.student' % (parts[1], parts[2]) except: logger.ERROR('could not get image from %s' % df) continue image_exists, dumb, dumb1 = labutils.ImageExists(image, None) if image_exists: dfile_path = os.path.join(docker_dir, df) image_base = VersionInfo.getFrom(dfile_path, registry) base_id = VersionInfo.getImageId(image_base, True) framework_version = labutils.framework_version relabel(image, framework_version, image_base, base_id, registry) else: logger.DEBUG('Have not built %s, nothing to push' % image) ''' Delete the lab images. Two reasons: 1) ensure we run authoritative copy, which is from the dockerhub. 2) don't push on a rebuild if not rebuilt. ''' removelab.removeLab(lab)
def __init__(self, parent): ### package options self.parent = parent self.options = Options(parent.package) self.versionInfo = VersionInfo.VersionInfo(subinfo=self) # whethe we can add this blueprint to a shelve # blueprints that specify different versions for different platforms are not supported self.shelveAble = True self.targets = {} self.archiveNames = {} # Specifiy that the fetched source should be placed into a # subdirectory of the default source directory self.targetInstSrc = {} # Specifiy that the default source directory should have a suffix after # the package name. This is usefull for package which needs different sources. self.targetSrcSuffix = {} self.targetConfigurePath = {} self.targetInstallPath = {} self.targetDigests = {} self.targetDigestsX64 = {} self.targetDigestUrls = {} ## \todo prelimary self.svnTargets = {} self.targetUpdatedRepoUrl = {} self.patchLevel = {} # the build prefix, may differ for for cached files self.buildPrefix = str(CraftCore.standardDirs.craftRoot()) self.isCachedBuild = False # runtimeDependencies and buildDependencies are not different when looking # at the build process itself, they will only make a difference when getting # output of the dependencies self.runtimeDependencies = {} self.buildDependencies = {} self.packagingDependencies = {} self.displayName = self.parent.package.name self.description = "" # tag words describing the package self.tags = "" # a url to the projects webpage self.webpage = "" self.patchToApply = { } # key: target. Value: list(['patchname', patchdepth]) or ('patchname',patchdepth) self.svnTargets = {} self.svnServer = None # this will result in the use of the default server (either anonsvn.kde.org or svn.kde.org) self._defaultTarget = None self.registerOptions() self.setTargets() self.setBuildOptions() # do this after buildTarget is set so that some dependencies can be set depending on self.buildTarget self.setDependencies()
def main(): parser = argparse.ArgumentParser( description='Build and publish the grader') parser.add_argument('-t', '--test_registry', action='store_true', help='Use image from test registry') args = parser.parse_args() if args.test_registry: if os.getenv('TEST_REGISTRY') is None: print('use putenv to set it') os.putenv("TEST_REGISTRY", "TRUE") ''' why does putenv not set the value? ''' os.environ['TEST_REGISTRY'] = 'TRUE' else: print('exists, set it true') os.environ['TEST_REGISTRY'] = 'TRUE' print('set TEST REG to %s' % os.getenv('TEST_REGISTRY')) here = os.getcwd() os.chdir('../scripts/designer/bin') test_registry = '' if args.test_registry: test_registry = '-t' cmd = './create_image.sh grader %s' % test_registry os.system(cmd) os.chdir(here) src_path = '../' labtainer_config_file = os.path.join(src_path, 'config', 'labtainer.config') logger = LabtainerLogging.LabtainerLogging("publish_grader.log", 'publish', labtainer_config_file) labutils.logger = logger labtainer_config = ParseLabtainerConfig.ParseLabtainerConfig( labtainer_config_file, logger) if args.test_registry: registry = labtainer_config.test_registry else: registry = labtainer_config.default_registry dfile_path = '../scripts/designer/base_dockerfiles/Dockerfile.labtainer.grader' image_base = VersionInfo.getFrom(dfile_path, registry) base_id = VersionInfo.getImageId(image_base, True) framework_version = labutils.framework_version relabel('labtainer.grader', framework_version, image_base, base_id, registry)
def inspectRemote(image, lgr, is_rebuild=False, quiet=False, no_pull=False, base_registry=None): lgr.debug('inspectRemote image %s no_pull: %r' % (image, no_pull)) use_tag = 'latest' token = getToken(image) if token is None or len(token.strip()) == 0: return None, None, None, None digest = getDigest(token, image, 'latest') if digest is None: return None, None, None, None created, user, version, base = getCreated(token, image, digest) # TBD until grader gets base labels if not no_pull and not image.endswith('labtainer.grader'): if base is None: print('Remote image %s is lacking a base version, it needs to be retagged with trunk/distrib/retag_all.py' % image) exit(1) #return None, None, None, None ''' fix base to reflect the given or the remote registry ''' if '/' in image and '/' in base: parts = base.split('/') if base_registry is None: my_registry = image.split('/')[0] base = '%s/%s' % (my_registry, parts[1]) else: base = '%s/%s' % (base_registry, parts[1]) lgr.debug('base is %s' % base) base_image, base_id = base.rsplit('.', 1) my_id = VersionInfo.getImageId(base_image, quiet) if (my_id == base_id): pass #print('got correct base_id') else: lgr.debug('got WRONG base_id my_id %s base: %s' % (my_id, base_id)) tlist = getTags(image, token) need_tag = 'base_image%s' % my_id if is_rebuild or need_tag in tlist: use_tag = need_tag elif quiet: cmd = 'docker pull %s' % base_image os.system(cmd) else: print('**************************************************') print('* This lab will require a download of *') print('* several hundred megabytes. *') print('**************************************************') if sys.version_info >=(3,0): confirm = str(input('Continue? (y/n)')).lower().strip() else: confirm = str(raw_input('Continue? (y/n)')).lower().strip() if confirm != 'y': print('Exiting lab') exit(0) else: print('Please wait for download to complete...') cmd = 'docker pull %s' % base_image os.system(cmd) print('Download has completed. Wait for lab to start.') return created, user, version, use_tag
def pushImage(lab, docker_dir, registry_info, logger): ''' Set the label and tags on any newly built image and push it to the given registry. ''' did_one = False for ri in registry_info: df = 'Dockerfile.%s.%s.student' % (lab, ri.name) dfile_path = os.path.join(docker_dir,df) image_base = VersionInfo.getFrom(dfile_path, ri.base_registry) base_id = VersionInfo.getImageId(image_base, True) framework_version = labutils.framework_version relabel(ri.image_name, framework_version, image_base, base_id, ri.registry, logger) logger.debug('Did relabel of %s using base_id %s' % (ri.image_name, base_id)) did_one = True ''' Delete the lab images. Two reasons: 1) ensure we run registry or dockerHub copy, 2) don't push on a rebuild if not rebuilt. ''' if did_one: removelab.removeLab(lab)
def __init__(self, parent, optionList=[]): ### package options self.parent = parent self.options = Options(optionList) self.versionInfo = VersionInfo.VersionInfo(self) self.targets = OrderedDict() self.archiveNames = OrderedDict() # Specifiy that the fetched source should be placed into a # subdirectory of the default source directory self.targetInstSrc = OrderedDict() # Specifiy that the default source directory should have a suffix after # the package name. This is usefull for package which needs different sources. self.targetSrcSuffix = OrderedDict() self.targetConfigurePath = OrderedDict() self.targetInstallPath = OrderedDict() self.targetMergeSourcePath = OrderedDict() self.targetMergePath = OrderedDict() self.targetDigests = OrderedDict() self.targetDigestUrls = OrderedDict() ## \todo prelimary self.svnTargets = OrderedDict() # dependencies is the common way to define dependencies that are both # run time and build time dependencies, # runtimeDependencies and buildDependencies are not different when looking # at the build process itself, they will only make a difference when getting # output of the dependencies self.dependencies = OrderedDict() self.runtimeDependencies = OrderedDict() self.buildDependencies = OrderedDict() # a long and a short description for the package self.shortDescription = '' self.description = '' #a url to the projects homepage self.homepage = '' self.patchToApply = OrderedDict( ) # key: target. Value: list(['patchname', patchdepth]) or ('patchname',patchdepth) self.isoDateToday = str(datetime.date.today()).replace('-', '') self.svnTargets['svnHEAD'] = False self.svnServer = None # this will result in the use of the default server (either anonsvn.kde.org or svn.kde.org) self._defaultTarget = None self.buildTarget = 'svnHEAD' self.setTargets() self.setBuildTarget() self.setBuildOptions() # do this after buildTarget is set so that some dependencies can be set depending on self.buildTarget self.setDependencies()
def __init__(self, parent): ### package options self.parent = parent self.options = Options(parent.package) self.versionInfo = VersionInfo.VersionInfo(self) self.targets = {} self.archiveNames = {} # Specifiy that the fetched source should be placed into a # subdirectory of the default source directory self.targetInstSrc = {} # Specifiy that the default source directory should have a suffix after # the package name. This is usefull for package which needs different sources. self.targetSrcSuffix = {} self.targetConfigurePath = {} self.targetInstallPath = {} self.targetDigests = {} self.targetDigestsX64 = {} self.targetDigestUrls = {} ## \todo prelimary self.svnTargets = {} self.patchLevel = {} # runtimeDependencies and buildDependencies are not different when looking # at the build process itself, they will only make a difference when getting # output of the dependencies self.runtimeDependencies = {} self.buildDependencies = {} self.description = "" # tag words describing the package self.tags = "" # a url to the projects webpage self.webpage = "" self.patchToApply = { } # key: target. Value: list(['patchname', patchdepth]) or ('patchname',patchdepth) self.svnTargets = {} self.svnServer = None # this will result in the use of the default server (either anonsvn.kde.org or svn.kde.org) self._defaultTarget = None self.buildTarget = "" self.registerOptions() self.setTargets() self.setBuildTarget() self.setBuildOptions() # do this after buildTarget is set so that some dependencies can be set depending on self.buildTarget self.setDependencies()
def inspectRemote(image, is_rebuild=False, quiet=False): use_tag = 'latest' token = getToken(image) if token is None or len(token.strip()) == 0: return None, None, None, None digest = getDigest(token, image, 'latest') if digest is None: return None, None, None, None created, user, version, base = getCreated(token, image, digest) if base is None: print( 'Remote image %s is lacking a base version, it needs to be retagged with trunk/distrib/retag_all.py' % image) exit(1) #return None, None, None, None #print('base is %s' % base) base_image, base_id = base.rsplit('.', 1) my_id = VersionInfo.getImageId(base_image, quiet) if my_id == base_id: pass #print('got correct base_id') else: #print('got WRONG base_id') tlist = getTags(image, token) need_tag = 'base_image%s' % my_id if is_rebuild or need_tag in tlist: use_tag = need_tag elif quiet: cmd = 'docker pull %s' % base_image os.system(cmd) else: print('**************************************************') print('* This lab will require a download of *') print('* several hundred megabytes. *') print('**************************************************') confirm = str(raw_input('Continue? (y/n)')).lower().strip() if confirm != 'y': print('Exiting lab') exit(0) else: print('Please wait for download to complete...') cmd = 'docker pull %s' % base_image os.system(cmd) print('Download has completed. Wait for lab to start.') return created, user, version, use_tag
def init_options_config(self, cfg_env=None): pnumber = "%s" % VersionInfo.read_string("VERSION_STRING") self.options_common = DoxyOptions( env=cfg_env, proj_num=pnumber, override_dict=NeulBuildConfig.get_doxygen_additional_tags(), default_dict=DEFAULT_DOXYOPTIONS_DICT) self.options_common.add_option('PREDEFINED', self.env['CPPDEFINES']) self.options_common.set_output(self.html_output_path.path) if NeulBuildConfig.doxygen_quiet_mode: self.options_common.add_option('QUIET', 'YES') # Turn off by default the inclusion of external modules/files found in tagfiles from getting # listed with all of the current components modules/files etc... self.options_common.add_option('EXTERNAL_GROUPS', 'NO') self.options_common.add_option('EXTERNAL_PAGES', 'NO')
def inspectLocal(image, test_registry, is_rebuild=False, quiet=False): use_tag = 'latest' digest = getDigest(image, 'latest', test_registry) if digest is None: return None, None, None, None, None created, user, version, base = getCreated(image, digest, test_registry) #print('base is %s' % base) if base is not None: base_image, base_id = base.rsplit('.', 1) my_id = VersionInfo.getImageId(base_image, quiet) if my_id == base_id: pass #print('got correct base_id') else: print( 'got WRONG base_id for base %s used in %s my: %s base: %s' % (base_image, image, my_id, base_id)) tlist = getTags(image, test_registry) need_tag = 'base_image%s' % my_id if is_rebuild or need_tag in tlist: use_tag = need_tag elif quiet: cmd = 'docker pull %s' % base_image os.system(cmd) else: print('**************************************************') print('* This lab will require a download of *') print('* several hundred megabytes. *') print('**************************************************') confirm = str(raw_input('Continue? (y/n)')).lower().strip() if confirm != 'y': print('Exiting lab') exit(0) else: print('Please wait for download to complete...') cmd = 'docker pull %s' % base_image os.system(cmd) print('Download has completed. Wait for lab to start.') return created, user, version, use_tag, base
def get_build_git_hash(): git_hash = VersionInfo.read_string("GIT_HASH") print "Using git hash:", git_hash return {'FIRMWARE_GIT_HASH': '\\"' + git_hash + '\\"'}
def get_build_version_string(): version_string = VersionInfo.read_string("VERSION_STRING") print "Using version string:", version_string return {'FIRMWARE_VERSION_STRING': '\\"' + version_string + '\\"'}