Exemple #1
0
 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',
     )
Exemple #2
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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()
Exemple #6
0
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)
Exemple #7
0
    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()
Exemple #8
0
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
Exemple #10
0
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)
Exemple #11
0
    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()
Exemple #12
0
    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()
Exemple #13
0
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')
Exemple #15
0
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
Exemple #16
0
 def get_build_git_hash():
     git_hash = VersionInfo.read_string("GIT_HASH")
     print "Using git hash:", git_hash
     return {'FIRMWARE_GIT_HASH': '\\"' + git_hash + '\\"'}
Exemple #17
0
 def get_build_version_string():
     version_string = VersionInfo.read_string("VERSION_STRING")
     print "Using version string:", version_string
     return {'FIRMWARE_VERSION_STRING': '\\"' + version_string + '\\"'}