def upload_rpms(scratch_directory, target_bucket, version, build_server): """ Upload RPMS from build server to yum repository. :param FilePath scratch_directory: Temporary directory to download repository to. :param bytes target_bucket: S3 bucket to upload repository to. :param bytes version: Version to download RPMs for. :param bytes build_server: Server to download new RPMs from. """ if not (is_release(version) or is_weekly_release(version) or is_pre_release(version)): raise NotARelease() if get_doc_version(version) != version: raise DocumentationRelease() is_dev = not is_release(version) if is_dev: target_distro_suffix = "-testing" else: target_distro_suffix = "" operating_systems = [ { 'distro': 'fedora', 'version': '20', 'arch': 'x86_64' }, { 'distro': 'centos', 'version': '7', 'arch': 'x86_64' }, ] for operating_system in operating_systems: yield update_repo( rpm_directory=scratch_directory.child(b'{}-{}-{}'.format( operating_system['distro'], operating_system['version'], operating_system['arch'])), target_bucket=target_bucket, target_key=os.path.join( operating_system['distro'] + target_distro_suffix, operating_system['version'], operating_system['arch']), source_repo=os.path.join( build_server, b'results/omnibus', version, b'{}-{}'.format(operating_system['distro'], operating_system['version'])), packages=FLOCKER_PACKAGES, flocker_version=version, distro_name=operating_system['distro'], distro_version=operating_system['version'], )
def upload_rpms(scratch_directory, target_bucket, version, build_server): """ Upload RPMS from build server to yum repository. :param FilePath scratch_directory: Temporary directory to download repository to. :param bytes target_bucket: S3 bucket to upload repository to. :param bytes version: Version to download RPMs for. :param bytes build_server: Server to download new RPMs from. """ if not (is_release(version) or is_weekly_release(version) or is_pre_release(version)): raise NotARelease() if get_doc_version(version) != version: raise DocumentationRelease() is_dev = not is_release(version) if is_dev: target_distro_suffix = "-testing" else: target_distro_suffix = "" operating_systems = [ {'distro': 'fedora', 'version': '20', 'arch': 'x86_64'}, {'distro': 'centos', 'version': '7', 'arch': 'x86_64'}, ] for operating_system in operating_systems: yield update_repo( rpm_directory=scratch_directory.child( b'{}-{}-{}'.format( operating_system['distro'], operating_system['version'], operating_system['arch'])), target_bucket=target_bucket, target_key=os.path.join( operating_system['distro'] + target_distro_suffix, operating_system['version'], operating_system['arch']), source_repo=os.path.join( build_server, b'results/omnibus', version, b'{}-{}'.format( operating_system['distro'], operating_system['version'])), packages=FLOCKER_PACKAGES, flocker_version=version, distro_name=operating_system['distro'], distro_version=operating_system['version'], )
def parseArgs(self): if self['doc-version'] is None: self['doc-version'] = get_doc_version(self['flocker-version']) if self['production']: self.environment = Environments.PRODUCTION
def publish_docs(flocker_version, doc_version, environment): """ Publish the flocker documentation. :param bytes flocker_version: The version of flocker to publish the documentation for. :param bytes doc_version: The version to publish the documentation as. :param Environments environment: The environment to publish the documentation to. :raises NotARelease: Raised if trying to publish to a version that isn't a release. :raises NotTagged: Raised if publishing to production and the version being published version isn't tagged. """ if not (is_release(doc_version) or is_weekly_release(doc_version) or is_pre_release(doc_version)): raise NotARelease() if environment == Environments.PRODUCTION: if get_doc_version(flocker_version) != doc_version: raise NotTagged() configuration = DOCUMENTATION_CONFIGURATIONS[environment] dev_prefix = '%s/' % (flocker_version,) version_prefix = 'en/%s/' % (doc_version,) is_dev = not is_release(doc_version) if is_dev: stable_prefix = "en/devel/" else: stable_prefix = "en/latest/" # Get the list of keys in the new documentation. new_version_keys = yield Effect( ListS3Keys(bucket=configuration.dev_bucket, prefix=dev_prefix)) # Get the list of keys already existing for the given version. # This should only be non-empty for documentation releases. existing_version_keys = yield Effect( ListS3Keys(bucket=configuration.documentation_bucket, prefix=version_prefix)) # Copy the new documentation to the documentation bucket. yield Effect( CopyS3Keys(source_bucket=configuration.dev_bucket, source_prefix=dev_prefix, destination_bucket=configuration.documentation_bucket, destination_prefix=version_prefix, keys=new_version_keys)) # Delete any keys that aren't in the new documentation. yield Effect( DeleteS3Keys(bucket=configuration.documentation_bucket, prefix=version_prefix, keys=existing_version_keys - new_version_keys)) # Update the redirect for the stable URL (en/latest/ or en/devel/) # to point to the new version. Returns the old target. old_prefix = yield Effect( UpdateS3RoutingRule(bucket=configuration.documentation_bucket, prefix=stable_prefix, target_prefix=version_prefix)) # If we have changed versions, get all the keys from the old version if old_prefix: previous_version_keys = yield Effect( ListS3Keys(bucket=configuration.documentation_bucket, prefix=old_prefix)) else: previous_version_keys = set() # The changed keys are the new keys, the keys that were deleted from this # version, and the keys for the previous version. changed_keys = (new_version_keys | existing_version_keys | previous_version_keys) # S3 serves /index.html when given /, so any changed /index.html means # that / changed as well. # Note that we check for '/index.html' but remove 'index.html' changed_keys |= {key_name[:-len('index.html')] for key_name in changed_keys if key_name.endswith('/index.html')} # Always update the root. changed_keys |= {''} # The full paths are all the changed keys under the stable prefix, and # the new version prefix. This set is slightly bigger than necessary. changed_paths = {prefix + key_name for key_name in changed_keys for prefix in [stable_prefix, version_prefix]} # Invalidate all the changed paths in cloudfront. yield Effect( CreateCloudFrontInvalidation(cname=configuration.cloudfront_cname, paths=changed_paths))
# The master toctree document. master_doc = 'index' # General information about the project. project = u'Flocker' copyright = u'2014, ClusterHQ' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # from flocker import __version__ from flocker.docs import get_doc_version, is_release # The short X.Y version. version = get_doc_version(__version__) html_context = { # This is used to show the development version warning. 'is_release': is_release(__version__), } # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # We override with our own variant to improve search results slightly. from sphinx.search.en import SearchEnglish from sphinx.search import languages as sphinx_languages
def publish_docs(flocker_version, doc_version, environment): """ Publish the flocker documentation. :param bytes flocker_version: The version of flocker to publish the documentation for. :param bytes doc_version: The version to publish the documentation as. :param Environments environment: The environment to publish the documentation to. :raises NotARelease: Raised if trying to publish to a version that isn't a release. :raises NotTagged: Raised if publishing to production and the version being published version isn't tagged. """ if not (is_release(doc_version) or is_weekly_release(doc_version)): raise NotARelease() if environment == Environments.PRODUCTION: if get_doc_version(flocker_version) != doc_version: raise NotTagged() configuration = DOCUMENTATION_CONFIGURATIONS[environment] dev_prefix = '%s/' % (flocker_version, ) version_prefix = 'en/%s/' % (doc_version, ) # This might be clearer as ``is_weekly_release(doc_version)``, # but it is more important to never publish a non-marketing release as # /latest/, so we key off being a marketing release. is_dev = not is_release(doc_version) if is_dev: stable_prefix = "en/devel/" else: stable_prefix = "en/latest/" # Get the list of keys in the new documentation. new_version_keys = yield Effect( ListS3Keys(bucket=configuration.dev_bucket, prefix=dev_prefix)) # Get the list of keys already existing for the given version. # This should only be non-empty for documentation releases. existing_version_keys = yield Effect( ListS3Keys(bucket=configuration.documentation_bucket, prefix=version_prefix)) # Copy the new documentation to the documentation bucket. yield Effect( CopyS3Keys(source_bucket=configuration.dev_bucket, source_prefix=dev_prefix, destination_bucket=configuration.documentation_bucket, destination_prefix=version_prefix, keys=new_version_keys)) # Delete any keys that aren't in the new documentation. yield Effect( DeleteS3Keys(bucket=configuration.documentation_bucket, prefix=version_prefix, keys=existing_version_keys - new_version_keys)) # Update the redirect for the stable URL (en/latest/ or en/devel/) # to point to the new version. Returns the old target. old_prefix = yield Effect( UpdateS3RoutingRule(bucket=configuration.documentation_bucket, prefix=stable_prefix, target_prefix=version_prefix)) # If we have changed versions, get all the keys from the old version if old_prefix: previous_version_keys = yield Effect( ListS3Keys(bucket=configuration.documentation_bucket, prefix=old_prefix)) else: previous_version_keys = set() # The changed keys are the new keys, the keys that were deleted from this # version, and the keys for the previous version. changed_keys = (new_version_keys | existing_version_keys | previous_version_keys) # S3 serves /index.html when given /, so any changed /index.html means # that / changed as well. # Note that we check for '/index.html' but remove 'index.html' changed_keys |= { key_name[:-len('index.html')] for key_name in changed_keys if key_name.endswith('/index.html') } # Always update the root. changed_keys |= {''} # The full paths are all the changed keys under the stable prefix, and # the new version prefix. This set is slightly bigger than necessary. changed_paths = { prefix + key_name for key_name in changed_keys for prefix in [stable_prefix, version_prefix] } # Invalidate all the changed paths in cloudfront. yield Effect( CreateCloudFrontInvalidation(cname=configuration.cloudfront_cname, paths=changed_paths))