Skip to main content

Build and release tools for Salesforce developers

Project description

===============================
CumulusCI
===============================

.. image:: https://img.shields.io/pypi/v/cumulusci.svg
:target: https://pypi.python.org/pypi/cumulusci
.. image:: https://readthedocs.org/projects/cumulusci/badge/?version=latest
:target: https://cumulusci.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
.. image:: https://pyup.io/repos/github/SalesforceFoundation/CumulusCI/shield.svg
:target: https://pyup.io/repos/github/SalesforceFoundation/CumulusCI/
:alt: Updates

CumulusCI is a command line tool belt and set of reusable Python classes useful in the development and release process of building a Salesforce Managed Package application.

Key Features
------------

* Out of the box, CumulusCI provides a complete best practice development and release process based on the processes used by Salesforce.org to build and release managed packages to thousands of users
* Flexible and pluggable system for running tasks (single actions) and flows (sequences of tasks)
* OAuth based org keychain allowing easy connection to Salesforce orgs and stored in local files using AES encryption

Requirements
------------

* Python 2.7.x
* stdbuf - for passing through stdout from Ant
* Ant - for using some task commands

Installation
------------

* pip install cumulusci

Quick Start
-----------

This section provide a brief example of the commands you'd use to start a new project once you have CumulusCI installed

$ cd <Your_Local_Repo>
$ cumulusci2 project init
project_name: MyProject
$ cat cumulusci.yml
project:
name: MyProject
$ cumulusci2 org config_connected_app
client_id: 12345890
client_secret:
$ cumulusci2 org connect dev
*** Opens a browser at the Salesforce login prompt to complete OAuth grant
$ cumulusci2 org list
dev
$ cumulusci2 org info dev
*** Displays the OAuth configuration info for the org named "dev"
$ cumulusci2 org browser dev
*** Opens a browser tab to the org using OAuth to bypass login
$ cumulusci2 org connect --sandbox test
*** Opens a browser at the Salesforce login prompt to complete OAuth grant
$ cumulusci2 org list
dev
test
$ cumulusci2 task list
*** List all available tasks
deploy: Deploys the src directory to the target Salesforce org
$ cumulusci2 task run --org dev deploy
*** Runs the "deploy" task against the "dev" org
$ cumulusci2 flow list
*** List all available flows
deploy_dev_org: Runs a complete deployment against a dev org including dependencies but not running tests
$ cumulusci2 flow run --org test deploy_dev_org
*** Runs the "dev_org" flow against the "test" org


=======
History
=======

2.0.0-alpha16 (2016-11-3)
------------------

* Fix bug in SOAP calls to MDAPI with newer versions of the requests library
* This version was used to record the demo screencast: https://asciinema.org/a/91555

2.0.0-alpha15 (2016-11-3)
------------------

* Fix CLI bug in new exception handling logic

2.0.0-alpha14 (2016-11-3)
------------------

* Fix version number
* Fix bug in BaseSalesforceBulkApiTask (thanks @cdcarter)

2.0.0-alpha13 (2016-11-3)
------------------

* Nicer log output from tasks and flows using `coloredlogs`
* Added handling for packed git references in the file .git/packed-refs
* Docs now available at http://cumulusci.readthedocs.io
* Tasks and Flows run through the CLI now show a more simple message if an exception is thrown

2.0.0-alpha12 (2016-11-2)
------------------

* Automatic detection of latest production and beta release via Github Releases

* project_config.get_latest_release() added to query Github Releases to find the latest production or beta release version
* InstallPackage now accepts the virtual versions 'latest' and 'latest_beta' as well as specific versions for the version option

* New flows:

* ci_feature: Runs a full deployment of the unmanaged code for testing in a feature org
* ci_master: Runs a full deployment of the managed version of the code into the packaging org
* ci_beta: Installs the latest beta and runs all tests
* ci_release: Installs the latest release and runs all tests
* release_beta: Uploads a beta release of the metadata in the packaging org, creates a Github Release, and generates release notes

* Removed the hard coded slots in the keychain for github, mrbelvedere, and apextestsdb and replaced with a more generic concept of named keychain services. keychain.get_service('name') retrieves a named service. The CLI commands for setting github, mrbelvedere, and apextestsdb were modified to write the service configs to the new structure.

* Flow tasks can now access previous tasks' attributes in their options definitions. The syntax is ^^task_name.attr1.attr2

* Flow output is now nicer showing the flow configuration and the active configuration for each task before execution

* New tasks

* update_package_xml_managed: Create a new package.xml from the metadata in src/ with attributes only available when deploying to packaging org
* run_tests: Runs matching apex tests in parallel and generate a JUnit report
* run_tests_debug: Runs matching apex tests in parallel, generates JUnit report, captures debug logs, and parses debug logs for limits usage outputing results to test_results.json
* run_tests_managed: Runs matching apex tests in parallel from the package's namespace and generate a JUnit report


2.0.0-alpha11 (2016-10-31)
------------------

* project_config.repo_root is now added to the python syspath, thanks @cdcarter for the contribution
* Tasks for the new Package Upload API

* upload_beta: Uploads a beta release of the metadata currently in the packaging org
* upload_production: Uploads a production release of the metadata currently in the packaging org

* Dependency management for managed packages:

* update_dependencies: Task that ensures the target org has all dependencies installed at the correct version
* Dependencies are configured using the dependencies: heading in cumulusci.yml under the project: section

* Integrated salesforce-bulk and created BaseSalesforceBulkApiTask for building bulk data tasks

* Added `cumulusci2 version` command to print out current package version, thanks @cdcarter for the contribution


2.0.0-alpha10 (2016-10-28)
------------------

* More pure Python tasks to replace ant targets:

* create_ee_src
* retrieve_packaged
* retrieve_src
* revert_ee_src
* uninstall_packaged_incremental
* update_admin_profile

* New flow:

* unmanaged_ee: Deploys unmanaged code to an EE org

* New cumulusci.utils

* CUMULUSCI_PATH: The absolute path to the root of CumulusCI
* findReplaceRegex: Recursive regex based search/replace for files
* zip_subfolder: Accepts a zipfile and path, returns a zipfile with path as root

* Fix bug where repo_name was not being properly handled if it origin ended in .git

2.0.0-alpha9 (2016-10-27)
------------------

* Switch to using `plaintable` for printing text tables in the following CLI commands:

* cumulusci2 org list
* cumulusci2 task list
* cumulusci2 task info
* cumulusci2 flow list

* Easier project set up: `cumulusci2 project init` now prompts for all project values using the global default values
* More pure Python Metadata API tasks:

* create_package
* install_package
* uninstall_managed
* uninstall_packaged
* uninstall_pre
* uninstall_post
* uninstall_post_managed

* New tasks to interact with the new PackageUploadRequest object in the Tooling API

* upload_beta
* upload_production

* Python task to replace deployUnpackagedPost ant target with support for replacing namespace prefix in filenames and file contents

* deploy_post
* deploy_post_managed

* Python tasks to replace createManagedSrc and revertManagedSrc ant targets

* create_managed_src
* revert_managed_src

2.0.0-alpha8 (2016-10-26)
------------------

* New tasks for push upgrading packages

* push_all: Pushes a package version to all available subscriber orgs

* ex: cumulusci2 task run --org packaging -o version 1.1 push_all

* push_qa: Pushes a package version to all org ids in the file push/orgs_qa.txt in the repo

* ex: cumulusci2 task run --org packaging -o version 1.1 push_qa

* push_sandbox: Pushes a package version to all available sandbox subscriber orgs

* ex: cumulusci2 task run --org packaging -o version 1.1 push_sandbox

* push_trial: Pushes a package version to all org ids in the file push/orgs_trial.txt in the repo

* ex: cumulusci2 task run --org packaging -o version 1.1 push_trial

* Configurable push tasks in cumulusci.tasks.push.tasks:

* SchedulePushOrgList: uses a file with one OrgID per line as the target list
* SchedulePushOrgQuery: queries PackageSubscribers to select orgs for the target list

* Additional push tasks can be built by subclassing cumulusci.tasks.push.tasks.BaseSalesforcePushTask


2.0.0-alpha7 (2016-10-25)
------------------

* New commands for connecting to other services

* cumulusci2 project connect_apextestsdb: Stores ApexTestDB auth configuration in the keychain for use by tasks that require ApexTestsDB access
* cumulusci2 project connect_github: Stores Github auth configuration in the keychain for use by tasks that require Github access
* cumulusci2 project connect_mrbelvedere: Stores mrbelvedere auth configuration in the keychain for use by tasks that require access to mrbelvedere
* cumulusci2 project show_apextestsdb: Shows the configured ApexTestsDB auth info
* cumulusci2 project show_github: Shows the configured Github auth info
* cumulusci2 project show_mrbelvedere: Shows the configured mrbelvedere auth info

* Github Tasks

* The new BaseGithubTask wraps the github3.py API library to allow writing tasks targetting Github
* The following new Github tasks are implemented on top of BaseGithubTask:

* github_clone_tag: Clones one git tag to another via the Github API
* github_master_to_feature: Merges the HEAD commit on master to all open feature branches via the Github API
* github_release: Creates a Release via the Github API
* github_release_notes: Generates release notes by parsing merged Github pull request bodies between two tags

* BaseTask now enforces required task_options raising TaskOptionError if required options are missing
* Restructured the project: heading in cumulusci.yml

2.0.0-alpha6 (2016-10-24)
------------------

* Moved the build and ci directories back to the root so 2.0 is backwards compatible with 1.0
* Allow override of keychain class via CUMULUSCI_KEYCHAIN_CLASS env var
* New keychain class cumulusci.core.keychain.EnvironmentProjectKeychain for storing org credentials as json in environment variables
* Tasks now support the salesforce_task option for requiring a Salesforce org
* The new BaseSalesforceToolingApi task wraps simple-salesforce for building tasks that interact with the Tooling API
* cumulusci org default <name>

* Set a default org for tasks and flows
* No longer require passing org name in task run and flow run
* --unset option flag unsets current default
* cumulusci org list shows a * next to the default org

* BaseAntTask split out into AntTask and SalesforceAntTask
* cumulusci.tasks.metadata.package.UpdatePackageXml:

* Pure python based package.xml generation controlled by metadata_map.yml for mapping in new types
* Wired into the update_package_xml task instead of the old ant target

* 130 unit tests and counting, and our test suite now exceeds 1 second!

2.0.0-alpha5 (2016-10-21)
------------------

* Update README

2.0.0-alpha4 (2016-10-21)
------------------

* Fix imports in tasks/ant.py

2.0.0-alpha3 (2016-10-21)
------------------

* Added yaml files to the MANIFEST.in for inclusion in the egg
* Fixed keychain import in cumulusci.yml

2.0.0-alpha2 (2016-10-21)
------------------

* Added additional python package requirements to setup.py for automatic installation of dependencies

2.0.0-alpha1 (2016-10-21)
------------------

* First release on PyPI.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cumulusci-2.0.0a16.tar.gz (18.6 MB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page