cumulusci.core.config package

Submodules

class cumulusci.core.config.BaseConfig.BaseConfig(config=None)[source]

Bases: object

BaseConfig provides a common interface for nested access for all Config objects in CCI.

defaults = {}
class cumulusci.core.config.BaseGlobalConfig.BaseGlobalConfig(config=None)[source]

Bases: cumulusci.core.config.BaseTaskFlowConfig.BaseTaskFlowConfig

Base class for the global config which contains all configuration not specific to projects

config = {'cumulusci': {'keychain': 'cumulusci.core.keychain.EncryptedFileProjectKeychain'}, 'flows': {'beta_dependencies': {'description': 'Deploy the latest (beta) version of dependencies to prepare the org environment for the package metadata', 'steps': {1: {'options': {'include_beta': True}, 'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'ci_beta': {'description': 'Install the latest beta version and runs apex tests from the managed package', 'steps': {1: {'flow': 'install_beta'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'ci_feature': {'description': 'Prepare an unmanaged metadata test org and run apex tests. Intended for use against feature branch commits.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_feature_beta_deps': {'description': 'Install the latest beta version of dependencies and run apex tests.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_master': {'description': 'Deploy the package metadata to the packaging org and prepare for managed package version upload. Intended for use against master branch commits.', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'include_beta': False}}}, 2: {'flow': 'deploy_packaging'}, 3: {'flow': 'config_packaging'}}}, 'ci_release': {'description': 'Install a production release version and runs tests from the managed package', 'steps': {1: {'flow': 'install_prod'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'config_apextest': {'description': 'Configure an org to run apex tests after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_dev': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_managed': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'options': {'unmanaged': False}, 'task': 'deploy_post'}, 2: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_packaging': {'description': 'Configure packaging org for upload after package metadata is deployed', 'steps': {1: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_qa': {'description': 'Configure an org for use as a QA org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_regression': {'description': 'Configure an org for QA regression after the package is installed', 'steps': {1: {'flow': 'config_managed'}}}, 'dependencies': {'description': 'Deploy dependencies to prepare the org environment for the package metadata', 'steps': {1: {'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'deploy_packaging': {'description': 'Process and deploy the package metadata to the packaging org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'create_managed_src'}, 3: {'options': {'managed': True}, 'task': 'update_package_xml'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_managed_src'}, 6: {'task': 'uninstall_packaged_incremental'}}}, 'deploy_unmanaged': {'description': 'Deploy the unmanaged metadata from the package', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx" and not org_config.scratch'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3: {'task': 'deploy', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3.1: {'task': 'dx_push', 'when': 'project_config.project__source_format == "sfdx" and org_config.scratch'}, 4: {'task': 'uninstall_packaged_incremental', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}}}, 'deploy_unmanaged_ee': {'description': 'Deploy the unmanaged metadata from the package to an Enterprise Edition org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml'}, 3: {'task': 'create_unmanaged_ee_src'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_unmanaged_ee_src'}, 6: {'options': {'purge_on_delete': False}, 'task': 'uninstall_packaged_incremental'}}}, 'dev_org': {'description': 'Set up an org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}, 4: {'task': 'snapshot_changes'}}}, 'dev_org_beta_deps': {'description': 'Set up an org as a development environment for unmanaged metadata based on the latest dependencies (including betas).', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}}}, 'dev_org_namespaced': {'description': 'Set up a namespaced scratch org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'namespaced_org': True}}}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev', 'options': {'deploy_post': {'namespaced_org': True, 'unmanaged': False}, 'update_admin_profile': {'namespaced_org': True}}}, 4: {'task': 'snapshot_changes'}}}, 'install_beta': {'description': 'Install and configure the latest beta version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed_beta'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod': {'description': 'Install and configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod_no_config': {'description': 'Install but do not configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'options': {'unmanaged': False}, 'task': 'deploy_post'}}}, 'install_regression': {'description': 'Install the latest beta dependencies and upgrade to the latest beta version from the most recent production version', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'task': 'install_managed'}, 3: {'task': 'install_managed_beta'}}}, 'qa_org': {'description': 'Set up an org as a QA environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_qa'}, 4: {'task': 'snapshot_changes'}}}, 'regression_org': {'description': 'Set up an org for QA regression by upgrading from the previous managed package release to the current beta release.', 'steps': {1: {'flow': 'install_regression'}, 2: {'flow': 'config_regression'}, 3: {'task': 'snapshot_changes'}}}, 'release_beta': {'description': 'Upload and release a beta version of the metadata currently in packaging', 'steps': {1: {'options': {'name': 'Automated beta release'}, 'task': 'upload_beta'}, 2: {'options': {'version': '^^upload_beta.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'include_empty': True, 'link_pr': True, 'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}, 4: {'task': 'github_master_to_feature'}}}, 'release_production': {'description': 'Upload and release a production version of the metadata currently in packaging', 'steps': {1: {'task': 'upload_production'}, 2: {'options': {'version': '^^upload_production.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}}}, 'retrieve_scratch': {'description': 'Retrieves declarative changes made in a scratch org and converts to src directory', 'steps': {1: {'task': 'dx_convert_to'}, 2: {'task': 'dx_pull'}, 3: {'task': 'dx_convert_from'}, 4: {'task': 'update_package_xml'}, 5: {'options': {'package_xml': 'src/package.xml', 'path': 'src'}, 'task': 'retrieve_unpackaged'}, 6: {'task': 'update_package_xml'}}}, 'uninstall_managed': {'description': 'Uninstall the installed managed version of the package. Run this before install_beta or install_prod if a version is already installed in the target org.', 'steps': {1: {'task': 'uninstall_post'}, 2: {'task': 'uninstall_managed'}}}, 'unmanaged_ee': {'description': 'Deploy the unmanaged package metadata and all dependencies to the target EE org', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'purge_on_delete': False}}}, 2: {'flow': 'deploy_unmanaged_ee'}}}}, 'orgs': {'scratch': {'beta': {'config_file': 'orgs/beta.json'}, 'dev': {'config_file': 'orgs/dev.json', 'days': 7}, 'feature': {'config_file': 'orgs/feature.json'}, 'qa': {'config_file': 'orgs/dev.json', 'days': 7}, 'release': {'config_file': 'orgs/release.json'}}}, 'project': {'dependencies': None, 'git': {'default_branch': 'master', 'prefix_beta': 'beta/', 'prefix_feature': 'feature/', 'prefix_release': 'release/', 'push_prefix_production': 'Production orgs: ', 'push_prefix_sandbox': 'Sandbox orgs: ', 'release_notes': {'parsers': {1: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Critical Changes'}, 2: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Changes'}, 3: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubIssuesParser', 'title': 'Issues Closed'}, 4: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'New Metadata'}, 5: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Deleted Metadata'}}}}, 'name': None, 'package': {'api_version': '48.0', 'install_class': None, 'name': None, 'name_managed': None, 'namespace': None, 'uninstall_class': None}, 'test': {'name_match': '%_TEST%'}}, 'services': {'apextestsdb': {'attributes': {'base_url': {'description': 'The base url for your ApexTestsDB instance.', 'required': True}, 'token': {'description': 'The api token to use when connecting to ApexTestsDB.', 'required': True}, 'user_id': {'description': 'The user id to use when connecting to ApexTestsDB.', 'required': True}}, 'description': 'Configure connection for ApexTestsDB tasks, e.g. ApextestsdbUpload'}, 'connected_app': {'attributes': {'callback_url': {'description': 'Callback URL configured on the Connected App', 'required': True}, 'client_id': {'description': 'Client ID/Consumer Key from the Connected App', 'required': True}, 'client_secret': {'description': 'Client Secret/Consumer Secret from the Connected App', 'required': True}}, 'description': 'A Connected App is required to connect to and run commands against persistent orgs. See http://cumulusci.readthedocs.io/en/latest/tutorial.html#creating-a-connected-app for more info.'}, 'devhub': {'attributes': {'username': {'description': 'Username or alias of the SFDX org to use as a Dev Hub', 'required': True}}, 'description': 'Configure which SFDX org to use as a Dev Hub for creating scratch orgs'}, 'github': {'attributes': {'email': {'description': 'The email address to used by Github tasks when an operation requires an email address.', 'required': True}, 'password': {'description': 'Github password to use for tasks. It is recommended to use a Github Application Token instead of password to allow bypassing 2fa.', 'required': True}, 'username': {'description': 'The Github username to use for tasks.', 'required': True}}, 'description': 'Configure connection for github tasks, e.g. Create Release', 'validator': 'cumulusci.core.github.validate_service'}, 'metaci': {'attributes': {'app_name': {'description': 'The Heroku app name', 'required': False}, 'token': {'description': 'Your API token to the MetaCI site (get from SITE_URL/api/token)', 'required': True}, 'url': {'description': 'The main url to the MetaCI site', 'required': True}}, 'description': 'Connect with a MetaCI site to run builds of projects from this repository'}, 'metadeploy': {'attributes': {'token': {'description': 'Your API token to the MetaDeploy site (get from SITE_URL/admin/authtoken/token)', 'required': True}, 'url': {'description': 'The main url for your MetaDeploy instance.', 'required': True}}, 'description': 'Connect with a MetaDeploy site to publish installers from this repository'}, 'saucelabs': {'attributes': {'api_key': {'description': 'The Saucelabs api key to use for tasks', 'required': True}, 'username': {'description': 'The Saucelabs username to use for tasks.', 'required': True}}, 'description': 'Configure connection for saucelabs tasks.'}}, 'tasks': {'activate_flow': {'class_path': 'cumulusci.tasks.salesforce.activate_flow.ActivateFlow', 'description': 'Activates Flows identified by a given list of Developer Names', 'group': 'Metadata Transformations'}, 'add_page_layout_related_lists': {'class_path': 'cumulusci.tasks.metadata_etl.AddRelatedLists', 'description': 'Adds specified Related List to one or more Page Layouts.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_permission_set_perms': {'class_path': 'cumulusci.tasks.metadata_etl.AddPermissionSetPermissions', 'description': 'Adds specified Apex class access and Field-Level Security to a Permission Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_standard_value_set_entries': {'class_path': 'cumulusci.tasks.metadata_etl.AddValueSetEntries', 'description': 'Adds specified picklist entries to a Standard Value Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'batch_apex_wait': {'class_path': 'cumulusci.tasks.apex.batch.BatchApexWait', 'description': 'Waits on a batch apex job to finish.', 'group': 'Salesforce'}, 'command': {'class_path': 'cumulusci.tasks.command.Command', 'description': 'Run an arbitrary command', 'group': 'Utilities'}, 'connected_app': {'class_path': 'cumulusci.tasks.connectedapp.CreateConnectedApp', 'description': 'Creates the Connected App needed to use persistent orgs in the CumulusCI keychain', 'group': 'Setup', 'options': {'connect': True, 'label': 'CumulusCI', 'overwrite': False}}, 'create_community': {'class_path': 'cumulusci.tasks.salesforce.CreateCommunity', 'description': 'Creates a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'create_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.CreateManagedSrc', 'description': 'Modifies the src directory for managed deployment. Strips //cumulusci-managed from all Apex code', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'create_package': {'class_path': 'cumulusci.tasks.salesforce.CreatePackage', 'description': 'Creates a package in the target org with the default package name for the project', 'group': 'Salesforce Packages'}, 'create_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.CreateUnmanagedEESrc', 'description': 'Modifies the src directory for unmanaged deployment to an EE org', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'deploy': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys the src directory of the repository to the org', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'deploy_post': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/post/', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'namespace_inject': '$project_config.project__package__namespace', 'namespace_token': '%%%NAMESPACE%%%', 'path': 'unpackaged/post', 'unmanaged': True}}, 'deploy_pre': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/pre/', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'deploy_qa_config': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys configuration for QA.', 'group': 'Salesforce Metadata', 'options': {'namespace_inject': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa', 'unmanaged': True}}, 'disable_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Disable specified TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'active': False, 'restore_file': 'trigger_status.yml'}}, 'dx_convert_from': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts force-app directory in sfdx format into metadata format under src', 'group': 'Salesforce DX', 'options': {'command': 'force:source:convert -d src'}}, 'dx_convert_to': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts src directory metadata format into sfdx format under force-app', 'group': 'Salesforce DX', 'options': {'command': 'force:mdapi:convert -r src'}}, 'dx_pull': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to pull from a scratch org into the force-app directory', 'group': 'Salesforce DX', 'options': {'command': 'force:source:pull'}}, 'dx_push': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to push the force-app directory metadata into a scratch org', 'group': 'Salesforce DX', 'options': {'command': 'force:source:push'}}, 'ensure_record_types': {'class_path': 'cumulusci.tasks.salesforce.EnsureRecordTypes', 'description': 'Ensure that a default Record Type is extant on the given standard sObject (custom objects are not supported). If Record Types are already present, do nothing.', 'group': 'Salesforce Metadata', 'options': {'record_type_developer_name': 'Default', 'record_type_label': 'Default'}}, 'execute_anon': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Execute anonymous apex via the tooling api.', 'group': 'Salesforce'}, 'extract_dataset': {'class_path': 'cumulusci.tasks.bulkdata.ExtractData', 'description': 'Extract a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'generate_data_dictionary': {'class_path': 'cumulusci.tasks.datadictionary.GenerateDataDictionary', 'description': 'Create a data dictionary for the project in CSV format.', 'options': {'release_prefix': '$project_config.project__git__prefix_release'}}, 'generate_dataset_mapping': {'class_path': 'cumulusci.tasks.bulkdata.GenerateMapping', 'description': 'Create a mapping for extracting data from an org.', 'group': 'Data Operations', 'options': {'namespace_prefix': '$project_config.project__package__namespace', 'path': 'datasets/mapping.yml'}}, 'get_installed_packages': {'class_path': 'cumulusci.tasks.salesforce.GetInstalledPackages', 'description': 'Retrieves a list of the currently installed managed package namespaces and their versions', 'group': 'Salesforce Metadata'}, 'github_clone_tag': {'class_path': 'cumulusci.tasks.github.CloneTag', 'description': 'Clones a github tag under a new name.', 'group': 'GitHub'}, 'github_master_to_feature': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on the master branch into all open feature branches', 'group': 'GitHub'}, 'github_parent_pr_notes': {'class_path': 'cumulusci.tasks.release_notes.task.ParentPullRequestNotes', 'description': "Merges the description of a child pull request to the respective parent's pull request (if one exists).", 'group': 'GitHub'}, 'github_parent_to_children': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on a parent feature branch into all child feature branches', 'group': 'GitHub', 'options': {'children_only': True, 'source_branch': '$project_config.repo_branch'}}, 'github_pull_requests': {'class_path': 'cumulusci.tasks.github.PullRequests', 'description': 'Lists open pull requests in project Github repository', 'group': 'GitHub'}, 'github_release': {'class_path': 'cumulusci.tasks.github.CreateRelease', 'description': 'Creates a Github release for a given managed package version number', 'group': 'GitHub'}, 'github_release_notes': {'class_path': 'cumulusci.tasks.release_notes.task.GithubReleaseNotes', 'description': 'Generates release notes by parsing pull request bodies of merged pull requests between two tags', 'group': 'GitHub'}, 'github_release_report': {'class_path': 'cumulusci.tasks.github.ReleaseReport', 'description': 'Parses GitHub release notes to report various info', 'group': 'GitHub'}, 'insert_record': {'class_path': 'cumulusci.tasks.salesforce.insert_record.InsertRecord', 'description': 'Inserts a record of any sObject using the REST API', 'group': 'Salesforce'}, 'install_managed': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Install the latest managed production release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest'}}, 'install_managed_beta': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Installs the latest managed beta release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest_beta'}}, 'list_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.ListChanges', 'description': 'List the changes from a scratch org', 'group': 'Salesforce Metadata'}, 'list_communities': {'class_path': 'cumulusci.tasks.salesforce.ListCommunities', 'description': 'Lists Communities for the current org using the Connect API.', 'group': 'Salesforce Communities'}, 'list_community_templates': {'class_path': 'cumulusci.tasks.salesforce.ListCommunityTemplates', 'description': 'Prints the Community Templates available to the current org', 'group': 'Salesforce Communities'}, 'list_metadata_types': {'class_path': 'cumulusci.tasks.util.ListMetadataTypes', 'description': 'Prints the metadata types in a project', 'group': 'Salesforce Metadata'}, 'load_custom_settings': {'class_path': 'cumulusci.tasks.salesforce.LoadCustomSettings', 'description': 'Load Custom Settings specified in a YAML file to the target org', 'group': 'Data Operations'}, 'load_dataset': {'class_path': 'cumulusci.tasks.bulkdata.LoadData', 'description': 'Load a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'log': {'class_path': 'cumulusci.tasks.util.LogLine', 'description': 'Log a line at the info level.', 'group': 'Utilities', 'options': {'level': 'info'}}, 'meta_xml_apiversion': {'class_path': 'cumulusci.tasks.metaxml.UpdateApi', 'description': 'Set the API version in ``*meta.xml`` files', 'group': 'Salesforce Metadata'}, 'meta_xml_dependencies': {'class_path': 'cumulusci.tasks.metaxml.UpdateDependencies', 'description': 'Set the version for dependent packages', 'group': 'Salesforce Metadata'}, 'metadeploy_publish': {'class_path': 'cumulusci.tasks.metadeploy.Publish', 'description': 'Publish a release to the MetaDeploy web installer', 'group': 'Release Management'}, 'org_settings': {'class_path': 'cumulusci.tasks.salesforce.org_settings.DeployOrgSettings', 'description': 'Apply org settings from a scratch org definition file', 'group': 'Salesforce DX'}, 'publish_community': {'class_path': 'cumulusci.tasks.salesforce.PublishCommunity', 'description': 'Publishes a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'push_all': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades'}, 'push_failure_report': {'class_path': 'cumulusci.tasks.push.pushfails.ReportPushFailures', 'description': 'Produce a CSV report of the failed and otherwise anomalous push jobs.', 'group': 'Push Upgrades', 'options': {'ignore_errors': ['Salesforce Subscription Expired', 'Package Uninstalled']}}, 'push_list': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in the specified file', 'group': 'Push Upgrades'}, 'push_qa': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in push/orgs_qa.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_qa.txt'}}, 'push_sandbox': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades', 'options': {'subscriber_where': "OrgType = 'Sandbox'"}}, 'push_trial': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to Trialforce Template orgs listed in push/orgs_trial.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_trial.txt'}}, 'query': {'class_path': 'cumulusci.tasks.salesforce.SOQLQuery', 'description': 'Queries the connected org', 'group': 'Salesforce Bulk API'}, 'remove_metadata_xml_elements': {'class_path': 'cumulusci.tasks.metadata.modify.RemoveElementsXPath', 'description': 'Remove specified XML elements from one or more metadata files', 'group': 'Salesforce Metadata'}, 'restore_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Restore status of TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'restore': True, 'restore_file': 'trigger_status.yml'}}, 'retrieve_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieve changed components from a scratch org', 'group': 'Salesforce Metadata'}, 'retrieve_packaged': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata from the org', 'group': 'Salesforce Metadata', 'options': {'path': 'packaged'}}, 'retrieve_qa_config': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieves the current changes in the scratch org into unpackaged/config/qa', 'group': 'Salesforce Metadata', 'options': {'namespace_tokenize': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa'}}, 'retrieve_src': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata into the src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'retrieve_unpackaged': {'class_path': 'cumulusci.tasks.salesforce.RetrieveUnpackaged', 'description': 'Retrieve the contents of a package.xml file.'}, 'revert_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.RevertManagedSrc', 'description': 'Reverts the changes from create_managed_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'revert_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.RevertUnmanagedEESrc', 'description': 'Reverts the changes from create_unmanaged_ee_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'robot': {'class_path': 'cumulusci.tasks.robotframework.Robot', 'description': 'Runs a Robot Framework test from a .robot file', 'group': 'Robot Framework', 'options': {'suites': 'tests'}}, 'robot_libdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotLibDoc', 'description': 'Generates documentation for project keyword files', 'group': 'Robot Framework', 'options': {'output': 'Keywords.html', 'title': '$project_config.project__package__name'}}, 'robot_lint': {'class_path': 'cumulusci.tasks.robotframework.RobotLint', 'description': 'Static analysis tool for robot framework files', 'group': 'Robot Framework'}, 'robot_testdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotTestDoc', 'description': 'Generates html documentation of your Robot test suite and writes to tests/test_suite.', 'group': 'Robot Framework', 'options': {'output': 'tests/test_suites.html', 'path': 'tests'}}, 'run_tests': {'class_path': 'cumulusci.tasks.apex.testrunner.RunApexTests', 'description': 'Runs all apex tests', 'group': 'Salesforce'}, 'set_organization_wide_defaults': {'class_path': 'cumulusci.tasks.metadata_etl.SetOrgWideDefaults', 'description': 'Sets the Organization-Wide Defaults for specific sObjects, and waits for sharing recalculation to complete.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'snapshot_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.SnapshotChanges', 'description': 'Tell SFDX source tracking to ignore previous changes in a scratch org', 'group': 'Salesforce Metadata'}, 'uninstall_managed': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackage', 'description': 'Uninstalls the managed version of the package', 'group': 'Salesforce Packages'}, 'uninstall_packaged': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackaged', 'description': 'Uninstalls all deleteable metadata in the package in the target org', 'group': 'Salesforce Metadata'}, 'uninstall_packaged_incremental': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackagedIncremental', 'description': 'Deletes any metadata from the package in the target org not in the local workspace', 'group': 'Salesforce Metadata'}, 'uninstall_post': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalNamespacedBundles', 'description': 'Uninstalls the unpackaged/post bundles', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'path': 'unpackaged/post'}}, 'uninstall_pre': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalBundles', 'description': 'Uninstalls the unpackaged/pre bundles', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'uninstall_src': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocal', 'description': 'Uninstalls all metadata in the local src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'unschedule_apex': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Unschedule all scheduled apex jobs (CronTriggers).', 'group': 'Salesforce', 'options': {'apex': 'for (CronTrigger t : [SELECT Id FROM CronTrigger]) { System.abortJob(t.Id); }'}}, 'update_admin_profile': {'class_path': 'cumulusci.tasks.salesforce.UpdateProfile', 'description': 'Retrieves, edits, and redeploys the Admin.profile with full FLS perms for all objects/fields', 'group': 'Salesforce Metadata', 'name': 'Update Admin Profile'}, 'update_dependencies': {'class_path': 'cumulusci.tasks.salesforce.UpdateDependencies', 'description': 'Installs all dependencies in project__dependencies into the target org', 'group': 'Salesforce Packages'}, 'update_package_xml': {'class_path': 'cumulusci.tasks.metadata.package.UpdatePackageXml', 'description': 'Updates src/package.xml with metadata in src/', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'upload_beta': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a beta release of the metadata currently in the packaging org', 'group': 'Release Management'}, 'upload_production': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a production release of the metadata currently in the packaging org', 'group': 'Release Management', 'options': {'name': 'Release', 'production': True}}, 'util_sleep': {'class_path': 'cumulusci.tasks.util.Sleep', 'description': 'Sleeps for N seconds', 'group': 'Utilities', 'options': {'seconds': 5}}}}
config_filename = 'cumulusci.yml'
config_global = {'cumulusci': {'keychain': 'cumulusci.core.keychain.EncryptedFileProjectKeychain'}, 'flows': {'beta_dependencies': {'description': 'Deploy the latest (beta) version of dependencies to prepare the org environment for the package metadata', 'steps': {1: {'options': {'include_beta': True}, 'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'ci_beta': {'description': 'Install the latest beta version and runs apex tests from the managed package', 'steps': {1: {'flow': 'install_beta'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'ci_feature': {'description': 'Prepare an unmanaged metadata test org and run apex tests. Intended for use against feature branch commits.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_feature_beta_deps': {'description': 'Install the latest beta version of dependencies and run apex tests.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_master': {'description': 'Deploy the package metadata to the packaging org and prepare for managed package version upload. Intended for use against master branch commits.', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'include_beta': False}}}, 2: {'flow': 'deploy_packaging'}, 3: {'flow': 'config_packaging'}}}, 'ci_release': {'description': 'Install a production release version and runs tests from the managed package', 'steps': {1: {'flow': 'install_prod'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'config_apextest': {'description': 'Configure an org to run apex tests after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_dev': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_managed': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'options': {'unmanaged': False}, 'task': 'deploy_post'}, 2: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_packaging': {'description': 'Configure packaging org for upload after package metadata is deployed', 'steps': {1: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_qa': {'description': 'Configure an org for use as a QA org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_regression': {'description': 'Configure an org for QA regression after the package is installed', 'steps': {1: {'flow': 'config_managed'}}}, 'dependencies': {'description': 'Deploy dependencies to prepare the org environment for the package metadata', 'steps': {1: {'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'deploy_packaging': {'description': 'Process and deploy the package metadata to the packaging org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'create_managed_src'}, 3: {'options': {'managed': True}, 'task': 'update_package_xml'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_managed_src'}, 6: {'task': 'uninstall_packaged_incremental'}}}, 'deploy_unmanaged': {'description': 'Deploy the unmanaged metadata from the package', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx" and not org_config.scratch'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3: {'task': 'deploy', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3.1: {'task': 'dx_push', 'when': 'project_config.project__source_format == "sfdx" and org_config.scratch'}, 4: {'task': 'uninstall_packaged_incremental', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}}}, 'deploy_unmanaged_ee': {'description': 'Deploy the unmanaged metadata from the package to an Enterprise Edition org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml'}, 3: {'task': 'create_unmanaged_ee_src'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_unmanaged_ee_src'}, 6: {'options': {'purge_on_delete': False}, 'task': 'uninstall_packaged_incremental'}}}, 'dev_org': {'description': 'Set up an org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}, 4: {'task': 'snapshot_changes'}}}, 'dev_org_beta_deps': {'description': 'Set up an org as a development environment for unmanaged metadata based on the latest dependencies (including betas).', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}}}, 'dev_org_namespaced': {'description': 'Set up a namespaced scratch org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'namespaced_org': True}}}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev', 'options': {'deploy_post': {'namespaced_org': True, 'unmanaged': False}, 'update_admin_profile': {'namespaced_org': True}}}, 4: {'task': 'snapshot_changes'}}}, 'install_beta': {'description': 'Install and configure the latest beta version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed_beta'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod': {'description': 'Install and configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod_no_config': {'description': 'Install but do not configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'options': {'unmanaged': False}, 'task': 'deploy_post'}}}, 'install_regression': {'description': 'Install the latest beta dependencies and upgrade to the latest beta version from the most recent production version', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'task': 'install_managed'}, 3: {'task': 'install_managed_beta'}}}, 'qa_org': {'description': 'Set up an org as a QA environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_qa'}, 4: {'task': 'snapshot_changes'}}}, 'regression_org': {'description': 'Set up an org for QA regression by upgrading from the previous managed package release to the current beta release.', 'steps': {1: {'flow': 'install_regression'}, 2: {'flow': 'config_regression'}, 3: {'task': 'snapshot_changes'}}}, 'release_beta': {'description': 'Upload and release a beta version of the metadata currently in packaging', 'steps': {1: {'options': {'name': 'Automated beta release'}, 'task': 'upload_beta'}, 2: {'options': {'version': '^^upload_beta.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'include_empty': True, 'link_pr': True, 'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}, 4: {'task': 'github_master_to_feature'}}}, 'release_production': {'description': 'Upload and release a production version of the metadata currently in packaging', 'steps': {1: {'task': 'upload_production'}, 2: {'options': {'version': '^^upload_production.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}}}, 'retrieve_scratch': {'description': 'Retrieves declarative changes made in a scratch org and converts to src directory', 'steps': {1: {'task': 'dx_convert_to'}, 2: {'task': 'dx_pull'}, 3: {'task': 'dx_convert_from'}, 4: {'task': 'update_package_xml'}, 5: {'options': {'package_xml': 'src/package.xml', 'path': 'src'}, 'task': 'retrieve_unpackaged'}, 6: {'task': 'update_package_xml'}}}, 'uninstall_managed': {'description': 'Uninstall the installed managed version of the package. Run this before install_beta or install_prod if a version is already installed in the target org.', 'steps': {1: {'task': 'uninstall_post'}, 2: {'task': 'uninstall_managed'}}}, 'unmanaged_ee': {'description': 'Deploy the unmanaged package metadata and all dependencies to the target EE org', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'purge_on_delete': False}}}, 2: {'flow': 'deploy_unmanaged_ee'}}}}, 'orgs': {'scratch': {'beta': {'config_file': 'orgs/beta.json'}, 'dev': {'config_file': 'orgs/dev.json', 'days': 7}, 'feature': {'config_file': 'orgs/feature.json'}, 'qa': {'config_file': 'orgs/dev.json', 'days': 7}, 'release': {'config_file': 'orgs/release.json'}}}, 'project': {'dependencies': None, 'git': {'default_branch': 'master', 'prefix_beta': 'beta/', 'prefix_feature': 'feature/', 'prefix_release': 'release/', 'push_prefix_production': 'Production orgs: ', 'push_prefix_sandbox': 'Sandbox orgs: ', 'release_notes': {'parsers': {1: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Critical Changes'}, 2: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Changes'}, 3: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubIssuesParser', 'title': 'Issues Closed'}, 4: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'New Metadata'}, 5: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Deleted Metadata'}}}}, 'name': None, 'package': {'api_version': '48.0', 'install_class': None, 'name': None, 'name_managed': None, 'namespace': None, 'uninstall_class': None}, 'test': {'name_match': '%_TEST%'}}, 'services': {'apextestsdb': {'attributes': {'base_url': {'description': 'The base url for your ApexTestsDB instance.', 'required': True}, 'token': {'description': 'The api token to use when connecting to ApexTestsDB.', 'required': True}, 'user_id': {'description': 'The user id to use when connecting to ApexTestsDB.', 'required': True}}, 'description': 'Configure connection for ApexTestsDB tasks, e.g. ApextestsdbUpload'}, 'connected_app': {'attributes': {'callback_url': {'description': 'Callback URL configured on the Connected App', 'required': True}, 'client_id': {'description': 'Client ID/Consumer Key from the Connected App', 'required': True}, 'client_secret': {'description': 'Client Secret/Consumer Secret from the Connected App', 'required': True}}, 'description': 'A Connected App is required to connect to and run commands against persistent orgs. See http://cumulusci.readthedocs.io/en/latest/tutorial.html#creating-a-connected-app for more info.'}, 'devhub': {'attributes': {'username': {'description': 'Username or alias of the SFDX org to use as a Dev Hub', 'required': True}}, 'description': 'Configure which SFDX org to use as a Dev Hub for creating scratch orgs'}, 'github': {'attributes': {'email': {'description': 'The email address to used by Github tasks when an operation requires an email address.', 'required': True}, 'password': {'description': 'Github password to use for tasks. It is recommended to use a Github Application Token instead of password to allow bypassing 2fa.', 'required': True}, 'username': {'description': 'The Github username to use for tasks.', 'required': True}}, 'description': 'Configure connection for github tasks, e.g. Create Release', 'validator': 'cumulusci.core.github.validate_service'}, 'metaci': {'attributes': {'app_name': {'description': 'The Heroku app name', 'required': False}, 'token': {'description': 'Your API token to the MetaCI site (get from SITE_URL/api/token)', 'required': True}, 'url': {'description': 'The main url to the MetaCI site', 'required': True}}, 'description': 'Connect with a MetaCI site to run builds of projects from this repository'}, 'metadeploy': {'attributes': {'token': {'description': 'Your API token to the MetaDeploy site (get from SITE_URL/admin/authtoken/token)', 'required': True}, 'url': {'description': 'The main url for your MetaDeploy instance.', 'required': True}}, 'description': 'Connect with a MetaDeploy site to publish installers from this repository'}, 'saucelabs': {'attributes': {'api_key': {'description': 'The Saucelabs api key to use for tasks', 'required': True}, 'username': {'description': 'The Saucelabs username to use for tasks.', 'required': True}}, 'description': 'Configure connection for saucelabs tasks.'}}, 'tasks': {'activate_flow': {'class_path': 'cumulusci.tasks.salesforce.activate_flow.ActivateFlow', 'description': 'Activates Flows identified by a given list of Developer Names', 'group': 'Metadata Transformations'}, 'add_page_layout_related_lists': {'class_path': 'cumulusci.tasks.metadata_etl.AddRelatedLists', 'description': 'Adds specified Related List to one or more Page Layouts.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_permission_set_perms': {'class_path': 'cumulusci.tasks.metadata_etl.AddPermissionSetPermissions', 'description': 'Adds specified Apex class access and Field-Level Security to a Permission Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_standard_value_set_entries': {'class_path': 'cumulusci.tasks.metadata_etl.AddValueSetEntries', 'description': 'Adds specified picklist entries to a Standard Value Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'batch_apex_wait': {'class_path': 'cumulusci.tasks.apex.batch.BatchApexWait', 'description': 'Waits on a batch apex job to finish.', 'group': 'Salesforce'}, 'command': {'class_path': 'cumulusci.tasks.command.Command', 'description': 'Run an arbitrary command', 'group': 'Utilities'}, 'connected_app': {'class_path': 'cumulusci.tasks.connectedapp.CreateConnectedApp', 'description': 'Creates the Connected App needed to use persistent orgs in the CumulusCI keychain', 'group': 'Setup', 'options': {'connect': True, 'label': 'CumulusCI', 'overwrite': False}}, 'create_community': {'class_path': 'cumulusci.tasks.salesforce.CreateCommunity', 'description': 'Creates a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'create_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.CreateManagedSrc', 'description': 'Modifies the src directory for managed deployment. Strips //cumulusci-managed from all Apex code', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'create_package': {'class_path': 'cumulusci.tasks.salesforce.CreatePackage', 'description': 'Creates a package in the target org with the default package name for the project', 'group': 'Salesforce Packages'}, 'create_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.CreateUnmanagedEESrc', 'description': 'Modifies the src directory for unmanaged deployment to an EE org', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'deploy': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys the src directory of the repository to the org', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'deploy_post': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/post/', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'namespace_inject': '$project_config.project__package__namespace', 'namespace_token': '%%%NAMESPACE%%%', 'path': 'unpackaged/post', 'unmanaged': True}}, 'deploy_pre': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/pre/', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'deploy_qa_config': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys configuration for QA.', 'group': 'Salesforce Metadata', 'options': {'namespace_inject': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa', 'unmanaged': True}}, 'disable_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Disable specified TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'active': False, 'restore_file': 'trigger_status.yml'}}, 'dx_convert_from': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts force-app directory in sfdx format into metadata format under src', 'group': 'Salesforce DX', 'options': {'command': 'force:source:convert -d src'}}, 'dx_convert_to': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts src directory metadata format into sfdx format under force-app', 'group': 'Salesforce DX', 'options': {'command': 'force:mdapi:convert -r src'}}, 'dx_pull': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to pull from a scratch org into the force-app directory', 'group': 'Salesforce DX', 'options': {'command': 'force:source:pull'}}, 'dx_push': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to push the force-app directory metadata into a scratch org', 'group': 'Salesforce DX', 'options': {'command': 'force:source:push'}}, 'ensure_record_types': {'class_path': 'cumulusci.tasks.salesforce.EnsureRecordTypes', 'description': 'Ensure that a default Record Type is extant on the given standard sObject (custom objects are not supported). If Record Types are already present, do nothing.', 'group': 'Salesforce Metadata', 'options': {'record_type_developer_name': 'Default', 'record_type_label': 'Default'}}, 'execute_anon': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Execute anonymous apex via the tooling api.', 'group': 'Salesforce'}, 'extract_dataset': {'class_path': 'cumulusci.tasks.bulkdata.ExtractData', 'description': 'Extract a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'generate_data_dictionary': {'class_path': 'cumulusci.tasks.datadictionary.GenerateDataDictionary', 'description': 'Create a data dictionary for the project in CSV format.', 'options': {'release_prefix': '$project_config.project__git__prefix_release'}}, 'generate_dataset_mapping': {'class_path': 'cumulusci.tasks.bulkdata.GenerateMapping', 'description': 'Create a mapping for extracting data from an org.', 'group': 'Data Operations', 'options': {'namespace_prefix': '$project_config.project__package__namespace', 'path': 'datasets/mapping.yml'}}, 'get_installed_packages': {'class_path': 'cumulusci.tasks.salesforce.GetInstalledPackages', 'description': 'Retrieves a list of the currently installed managed package namespaces and their versions', 'group': 'Salesforce Metadata'}, 'github_clone_tag': {'class_path': 'cumulusci.tasks.github.CloneTag', 'description': 'Clones a github tag under a new name.', 'group': 'GitHub'}, 'github_master_to_feature': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on the master branch into all open feature branches', 'group': 'GitHub'}, 'github_parent_pr_notes': {'class_path': 'cumulusci.tasks.release_notes.task.ParentPullRequestNotes', 'description': "Merges the description of a child pull request to the respective parent's pull request (if one exists).", 'group': 'GitHub'}, 'github_parent_to_children': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on a parent feature branch into all child feature branches', 'group': 'GitHub', 'options': {'children_only': True, 'source_branch': '$project_config.repo_branch'}}, 'github_pull_requests': {'class_path': 'cumulusci.tasks.github.PullRequests', 'description': 'Lists open pull requests in project Github repository', 'group': 'GitHub'}, 'github_release': {'class_path': 'cumulusci.tasks.github.CreateRelease', 'description': 'Creates a Github release for a given managed package version number', 'group': 'GitHub'}, 'github_release_notes': {'class_path': 'cumulusci.tasks.release_notes.task.GithubReleaseNotes', 'description': 'Generates release notes by parsing pull request bodies of merged pull requests between two tags', 'group': 'GitHub'}, 'github_release_report': {'class_path': 'cumulusci.tasks.github.ReleaseReport', 'description': 'Parses GitHub release notes to report various info', 'group': 'GitHub'}, 'insert_record': {'class_path': 'cumulusci.tasks.salesforce.insert_record.InsertRecord', 'description': 'Inserts a record of any sObject using the REST API', 'group': 'Salesforce'}, 'install_managed': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Install the latest managed production release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest'}}, 'install_managed_beta': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Installs the latest managed beta release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest_beta'}}, 'list_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.ListChanges', 'description': 'List the changes from a scratch org', 'group': 'Salesforce Metadata'}, 'list_communities': {'class_path': 'cumulusci.tasks.salesforce.ListCommunities', 'description': 'Lists Communities for the current org using the Connect API.', 'group': 'Salesforce Communities'}, 'list_community_templates': {'class_path': 'cumulusci.tasks.salesforce.ListCommunityTemplates', 'description': 'Prints the Community Templates available to the current org', 'group': 'Salesforce Communities'}, 'list_metadata_types': {'class_path': 'cumulusci.tasks.util.ListMetadataTypes', 'description': 'Prints the metadata types in a project', 'group': 'Salesforce Metadata'}, 'load_custom_settings': {'class_path': 'cumulusci.tasks.salesforce.LoadCustomSettings', 'description': 'Load Custom Settings specified in a YAML file to the target org', 'group': 'Data Operations'}, 'load_dataset': {'class_path': 'cumulusci.tasks.bulkdata.LoadData', 'description': 'Load a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'log': {'class_path': 'cumulusci.tasks.util.LogLine', 'description': 'Log a line at the info level.', 'group': 'Utilities', 'options': {'level': 'info'}}, 'meta_xml_apiversion': {'class_path': 'cumulusci.tasks.metaxml.UpdateApi', 'description': 'Set the API version in ``*meta.xml`` files', 'group': 'Salesforce Metadata'}, 'meta_xml_dependencies': {'class_path': 'cumulusci.tasks.metaxml.UpdateDependencies', 'description': 'Set the version for dependent packages', 'group': 'Salesforce Metadata'}, 'metadeploy_publish': {'class_path': 'cumulusci.tasks.metadeploy.Publish', 'description': 'Publish a release to the MetaDeploy web installer', 'group': 'Release Management'}, 'org_settings': {'class_path': 'cumulusci.tasks.salesforce.org_settings.DeployOrgSettings', 'description': 'Apply org settings from a scratch org definition file', 'group': 'Salesforce DX'}, 'publish_community': {'class_path': 'cumulusci.tasks.salesforce.PublishCommunity', 'description': 'Publishes a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'push_all': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades'}, 'push_failure_report': {'class_path': 'cumulusci.tasks.push.pushfails.ReportPushFailures', 'description': 'Produce a CSV report of the failed and otherwise anomalous push jobs.', 'group': 'Push Upgrades', 'options': {'ignore_errors': ['Salesforce Subscription Expired', 'Package Uninstalled']}}, 'push_list': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in the specified file', 'group': 'Push Upgrades'}, 'push_qa': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in push/orgs_qa.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_qa.txt'}}, 'push_sandbox': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades', 'options': {'subscriber_where': "OrgType = 'Sandbox'"}}, 'push_trial': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to Trialforce Template orgs listed in push/orgs_trial.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_trial.txt'}}, 'query': {'class_path': 'cumulusci.tasks.salesforce.SOQLQuery', 'description': 'Queries the connected org', 'group': 'Salesforce Bulk API'}, 'remove_metadata_xml_elements': {'class_path': 'cumulusci.tasks.metadata.modify.RemoveElementsXPath', 'description': 'Remove specified XML elements from one or more metadata files', 'group': 'Salesforce Metadata'}, 'restore_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Restore status of TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'restore': True, 'restore_file': 'trigger_status.yml'}}, 'retrieve_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieve changed components from a scratch org', 'group': 'Salesforce Metadata'}, 'retrieve_packaged': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata from the org', 'group': 'Salesforce Metadata', 'options': {'path': 'packaged'}}, 'retrieve_qa_config': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieves the current changes in the scratch org into unpackaged/config/qa', 'group': 'Salesforce Metadata', 'options': {'namespace_tokenize': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa'}}, 'retrieve_src': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata into the src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'retrieve_unpackaged': {'class_path': 'cumulusci.tasks.salesforce.RetrieveUnpackaged', 'description': 'Retrieve the contents of a package.xml file.'}, 'revert_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.RevertManagedSrc', 'description': 'Reverts the changes from create_managed_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'revert_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.RevertUnmanagedEESrc', 'description': 'Reverts the changes from create_unmanaged_ee_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'robot': {'class_path': 'cumulusci.tasks.robotframework.Robot', 'description': 'Runs a Robot Framework test from a .robot file', 'group': 'Robot Framework', 'options': {'suites': 'tests'}}, 'robot_libdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotLibDoc', 'description': 'Generates documentation for project keyword files', 'group': 'Robot Framework', 'options': {'output': 'Keywords.html', 'title': '$project_config.project__package__name'}}, 'robot_lint': {'class_path': 'cumulusci.tasks.robotframework.RobotLint', 'description': 'Static analysis tool for robot framework files', 'group': 'Robot Framework'}, 'robot_testdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotTestDoc', 'description': 'Generates html documentation of your Robot test suite and writes to tests/test_suite.', 'group': 'Robot Framework', 'options': {'output': 'tests/test_suites.html', 'path': 'tests'}}, 'run_tests': {'class_path': 'cumulusci.tasks.apex.testrunner.RunApexTests', 'description': 'Runs all apex tests', 'group': 'Salesforce'}, 'set_organization_wide_defaults': {'class_path': 'cumulusci.tasks.metadata_etl.SetOrgWideDefaults', 'description': 'Sets the Organization-Wide Defaults for specific sObjects, and waits for sharing recalculation to complete.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'snapshot_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.SnapshotChanges', 'description': 'Tell SFDX source tracking to ignore previous changes in a scratch org', 'group': 'Salesforce Metadata'}, 'uninstall_managed': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackage', 'description': 'Uninstalls the managed version of the package', 'group': 'Salesforce Packages'}, 'uninstall_packaged': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackaged', 'description': 'Uninstalls all deleteable metadata in the package in the target org', 'group': 'Salesforce Metadata'}, 'uninstall_packaged_incremental': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackagedIncremental', 'description': 'Deletes any metadata from the package in the target org not in the local workspace', 'group': 'Salesforce Metadata'}, 'uninstall_post': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalNamespacedBundles', 'description': 'Uninstalls the unpackaged/post bundles', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'path': 'unpackaged/post'}}, 'uninstall_pre': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalBundles', 'description': 'Uninstalls the unpackaged/pre bundles', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'uninstall_src': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocal', 'description': 'Uninstalls all metadata in the local src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'unschedule_apex': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Unschedule all scheduled apex jobs (CronTriggers).', 'group': 'Salesforce', 'options': {'apex': 'for (CronTrigger t : [SELECT Id FROM CronTrigger]) { System.abortJob(t.Id); }'}}, 'update_admin_profile': {'class_path': 'cumulusci.tasks.salesforce.UpdateProfile', 'description': 'Retrieves, edits, and redeploys the Admin.profile with full FLS perms for all objects/fields', 'group': 'Salesforce Metadata', 'name': 'Update Admin Profile'}, 'update_dependencies': {'class_path': 'cumulusci.tasks.salesforce.UpdateDependencies', 'description': 'Installs all dependencies in project__dependencies into the target org', 'group': 'Salesforce Packages'}, 'update_package_xml': {'class_path': 'cumulusci.tasks.metadata.package.UpdatePackageXml', 'description': 'Updates src/package.xml with metadata in src/', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'upload_beta': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a beta release of the metadata currently in the packaging org', 'group': 'Release Management'}, 'upload_production': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a production release of the metadata currently in the packaging org', 'group': 'Release Management', 'options': {'name': 'Release', 'production': True}}, 'util_sleep': {'class_path': 'cumulusci.tasks.util.Sleep', 'description': 'Sleeps for N seconds', 'group': 'Utilities', 'options': {'seconds': 5}}}}
config_global_local = {}
config_global_local_path
config_global_path
config_local_dir = '.cumulusci'
project_config_class

alias of cumulusci.core.config.project_config.BaseProjectConfig

class cumulusci.core.config.BaseTaskFlowConfig.BaseTaskFlowConfig(config=None)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

Base class for all configs that contain tasks and flows

get_flow(name)[source]

Returns a FlowConfig

get_suggested_name(name, steps)[source]

Given a name that cannot be resolved and a list of tasks/flow dicts, returns the nearest match.

get_task(name)[source]

Returns a TaskConfig

list_flows()[source]

Returns a list of flow info dictionaries with keys ‘name’ and ‘description’

list_tasks()[source]

Returns a list of task info dictionaries with keys ‘name’ and ‘description’

cumulusci.core.config.BaseTaskFlowConfig.list_infos(infos)[source]
class cumulusci.core.config.OrgConfig.OrgConfig(config, name)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

Salesforce org configuration (i.e. org credentials)

class SalesforceOAuth2(client_id, client_secret, callback_url, auth_site='https://login.salesforce.com')

Bases: object

get_authorize_url(scope, prompt=None)
get_token(code)
refresh_token(refresh_token)
revoke_token(current_token)
can_delete()[source]
get_community_info(community_name, force_refresh=False)[source]

Return the community information for the given community

An API call will be made the first time this function is used, and the return values will be cached. Subsequent calls will not call the API unless the requested community name is not in the cached results, or unless the force_refresh parameter is set to True.

latest_api_version
lightning_base_url
load_userinfo()[source]
org_id
organization_sobject
refresh_oauth_token(keychain, connected_app=None)[source]
salesforce_client
start_url
user_id
username

Username for the org connection.

class cumulusci.core.config.ScratchOrgConfig.ScratchOrgConfig(config, name)[source]

Bases: cumulusci.core.config.OrgConfig.OrgConfig

Salesforce DX Scratch org configuration

access_token
active

Check if an org is alive

can_delete()[source]
create_org()[source]

Uses sfdx force:org:create to create the org

days
days_alive
delete_org()[source]

Uses sfdx force:org:delete to delete the org

email_address
expired

Check if an org has already expired

expires
force_refresh_oauth_token()[source]
format_org_days()[source]
generate_password()[source]

Generates an org password with the sfdx utility.

instance_url
org_id
password
refresh_oauth_token(keychain)[source]

Use sfdx force:org:describe to refresh token instead of built in OAuth handling

scratch_info
user_id
username

Username for the org connection.

class cumulusci.core.config.project_config.BaseProjectConfig(global_config_obj, config=None, *args, **kwargs)[source]

Bases: cumulusci.core.config.BaseTaskFlowConfig.BaseTaskFlowConfig

Base class for a project’s configuration which extends the global config

config_filename = 'cumulusci.yml'
config_global
config_global_local
config_project_local_path
config_project_path
construct_subproject_config(**kwargs)[source]

Construct another project config for an external source

get_flow(name)[source]

Get a FlowConfig by flow name

If the name has a colon, look for it in a different project config.

get_github_api(owner=None, repo=None)[source]
get_latest_tag(beta=False)[source]

Query Github Releases to find the latest production or beta tag

get_latest_version(beta=False)[source]

Query Github Releases to find the latest production or beta release

get_namespace(ns)[source]

Look up another project config by its name in the sources config.

Also makes sure the project has been fetched, if it’s from an external source.

get_previous_version()[source]

Query GitHub releases to find the previous production release

get_static_dependencies(dependencies=None, include_beta=None)[source]

Resolves the project -> dependencies section of cumulusci.yml to convert dynamic github dependencies into static dependencies by inspecting the referenced repositories.

Keyword arguments: :param dependencies: a list of dependencies to resolve :param include_beta: when true, return the latest github release, even if pre-release; else return the latest stable release

get_tag_for_version(version)[source]
get_task(name)[source]

Get a TaskConfig by task name

If the name has a colon, look for it in a different project config.

get_version_for_tag(tag, prefix_beta=None, prefix_release=None)[source]
include_source(spec)[source]

Make sure a project has been fetched from its source.

spec is a dict which contains different keys depending on the type of source:

  • github indicates a GitHubSource
  • path indicates a LocalFolderSource

This either fetches the project code and constructs its project config, or returns a project config that was previously loaded with the same spec.

pretty_dependencies(dependencies, indent=None)[source]
process_github_dependency(dependency, indent=None, include_beta=None)[source]
project_local_dir

location of the user local directory for the project e.g., ~/.cumulusci/NPSP-Extension-Test/

relpath(path)[source]

Convert path to be relative to the project repo root.

repo_branch
repo_commit
repo_info
repo_name
repo_owner
repo_root
repo_url
set_keychain(keychain)[source]

Module contents

class cumulusci.core.config.BaseConfig(config=None)[source]

Bases: object

BaseConfig provides a common interface for nested access for all Config objects in CCI.

defaults = {}
class cumulusci.core.config.ConnectedAppOAuthConfig(config=None)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

Salesforce Connected App OAuth configuration

class cumulusci.core.config.FlowConfig(config=None)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

A flow with its configuration merged

class cumulusci.core.config.OrgConfig(config, name)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

Salesforce org configuration (i.e. org credentials)

class SalesforceOAuth2(client_id, client_secret, callback_url, auth_site='https://login.salesforce.com')

Bases: object

get_authorize_url(scope, prompt=None)
get_token(code)
refresh_token(refresh_token)
revoke_token(current_token)
can_delete()[source]
get_community_info(community_name, force_refresh=False)[source]

Return the community information for the given community

An API call will be made the first time this function is used, and the return values will be cached. Subsequent calls will not call the API unless the requested community name is not in the cached results, or unless the force_refresh parameter is set to True.

latest_api_version
lightning_base_url
load_userinfo()[source]
org_id
organization_sobject
refresh_oauth_token(keychain, connected_app=None)[source]
salesforce_client
start_url
user_id
username

Username for the org connection.

class cumulusci.core.config.ServiceConfig(config=None)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

class cumulusci.core.config.TaskConfig(config=None)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

A task with its configuration merged

class cumulusci.core.config.BaseTaskFlowConfig(config=None)[source]

Bases: cumulusci.core.config.BaseConfig.BaseConfig

Base class for all configs that contain tasks and flows

get_flow(name)[source]

Returns a FlowConfig

get_suggested_name(name, steps)[source]

Given a name that cannot be resolved and a list of tasks/flow dicts, returns the nearest match.

get_task(name)[source]

Returns a TaskConfig

list_flows()[source]

Returns a list of flow info dictionaries with keys ‘name’ and ‘description’

list_tasks()[source]

Returns a list of task info dictionaries with keys ‘name’ and ‘description’

class cumulusci.core.config.BaseProjectConfig(global_config_obj, config=None, *args, **kwargs)[source]

Bases: cumulusci.core.config.BaseTaskFlowConfig.BaseTaskFlowConfig

Base class for a project’s configuration which extends the global config

config_filename = 'cumulusci.yml'
config_global
config_global_local
config_project_local_path
config_project_path
construct_subproject_config(**kwargs)[source]

Construct another project config for an external source

get_flow(name)[source]

Get a FlowConfig by flow name

If the name has a colon, look for it in a different project config.

get_github_api(owner=None, repo=None)[source]
get_latest_tag(beta=False)[source]

Query Github Releases to find the latest production or beta tag

get_latest_version(beta=False)[source]

Query Github Releases to find the latest production or beta release

get_namespace(ns)[source]

Look up another project config by its name in the sources config.

Also makes sure the project has been fetched, if it’s from an external source.

get_previous_version()[source]

Query GitHub releases to find the previous production release

get_static_dependencies(dependencies=None, include_beta=None)[source]

Resolves the project -> dependencies section of cumulusci.yml to convert dynamic github dependencies into static dependencies by inspecting the referenced repositories.

Keyword arguments: :param dependencies: a list of dependencies to resolve :param include_beta: when true, return the latest github release, even if pre-release; else return the latest stable release

get_tag_for_version(version)[source]
get_task(name)[source]

Get a TaskConfig by task name

If the name has a colon, look for it in a different project config.

get_version_for_tag(tag, prefix_beta=None, prefix_release=None)[source]
include_source(spec)[source]

Make sure a project has been fetched from its source.

spec is a dict which contains different keys depending on the type of source:

  • github indicates a GitHubSource
  • path indicates a LocalFolderSource

This either fetches the project code and constructs its project config, or returns a project config that was previously loaded with the same spec.

pretty_dependencies(dependencies, indent=None)[source]
process_github_dependency(dependency, indent=None, include_beta=None)[source]
project_local_dir

location of the user local directory for the project e.g., ~/.cumulusci/NPSP-Extension-Test/

relpath(path)[source]

Convert path to be relative to the project repo root.

repo_branch
repo_commit
repo_info
repo_name
repo_owner
repo_root
repo_url
set_keychain(keychain)[source]
class cumulusci.core.config.ScratchOrgConfig(config, name)[source]

Bases: cumulusci.core.config.OrgConfig.OrgConfig

Salesforce DX Scratch org configuration

access_token
active

Check if an org is alive

can_delete()[source]
create_org()[source]

Uses sfdx force:org:create to create the org

days
days_alive
delete_org()[source]

Uses sfdx force:org:delete to delete the org

email_address
expired

Check if an org has already expired

expires
force_refresh_oauth_token()[source]
format_org_days()[source]
generate_password()[source]

Generates an org password with the sfdx utility.

instance_url
org_id
password
refresh_oauth_token(keychain)[source]

Use sfdx force:org:describe to refresh token instead of built in OAuth handling

scratch_info
user_id
username

Username for the org connection.

class cumulusci.core.config.BaseGlobalConfig(config=None)[source]

Bases: cumulusci.core.config.BaseTaskFlowConfig.BaseTaskFlowConfig

Base class for the global config which contains all configuration not specific to projects

config = {'cumulusci': {'keychain': 'cumulusci.core.keychain.EncryptedFileProjectKeychain'}, 'flows': {'beta_dependencies': {'description': 'Deploy the latest (beta) version of dependencies to prepare the org environment for the package metadata', 'steps': {1: {'options': {'include_beta': True}, 'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'ci_beta': {'description': 'Install the latest beta version and runs apex tests from the managed package', 'steps': {1: {'flow': 'install_beta'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'ci_feature': {'description': 'Prepare an unmanaged metadata test org and run apex tests. Intended for use against feature branch commits.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_feature_beta_deps': {'description': 'Install the latest beta version of dependencies and run apex tests.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_master': {'description': 'Deploy the package metadata to the packaging org and prepare for managed package version upload. Intended for use against master branch commits.', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'include_beta': False}}}, 2: {'flow': 'deploy_packaging'}, 3: {'flow': 'config_packaging'}}}, 'ci_release': {'description': 'Install a production release version and runs tests from the managed package', 'steps': {1: {'flow': 'install_prod'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'config_apextest': {'description': 'Configure an org to run apex tests after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_dev': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_managed': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'options': {'unmanaged': False}, 'task': 'deploy_post'}, 2: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_packaging': {'description': 'Configure packaging org for upload after package metadata is deployed', 'steps': {1: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_qa': {'description': 'Configure an org for use as a QA org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_regression': {'description': 'Configure an org for QA regression after the package is installed', 'steps': {1: {'flow': 'config_managed'}}}, 'dependencies': {'description': 'Deploy dependencies to prepare the org environment for the package metadata', 'steps': {1: {'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'deploy_packaging': {'description': 'Process and deploy the package metadata to the packaging org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'create_managed_src'}, 3: {'options': {'managed': True}, 'task': 'update_package_xml'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_managed_src'}, 6: {'task': 'uninstall_packaged_incremental'}}}, 'deploy_unmanaged': {'description': 'Deploy the unmanaged metadata from the package', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx" and not org_config.scratch'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3: {'task': 'deploy', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3.1: {'task': 'dx_push', 'when': 'project_config.project__source_format == "sfdx" and org_config.scratch'}, 4: {'task': 'uninstall_packaged_incremental', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}}}, 'deploy_unmanaged_ee': {'description': 'Deploy the unmanaged metadata from the package to an Enterprise Edition org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml'}, 3: {'task': 'create_unmanaged_ee_src'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_unmanaged_ee_src'}, 6: {'options': {'purge_on_delete': False}, 'task': 'uninstall_packaged_incremental'}}}, 'dev_org': {'description': 'Set up an org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}, 4: {'task': 'snapshot_changes'}}}, 'dev_org_beta_deps': {'description': 'Set up an org as a development environment for unmanaged metadata based on the latest dependencies (including betas).', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}}}, 'dev_org_namespaced': {'description': 'Set up a namespaced scratch org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'namespaced_org': True}}}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev', 'options': {'deploy_post': {'namespaced_org': True, 'unmanaged': False}, 'update_admin_profile': {'namespaced_org': True}}}, 4: {'task': 'snapshot_changes'}}}, 'install_beta': {'description': 'Install and configure the latest beta version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed_beta'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod': {'description': 'Install and configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod_no_config': {'description': 'Install but do not configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'options': {'unmanaged': False}, 'task': 'deploy_post'}}}, 'install_regression': {'description': 'Install the latest beta dependencies and upgrade to the latest beta version from the most recent production version', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'task': 'install_managed'}, 3: {'task': 'install_managed_beta'}}}, 'qa_org': {'description': 'Set up an org as a QA environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_qa'}, 4: {'task': 'snapshot_changes'}}}, 'regression_org': {'description': 'Set up an org for QA regression by upgrading from the previous managed package release to the current beta release.', 'steps': {1: {'flow': 'install_regression'}, 2: {'flow': 'config_regression'}, 3: {'task': 'snapshot_changes'}}}, 'release_beta': {'description': 'Upload and release a beta version of the metadata currently in packaging', 'steps': {1: {'options': {'name': 'Automated beta release'}, 'task': 'upload_beta'}, 2: {'options': {'version': '^^upload_beta.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'include_empty': True, 'link_pr': True, 'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}, 4: {'task': 'github_master_to_feature'}}}, 'release_production': {'description': 'Upload and release a production version of the metadata currently in packaging', 'steps': {1: {'task': 'upload_production'}, 2: {'options': {'version': '^^upload_production.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}}}, 'retrieve_scratch': {'description': 'Retrieves declarative changes made in a scratch org and converts to src directory', 'steps': {1: {'task': 'dx_convert_to'}, 2: {'task': 'dx_pull'}, 3: {'task': 'dx_convert_from'}, 4: {'task': 'update_package_xml'}, 5: {'options': {'package_xml': 'src/package.xml', 'path': 'src'}, 'task': 'retrieve_unpackaged'}, 6: {'task': 'update_package_xml'}}}, 'uninstall_managed': {'description': 'Uninstall the installed managed version of the package. Run this before install_beta or install_prod if a version is already installed in the target org.', 'steps': {1: {'task': 'uninstall_post'}, 2: {'task': 'uninstall_managed'}}}, 'unmanaged_ee': {'description': 'Deploy the unmanaged package metadata and all dependencies to the target EE org', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'purge_on_delete': False}}}, 2: {'flow': 'deploy_unmanaged_ee'}}}}, 'orgs': {'scratch': {'beta': {'config_file': 'orgs/beta.json'}, 'dev': {'config_file': 'orgs/dev.json', 'days': 7}, 'feature': {'config_file': 'orgs/feature.json'}, 'qa': {'config_file': 'orgs/dev.json', 'days': 7}, 'release': {'config_file': 'orgs/release.json'}}}, 'project': {'dependencies': None, 'git': {'default_branch': 'master', 'prefix_beta': 'beta/', 'prefix_feature': 'feature/', 'prefix_release': 'release/', 'push_prefix_production': 'Production orgs: ', 'push_prefix_sandbox': 'Sandbox orgs: ', 'release_notes': {'parsers': {1: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Critical Changes'}, 2: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Changes'}, 3: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubIssuesParser', 'title': 'Issues Closed'}, 4: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'New Metadata'}, 5: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Deleted Metadata'}}}}, 'name': None, 'package': {'api_version': '48.0', 'install_class': None, 'name': None, 'name_managed': None, 'namespace': None, 'uninstall_class': None}, 'test': {'name_match': '%_TEST%'}}, 'services': {'apextestsdb': {'attributes': {'base_url': {'description': 'The base url for your ApexTestsDB instance.', 'required': True}, 'token': {'description': 'The api token to use when connecting to ApexTestsDB.', 'required': True}, 'user_id': {'description': 'The user id to use when connecting to ApexTestsDB.', 'required': True}}, 'description': 'Configure connection for ApexTestsDB tasks, e.g. ApextestsdbUpload'}, 'connected_app': {'attributes': {'callback_url': {'description': 'Callback URL configured on the Connected App', 'required': True}, 'client_id': {'description': 'Client ID/Consumer Key from the Connected App', 'required': True}, 'client_secret': {'description': 'Client Secret/Consumer Secret from the Connected App', 'required': True}}, 'description': 'A Connected App is required to connect to and run commands against persistent orgs. See http://cumulusci.readthedocs.io/en/latest/tutorial.html#creating-a-connected-app for more info.'}, 'devhub': {'attributes': {'username': {'description': 'Username or alias of the SFDX org to use as a Dev Hub', 'required': True}}, 'description': 'Configure which SFDX org to use as a Dev Hub for creating scratch orgs'}, 'github': {'attributes': {'email': {'description': 'The email address to used by Github tasks when an operation requires an email address.', 'required': True}, 'password': {'description': 'Github password to use for tasks. It is recommended to use a Github Application Token instead of password to allow bypassing 2fa.', 'required': True}, 'username': {'description': 'The Github username to use for tasks.', 'required': True}}, 'description': 'Configure connection for github tasks, e.g. Create Release', 'validator': 'cumulusci.core.github.validate_service'}, 'metaci': {'attributes': {'app_name': {'description': 'The Heroku app name', 'required': False}, 'token': {'description': 'Your API token to the MetaCI site (get from SITE_URL/api/token)', 'required': True}, 'url': {'description': 'The main url to the MetaCI site', 'required': True}}, 'description': 'Connect with a MetaCI site to run builds of projects from this repository'}, 'metadeploy': {'attributes': {'token': {'description': 'Your API token to the MetaDeploy site (get from SITE_URL/admin/authtoken/token)', 'required': True}, 'url': {'description': 'The main url for your MetaDeploy instance.', 'required': True}}, 'description': 'Connect with a MetaDeploy site to publish installers from this repository'}, 'saucelabs': {'attributes': {'api_key': {'description': 'The Saucelabs api key to use for tasks', 'required': True}, 'username': {'description': 'The Saucelabs username to use for tasks.', 'required': True}}, 'description': 'Configure connection for saucelabs tasks.'}}, 'tasks': {'activate_flow': {'class_path': 'cumulusci.tasks.salesforce.activate_flow.ActivateFlow', 'description': 'Activates Flows identified by a given list of Developer Names', 'group': 'Metadata Transformations'}, 'add_page_layout_related_lists': {'class_path': 'cumulusci.tasks.metadata_etl.AddRelatedLists', 'description': 'Adds specified Related List to one or more Page Layouts.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_permission_set_perms': {'class_path': 'cumulusci.tasks.metadata_etl.AddPermissionSetPermissions', 'description': 'Adds specified Apex class access and Field-Level Security to a Permission Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_standard_value_set_entries': {'class_path': 'cumulusci.tasks.metadata_etl.AddValueSetEntries', 'description': 'Adds specified picklist entries to a Standard Value Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'batch_apex_wait': {'class_path': 'cumulusci.tasks.apex.batch.BatchApexWait', 'description': 'Waits on a batch apex job to finish.', 'group': 'Salesforce'}, 'command': {'class_path': 'cumulusci.tasks.command.Command', 'description': 'Run an arbitrary command', 'group': 'Utilities'}, 'connected_app': {'class_path': 'cumulusci.tasks.connectedapp.CreateConnectedApp', 'description': 'Creates the Connected App needed to use persistent orgs in the CumulusCI keychain', 'group': 'Setup', 'options': {'connect': True, 'label': 'CumulusCI', 'overwrite': False}}, 'create_community': {'class_path': 'cumulusci.tasks.salesforce.CreateCommunity', 'description': 'Creates a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'create_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.CreateManagedSrc', 'description': 'Modifies the src directory for managed deployment. Strips //cumulusci-managed from all Apex code', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'create_package': {'class_path': 'cumulusci.tasks.salesforce.CreatePackage', 'description': 'Creates a package in the target org with the default package name for the project', 'group': 'Salesforce Packages'}, 'create_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.CreateUnmanagedEESrc', 'description': 'Modifies the src directory for unmanaged deployment to an EE org', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'deploy': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys the src directory of the repository to the org', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'deploy_post': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/post/', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'namespace_inject': '$project_config.project__package__namespace', 'namespace_token': '%%%NAMESPACE%%%', 'path': 'unpackaged/post', 'unmanaged': True}}, 'deploy_pre': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/pre/', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'deploy_qa_config': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys configuration for QA.', 'group': 'Salesforce Metadata', 'options': {'namespace_inject': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa', 'unmanaged': True}}, 'disable_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Disable specified TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'active': False, 'restore_file': 'trigger_status.yml'}}, 'dx_convert_from': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts force-app directory in sfdx format into metadata format under src', 'group': 'Salesforce DX', 'options': {'command': 'force:source:convert -d src'}}, 'dx_convert_to': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts src directory metadata format into sfdx format under force-app', 'group': 'Salesforce DX', 'options': {'command': 'force:mdapi:convert -r src'}}, 'dx_pull': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to pull from a scratch org into the force-app directory', 'group': 'Salesforce DX', 'options': {'command': 'force:source:pull'}}, 'dx_push': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to push the force-app directory metadata into a scratch org', 'group': 'Salesforce DX', 'options': {'command': 'force:source:push'}}, 'ensure_record_types': {'class_path': 'cumulusci.tasks.salesforce.EnsureRecordTypes', 'description': 'Ensure that a default Record Type is extant on the given standard sObject (custom objects are not supported). If Record Types are already present, do nothing.', 'group': 'Salesforce Metadata', 'options': {'record_type_developer_name': 'Default', 'record_type_label': 'Default'}}, 'execute_anon': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Execute anonymous apex via the tooling api.', 'group': 'Salesforce'}, 'extract_dataset': {'class_path': 'cumulusci.tasks.bulkdata.ExtractData', 'description': 'Extract a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'generate_data_dictionary': {'class_path': 'cumulusci.tasks.datadictionary.GenerateDataDictionary', 'description': 'Create a data dictionary for the project in CSV format.', 'options': {'release_prefix': '$project_config.project__git__prefix_release'}}, 'generate_dataset_mapping': {'class_path': 'cumulusci.tasks.bulkdata.GenerateMapping', 'description': 'Create a mapping for extracting data from an org.', 'group': 'Data Operations', 'options': {'namespace_prefix': '$project_config.project__package__namespace', 'path': 'datasets/mapping.yml'}}, 'get_installed_packages': {'class_path': 'cumulusci.tasks.salesforce.GetInstalledPackages', 'description': 'Retrieves a list of the currently installed managed package namespaces and their versions', 'group': 'Salesforce Metadata'}, 'github_clone_tag': {'class_path': 'cumulusci.tasks.github.CloneTag', 'description': 'Clones a github tag under a new name.', 'group': 'GitHub'}, 'github_master_to_feature': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on the master branch into all open feature branches', 'group': 'GitHub'}, 'github_parent_pr_notes': {'class_path': 'cumulusci.tasks.release_notes.task.ParentPullRequestNotes', 'description': "Merges the description of a child pull request to the respective parent's pull request (if one exists).", 'group': 'GitHub'}, 'github_parent_to_children': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on a parent feature branch into all child feature branches', 'group': 'GitHub', 'options': {'children_only': True, 'source_branch': '$project_config.repo_branch'}}, 'github_pull_requests': {'class_path': 'cumulusci.tasks.github.PullRequests', 'description': 'Lists open pull requests in project Github repository', 'group': 'GitHub'}, 'github_release': {'class_path': 'cumulusci.tasks.github.CreateRelease', 'description': 'Creates a Github release for a given managed package version number', 'group': 'GitHub'}, 'github_release_notes': {'class_path': 'cumulusci.tasks.release_notes.task.GithubReleaseNotes', 'description': 'Generates release notes by parsing pull request bodies of merged pull requests between two tags', 'group': 'GitHub'}, 'github_release_report': {'class_path': 'cumulusci.tasks.github.ReleaseReport', 'description': 'Parses GitHub release notes to report various info', 'group': 'GitHub'}, 'insert_record': {'class_path': 'cumulusci.tasks.salesforce.insert_record.InsertRecord', 'description': 'Inserts a record of any sObject using the REST API', 'group': 'Salesforce'}, 'install_managed': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Install the latest managed production release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest'}}, 'install_managed_beta': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Installs the latest managed beta release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest_beta'}}, 'list_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.ListChanges', 'description': 'List the changes from a scratch org', 'group': 'Salesforce Metadata'}, 'list_communities': {'class_path': 'cumulusci.tasks.salesforce.ListCommunities', 'description': 'Lists Communities for the current org using the Connect API.', 'group': 'Salesforce Communities'}, 'list_community_templates': {'class_path': 'cumulusci.tasks.salesforce.ListCommunityTemplates', 'description': 'Prints the Community Templates available to the current org', 'group': 'Salesforce Communities'}, 'list_metadata_types': {'class_path': 'cumulusci.tasks.util.ListMetadataTypes', 'description': 'Prints the metadata types in a project', 'group': 'Salesforce Metadata'}, 'load_custom_settings': {'class_path': 'cumulusci.tasks.salesforce.LoadCustomSettings', 'description': 'Load Custom Settings specified in a YAML file to the target org', 'group': 'Data Operations'}, 'load_dataset': {'class_path': 'cumulusci.tasks.bulkdata.LoadData', 'description': 'Load a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'log': {'class_path': 'cumulusci.tasks.util.LogLine', 'description': 'Log a line at the info level.', 'group': 'Utilities', 'options': {'level': 'info'}}, 'meta_xml_apiversion': {'class_path': 'cumulusci.tasks.metaxml.UpdateApi', 'description': 'Set the API version in ``*meta.xml`` files', 'group': 'Salesforce Metadata'}, 'meta_xml_dependencies': {'class_path': 'cumulusci.tasks.metaxml.UpdateDependencies', 'description': 'Set the version for dependent packages', 'group': 'Salesforce Metadata'}, 'metadeploy_publish': {'class_path': 'cumulusci.tasks.metadeploy.Publish', 'description': 'Publish a release to the MetaDeploy web installer', 'group': 'Release Management'}, 'org_settings': {'class_path': 'cumulusci.tasks.salesforce.org_settings.DeployOrgSettings', 'description': 'Apply org settings from a scratch org definition file', 'group': 'Salesforce DX'}, 'publish_community': {'class_path': 'cumulusci.tasks.salesforce.PublishCommunity', 'description': 'Publishes a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'push_all': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades'}, 'push_failure_report': {'class_path': 'cumulusci.tasks.push.pushfails.ReportPushFailures', 'description': 'Produce a CSV report of the failed and otherwise anomalous push jobs.', 'group': 'Push Upgrades', 'options': {'ignore_errors': ['Salesforce Subscription Expired', 'Package Uninstalled']}}, 'push_list': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in the specified file', 'group': 'Push Upgrades'}, 'push_qa': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in push/orgs_qa.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_qa.txt'}}, 'push_sandbox': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades', 'options': {'subscriber_where': "OrgType = 'Sandbox'"}}, 'push_trial': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to Trialforce Template orgs listed in push/orgs_trial.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_trial.txt'}}, 'query': {'class_path': 'cumulusci.tasks.salesforce.SOQLQuery', 'description': 'Queries the connected org', 'group': 'Salesforce Bulk API'}, 'remove_metadata_xml_elements': {'class_path': 'cumulusci.tasks.metadata.modify.RemoveElementsXPath', 'description': 'Remove specified XML elements from one or more metadata files', 'group': 'Salesforce Metadata'}, 'restore_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Restore status of TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'restore': True, 'restore_file': 'trigger_status.yml'}}, 'retrieve_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieve changed components from a scratch org', 'group': 'Salesforce Metadata'}, 'retrieve_packaged': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata from the org', 'group': 'Salesforce Metadata', 'options': {'path': 'packaged'}}, 'retrieve_qa_config': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieves the current changes in the scratch org into unpackaged/config/qa', 'group': 'Salesforce Metadata', 'options': {'namespace_tokenize': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa'}}, 'retrieve_src': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata into the src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'retrieve_unpackaged': {'class_path': 'cumulusci.tasks.salesforce.RetrieveUnpackaged', 'description': 'Retrieve the contents of a package.xml file.'}, 'revert_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.RevertManagedSrc', 'description': 'Reverts the changes from create_managed_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'revert_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.RevertUnmanagedEESrc', 'description': 'Reverts the changes from create_unmanaged_ee_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'robot': {'class_path': 'cumulusci.tasks.robotframework.Robot', 'description': 'Runs a Robot Framework test from a .robot file', 'group': 'Robot Framework', 'options': {'suites': 'tests'}}, 'robot_libdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotLibDoc', 'description': 'Generates documentation for project keyword files', 'group': 'Robot Framework', 'options': {'output': 'Keywords.html', 'title': '$project_config.project__package__name'}}, 'robot_lint': {'class_path': 'cumulusci.tasks.robotframework.RobotLint', 'description': 'Static analysis tool for robot framework files', 'group': 'Robot Framework'}, 'robot_testdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotTestDoc', 'description': 'Generates html documentation of your Robot test suite and writes to tests/test_suite.', 'group': 'Robot Framework', 'options': {'output': 'tests/test_suites.html', 'path': 'tests'}}, 'run_tests': {'class_path': 'cumulusci.tasks.apex.testrunner.RunApexTests', 'description': 'Runs all apex tests', 'group': 'Salesforce'}, 'set_organization_wide_defaults': {'class_path': 'cumulusci.tasks.metadata_etl.SetOrgWideDefaults', 'description': 'Sets the Organization-Wide Defaults for specific sObjects, and waits for sharing recalculation to complete.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'snapshot_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.SnapshotChanges', 'description': 'Tell SFDX source tracking to ignore previous changes in a scratch org', 'group': 'Salesforce Metadata'}, 'uninstall_managed': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackage', 'description': 'Uninstalls the managed version of the package', 'group': 'Salesforce Packages'}, 'uninstall_packaged': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackaged', 'description': 'Uninstalls all deleteable metadata in the package in the target org', 'group': 'Salesforce Metadata'}, 'uninstall_packaged_incremental': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackagedIncremental', 'description': 'Deletes any metadata from the package in the target org not in the local workspace', 'group': 'Salesforce Metadata'}, 'uninstall_post': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalNamespacedBundles', 'description': 'Uninstalls the unpackaged/post bundles', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'path': 'unpackaged/post'}}, 'uninstall_pre': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalBundles', 'description': 'Uninstalls the unpackaged/pre bundles', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'uninstall_src': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocal', 'description': 'Uninstalls all metadata in the local src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'unschedule_apex': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Unschedule all scheduled apex jobs (CronTriggers).', 'group': 'Salesforce', 'options': {'apex': 'for (CronTrigger t : [SELECT Id FROM CronTrigger]) { System.abortJob(t.Id); }'}}, 'update_admin_profile': {'class_path': 'cumulusci.tasks.salesforce.UpdateProfile', 'description': 'Retrieves, edits, and redeploys the Admin.profile with full FLS perms for all objects/fields', 'group': 'Salesforce Metadata', 'name': 'Update Admin Profile'}, 'update_dependencies': {'class_path': 'cumulusci.tasks.salesforce.UpdateDependencies', 'description': 'Installs all dependencies in project__dependencies into the target org', 'group': 'Salesforce Packages'}, 'update_package_xml': {'class_path': 'cumulusci.tasks.metadata.package.UpdatePackageXml', 'description': 'Updates src/package.xml with metadata in src/', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'upload_beta': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a beta release of the metadata currently in the packaging org', 'group': 'Release Management'}, 'upload_production': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a production release of the metadata currently in the packaging org', 'group': 'Release Management', 'options': {'name': 'Release', 'production': True}}, 'util_sleep': {'class_path': 'cumulusci.tasks.util.Sleep', 'description': 'Sleeps for N seconds', 'group': 'Utilities', 'options': {'seconds': 5}}}}
config_filename = 'cumulusci.yml'
config_global = {'cumulusci': {'keychain': 'cumulusci.core.keychain.EncryptedFileProjectKeychain'}, 'flows': {'beta_dependencies': {'description': 'Deploy the latest (beta) version of dependencies to prepare the org environment for the package metadata', 'steps': {1: {'options': {'include_beta': True}, 'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'ci_beta': {'description': 'Install the latest beta version and runs apex tests from the managed package', 'steps': {1: {'flow': 'install_beta'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'ci_feature': {'description': 'Prepare an unmanaged metadata test org and run apex tests. Intended for use against feature branch commits.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_feature_beta_deps': {'description': 'Install the latest beta version of dependencies and run apex tests.', 'steps': {0.5: {'options': {'branch_name': '$project_config.repo_branch', 'build_notes_label': 'Build Change Notes'}, 'task': 'github_parent_pr_notes'}, 1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_apextest'}, 4: {'task': 'run_tests'}, 5: {'task': 'github_parent_to_children'}}}, 'ci_master': {'description': 'Deploy the package metadata to the packaging org and prepare for managed package version upload. Intended for use against master branch commits.', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'include_beta': False}}}, 2: {'flow': 'deploy_packaging'}, 3: {'flow': 'config_packaging'}}}, 'ci_release': {'description': 'Install a production release version and runs tests from the managed package', 'steps': {1: {'flow': 'install_prod'}, 2: {'options': {'managed': True}, 'task': 'run_tests'}}}, 'config_apextest': {'description': 'Configure an org to run apex tests after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_dev': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_managed': {'description': 'Configure an org for use as a dev org after package metadata is deployed', 'steps': {1: {'options': {'unmanaged': False}, 'task': 'deploy_post'}, 2: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_packaging': {'description': 'Configure packaging org for upload after package metadata is deployed', 'steps': {1: {'options': {'managed': True}, 'task': 'update_admin_profile'}}}, 'config_qa': {'description': 'Configure an org for use as a QA org after package metadata is deployed', 'steps': {1: {'task': 'deploy_post'}, 2: {'task': 'update_admin_profile'}}}, 'config_regression': {'description': 'Configure an org for QA regression after the package is installed', 'steps': {1: {'flow': 'config_managed'}}}, 'dependencies': {'description': 'Deploy dependencies to prepare the org environment for the package metadata', 'steps': {1: {'task': 'update_dependencies'}, 2: {'task': 'deploy_pre'}}}, 'deploy_packaging': {'description': 'Process and deploy the package metadata to the packaging org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'create_managed_src'}, 3: {'options': {'managed': True}, 'task': 'update_package_xml'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_managed_src'}, 6: {'task': 'uninstall_packaged_incremental'}}}, 'deploy_unmanaged': {'description': 'Deploy the unmanaged metadata from the package', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx" and not org_config.scratch'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3: {'task': 'deploy', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}, 3.1: {'task': 'dx_push', 'when': 'project_config.project__source_format == "sfdx" and org_config.scratch'}, 4: {'task': 'uninstall_packaged_incremental', 'when': 'project_config.project__source_format != "sfdx" or not org_config.scratch'}}}, 'deploy_unmanaged_ee': {'description': 'Deploy the unmanaged metadata from the package to an Enterprise Edition org', 'steps': {0: {'task': 'dx_convert_from', 'when': 'project_config.project__source_format == "sfdx"'}, 1: {'task': 'unschedule_apex'}, 2: {'task': 'update_package_xml'}, 3: {'task': 'create_unmanaged_ee_src'}, 4: {'task': 'deploy'}, 5: {'task': 'revert_unmanaged_ee_src'}, 6: {'options': {'purge_on_delete': False}, 'task': 'uninstall_packaged_incremental'}}}, 'dev_org': {'description': 'Set up an org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}, 4: {'task': 'snapshot_changes'}}}, 'dev_org_beta_deps': {'description': 'Set up an org as a development environment for unmanaged metadata based on the latest dependencies (including betas).', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev'}}}, 'dev_org_namespaced': {'description': 'Set up a namespaced scratch org as a development environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'namespaced_org': True}}}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_dev', 'options': {'deploy_post': {'namespaced_org': True, 'unmanaged': False}, 'update_admin_profile': {'namespaced_org': True}}}, 4: {'task': 'snapshot_changes'}}}, 'install_beta': {'description': 'Install and configure the latest beta version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed_beta'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod': {'description': 'Install and configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'flow': 'config_managed'}, 4: {'task': 'snapshot_changes'}}}, 'install_prod_no_config': {'description': 'Install but do not configure the latest production version', 'steps': {1: {'flow': 'dependencies'}, 2: {'task': 'install_managed'}, 3: {'options': {'unmanaged': False}, 'task': 'deploy_post'}}}, 'install_regression': {'description': 'Install the latest beta dependencies and upgrade to the latest beta version from the most recent production version', 'steps': {1: {'flow': 'beta_dependencies'}, 2: {'task': 'install_managed'}, 3: {'task': 'install_managed_beta'}}}, 'qa_org': {'description': 'Set up an org as a QA environment for unmanaged metadata', 'steps': {1: {'flow': 'dependencies'}, 2: {'flow': 'deploy_unmanaged'}, 3: {'flow': 'config_qa'}, 4: {'task': 'snapshot_changes'}}}, 'regression_org': {'description': 'Set up an org for QA regression by upgrading from the previous managed package release to the current beta release.', 'steps': {1: {'flow': 'install_regression'}, 2: {'flow': 'config_regression'}, 3: {'task': 'snapshot_changes'}}}, 'release_beta': {'description': 'Upload and release a beta version of the metadata currently in packaging', 'steps': {1: {'options': {'name': 'Automated beta release'}, 'task': 'upload_beta'}, 2: {'options': {'version': '^^upload_beta.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'include_empty': True, 'link_pr': True, 'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}, 4: {'task': 'github_master_to_feature'}}}, 'release_production': {'description': 'Upload and release a production version of the metadata currently in packaging', 'steps': {1: {'task': 'upload_production'}, 2: {'options': {'version': '^^upload_production.version_number'}, 'task': 'github_release'}, 3: {'ignore_failure': True, 'options': {'publish': True, 'tag': '^^github_release.tag_name'}, 'task': 'github_release_notes'}}}, 'retrieve_scratch': {'description': 'Retrieves declarative changes made in a scratch org and converts to src directory', 'steps': {1: {'task': 'dx_convert_to'}, 2: {'task': 'dx_pull'}, 3: {'task': 'dx_convert_from'}, 4: {'task': 'update_package_xml'}, 5: {'options': {'package_xml': 'src/package.xml', 'path': 'src'}, 'task': 'retrieve_unpackaged'}, 6: {'task': 'update_package_xml'}}}, 'uninstall_managed': {'description': 'Uninstall the installed managed version of the package. Run this before install_beta or install_prod if a version is already installed in the target org.', 'steps': {1: {'task': 'uninstall_post'}, 2: {'task': 'uninstall_managed'}}}, 'unmanaged_ee': {'description': 'Deploy the unmanaged package metadata and all dependencies to the target EE org', 'steps': {1: {'flow': 'dependencies', 'options': {'update_dependencies': {'purge_on_delete': False}}}, 2: {'flow': 'deploy_unmanaged_ee'}}}}, 'orgs': {'scratch': {'beta': {'config_file': 'orgs/beta.json'}, 'dev': {'config_file': 'orgs/dev.json', 'days': 7}, 'feature': {'config_file': 'orgs/feature.json'}, 'qa': {'config_file': 'orgs/dev.json', 'days': 7}, 'release': {'config_file': 'orgs/release.json'}}}, 'project': {'dependencies': None, 'git': {'default_branch': 'master', 'prefix_beta': 'beta/', 'prefix_feature': 'feature/', 'prefix_release': 'release/', 'push_prefix_production': 'Production orgs: ', 'push_prefix_sandbox': 'Sandbox orgs: ', 'release_notes': {'parsers': {1: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Critical Changes'}, 2: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Changes'}, 3: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubIssuesParser', 'title': 'Issues Closed'}, 4: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'New Metadata'}, 5: {'class_path': 'cumulusci.tasks.release_notes.parser.GithubLinesParser', 'title': 'Deleted Metadata'}}}}, 'name': None, 'package': {'api_version': '48.0', 'install_class': None, 'name': None, 'name_managed': None, 'namespace': None, 'uninstall_class': None}, 'test': {'name_match': '%_TEST%'}}, 'services': {'apextestsdb': {'attributes': {'base_url': {'description': 'The base url for your ApexTestsDB instance.', 'required': True}, 'token': {'description': 'The api token to use when connecting to ApexTestsDB.', 'required': True}, 'user_id': {'description': 'The user id to use when connecting to ApexTestsDB.', 'required': True}}, 'description': 'Configure connection for ApexTestsDB tasks, e.g. ApextestsdbUpload'}, 'connected_app': {'attributes': {'callback_url': {'description': 'Callback URL configured on the Connected App', 'required': True}, 'client_id': {'description': 'Client ID/Consumer Key from the Connected App', 'required': True}, 'client_secret': {'description': 'Client Secret/Consumer Secret from the Connected App', 'required': True}}, 'description': 'A Connected App is required to connect to and run commands against persistent orgs. See http://cumulusci.readthedocs.io/en/latest/tutorial.html#creating-a-connected-app for more info.'}, 'devhub': {'attributes': {'username': {'description': 'Username or alias of the SFDX org to use as a Dev Hub', 'required': True}}, 'description': 'Configure which SFDX org to use as a Dev Hub for creating scratch orgs'}, 'github': {'attributes': {'email': {'description': 'The email address to used by Github tasks when an operation requires an email address.', 'required': True}, 'password': {'description': 'Github password to use for tasks. It is recommended to use a Github Application Token instead of password to allow bypassing 2fa.', 'required': True}, 'username': {'description': 'The Github username to use for tasks.', 'required': True}}, 'description': 'Configure connection for github tasks, e.g. Create Release', 'validator': 'cumulusci.core.github.validate_service'}, 'metaci': {'attributes': {'app_name': {'description': 'The Heroku app name', 'required': False}, 'token': {'description': 'Your API token to the MetaCI site (get from SITE_URL/api/token)', 'required': True}, 'url': {'description': 'The main url to the MetaCI site', 'required': True}}, 'description': 'Connect with a MetaCI site to run builds of projects from this repository'}, 'metadeploy': {'attributes': {'token': {'description': 'Your API token to the MetaDeploy site (get from SITE_URL/admin/authtoken/token)', 'required': True}, 'url': {'description': 'The main url for your MetaDeploy instance.', 'required': True}}, 'description': 'Connect with a MetaDeploy site to publish installers from this repository'}, 'saucelabs': {'attributes': {'api_key': {'description': 'The Saucelabs api key to use for tasks', 'required': True}, 'username': {'description': 'The Saucelabs username to use for tasks.', 'required': True}}, 'description': 'Configure connection for saucelabs tasks.'}}, 'tasks': {'activate_flow': {'class_path': 'cumulusci.tasks.salesforce.activate_flow.ActivateFlow', 'description': 'Activates Flows identified by a given list of Developer Names', 'group': 'Metadata Transformations'}, 'add_page_layout_related_lists': {'class_path': 'cumulusci.tasks.metadata_etl.AddRelatedLists', 'description': 'Adds specified Related List to one or more Page Layouts.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_permission_set_perms': {'class_path': 'cumulusci.tasks.metadata_etl.AddPermissionSetPermissions', 'description': 'Adds specified Apex class access and Field-Level Security to a Permission Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'add_standard_value_set_entries': {'class_path': 'cumulusci.tasks.metadata_etl.AddValueSetEntries', 'description': 'Adds specified picklist entries to a Standard Value Set.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'batch_apex_wait': {'class_path': 'cumulusci.tasks.apex.batch.BatchApexWait', 'description': 'Waits on a batch apex job to finish.', 'group': 'Salesforce'}, 'command': {'class_path': 'cumulusci.tasks.command.Command', 'description': 'Run an arbitrary command', 'group': 'Utilities'}, 'connected_app': {'class_path': 'cumulusci.tasks.connectedapp.CreateConnectedApp', 'description': 'Creates the Connected App needed to use persistent orgs in the CumulusCI keychain', 'group': 'Setup', 'options': {'connect': True, 'label': 'CumulusCI', 'overwrite': False}}, 'create_community': {'class_path': 'cumulusci.tasks.salesforce.CreateCommunity', 'description': 'Creates a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'create_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.CreateManagedSrc', 'description': 'Modifies the src directory for managed deployment. Strips //cumulusci-managed from all Apex code', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'create_package': {'class_path': 'cumulusci.tasks.salesforce.CreatePackage', 'description': 'Creates a package in the target org with the default package name for the project', 'group': 'Salesforce Packages'}, 'create_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.CreateUnmanagedEESrc', 'description': 'Modifies the src directory for unmanaged deployment to an EE org', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'deploy': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys the src directory of the repository to the org', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'deploy_post': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/post/', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'namespace_inject': '$project_config.project__package__namespace', 'namespace_token': '%%%NAMESPACE%%%', 'path': 'unpackaged/post', 'unmanaged': True}}, 'deploy_pre': {'class_path': 'cumulusci.tasks.salesforce.DeployBundles', 'description': 'Deploys all metadata bundles under unpackaged/pre/', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'deploy_qa_config': {'class_path': 'cumulusci.tasks.salesforce.Deploy', 'description': 'Deploys configuration for QA.', 'group': 'Salesforce Metadata', 'options': {'namespace_inject': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa', 'unmanaged': True}}, 'disable_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Disable specified TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'active': False, 'restore_file': 'trigger_status.yml'}}, 'dx_convert_from': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts force-app directory in sfdx format into metadata format under src', 'group': 'Salesforce DX', 'options': {'command': 'force:source:convert -d src'}}, 'dx_convert_to': {'class_path': 'cumulusci.tasks.sfdx.SFDXBaseTask', 'description': 'Converts src directory metadata format into sfdx format under force-app', 'group': 'Salesforce DX', 'options': {'command': 'force:mdapi:convert -r src'}}, 'dx_pull': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to pull from a scratch org into the force-app directory', 'group': 'Salesforce DX', 'options': {'command': 'force:source:pull'}}, 'dx_push': {'class_path': 'cumulusci.tasks.sfdx.SFDXOrgTask', 'description': 'Uses sfdx to push the force-app directory metadata into a scratch org', 'group': 'Salesforce DX', 'options': {'command': 'force:source:push'}}, 'ensure_record_types': {'class_path': 'cumulusci.tasks.salesforce.EnsureRecordTypes', 'description': 'Ensure that a default Record Type is extant on the given standard sObject (custom objects are not supported). If Record Types are already present, do nothing.', 'group': 'Salesforce Metadata', 'options': {'record_type_developer_name': 'Default', 'record_type_label': 'Default'}}, 'execute_anon': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Execute anonymous apex via the tooling api.', 'group': 'Salesforce'}, 'extract_dataset': {'class_path': 'cumulusci.tasks.bulkdata.ExtractData', 'description': 'Extract a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'generate_data_dictionary': {'class_path': 'cumulusci.tasks.datadictionary.GenerateDataDictionary', 'description': 'Create a data dictionary for the project in CSV format.', 'options': {'release_prefix': '$project_config.project__git__prefix_release'}}, 'generate_dataset_mapping': {'class_path': 'cumulusci.tasks.bulkdata.GenerateMapping', 'description': 'Create a mapping for extracting data from an org.', 'group': 'Data Operations', 'options': {'namespace_prefix': '$project_config.project__package__namespace', 'path': 'datasets/mapping.yml'}}, 'get_installed_packages': {'class_path': 'cumulusci.tasks.salesforce.GetInstalledPackages', 'description': 'Retrieves a list of the currently installed managed package namespaces and their versions', 'group': 'Salesforce Metadata'}, 'github_clone_tag': {'class_path': 'cumulusci.tasks.github.CloneTag', 'description': 'Clones a github tag under a new name.', 'group': 'GitHub'}, 'github_master_to_feature': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on the master branch into all open feature branches', 'group': 'GitHub'}, 'github_parent_pr_notes': {'class_path': 'cumulusci.tasks.release_notes.task.ParentPullRequestNotes', 'description': "Merges the description of a child pull request to the respective parent's pull request (if one exists).", 'group': 'GitHub'}, 'github_parent_to_children': {'class_path': 'cumulusci.tasks.github.MergeBranch', 'description': 'Merges the latest commit on a parent feature branch into all child feature branches', 'group': 'GitHub', 'options': {'children_only': True, 'source_branch': '$project_config.repo_branch'}}, 'github_pull_requests': {'class_path': 'cumulusci.tasks.github.PullRequests', 'description': 'Lists open pull requests in project Github repository', 'group': 'GitHub'}, 'github_release': {'class_path': 'cumulusci.tasks.github.CreateRelease', 'description': 'Creates a Github release for a given managed package version number', 'group': 'GitHub'}, 'github_release_notes': {'class_path': 'cumulusci.tasks.release_notes.task.GithubReleaseNotes', 'description': 'Generates release notes by parsing pull request bodies of merged pull requests between two tags', 'group': 'GitHub'}, 'github_release_report': {'class_path': 'cumulusci.tasks.github.ReleaseReport', 'description': 'Parses GitHub release notes to report various info', 'group': 'GitHub'}, 'insert_record': {'class_path': 'cumulusci.tasks.salesforce.insert_record.InsertRecord', 'description': 'Inserts a record of any sObject using the REST API', 'group': 'Salesforce'}, 'install_managed': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Install the latest managed production release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest'}}, 'install_managed_beta': {'class_path': 'cumulusci.tasks.salesforce.InstallPackageVersion', 'description': 'Installs the latest managed beta release', 'group': 'Salesforce Packages', 'options': {'activateRSS': True, 'version': 'latest_beta'}}, 'list_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.ListChanges', 'description': 'List the changes from a scratch org', 'group': 'Salesforce Metadata'}, 'list_communities': {'class_path': 'cumulusci.tasks.salesforce.ListCommunities', 'description': 'Lists Communities for the current org using the Connect API.', 'group': 'Salesforce Communities'}, 'list_community_templates': {'class_path': 'cumulusci.tasks.salesforce.ListCommunityTemplates', 'description': 'Prints the Community Templates available to the current org', 'group': 'Salesforce Communities'}, 'list_metadata_types': {'class_path': 'cumulusci.tasks.util.ListMetadataTypes', 'description': 'Prints the metadata types in a project', 'group': 'Salesforce Metadata'}, 'load_custom_settings': {'class_path': 'cumulusci.tasks.salesforce.LoadCustomSettings', 'description': 'Load Custom Settings specified in a YAML file to the target org', 'group': 'Data Operations'}, 'load_dataset': {'class_path': 'cumulusci.tasks.bulkdata.LoadData', 'description': 'Load a sample dataset using the bulk API.', 'group': 'Data Operations', 'options': {'mapping': 'datasets/mapping.yml', 'sql_path': 'datasets/sample.sql'}}, 'log': {'class_path': 'cumulusci.tasks.util.LogLine', 'description': 'Log a line at the info level.', 'group': 'Utilities', 'options': {'level': 'info'}}, 'meta_xml_apiversion': {'class_path': 'cumulusci.tasks.metaxml.UpdateApi', 'description': 'Set the API version in ``*meta.xml`` files', 'group': 'Salesforce Metadata'}, 'meta_xml_dependencies': {'class_path': 'cumulusci.tasks.metaxml.UpdateDependencies', 'description': 'Set the version for dependent packages', 'group': 'Salesforce Metadata'}, 'metadeploy_publish': {'class_path': 'cumulusci.tasks.metadeploy.Publish', 'description': 'Publish a release to the MetaDeploy web installer', 'group': 'Release Management'}, 'org_settings': {'class_path': 'cumulusci.tasks.salesforce.org_settings.DeployOrgSettings', 'description': 'Apply org settings from a scratch org definition file', 'group': 'Salesforce DX'}, 'publish_community': {'class_path': 'cumulusci.tasks.salesforce.PublishCommunity', 'description': 'Publishes a Community in the target org using the Connect API', 'group': 'Salesforce Communities'}, 'push_all': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades'}, 'push_failure_report': {'class_path': 'cumulusci.tasks.push.pushfails.ReportPushFailures', 'description': 'Produce a CSV report of the failed and otherwise anomalous push jobs.', 'group': 'Push Upgrades', 'options': {'ignore_errors': ['Salesforce Subscription Expired', 'Package Uninstalled']}}, 'push_list': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in the specified file', 'group': 'Push Upgrades'}, 'push_qa': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to all orgs listed in push/orgs_qa.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_qa.txt'}}, 'push_sandbox': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgQuery', 'description': 'Schedules a push upgrade of a package version to all subscribers', 'group': 'Push Upgrades', 'options': {'subscriber_where': "OrgType = 'Sandbox'"}}, 'push_trial': {'class_path': 'cumulusci.tasks.push.tasks.SchedulePushOrgList', 'description': 'Schedules a push upgrade of a package version to Trialforce Template orgs listed in push/orgs_trial.txt', 'group': 'Push Upgrades', 'options': {'orgs': 'push/orgs_trial.txt'}}, 'query': {'class_path': 'cumulusci.tasks.salesforce.SOQLQuery', 'description': 'Queries the connected org', 'group': 'Salesforce Bulk API'}, 'remove_metadata_xml_elements': {'class_path': 'cumulusci.tasks.metadata.modify.RemoveElementsXPath', 'description': 'Remove specified XML elements from one or more metadata files', 'group': 'Salesforce Metadata'}, 'restore_tdtm_trigger_handlers': {'class_path': 'cumulusci.tasks.salesforce.trigger_handlers.SetTDTMHandlerStatus', 'description': 'Restore status of TDTM trigger handlers', 'group': 'NPSP/EDA', 'options': {'restore': True, 'restore_file': 'trigger_status.yml'}}, 'retrieve_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieve changed components from a scratch org', 'group': 'Salesforce Metadata'}, 'retrieve_packaged': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata from the org', 'group': 'Salesforce Metadata', 'options': {'path': 'packaged'}}, 'retrieve_qa_config': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.RetrieveChanges', 'description': 'Retrieves the current changes in the scratch org into unpackaged/config/qa', 'group': 'Salesforce Metadata', 'options': {'namespace_tokenize': '$project_config.project__package__namespace', 'path': 'unpackaged/config/qa'}}, 'retrieve_src': {'class_path': 'cumulusci.tasks.salesforce.RetrievePackaged', 'description': 'Retrieves the packaged metadata into the src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'retrieve_unpackaged': {'class_path': 'cumulusci.tasks.salesforce.RetrieveUnpackaged', 'description': 'Retrieve the contents of a package.xml file.'}, 'revert_managed_src': {'class_path': 'cumulusci.tasks.metadata.managed_src.RevertManagedSrc', 'description': 'Reverts the changes from create_managed_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'revert_unmanaged_ee_src': {'class_path': 'cumulusci.tasks.metadata.ee_src.RevertUnmanagedEESrc', 'description': 'Reverts the changes from create_unmanaged_ee_src', 'group': 'Salesforce Metadata', 'options': {'path': 'src', 'revert_path': 'src.orig'}}, 'robot': {'class_path': 'cumulusci.tasks.robotframework.Robot', 'description': 'Runs a Robot Framework test from a .robot file', 'group': 'Robot Framework', 'options': {'suites': 'tests'}}, 'robot_libdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotLibDoc', 'description': 'Generates documentation for project keyword files', 'group': 'Robot Framework', 'options': {'output': 'Keywords.html', 'title': '$project_config.project__package__name'}}, 'robot_lint': {'class_path': 'cumulusci.tasks.robotframework.RobotLint', 'description': 'Static analysis tool for robot framework files', 'group': 'Robot Framework'}, 'robot_testdoc': {'class_path': 'cumulusci.tasks.robotframework.RobotTestDoc', 'description': 'Generates html documentation of your Robot test suite and writes to tests/test_suite.', 'group': 'Robot Framework', 'options': {'output': 'tests/test_suites.html', 'path': 'tests'}}, 'run_tests': {'class_path': 'cumulusci.tasks.apex.testrunner.RunApexTests', 'description': 'Runs all apex tests', 'group': 'Salesforce'}, 'set_organization_wide_defaults': {'class_path': 'cumulusci.tasks.metadata_etl.SetOrgWideDefaults', 'description': 'Sets the Organization-Wide Defaults for specific sObjects, and waits for sharing recalculation to complete.', 'group': 'Metadata Transformations', 'options': {'namespace_inject': '$project_config.project__package__namespace'}}, 'snapshot_changes': {'class_path': 'cumulusci.tasks.salesforce.sourcetracking.SnapshotChanges', 'description': 'Tell SFDX source tracking to ignore previous changes in a scratch org', 'group': 'Salesforce Metadata'}, 'uninstall_managed': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackage', 'description': 'Uninstalls the managed version of the package', 'group': 'Salesforce Packages'}, 'uninstall_packaged': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackaged', 'description': 'Uninstalls all deleteable metadata in the package in the target org', 'group': 'Salesforce Metadata'}, 'uninstall_packaged_incremental': {'class_path': 'cumulusci.tasks.salesforce.UninstallPackagedIncremental', 'description': 'Deletes any metadata from the package in the target org not in the local workspace', 'group': 'Salesforce Metadata'}, 'uninstall_post': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalNamespacedBundles', 'description': 'Uninstalls the unpackaged/post bundles', 'group': 'Salesforce Metadata', 'options': {'filename_token': '___NAMESPACE___', 'path': 'unpackaged/post'}}, 'uninstall_pre': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocalBundles', 'description': 'Uninstalls the unpackaged/pre bundles', 'group': 'Salesforce Metadata', 'options': {'path': 'unpackaged/pre'}}, 'uninstall_src': {'class_path': 'cumulusci.tasks.salesforce.UninstallLocal', 'description': 'Uninstalls all metadata in the local src directory', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'unschedule_apex': {'class_path': 'cumulusci.tasks.apex.anon.AnonymousApexTask', 'description': 'Unschedule all scheduled apex jobs (CronTriggers).', 'group': 'Salesforce', 'options': {'apex': 'for (CronTrigger t : [SELECT Id FROM CronTrigger]) { System.abortJob(t.Id); }'}}, 'update_admin_profile': {'class_path': 'cumulusci.tasks.salesforce.UpdateProfile', 'description': 'Retrieves, edits, and redeploys the Admin.profile with full FLS perms for all objects/fields', 'group': 'Salesforce Metadata', 'name': 'Update Admin Profile'}, 'update_dependencies': {'class_path': 'cumulusci.tasks.salesforce.UpdateDependencies', 'description': 'Installs all dependencies in project__dependencies into the target org', 'group': 'Salesforce Packages'}, 'update_package_xml': {'class_path': 'cumulusci.tasks.metadata.package.UpdatePackageXml', 'description': 'Updates src/package.xml with metadata in src/', 'group': 'Salesforce Metadata', 'options': {'path': 'src'}}, 'upload_beta': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a beta release of the metadata currently in the packaging org', 'group': 'Release Management'}, 'upload_production': {'class_path': 'cumulusci.tasks.salesforce.PackageUpload', 'description': 'Uploads a production release of the metadata currently in the packaging org', 'group': 'Release Management', 'options': {'name': 'Release', 'production': True}}, 'util_sleep': {'class_path': 'cumulusci.tasks.util.Sleep', 'description': 'Sleeps for N seconds', 'group': 'Utilities', 'options': {'seconds': 5}}}}
config_global_local = {}
config_global_local_path
config_global_path
config_local_dir = '.cumulusci'
project_config_class

alias of cumulusci.core.config.project_config.BaseProjectConfig