# History
## v4.4.0 (2025-05-05)
## What's Changed
### Changes
- Add new tasks get_assignable_permission_sets and get_assignable_licenses by [@vsbharath](https://github.com/vsbharath) in [#3892](https://github.com/SFDO-Tooling/CumulusCI/pull/3892)
### Issues Fixed
- fix: Make get permset licenses return active only by [@jstvz](https://github.com/jstvz) in [#3888](https://github.com/SFDO-Tooling/CumulusCI/pull/3888)
- fix: Read the docs configuration by LaTeX into PDF by [@dcinzona](https://github.com/dcinzona) in [#3891](https://github.com/SFDO-Tooling/CumulusCI/pull/3891)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.3.0.dev0...v4.4.0
## v4.3.0.dev0 (2025-02-19)
## What's Changed
### Changes
- @W-17717398: Fix for Error When Local Records Are Empty During SELECT Action by [@aditya-balachander](https://github.com/aditya-balachander) in [#3877](https://github.com/SFDO-Tooling/CumulusCI/pull/3877)
- Changed Check Components to add a get repo components function by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3881](https://github.com/SFDO-Tooling/CumulusCI/pull/3881)
- Fixed the mdapi issue for Check Components by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3882](https://github.com/SFDO-Tooling/CumulusCI/pull/3882)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.3.0...v4.3.0.dev0
## v4.3.0 (2025-02-07)
## What's Changed
### Changes
- Fix the check_sobjects_available task to take the api_version from Cumulusci.yml by [@lakshmi2506](https://github.com/lakshmi2506) in [#3875](https://github.com/SFDO-Tooling/CumulusCI/pull/3875)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.2.0...v4.3.0
## v4.2.0 (2025-01-20)
## What's Changed
### Changes
- fix: Prevent 'directory not empty' error in `snowfakery` on Linux by [@schenkkp](https://github.com/schenkkp) in [#3864](https://github.com/SFDO-Tooling/CumulusCI/pull/3864)
- @W-17621812: Update \_get_required_permission_types to handle SELECT operations by [@aditya-balachander](https://github.com/aditya-balachander) in [#3870](https://github.com/SFDO-Tooling/CumulusCI/pull/3870)
## New Contributors
- @RupertBarrow made their first contribution in [#3490](https://github.com/SFDO-Tooling/CumulusCI/pull/3490)
- @schenkkp made their first contribution in [#3864](https://github.com/SFDO-Tooling/CumulusCI/pull/3864)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.1.0...v4.2.0
## v4.1.0 (2025-01-09)
## What's Changed
### Changes
- Remove default declaration for select rows query by [@mjawadtp](https://github.com/mjawadtp) in
[#3867](https://github.com/SFDO-Tooling/CumulusCI/pull/3867)
- @W-17427085: Set ANNOY related dependencies to be optional by [@aditya-balachander](https://github.com/aditya-balachander) in [#3858](https://github.com/SFDO-Tooling/CumulusCI/pull/3858)
- Update on the documentation for SFDX_ORG_CREATE_ARGS environment variable by [@lakshmi2506](https://github.com/lakshmi2506) in [#3861](https://github.com/SFDO-Tooling/CumulusCI/pull/3861)
- @W-16485311: Core Logic for Selecting Records from Target Org by [@aditya-balachander](https://github.com/aditya-balachander) in [#3818](https://github.com/SFDO-Tooling/CumulusCI/pull/3818)
- Add integration tests for all selection strategies by [@mjawadtp](https://github.com/mjawadtp) in [#3851](https://github.com/SFDO-Tooling/CumulusCI/pull/3851)
- @W-17357226: Fix for issue where zero threshold defaulted to select by [@aditya-balachander](https://github.com/aditya-balachander) in [#3853](https://github.com/SFDO-Tooling/CumulusCI/pull/3853)
- @W-17366392: Fix Omnistudio issues for the sf command format by [@lakshmi2506](https://github.com/lakshmi2506) in [#3855](https://github.com/SFDO-Tooling/CumulusCI/pull/3855)
- fix: restore task and flow reference docs by [@jstvz](https://github.com/jstvz) in [#3856](https://github.com/SFDO-Tooling/CumulusCI/pull/3856)
- @W-17412267: Fix for records not being inserted when threshold 0 by [@aditya-balachander](https://github.com/aditya-balachander) in [#3857](https://github.com/SFDO-Tooling/CumulusCI/pull/3857)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.0.1.dev1...v4.1.0
## v4.1.0.dev1 (2025-01-01)
## What's Changed
### Changes
- @W-17427085: Set ANNOY related dependencies to be optional by [@aditya-balachander](https://github.com/aditya-balachander) in [#3858](https://github.com/SFDO-Tooling/CumulusCI/pull/3858)
- Update on the documentation for SFDX_ORG_CREATE_ARGS environment variable by [@lakshmi2506](https://github.com/lakshmi2506) in [#3861](https://github.com/SFDO-Tooling/CumulusCI/pull/3861)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.0.1.dev0...v4.0.1.dev1
## v4.0.1.dev0 (2024-12-16)
## What's Changed
### Changes
- @W-16485311: Core Logic for Selecting Records from Target Org by [@aditya-balachander](https://github.com/aditya-balachander) in [#3818](https://github.com/SFDO-Tooling/CumulusCI/pull/3818)
- Add integration tests for all selection strategies by [@mjawadtp](https://github.com/mjawadtp) in [#3851](https://github.com/SFDO-Tooling/CumulusCI/pull/3851)
- @W-17357226: Fix for issue where zero threshold defaulted to select by [@aditya-balachander](https://github.com/aditya-balachander) in [#3853](https://github.com/SFDO-Tooling/CumulusCI/pull/3853)
- @W-17366392: Fix Omnistudio issues for the sf command format by [@lakshmi2506](https://github.com/lakshmi2506) in [#3855](https://github.com/SFDO-Tooling/CumulusCI/pull/3855)
- fix: restore task and flow reference docs by [@jstvz](https://github.com/jstvz) in [#3856](https://github.com/SFDO-Tooling/CumulusCI/pull/3856)
- @W-17412267: Fix for records not being inserted when threshold 0 by [@aditya-balachander](https://github.com/aditya-balachander) in [#3857](https://github.com/SFDO-Tooling/CumulusCI/pull/3857)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.0.1...v4.1.0
## v4.0.1 (2024-11-18)
### Issues Fixed
- Fixed a ModuleNotFoundError for docutils by adding the dependency `docutils` by [@jstvz](https://github.com/jstvz) in [#3558](https://github.com/SFDO-Tooling/CumulusCI/pull/3558).
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v4.0.0...v4.0.1
## v4.0.0 (2024-11-12)
## What's Changed
### Critical Changes
- Python versions 3.8, 3.9, and 3.10 are no longer supported.
- Switch to `sf` CLI commands [@lakshmi2506](https://github.com/lakshmi2506) in [#3829](https://github.com/SFDO-Tooling/CumulusCI/pull/3829)
- Removed the `dx_pull` and `dx_push` tasks as the underlying commands were removed from `sf`
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.92.0...v4.0.0
## v3.93.0 (2024-10-17)
## What's Changed
### Changes
- fix: escape stage name when running ensure_record_type task by [@leo-dcfa](https://github.com/leo-dcfa) in [#3827](https://github.com/SFDO-Tooling/CumulusCI/pull/3827)
- fix: Upgrade upload-artifact action by [@jstvz](https://github.com/jstvz) in [#3831](https://github.com/SFDO-Tooling/CumulusCI/pull/3831)
- Fix `TypeError` when permissionSetGroup has a mutingPermissionSet by [@lakshmi2506](https://github.com/lakshmi2506) in [#3834](https://github.com/SFDO-Tooling/CumulusCI/pull/3834)
- Add `check_components` preflight to detect metadata component conflicts (#3837) by [@vsbharath](https://github.com/vsbharath) in [#3837](https://github.com/SFDO-Tooling/CumulusCI/pull/3837)
## New Contributors
- @leo-dcfa made their first contribution in [#3827](https://github.com/SFDO-Tooling/CumulusCI/pull/3827)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.92.0...v3.93.0
## v3.92.0 (2024-09-18)
## What's Changed
### Changes
- fix: Update input handlers with new Salesforce lightning-primitive tags by [@chanyahn-st](https://github.com/chanyahn-st) in [#3822](https://github.com/SFDO-Tooling/CumulusCI/pull/3822)
## New Contributors
- @chanyahn-st made their first contribution in [#3822](https://github.com/SFDO-Tooling/CumulusCI/pull/3822)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.91.0...v3.92.0
## v3.91.0 (2024-08-22)
## What's Changed
### Changes
- Fix to Include All Keys in standardValue XML for add_standard_value_set_entries Task from Entries Option with Backward Compatibility by [@lakshmi2506](https://github.com/lakshmi2506) in [#3820](https://github.com/SFDO-Tooling/CumulusCI/pull/3820)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.90.1...v3.91.0
## v3.90.1 (2024-08-20)
## What's Changed
### Changes
- Fix to Suppress the required field check for the upsert action at mapping step by [@lakshmi2506](https://github.com/lakshmi2506) in [#3817](https://github.com/SFDO-Tooling/CumulusCI/pull/3817)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.90.0...v3.90.1
## v3.90.0 (2024-07-15)
## What's Changed
### Changes
- Add tasks to extract and upload files (Salesforce Files) by [@mjawadtp](https://github.com/mjawadtp) in [#3801](https://github.com/SFDO-Tooling/CumulusCI/pull/3801)
- Update the validation for loading to check the required fields as well by [@lakshmi2506](https://github.com/lakshmi2506) in [#3807](https://github.com/SFDO-Tooling/CumulusCI/pull/3807)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.89.0...v3.90.0
## v3.89.0 (2024-06-20)
## What's Changed
### Changes
- Added the `list_files` task to display files in an org by [@lakshmi2506](https://github.com/lakshmi2506) in [#3799](https://github.com/SFDO-Tooling/CumulusCI/pull/3799)
- The `api_names` option of the `assign_permission_set_licenses` task now accepts either `DeveloperName` or `PermissionSetLicenseKey` by [@lakshmi2506](https://github.com/lakshmi2506) in [#3798](https://github.com/SFDO-Tooling/CumulusCI/pull/3798)
## v3.88.0 (2024-05-24)
## What's Changed
### Changes
- Extend modal close wait with custom timeout by [@leboff](https://github.com/leboff) in [#3783](https://github.com/SFDO-Tooling/CumulusCI/pull/3783)
- Added check_output true to get the logs of metadata retrieval by [@lakshmi2506](https://github.com/lakshmi2506) in [#3789](https://github.com/SFDO-Tooling/CumulusCI/pull/3789)
### Issues Fixed
- Fix retrieve unpackaged so it is usable in metadeploy by [@yippie](https://github.com/yippie) in [#3566](https://github.com/SFDO-Tooling/CumulusCI/pull/3566)
## New Contributors
- @yippie made their first contribution in [#3566](https://github.com/SFDO-Tooling/CumulusCI/pull/3566)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.87.0...v3.88.0
## v3.87.0 (2024-05-17)
## What's Changed
### Changes
- Don't add fullname tag in 2GP package.xml by [@leboff](https://github.com/leboff) in [#3748](https://github.com/SFDO-Tooling/CumulusCI/pull/3748)
## New Contributors
- @leboff made their first contribution in [#3748](https://github.com/SFDO-Tooling/CumulusCI/pull/3748)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.86.1...v3.87.0
## v3.86.1 (2024-05-06)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.86.0...v3.86.1
## v3.86.0 (2024-03-27)
## What's Changed
### Changes
- @W-15258380 - Reloading of login URL's from env before creating jwt session by [@lakshmi2506](https://github.com/lakshmi2506) in [#3765](https://github.com/SFDO-Tooling/CumulusCI/pull/3765)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.85.0...v3.86.0
## v3.85.0 (2024-03-13)
## What's Changed
### Changes
- Fix Invalid Lookups of namespaced fields by [@aditya-balachander](https://github.com/aditya-balachander) in [#3759](https://github.com/SFDO-Tooling/CumulusCI/pull/3759)
- Fix Id Not Specified on Update Call by [@aditya-balachander](https://github.com/aditya-balachander) in [#3761](https://github.com/SFDO-Tooling/CumulusCI/pull/3761)
- Fix dependency parsing errors caused by `collision_check` option by [@jstvz](https://github.com/jstvz) in [#3760](https://github.com/SFDO-Tooling/CumulusCI/pull/3760)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.84.3...v3.85.0
## v3.84.3 (2024-02-24)
## What's Changed
### Changes
- Fix: Type Error while loading Contacts when PersonAccount is enabled by [@jkasturi-sf](https://github.com/jkasturi-sf) in [#3756](https://github.com/SFDO-Tooling/CumulusCI/pull/3756)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.84.2...v3.84.3
## v3.84.2 (2024-02-20)
## What's Changed
### Changes
- Polymorphic Lookup Data Extraction by [@aditya-balachander](https://github.com/aditya-balachander) in [#3741](https://github.com/SFDO-Tooling/CumulusCI/pull/3741)
- ADR: Migrate from SFDX to SF CLI by [@jstvz](https://github.com/jstvz) in [#3630](https://github.com/SFDO-Tooling/CumulusCI/pull/3630)
- Fix: Mismatch in the order of fields between the step and query during generation of the json request by [@aditya-balachander](https://github.com/aditya-balachander) in [#3750](https://github.com/SFDO-Tooling/CumulusCI/pull/3750)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.84.1...v3.84.2
## v3.84.1 (2024-02-01)
## What's Changed
### Changes
- Fix `is_person_type` `AttributeError` in record type handling by [@aditya-balachander](https://github.com/aditya-balachander) in [#3739](https://github.com/SFDO-Tooling/CumulusCI/pull/3739)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.84.0...v3.84.1
## v3.84.0 (2024-01-29)
## What's Changed
### Changes
- Incorrect generation of record type mapping table name in a namespaced org context by [@lakshmi2506](https://github.com/lakshmi2506) in [#3713](https://github.com/SFDO-Tooling/CumulusCI/pull/3713)
- Retrieve pre-flight checks by [@lakshmi2506](https://github.com/lakshmi2506) in [#3723](https://github.com/SFDO-Tooling/CumulusCI/pull/3723)
- Error during upsert on identical DeveloperName for RecordType of same sObject by [@aditya-balachander](https://github.com/aditya-balachander) in [#3702](https://github.com/SFDO-Tooling/CumulusCI/pull/3702)
- Rollback Operation for Inserts and Upserts by [@aditya-balachander](https://github.com/aditya-balachander) in [#3718](https://github.com/SFDO-Tooling/CumulusCI/pull/3718)
- Profile Retrieval in Metecho by [@aditya-balachander](https://github.com/aditya-balachander) in [#3711](https://github.com/SFDO-Tooling/CumulusCI/pull/3711)
- Identifies and retrieves non-source-trackable Metadata type components by [@lakshmi2506](https://github.com/lakshmi2506) in [#3727](https://github.com/SFDO-Tooling/CumulusCI/pull/3727)
- fix: re-enable telemetry, make CCI usage identifiable by [@mshanemc](https://github.com/mshanemc) in [#3728](https://github.com/SFDO-Tooling/CumulusCI/pull/3728)
- Add permsets to return_values for task get_assigned_permission_sets by [@lakshmi2506](https://github.com/lakshmi2506) in [#3736](https://github.com/SFDO-Tooling/CumulusCI/pull/3736)
- ListComponents modified to SOAP call by [@lakshmi2506](https://github.com/lakshmi2506) in [#3735](https://github.com/SFDO-Tooling/CumulusCI/pull/3735)
## New Contributors
- @mshanemc made their first contribution in [#3728](https://github.com/SFDO-Tooling/CumulusCI/pull/3728)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.83.0...v3.84.0
## v3.83.0 (2023-12-08)
## What's Changed
### Changes
- Allowed namespace injection without managed by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3677](https://github.com/SFDO-Tooling/CumulusCI/pull/3677)
- Update pyright configuration for 1.1.339 by [@jstvz](https://github.com/jstvz) in [#3715](https://github.com/SFDO-Tooling/CumulusCI/pull/3715)
- Replace distutils with shutil for 3.12 by [@jstvz](https://github.com/jstvz) in [#3714](https://github.com/SFDO-Tooling/CumulusCI/pull/3714)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.82.0...v3.83.0
## v3.82.0 (2023-12-01)
## What's Changed
### Critical Changes
- Remove `robot_lint` task and dependencies by [@jstvz](https://github.com/jstvz) in [#3697](https://github.com/SFDO-Tooling/CumulusCI/pull/3697)
### Changes
- Show an error message when no `origin` remote is present by [@lakshmi2506](https://github.com/lakshmi2506) in [#3679](https://github.com/SFDO-Tooling/CumulusCI/pull/3679)
- Improve task `return_values` documentation by [@lakshmi2506](https://github.com/lakshmi2506) in [#3689](https://github.com/SFDO-Tooling/CumulusCI/pull/3689)
- Task to retrieve a complete Profile from an org by [@aditya-balachander](https://github.com/aditya-balachander) in [#3672](https://github.com/SFDO-Tooling/CumulusCI/pull/3672)
- Support Python 3.12 by [@jstvz](https://github.com/jstvz) in [#3691](https://github.com/SFDO-Tooling/CumulusCI/pull/3691)
- Make task `options` read only when using Pydantic option validation by [@aditya-balachander](https://github.com/aditya-balachander) in [#3695](https://github.com/SFDO-Tooling/CumulusCI/pull/3695)
### Issues Fixed
- Fix Github url parse error for some scenarios by [@mgrandhi](https://github.com/mgrandhi) in [#3683](https://github.com/SFDO-Tooling/CumulusCI/pull/3683)
## New Contributors
- @mgrandhi made their first contribution in [#3683](https://github.com/SFDO-Tooling/CumulusCI/pull/3683)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.81.0...v3.82.0
## v3.81.0 (2023-11-03)
## What's Changed
### Changes
- Add option to specify release window in `cci org scratch` by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3653](https://github.com/SFDO-Tooling/CumulusCI/pull/3653)
- Add describe_metadatatypes task by [@lakshmi2506](https://github.com/lakshmi2506) in [#3669](https://github.com/SFDO-Tooling/CumulusCI/pull/3669)
- Fix JSON output for `cci org info` by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3675](https://github.com/SFDO-Tooling/CumulusCI/pull/3675)
- Fix `TypeError` when service sensitive attribute is `None` by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3674](https://github.com/SFDO-Tooling/CumulusCI/pull/3674)
- metadeploy_publish presents clear errors when plans are not available by [@lakshmi2506](https://github.com/lakshmi2506) in [#3684](https://github.com/SFDO-Tooling/CumulusCI/pull/3684)
- Add clear error message when `create_package_version` run against persistent orgs by [@lakshmi2506](https://github.com/lakshmi2506) in [#3676](https://github.com/SFDO-Tooling/CumulusCI/pull/3676)
- Add collision-check option to deploy task by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3667](https://github.com/SFDO-Tooling/CumulusCI/pull/3667)
- Handling exception when the Tooling API returns a test result with a null method name by [@lakshmi2506](https://github.com/lakshmi2506) in [#3681](https://github.com/SFDO-Tooling/CumulusCI/pull/3681)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.80.0...v3.81.0
## v3.80.0 (2023-09-29)
## What's Changed
### Changes
- Allow setting Major and Minor Version in upload_production task by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3651](https://github.com/SFDO-Tooling/CumulusCI/pull/3651)
- Add better error handling for empty or invalid org and service env vars by [@prescod](https://github.com/prescod) in [#3365](https://github.com/SFDO-Tooling/CumulusCI/pull/3365)
- Query with install_key in promote_package_version (via @zenibako) by [@davidmreed](https://github.com/davidmreed) in [#3654](https://github.com/SFDO-Tooling/CumulusCI/pull/3654)
- Trim whitespaces during service data entry by [@aditya-balachander](https://github.com/aditya-balachander) in [#3661](https://github.com/SFDO-Tooling/CumulusCI/pull/3661)
- Display namespace in output of `cci org info` by [@jain-naman-sf](https://github.com/jain-naman-sf) in [#3662](https://github.com/SFDO-Tooling/CumulusCI/pull/3662)
- Extend `deploy` task to support REST API deployment by [@aditya-balachander](https://github.com/aditya-balachander) in [#3650](https://github.com/SFDO-Tooling/CumulusCI/pull/3650)
- Add `ApexTestSuite` support in the `run_tests` task by [@mjawadtp](https://github.com/mjawadtp) in [#3660](https://github.com/SFDO-Tooling/CumulusCI/pull/3660)
- Implement variable substitution for nested structures in cumulusci.yml by [@aditya-balachander](https://github.com/aditya-balachander) in [#3665](https://github.com/SFDO-Tooling/CumulusCI/pull/3665)
- Add XPath-based 'find_replace' functionality to `deploy` by [@aditya-balachander](https://github.com/aditya-balachander) in [#3655](https://github.com/SFDO-Tooling/CumulusCI/pull/3655)
- Improve message description handling for scratch org cli `not_found` error by [@lakshmi2506](https://github.com/lakshmi2506) in [#3659](https://github.com/SFDO-Tooling/CumulusCI/pull/3659)
- Add `deactivate_flows` task by [@lakshmi2506](https://github.com/lakshmi2506) in [#3664](https://github.com/SFDO-Tooling/CumulusCI/pull/3664)
### Issues Fixed
- Add guard for empty body to github_release_report by [@jstvz](https://github.com/jstvz) in [#3645](https://github.com/SFDO-Tooling/CumulusCI/pull/3645)
## New Contributors
- @zenibako made their first contribution in [#3654](https://github.com/SFDO-Tooling/CumulusCI/pull/3654)
* @jain-naman-sf made their first contribution in [#3651](https://github.com/SFDO-Tooling/CumulusCI/pull/3651)
* @aditya-balachander made their first contribution in [#3661](https://github.com/SFDO-Tooling/CumulusCI/pull/3661)
* @mjawadtp made their first contribution in [#3660](https://github.com/SFDO-Tooling/CumulusCI/pull/3660)
* @lakshmi2506 made their first contribution in [#3659](https://github.com/SFDO-Tooling/CumulusCI/pull/3659)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.79.0...v3.80.0
## v3.79.0 (2023-09-07)
## What's Changed
### Changes
- Added workarounds to support Vlocity local compilation in CI by [@jstvz](https://github.com/jstvz) in [#3642](https://github.com/SFDO-Tooling/CumulusCI/pull/3642)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.78.0...v3.79.0
## v3.78.0 (2023-08-10)
## What's Changed
### Changes
- Updated Permission Set preflights to handle Permission Set Groups by [@jkasturi-sf](https://github.com/jkasturi-sf) in [#3623](https://github.com/SFDO-Tooling/CumulusCI/pull/3623)
- Added the `create_pull_request_on_conflict` option to automerge tasks by [@BenjaminFrench](https://github.com/ BenjaminFrench) in [#3632](https://github.com/SFDO-Tooling/CumulusCI/pull/3632)
### Issues Fixed
- Fixed issues with uploading some Unlocked Packages by [@jstvz](https://github.com/jstvz) in [#3636](https://github.com/SFDO-Tooling/CumulusCI/pull/3636)
- Corrected behavior of the `skip_future_releases` option by [@jstvz](https://github.com/jstvz) in [#3624](https://github.com/SFDO-Tooling/CumulusCI/pull/3624)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.77.0...v3.78.0
## v3.77.0 (2023-07-07)
## What's Changed
### Changes
- Add preflight check for PSL assignments by [@davidmreed](https://github.com/davidmreed) in [#3616](https://github.com/SFDO-Tooling/CumulusCI/pull/3616)
- Use Marketing Cloud's validate endpoint to update deployment packages by [@davidmreed](https://github.com/davidmreed) and [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3598](https://github.com/SFDO-Tooling/CumulusCI/pull/3598)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.76.0...v3.77.0
## v3.76.0.dev0 (2023-05-25)
## What's Changed
### Changes
- Use Marketing Cloud's validate endpoint to update deployment packages by [@davidmreed](https://github.com/davidmreed) and [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3598](https://github.com/SFDO-Tooling/CumulusCI/pull/3598)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.76.0...v3.76.0.dev0
## v3.76.0 (2023-05-25)
## What's Changed
### Changes
- Added opt-in Pydantic-based task option parsing. by [@prescod](https://github.com/prescod) in [#1618](https://github.com/SFDO-Tooling/CumulusCI/pull/1618)
- Add deploy transform to inject org URLs by [@davidmreed](https://github.com/davidmreed) in [#3596](https://github.com/SFDO-Tooling/CumulusCI/pull/3596)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.75.1...v3.76.0
## v3.75.1 (2023-04-14)
## What's Changed
### Issues Fixed
- Ensure that top-level 'tasks' directory is read for custom tasks by [@prescod](https://github.com/prescod) in [#3582](https://github.com/SFDO-Tooling/CumulusCI/pull/3582)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.75.0...v3.75.1
## v3.75.0 (2023-04-13)
## What's Changed
### Changes
- Fix bug that prevented "api" declaration in `extract_declaration` from being respected during `capture_sample_dataset`. by [@prescod](https://github.com/prescod) in [#3568](https://github.com/SFDO-Tooling/CumulusCI/pull/3568)
- Update windows install steps by [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3571](https://github.com/SFDO-Tooling/CumulusCI/pull/3571)
- CCI projects can now run tasks from their "sources" even when they are custom tasks coded in Python. By [@prescod](https://github.com/prescod) in [#3345](https://github.com/SFDO-Tooling/CumulusCI/pull/3345)
- The `capture_sample_data` task now looks for a `datasetname.load.yml` file to influence how it generates its .mapping file for subquent loads. By [@prescod](https://github.com/prescod) in [#3569](https://github.com/SFDO-Tooling/CumulusCI/pull/3569)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.74.0...v3.75.0
## v3.74.0 (2023-03-06)
## What's Changed
### Changes
- Allow use of static release notes on GitHub by [@davidmreed](https://github.com/davidmreed) in [#3550](https://github.com/SFDO-Tooling/CumulusCI/pull/3550)
- `cci service update` by [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3481](https://github.com/SFDO-Tooling/CumulusCI/pull/3481)
- Add TimelineObjectDefinition metadata type by [@jstvz](https://github.com/jstvz) in [#3551](https://github.com/SFDO-Tooling/CumulusCI/pull/3551)
### Issues Fixed
- Fix an issue with `capture_sample_data` and record type capturing. by [@prescod](https://github.com/prescod) in [#3552](https://github.com/SFDO-Tooling/CumulusCI/pull/3552)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.73.0...v3.74.0
## v3.73.0 (2023-02-16)
No changes (other than dependency updates) since v3.72.1.dev2 . Please see the changes below.
## v3.72.1.dev2 (2023-02-10)
## What's Changed
### Changes
- Include `modelVersion` in MCPM Payload by [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3523](https://github.com/SFDO-Tooling/CumulusCI/pull/3523)
- Fix MCPM deploy again by [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3526](https://github.com/SFDO-Tooling/CumulusCI/pull/3526)
- Mask invalid oauth token by [@jstvz](https://github.com/jstvz) in [#3529](https://github.com/SFDO-Tooling/CumulusCI/pull/3529)
- Include nearly everything in the wheel by [@jstvz](https://github.com/jstvz) in [#3531](https://github.com/SFDO-Tooling/CumulusCI/pull/3531)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.72.1...v3.72.1.dev2
## v3.72.1.dev1 (2023-02-08)
## What's Changed
### Changes
- Include `modelVersion` in MCPM Payload by [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3523](https://github.com/SFDO-Tooling/CumulusCI/pull/3523)
- Fix MCPM deploy again by [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3526](https://github.com/SFDO-Tooling/CumulusCI/pull/3526)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.72.1...v3.72.1.dev1
## v3.72.1.dev0 (2023-02-08)
## What's Changed
### Changes
- Change `deploy_marketing_cloud_package` task to include `modelVersion` in MCPM Payload by [@TheBitShepherd](https://github.com/TheBitShepherd) in [#3523](https://github.com/SFDO-Tooling/CumulusCI/pull/3523)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.72.1...v3.72.1.dev0
## v3.72.1 (2023-02-07)
## What's Changed
### Issues Fixed
- Fixed an issue preventing installation of CumulusCI's sdist in [#3520](https://github.com/SFDO-Tooling/CumulusCI/pull/3520)
## v3.72.0 (2023-02-03)
## What's Changed
### Changes
- Improve documentation of tasks w.r.t required/option/defauled fields. by [@prescod](https://github.com/prescod) in [#3447](https://github.com/SFDO-Tooling/CumulusCI/pull/3447)
### Issues Fixed
- Ensure that products have a slug before publishing translations by [@prescod](https://github.com/prescod) in [#3483](https://github.com/SFDO-Tooling/CumulusCI/pull/3483)
- Remove deprecated Playwright keywords by [@jstvz](https://github.com/jstvz) in [#3503](https://github.com/SFDO-Tooling/CumulusCI/pull/3503)
- Stricter check on what counts as a dataset by [@prescod](https://github.com/prescod) in [#3502](https://github.com/SFDO-Tooling/CumulusCI/pull/3502)
**Full Changelog**: https://github.com/SFDO-Tooling/CumulusCI/compare/v3.71.0...v3.72.0
## 3.71.0 (2022-12-20)
Critical Changes
- A few weeks ago we soft-launched a `load_data` feature that matched the dataset loaded to the `org_shape`. If you had discovered and used the `load_data` option called `org_shape_match_only`, you should switch to the new task because eventually we will remove the option and only use the new `load_sample_data` task. (#3455)
Changes
- CumulusCI has two new tasks for working with sample data: `load_sample_data` and `capture_sample_data`. (#3455)
- CumulusCI now offers the ability to inject arbitrary IDs into a project's metadata components. See the [Find-and-Replace Id Injection](https://cumulusci.readthedocs.io/en/latest/deploy.html#find-and-replace-id-injection) source transform for more information. (#3460)
- CumulusCI now allows for injecting the current running user's username into a project's metadata components. See the [Find-and-Replace Id Injection](https://cumulusci.readthedocs.io/en/latest/deploy.html#find-and-replace-current-username-injection) source transform for more information. (#3460)
## 3.70.0 (2022-11-29)
- The `retrieve_changes` and `list_changes` tasks now properly exclude metadata types that `SFDX` is unable to process. These include: `AuraDefinition`, `ExperienceResource`, and `LightningComponentResource` by @jstvz in https://github.com/SFDO-Tooling/CumulusCI/pull/3443
- The `deploy_remote_site_settings` task has been updated to load the correct Remote Site Settings records for OmniStudio by @jofsky in https://github.com/SFDO-Tooling/CumulusCI/pull/3444
## 3.69.0 (2022-11-14)
Changes
- Added support for debugging and breakpoints in Playwright-based
Robot Framework by @boakley in
https://github.com/SFDO-Tooling/CumulusCI/pull/3408
- Added option for deploy task to remove selected components from the
bundle by @jkasturi-sf in
https://github.com/SFDO-Tooling/CumulusCI/pull/3421
- Added documentation for using OmniStudio in Cumulus flows by
@bethbrains in https://github.com/SFDO-Tooling/CumulusCI/pull/3427
- Update creation of OmniStudio Remote Site Settings for new
Salesforce domain patterns (e.g. .\*scratch.my.salesforce,
\*.demo.my.salesforce, etc.) by @jofsky in
https://github.com/SFDO-Tooling/CumulusCI/pull/3424
- Added --debug flag to the deploy_marketing_cloud_package task by
@TheBitShepherd in
https://github.com/SFDO-Tooling/CumulusCI/pull/3430
## 3.68.1 (2022-11-01)
- Revert a change in parsing config files which was incompatible with some configs
## 3.68.0 (2022-10-31)
Critical Changes
- Upgraded Robot Framework from version 4.1.3 to version 6. As with most Robot Framework updates, there are a host of new features and a few deprecated features and backwards incompatibilities. For a complete list consult the [Robot Framework release notes](https://github.com/robotframework/robotframework/releases) in https://github.com/SFDO-Tooling/CumulusCI/pull/3417
Changes
- Add support for InstallKey, sourceOrg, release keys on 2GP version create by @davidmreed in https://github.com/SFDO-Tooling/CumulusCI/pull/3403
- We now support the `Territory2`, `Territory2Model`, `Territory2Type`, and `Territory2Rule` MetaData types. by @TheBitShepherd in https://github.com/SFDO-Tooling/CumulusCI/pull/3406
- Add `push_upgrade_org` flow to test in simulated push upgrade environment by @davidmreed in https://github.com/SFDO-Tooling/CumulusCI/pull/3286
- Fixed bug preventing the `deploy_omni_studio_site_settings` task from deploying to scratch orgs with the new `.scratch.` domain names by @jofsky in https://github.com/SFDO-Tooling/CumulusCI/pull/3411
- All new keychain details are serialized using JSON, not pickle by @bethbrains in https://github.com/SFDO-Tooling/CumulusCI/pull/3390
- Snowfakery (upgraded to 3.4) can now generate Event or Meeting Schedules similar to Calendar Apps
- Snowfakery now has a Salesforce.ContentFile feature for generating Content Versions
Issues Fixed
- Bumped key_size from 2048 to 4096 on advice from a security audit by @boakley in https://github.com/SFDO-Tooling/CumulusCI/pull/3389
- Fixed an issue where unknown deploy statuses could cause polling to hang in the deploy_marketing_cloud_package task by @TheBitShepherd in https://github.com/SFDO-Tooling/CumulusCI/pull/3394
- Fixed an injection vulnerability related to unquoted csv writers by @TheBitShepherd in https://github.com/SFDO-Tooling/CumulusCI/pull/3404
## 3.67.1 (2022-10-14)
Issues Fixed
- We added some javascript files that were missing from the 3.67.0 release
## 3.67.0 (2022-10-13)
Critical Changes
- CumulusCI now supports GitHub Enterprise. (#3256)
- CumulusCI will no longer be supporting installations via `brew`. See our docs for the officially supported install method via pipx.(#3382)
Changes
- When using Playwright instead of Selenium, we now have limited support for writing keywords in JavaScript. For more information, see the topic "Writing keywords in JavaScript" in the documentation under "Playwright Technology Preview". (#3378)
- Auto-load dataset matching org shape name(#3384)
- Updated the dependency resolvers used for commit-status builds (2GP and Unlocked Package parallel testing) to allow resolution to "fall back" from release branches like `feature/240` to the repository's main branch.(#3386)
- There is a new Playwright-based keyword `Wait until salesforce is ready`. This keyword is automatically called by the Open Test Browser keyword in the SalesforcePlaywright library. In addition to waiting for the page to be rendered, it will auto attempt to detect a classic page on initial render, and automatically switch to a lightning page if one is detected.(#3387)
- CumulusCI now supports the `CustomIndex` metadata type.(#3391)
- CumulusCI now supports performing source transformations during the `deploy` task, including find-and-replace of user-defined tokens. (#3383)
- Includes [Snowfakery 3.3](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v3.3.0) with new datetime features and find_record optimization.
Issues Fixed
- Fixed a bug when using blank dates in upserts and updates.(#3361)
- Fixed an issue where committing changes to a repository above a certain size caused timeouts to occur. (#3379)
- CumulusCI now uses the `defusedxml` library to more securely parse xml.(#3375)
## 3.66.0 (2022-09-29)
Changes
- New Metadata ETL task `set_object_settings` to enable and disable settings on standard and custom objects (thanks \@jlantz) (#3364)
- For Robot tests on the Firefox profile, we now accept all cookies to prevent lightning pages from failing to render due to cross-domain cookies. (#3366)
- Improved the method that playwright-based tests use to wait for the browser to initialize (#3366)
- The following Robot Framework keywords now automatically generate screenshots on failure: `Click related list button`, `Click related item popup link`, `Close modal`, `Current app should be`, `Field value should be`, `Get field value`, `Populate field`, `Populate lookup field`, and `Wait until modal is closed`. (#3370)
- CumulusCI now supports the following Metadata type: `AIApplicationConfig` (#3368)
- CumulusCI now supports the following types from [Net Zero Cloud\'s Tooling API](https://developer.salesforce.com/docs/atlas.en-us.netzero_cloud_dev_guide.meta/netzero_cloud_dev_guide/netzero_cloud_tooling_api_parent.htm): `BldgEnrgyIntensityCnfg`, `StnryAssetEnvSrcCnfg`, `VehicleAssetEmssnSrcCnfg`. (#3372)
Issues Fixed
- A failure when calling `capture page screenshot` no longer causes a Robot test to fail (#3366)
- Fixed an issue where the `cci --version` command failed to output the current version (#3367)
- A bug that prevented keywords decorated with `@capture_screenshot_on_failure` from returning a value has been fixed. (#3370)
- Fixed a bug where requests were not being logged while running tasks or flows with the `--debug` flag. (#3371)
## 3.65.0 (2022-09-16)
Changes
- Improve logging and add error handling for Vlocity tasks by \@prescod in (#3357)
## 3.64.0 (2022-08-18)
Changes
- Support for upcoming Salesforce 240 Release in Robot by \@boakley (#3321)
Issues Fixed
- Fix crash with unusual Unicode characters in metadata on Windows running `update_package_xml` by \@prescod (#3323)
- Fix Scratch org creation in latest sfdx by \@prescod (#3334)
## 3.63.0 (2022-08-04)
Changes
- CumulusCI can now validate MetaDeploy plans in cumulusci.yml by @jstvz in (#3298)
- Sensitive service info is now masked in the `cci service info` command - by @bethbrains in (#3295)
- Updated documentation for GitHub Actions framework by @davidmreed in (#3302)
- New MetaData ETL Task for deploying remote site settings - `add_remote_site_settings` by @Br4nd0R in (#3303)
- New task for deploying remote site settings that are required by OmniStudio - `deploy_omni_studio_site_settings` by @Br4nd0R in (#3303)
- Added new robot keywords available when using the SalesforcePlaywright library; get current record id, wait until loading is complete and go to record home. These keywords work in a similar fashion to the existing keywords of the same name that are based on Selenium - by @boakley in (#3310)
Issues Fixed
- Fixed two issues which prevented the `set_recently_viewed` feature from working by @prescod in (#3305)
- The GithubIssuesParser class will now fall back if issues are disabled by @davidmreed in (#3293)
## 3.62.0 (2022-07-21)
Changes
- CumulusCI now supports pinning dependencies on other projects by @davidmreed in (#3270)
- Add extract declarations concept to CumulusCI by @prescod in (#3285)
- Make `delete_data` task freezable by @jstvz in (#3294)
- Omnistudio vlocity build tool wrapper tasks `vlocity_pack_export` and `vlocity_pack_deploy` to support datapack export and deployments by @Br4nd0R in (#3296)
## 3.61.1 (2022-07-10)
Issues Fixed
- Fix `metadeploy_publish` error caused by supported_orgs case-sensitivity (#3277)
## 3.61.0 (2022-07-09)
Changes
- `metadeploy_publish` consumes legal targets for supported orgs (#3239)
- Add update_profile support for record type layouts by (#3243)
- Add `custom` key to cumulusci.yml schema (#3238)
- Make OrgSettings also deploy objectSettings, if present (#3235)
- Import persistent orgs from the SFDX keychain (#3253)
- Speed up Snowfakery handling of small batch sizes (#3188)
Issues Fixed
- Fix JWT audience for sandboxes (#3240)
- Fixed a bug where scratch org attributes configured via cumulusci.yml were
not taking effect. (#3209)
- Correct FeatureParameterString to FeatureParameterDate (#3254)
- No postinstall script for unlocked package builds (#3247)
## 3.60.0 (2022-06-09)
Changes
- We added a new dependency resolution strategy, `unlocked`. Like our existing dependency strategies using parallel 2GP package builds, this strategy installs parallel unlocked package builds. (#3223)
- We added the flows `build_unlocked_test_package`, `install_unlocked_commit`, and `qa_org_unlocked` to support use of parallel unlocked packages. (#3223)
- We added a property, `is_survey_advanced_features_enabled`, to the org_config entity available in when clauses. (#3149)
- Robot framework API and performance keywords have been moved into separate libraries. They are still automatically imported when using Salesforce.robot so it is not necessary to modify any existing test files. (#3216)
- There are new robot framework keyword libraries with limited support for `Playwright `_ via the `robotframework-browser library `_. To use, import the resource file `cumulusci/robotframework/SalesforcePlaywright.robot` instead of `cumulusci/robotframework/Salesforce.robot`. Note, Playwright is not yet supported by MetaCI. (#3216)
- `cumulusci.robotframework.BaseLibrary` can be used when creating new libraries in order to get some useful properties (`self.salesforce`, `self.salesforce_api`, `self.cumulusci`, etc) (#3216)
- Snowfakery 3.2 is included, with the following changes
- Snowfakery can now do random_reference to nicknames.
- We removed some limitations on what Snowfakery can do with objects referenced through random_reference, especially using a.b.c.d syntax.
- We added a unique option for random_reference to allow for 1-1 relationships across random references and no-duplicates many-to-many join relationships like Account->CampaignMember->Campaign
## 3.59.1 (2022-05-31)
Issues Closed
- Fixed a regression relating to lookup of variables like `$project_config.repo_branch`. Identified as a problem in the `github_automerge_main` task, but potentially there might be other tasks that were broken and are fixed by this branch. (#3220)
## 3.59.0 (2022-05-26)
Changes
- Setting `repo_url` in your project config is no longer required to run `metadeploy_publish`. (#3200)
- Adds new commands `cci robot install_playwright` and `cci robot uninstall_playwright` for installing and uninstalling experimental support for the Robot Framework `Browser` library, which is based on Playwright. For more information see the section "Playwright Technology Preview" in the public documentation. (#3194)
- Programs using CumulusCI as a library may generate warnings when getting values from config objects. A new method `config.lookup` is the preferred way to look up these values. (#3026)
## 3.58.0 (2022-05-16)
Changes
- CumulusCI Robot Framework support has been tested on prerelease orgs (#3187)
- Upgraded the Snowfakery dependency to version 3.1.0. When embedded in CumulusCI, Snowfakery can now do SObject Upserts. (#3195)
Issues Closed
- Fix bug when setting the 'options' option in the robot task from the command line (#3173)
## 3.57.0 (2022-04-28)
Changes
- Support `useralias` in `Open Test Browser` for connected orgs (#3169)
Issues Closed
- More reliable way to find latest chronological release in GitHub (#3164)
- Add IP Ranges Metadata ETL task (#3146)
## 3.56.0 (2022-04-07)
Changes
- Added support for Lightning radiobuttons in the Robot keyword input form data. (#3142)
Issues Closed
- Fixed an issue where CumulusCI was incorrectly merging task option overrides. (#3145)
## 3.55.0 (2022-03-24)
Changes
- CumulusCI now provides an option to verify server certificates using
root CA certs loaded from the system, instead of the default set of
CA certs bundled with the Python requests library. This is
considered experimental, so must be opted in by setting the
`CUMULUSCI_SYSTEM_CERTS` environment variable to `True` (#3114)
- Improvements to the custom locator strategy used by the Robot
Framework keyword `input form data` to find form fields and
lightning components based on label text. This locator strategy
(`label:`) is now up to 10x faster at finding non-lightning form
components, and is able to find elements with more complicated
labels (eg: labels with text inside of nested spans). (#3117)
- Fixed a bug that prevented the use of aliases for Robot Framework
page objects.(#3120)
- The Robot Framework keyword `input form data` now does a better job
of working with non-lightning checkboxes. (#3122)
Issues Closed
- Fixed an error that could occur when loading a project that uses
very old flow syntax with tasks instead of steps. (#3118)
- Fixed a bug when using `sources` to access another project from a
github branch, where the branch context was not available to
branch-based dependency resolvers. (#3123)
- The `drop_missing_schema` option was not respected by the
`snowfakery` task. Now it is. (#3125)
## 3.54.0 (2022-03-10)
Changes
- The `install_managed` and `update_dependencies` tasks:
- Now support `apex_compile_type` and `upgrade_type` options for
performing Unlocked Package installations. (#3105)
- Accept the options `interactive` and `base-package-url-format`,
which pause the automation and wait for the user to confirm the
list of packages to be installed. (#3093)
- The `update_package_xml` task now supports new Slack metadata types
(#3103)
- We added the ability to do Upserts during Data Loading
([documentation](https://cumulusci.readthedocs.io/en/stable/data.html#upserts)).
(#3099)
- Robot Framework tests can now pass a locator when calling
`Go To Page` for one of our bulit-in page objects (Listing, Detail,
Home), and the keyword will wait until that locator is visible. This
is mostly useful for custom pages where you need to wait for an
iframe or custom component to be available. (#3098)
- We improved our caching mechanisms to better handle projects whose
cross-project sources themselves have cross-project sources. (#3092)
Issues Closed
- Fixed a bug running the `snowfakery` task in parallel mode with orgs
connected using a Connected App. (#3109)
## 3.53.0 (2022-02-24)
Critical Changes
- CumulusCI now ships with Snowfakery 3.0. See the [Snowfakery release
notes](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v3.0.0).
Snowfakery 3.0 ships with opt-in features that will become the
default in June 2022; please [test your
recipes](https://snowfakery.readthedocs.io/en/latest/##snowfakery-3)
now with `snowfakery_version: 3` to ensure compatibility.
Changes
- CumulusCI now has an `update_data` task that allows updates to
existing datasets, in coordination with Snowfakery 3.0.
- Orgs connected using `cci org connect` now keep track of which
`connected_app` service was used to connect them, and will use the
same `connected_app` service when getting a fresh access token, even
if it isn't currently the default `connected_app` service. This
makes it easier to use CumulusCI with multiple `connected_app`
services. (Orgs that were connected before this update will continue
to use the default `connected_app` service.)
- When connecting a custom `connected_app` service, a default
`login_url` can be specified (to use a login URL other than
when connecting orgs using this
`connected_app` service).
- The `deploy_marketing_cloud_package` task now utilizes the new API
endpoint for deployments.
- CumulusCI commands are more resilient in the face of corrupted or
impossible to decode org config files.
- We added documentation about managing Robot Framework locators
- CumulusCI will now warn Windows users if long pathname support is
not set up correctly.
Issues Closed
- Fixed a bug in the JSON format output of cci service list --json
## 3.52.0 (2022-02-03)
Changes
- Flow steps can now be replaced with the same syntax for all step
types! (Current step types are: 'task' or 'flow'). See the
\[replacing a flow
step\]()
docs for more details. CumulusCI is still compatible with the old
syntax which required setting the current step type to `None` when
replacing with a step of a differing type. (#3043)
- Whenever possible, while running the `robot_libdoc` task libdoc
generates relative pathnames when creating CSV output (#3058)
- Added a new option `--preview` to the `robot_libdoc` task. When set
to `true` it automatically opens a browser window to the generated
documentation. (#3057)
- The robot keyword `Locate element by label` has been removed from
the Salesforce.py library. This wasn't designed to be a keyword but
was accidentally exported as one. If you want to find an input or
textarea element by its label you can use a locator of the form
`label:` (eg: `label:First Name`) (#3048)
- Updated to [Snowfakery
2.5.0](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v2.5.0)
- If you have Python code that is importing CumulusCI's config
classes, some of them have been reorganized into modules with a
snake_case name. The old CamelCase imports should still work, but
the new names are preferred for consistency with other parts of the
codebase.
Issues Closed
- Fixed an issue where overriding flow steps was not working as
documented. (#3043)
- We fixed a bug where the `Run Task` and `Run Task Class` robot
keywords throw an error like
`AttributeError: module 'robot.api.logger' has no attribute 'log'`
in rare cases (#3053)
- Fixed a bug in the snowfakery task which caused Unique
IDs to not always be actually unique. (#3059)
## 3.51.1 (2022-01-25)
Issues Closed
- We fixed an issue that could cause `create_package_version` to fail
when the `version_base` option is set to `latest_github_release` and
the latest GitHub release is a 1GP package version.
## 3.51.0 (2022-01-20)
Changes
- The `cci flow doc` command now only includes CumulusCI's standard
flows unless the `--project` option is specified. (#3033)
- The `run_tests` task now has a
`required_per_class_code_coverage_percent` which ensures that every
class in your project meets the code coverage level specified.
(#3027)
- Marketing Cloud tasks:
- Added the `marketing_cloud_get_user_info` task to retrieve user
information from the Marketing Cloud REST API `userinfo`
endpoint. (#3039)
- The `marketing_cloud_create_user` task now creates an unlocked
user with a notification email address so that it is possible
for the user to log in. This task also has a new option,
`activate_if_existing`, which can be set to `true` to ensure
that if the user already exists in an inactive state, it will be
activated. (#3040)
Issues Closed
- Fixed an issue preventing step-level preflight checks from working
correctly in MetaDeploy when run in a cross-project flow. (#3034)
- The `github_parent_pr_notes` task now handles child pull requests
with an empty body. (#3038)
- The `metadeploy_publish` task now displays a clear error message if
you supply the wrong API URL for MetaDeploy. (#3034)
- The `cci service default --project` command presents a better error
message when called outside of a project directory. (#3037)
- Fixed a bug where the `cci flow doc` command would break when using
cross-project flows. (#3033)
## 3.50.0 (2022-01-06)
Changes
- Robot keywords have been updated to support the Spring 22' release.
(#3021)
- Using channel declarations in `load.yml`, users can now do synthetic
data loads across multiple user accounts at once. This is faster for
some very large orgs. (#3016)
Issues Closed
- Added a missing image to the "Windows Install Steps" portion of
the docs. (#3013)
- Fixed a bug that prevented `Get webelements` from returning an empty
list if the locator was a custom locator created via the
`register_locators` function of
`cumulusci.robotframework.locator_manager`. (#3004)
- Fixed a bug that prevented the locator
`SF:object.button:Assign Reviewers` from working properly. (#3002)
- Fixed an issue where the `--json` flag was not outputting properly
formatted `JSON` with the `cci task list` command. (#3011)
## 3.49.0 (2021-12-09)
Critical Changes
- **Python versions 3.6 and 3.7 are no longer supported.** Please
ensure you have Python version 3.8, 3.9, or 3.10. (#2959)
- The `dx_convert_from` task now uses a custom Python task class
instead of `cumulusci.tasks.sfdx.SFDXBaseTask`. In most cases this
will have no visible impact, but if you have customized this task
config to change the command option, make sure you have also
explicitly set its `class_path` to
`cumulusci.tasks.sfdx.SFDXBaseTask`. (#2981)
Changes
- You can now get the CumulusCI version with `cci --version`. The
output is the same as the `cci version` command. (#2974)
- A new feature has been added to the `robot_libdoc` task. You can now
use `--f csv` to generate a CSV file with all of the keywords.
(#2985)
- New keywords `Select Rows` and `Unselect Rows` have been added to
the robot Listing page object (#2995)
- Queries passed to the `SOQL Query` keyword can now span multiple
lines. (#3006)
Issues Closed
- Fixed an issue where deleted components could still deploy into
persistent orgs. (#2981)
## 3.48.2 (2021-11-16)
- Fixed a regression which broke `cci project init` in CumulusCI
3.48.0 and 3.48.1. (#2986)
## 3.48.1 (2021-11-12)
Issues Closed
- Fixed a packaging issue which caused an error when installing on
systems without a C compiler.
## 3.48.0 (2021-11-11)
Critical Changes
- CumulusCI will be dropping support for Python 3.6 and 3.7 within the
next few releases. Please ensure you're running Python 3.8 or
above.
Changes
- We added a new command, `cci plan info`. Similar to `cci task info`,
this command displays detailed information about a MetaDeploy
`plan`, and includes a `--messages` option to display user-facing
text. (#2946)
- Improved logging to show reduced timestamps, and provide some syntax
highlighting of output. (#2941)
- [Snowfakery
2.2](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v2.2)
is now included with CumulusCI. New features include unique IDs and
Numeric Counters. (#2962)
Issues Closed
- We added an improved error message when `metadeploy_publish` is
passed a lightweight tag. (#2955)
- Adjusted a check for .lightning. domains in the `cci org connect`
command. (#2970)
- We fixed an issue where stacktraces for some Apex test failures were
truncated. (#2961)
## 3.47.0 (2021-10-28)
Changes
- Added a `cci plan list` command for displaying a list of
MetaDeploy plans (#2940)
- Task options can now be marked as "sensitive". These task options
that will be obfuscated when displayed at the beginning of each task
in a flow. (#2939)
- Improved error message when
uninstall-packaged-incremental is run in an
SFDX-format project without converting to Metadata API format first
(#2929)
- Improved error messaging for multiple scenarios where tasks are
improperly configured in `cumulusci.yml`. (#2923)
- We added a new task create-blank-profile that can be
used to create a new profile from scratch without any permissions
enabled. (This new task requires a Winter 22 Org or API 53.0)
(#2908)
- We've added a user-friendly error message when installing a package
using `security_type` "PUSH" with a 04t Package
Version ID. (#2935)
## 3.46.0 (2021-10-14)
Critical Changes
- Backwards incompatibility: the robot task option `debug`
has been renamed to `robot_debug`. (#2909)
Changes
- CumulusCI now has a schema published
[here](https://github.com/SFDO-Tooling/CumulusCI/tree/main/cumulusci/schema/cumulusci.jsonschema.json).
This is primarily intended to be use for enabling linting in VS
Code, but could be used for any schema-aware editor or any
validation purpose. (#2902)
- We added a new task create-blank-profile that can be
used to create a new profile from scratch without any permissions
enabled. (#2908)
- Manually creating a Personal Access Token and pasting it into the
CLI is no longer required to connect a GitHub service. Instead,
CumulusCI now supports GitHub's device authentication flow,
allowing you to authenticate via browser using a temporary device
code. (#2911)
- `cci service info` for a github service now displays
expiration dates for GitHub personal access tokens, if set. (#2912)
- Improved error messaging for multiple scenarios where tasks are
improperly configured in `cumulusci.yml`. (#2923)
Issues Fixed
- Fixed a bug where connecting a GitHub service with `cci service connect` was failing silently. (#2888)
- Fixed an issue where MetaDeploy steps using the old
`filename_token` and `namespace_token`
options could not be used. (#2914)
## 3.45.0 (2021-09-30)
Changes
- Updated the `deploy_marketing_cloud_package` task for compatibility
with the October 2021 release of Marketing Cloud. (#2899)
- The `--max-lines` option on the `cci error info` command has been
removed. (#2895)
Issues fixed
- Removed the unused `--skip` option for the `cci flow run` command.
(#2884)
- Flow descriptions no longer generate a warning. (#2885)
- We changed how the output from some commands and tasks are displayed
in the CLI. (#2887)
- Fixed a bug in freezing the `load_dataset` task options for
MetaDeploy. (#2900)
- The marketing cloud `deploy` task now properly exits when a result
status of `FATAL_ERROR` is returned. (#2897)
- We fixed a regression in the `push_list` task that affected 2GP push
upgrades (#2898)
## 3.44.1 (2021-09-17)
Issues Fixed
- We fixed a regression that resulted in upload failures for 2GP
packages that extend 1GP packages (closes ##2880).
## 3.44.0 (2021-09-16)
Changes
- CumulusCI uses package version Ids from 1GP releases wherever
available, reducing the need to install 1GP packages in an org to
build 2GP dependencies. (#2832)
- We added `metadata_package_id` and `version_id` options to allow
passing `MetadataPackage` (prefix 033) and `MetadataPackageVersion`
(prefix 04t) IDs to the push upgrade tasks. (#2837)
- `cci flow info` will now output all flow options defined. (#2845)
- We improved error messages for incorrect data mapping files (#2831).
- The `snowfakery` task supports specifying the `loading_rules` option
(#2861)
- The `snowfakery` task supports recipe options being supplied to
recipes using the `recipe_options` option (#2861).
Issues Fixed
- We fixed some errors in the documentation (#2854)
- We fixed an issue causing CumulusCI to fail to install releases that
contain an Unlocked Package without a namespace. (#2851)
- We added handling for issues that occur when running the
`generate_dataset_mapping` task for very large orgs (#2860).
- We fixed a regression in using cross-project sources in MetaDeploy
installers (#2875).
## 3.43.0 (2021-09-02)
Critical Changes
- We now support all package installation options for the
`update_dependencies` and `install_managed` tasks, including
`activate_remote_site_settings`, `security_type`,
`name_conflict_resolution`, and `password` (password not available
for `update_dependencies`). (#2811)
We also fixed a minor inconsistency in defaulting the
`activate_remote_site_settings` (or formerly `activateRSS`) option.
Projects that define custom tasks based on the
`InstallPackageVersion` class should ensure they explicitly set the
`activate_remote_site_settings` option, or accept the new default of
True.
MetaDeploy install plans now _do not_ freeze defaulted package
install options. If your install plans are dependent on specific
install options, we recommend explicitly specifying them. Install
plans without explicit options will use the defaults at the time of
execution.
Changes
- The `sources` feature, which allows CumulusCI projects to consume
automation from other projects, now supports specifying a
`resolution_strategy`, just like dependencies. Sources can now
resolve to the same GitHub refs as corresponding dependencies,
including branch matching. The default behavior is to use the
`production` resolution strategy. (#2807)
- Added several new tasks for configuring Marketing Cloud:
`marketing_cloud_create_subscriber_attribute`,
`marketing_cloud_create_user`, and
`marketing_cloud_update_user_role`. (#2838)
- In the mapping file for the `load_dataset` task, the `batch_size`
can now be specified for Bulk API steps in addition to REST API
steps. (#2813)
- The `snowfakery` task now supports the `ignore_row_errors` option to
continue loading even if there are row errors. (#2819)
- We made significant updates to the [documentation for Robot
Framework](https://cumulusci.readthedocs.io/en/stable/robot.html).
(#2834, ##2847)
- We improved option validation for the `add_page_layout_fields` task.
(#2828)
Issues Fixed
- Fixed handling of timezones when the `start_time` option is
specified for the push tasks. (#2814)
- Fixed the `deploy_marketing_cloud_package` task to handle changes to
the Marketing Cloud API. (#2816)
- Fixed an issue where MetaDeploy install steps that used 04t package
version Ids, including 2GP installations, were frozen with incorrect
titles. (#2817)
- Fixed an issue causing 2GP commit-status builds to fail when the
local Git repository has a detached HEAD (#2818)
- Fixed a bug in the `dry_run` option for the `metadeploy_publish`
task where explicitly setting the option to `False` did not disable
the dry run. (#2836)
- Improved the error message shown by the `load_dataset` task if a
table is missing from the dataset. (#2813)
- Improved the warning message shown when CumulusCI can't encrypt org
and service config files. (#2839)
Internal Changes
- CumulusCI has improved infrastructure for its own integration tests.
(#2783)
- Filing a CumulusCI issue on GitHub now presents a form to enter
details. (#2829)
- Added a linter to ensure consistent formatting of YAML files within
the CumulusCI codebase. (#2844)
## 3.42.0 (2021-08-19)
Critical Changes
- The `github_release` task now requires the `tag_prefix` option to be
passed, because for 2nd-generation packages we can't tell from the
version number whether it is a beta or not. We've updated the
standard release flows to set the `tag_prefix` appropriately, but if
you have custom flows using this task you will need to update them.
(#2792)
- In order to run the `github_copy_subtree` task for a specific
package version, you must now use the `tag_name` option instead of
the `version` option. Using the `version` option set to `latest` or
`latest_beta` is deprecated; it's preferred to pass these values in
the `tag_name` option instead. (#2792)
Changes
- The `uninstall_packaged_incremental` task now defaults to ignoring
non-deletable `CustomObjectTranslation` metadata. If your project
customizes the `ignore_types` option on
`uninstall_packaged_incremental`, we recommend you add
`CustomObjectTranslation` to this option. (#2790)
Issues Fixed
- Fixed an issue where bulk job results were being miscounted. (Thanks
\@sfdcale!) (#2789)
- Fixed an issue where GitHub tags for a 2GP package would always
include the "release" prefix (even for Beta package versions).
(#2792)
## 3.41.0 (2021-08-05)
Changes
- We added a new Metadata ETL task,
add-page-layout-fields, that allows adding fields to
existing layouts. (#2766)
- We added a task to enable an Einstein prediction:
enable-einstein-prediction (thanks, \@erikperkins!)
(#2778)
- We added standard flows for releasing unlocked packages:
release-unlocked-beta] and release-unlocked-production (#2768)
- We added
[documentation](https://cumulusci.readthedocs.io/en/stable/packaging.html)
for using CumulusCI to build managed 2GP packages, unlocked
packages, and extending NPSP and EDA with 2GP packages. (#2768)
- Contributions to CCI now require verification by isort, which
ensures consistency in the order that imports are used. (#2770)
- CumulusCI now supports deploying unmanaged dependencies in SFDX
source format. (#2735)
- The create-package-version] task now handles
dependencies that use a `zip_url`. (#2735)
- Updates to Github Actions configuration documentation. Thanks
\@Julian88Tex (#2773)
- CumulusCI now automatically recognizes services and orgs configured
via environment variables. See the
[docs](https://cumulusci.readthedocs.io/en/stable/headless.html) for
more details. (#2676 and ##2776)
- We've updated the Push Upgrade tasks (push-list,
push-sandbox, etc) task option `start_time` to accept ISO-8601
formatted datetimes. (#2769)
- You can now specify "sandbox": true on a `CUMULUSCI_ORG_*`
variable in headless environments to indicate that the org you want
to connect to is a sandbox. when connecting sandbox orgs in a
headless environment. (#2753)
Issues Closed
- Fixed an issue where scratch orgs failed to be deleted in CI
environments. (#2676)
- Fixed an issue where deleting an org failed to mark the org as
deleted on CumulusCI's keychain. (#2676)
- Fixed an issue where CumulusCI would fail on Linux distributions
that were incompatible with the `keyring` package.
(#2676)
- We fixed an issue causing the release-2gp-production
flow to fail with a dependency parsing error. (#2767)
- Fixed a couple issues with connecting CumulusCI to sandboxes using
enhanced domains. (#2753 and ##2765)
- Fixed a bug where the github_release task was not marking the "This
is a pre-release" checkbox for beta releases. (#2788)
## 3.40.1 (2021-07-22)
Issues Closed
- Fixed an issue where a missing dependency was causing the homebrew
installer formula to break.
## 3.40.0 (2021-07-22)
Critical Changes
- The `create_package_version` task no longer creates Unlocked
Packages from the `unpackaged/pre` and `unpackaged/post` directories
of dependencies, or local `unpackaged/pre` directories by default.
This behavior is now opt-in via the
`create_unlocked_dependency_packages` option, which defaults to
False. Projects using the old default behavior must explicitly set
this option. We believe the new behavior is a more sane default for
most 2GP projects. (#2741)
Changes
- The `add_standard_value_set_entries` task now supports value sets
for `LeadStatus`. (#2695, with thanks to \@naicigam)
- We updated the default API version to 52.0. (#2740)
Issues Closed
- Fixed an issue where the the built-in connected app was not
accessible when running CumulusCI in a headless environment. (#2737)
- The `create_package_version` task now supports `objectSettings` in
the org definition file. (#2741)
- We fixed issues in working with files containing Unicode characters
on some Windows systems when using source-tracking commands. (#2739)
- Fixed a bug where the `anon_apex` task had option text that was
missing spaces. (#2736)
## 3.39.1 (2021-07-08)
Changes:
- Fix a bug with the integration of CumulusCI and the new SOQLQuery
Feature
## 3.39.0 (2021-07-08)
Changes:
- A new `snowfakery` task with better usability and
multi-processor support. Look at the CumulusCI docs to learn the new
syntax:
(#2705)
- CumulusCI now uses Snowfakery 2.0, with various new features,
especially the ability to query into orgs. More information:
(#2705)
- We improved our Robot documentation so that it's possible to link
to keyword documentation instead of having to download it locally
(#2696)
- CumulusCI uses a new port (7788) for the built-in connected app to
lessen the chances that the port is in use. (#2698)
- CumulusCI now checks if the port associated with a callback
URL/redirect URI is in use during OAuth2 flows, and if so, raises a
more friendly error. (#2698)
- The `generate_data_dictionary` task now includes Custom Settings,
Custom Metadata Types, and Platform Events. (#2712)
- The `generate_data_dictionary` task now excludes any schema with
visibility set to Protected. This behavior can be turned off
(including protected schema) with the `include_protected_schema`
option. (#2712)
- The `generate_data_dictionary` task now parses object and field
metadata anywhere in a Salesforce DX release other than in the
`unpackaged/` directory tree. (#2712)
- Builds that install feature-test 2GP packages now present a cleaner
error message when the current commit is not found on GitHub.
(#2713)
- SFDX and CumulusCI both support noancestors as a Scratch org config
option but CumulusCI generated a warning if users tried to specify
the option in cumulusci.yml. (#2721)
Issues closed:
- Fixed issue where CumulusCI did not correctly convert a package
version specified as a number in YAML to a string. This now raises a
warning. (#2692)
- Fixed a bug where OAuth errors were not reported in detail. (#2694)
- Fixed an issue where CumulusCI did not grant permissions to Custom
Tabs when running `update_admin_profile` without a custom
`package.xml`. Projects that use a custom `package.xml` with
`update_admin_profile` should update their manifest to include a
`CustomTab` wildcard for the same outcome. (#2699)
- Fixed an issue where the `dx`, `dx_push`, and `dx_pull` tasks did
not refresh the org's access token. (#2703)
- Fixed issues in the `generate_data_dictionary` task that resulted in
failures when processing fields with blank Help Text or processing
standard fields. (#2706)
- Fixed an issue preventing `generate_data_dictionary` from working
with four-digit (1.0.0.0) 2GP version numbers. (#2712)
- Fixed an issue causing `release_2gp_beta` to fail to create a GitHub
release with a dependency-parsing error. (#2720)
## 3.38.0 (2021-06-24)
Changes:
- The built-in connected app that CumulusCI uses by default is now
visible in the output of the `cci service list` command. This makes
it possible to switch back and forth between this connected app and
another one as the current default when multiple connected_app
services are configured. The built-in connected_app service has the
name `built-in` and cannot be renamed or removed. (#2664)
- The `generate_data_dictionary` task includes a new option,
`include_prerelease`. If set to `True`, CumulusCI will include
unreleased schema in the data dictionary from the current branch on
GitHub, with the version listed as "Prerelease". (#2671)
- Added a new task, `gather_release_notes`, which generates an HTML
file with release notes from multiple repositories. (#2633)
- The `deploy_marketing_cloud_package` task includes a new option,
`custom_inputs`, which can be used to specify values to fill in for
inputs in a Marketing Cloud package. (#2683)
- Mappings for the `extract_dataset` task can now specify a
`soql_filter` to restrict which records are extracted. Thanks
\@sfdcale (#2663)
- Robot Framework: The `Scroll Element Into View` keyword in the
Salesforce library now scrolls the center of the element into view
rather than the top. (#2689)
Issues closed:
- Fixed a bug where CumulusCI could not parse the repository owner and
name from an ssh git remote URL if it used an ssh alias instead of
`github.com`. (#2684)
- Fixed a bug where `cci service info ` would display
`None` as the name for the default service if no name was provided.
(#2664)
- Fixed a missing dependency on the `contextvars` Python package in
Python 3.6.
## 3.37.0 (2021-06-10)
Changes
- The `install_managed` task now supports 2GP releases (#2655).
- We changed the behavior of the `release_2gp_beta` flow to always
upload a package version, even if metadata has not changed (#2651).
- We now support sourcing install keys for packages from environment
variables via the `password_env_name` dependency key (#2622).
Robot Framework
- We upgraded SeleniumLibrary to 5.x (#2660).
- We added a new keyword "select window" to Salesforce library, to
replace the keyword of the same name which was renamed in
SeleniumLibrary 5.x to 'switch window'. We will be removing this
keyword in a future release; tests should use 'switch window'
instead.
Issues Closed
- We corrected some JavaScript issues that were occurring with
Chrome 91. (#2652)
- We fixed a bug impacting the `generate_data_dictionary` task when
used with dependencies (#2653).
- We fixed an issue causing `sfdx` commands that had options with
spaces to fail to execute on Windows (#2656).
- We fixed an issue causing the creation of incorrect 2GP beta tags
(#2651).
## 3.36.0 (2021-05-27)
Changes
- Added the option `tag_prefix` to the `github_release` task. This
option can be set to specify what prefix you would like to use when
CumulusCI creates a release tag for you in GitHub. (#2642)
- The `deploy_marketing_cloud_package` task has been updated to match
changes to the Marketing Cloud Package Manager API. It also now
raises an exception if the deployment failed. (#2632)
Robot Framework
- Improved the output of the `robot_libdoc` task. (#2627)
Data generation with Snowfakery:
- Updated to [Snowfakery
1.12](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.12)
(#2538)
Issues Closed
- Fixed an issue where flow reference documentation was rendering with
an error. (#2646)
- CumulusCI will now remove orgs when the `--delete-org` option is
passed to `cci flow run`, even if an error occurs while running the
flow. (#2644)
- Fixed a bug where beta tags created via the `release_2gp_beta` flow
were not receiving the proper tag prefix. (#2642)
- Fixed namespace injection for filenames with a `___NAMESPACE___`
token in sfdx format. (#2631) (Thanks \@bethbrains)
- Fixed a bug in `cci org connect` where the `--sandbox` flag was
directing users to login at `login.salesforce.com` instead of
`test.salesforce.com`. (#2630)
- Fixed a regression where the `skip` key for a dependency could no
longer be specified as a single string instead of a list. (#2629)
- Fixed a regression in freezing the `deploy_pre`/`deploy_post` tasks
for MetaDeploy install plans. (#2626)
- Fixed bugs in the `deploy_marketing_cloud_package` task's payload
construction. (#2620, ##2621)
## 3.35.0 (2021-05-13)
Critical Changes
- Upgraded Robot Framework to 4.x. For information about new features
and some backward incompatibilities see the [Robot Framework 4.0
release
notes](https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-4.0.rst).
(#2603)
- The `update_dependencies` task now guarantees to resolve unpackaged
metadata directories (subdirectories of `unpackaged/pre` and
`unpackaged/post`) in alphabetical order, matching the behavior of
`deploy_pre` and `deploy_post`. `unpackaged/pre/bar` will deploy
prior to `unpackaged/pre/foo`. The previous behavior was undefined,
which caused rare problems. This change is critical only for
projects that have deployment-order dependencies between unpackaged
directories located in upstream dependencies and rely on the current
undefined load order. (#2588)
Changes
- The CumulusCI documentation has a new section: [Testing with
Second-Generation
Packaging](https://cumulusci.readthedocs.io/en/latest/2gp-testing.html)
(#2597)
- CumulusCI has two new service types: `oauth2_client` &
`marketing_cloud`. These are considered experimental. (#2602)
- The `marketing_cloud` service allows users to connect to a Marketing
Cloud tenant via OAuth so that tasks that work with Marketing Cloud
can make API calls on the user's behalf. (#2602)
- The `oauth2_client` service takes information for an individual
OAuth2 client which can then be used in place of the default client.
This currently applies only to the `marketing_cloud` service. To
setup a Marketing Cloud service with a specific OAuth2 client use:
`cci service connect marketing-cloud --oauth_client `.
(#2602)
- CumulusCI has a new task: `deploy_marketing_cloud_package`. This
task allows a user to pass the path to a .zip file to a Marketing
Cloud package (downloaded from the Marketing Cloud Package Manager)
and deploy the package via a `marketing_cloud` service (see above).
Note that successfully deploying a package using this task may
require permissions that are not generally available. (#2602)
- The `install_managed` and `install_managed_beta` tasks now take no
action if the specified package is already installed in the target
org. (#2590)
- The `cci org list` command can now output in `JSON` format by
passing it the `--json` flag. (#2593)
Issues Closed
- Fixed an issue parsing `cumulusci.yml` files that contained Unicode
characters on Windows. (#2617)
- Fixed an issue in the `github_copy_subtree` task where CumulusCI
would silently generate incorrect or truncated commits when a
directory was passed to the `include` task option. (#2601)
- The `deploy_pre` and `deploy_post` tasks avoid warnings by freezing
installer steps that match current expectations. (#2589)
## 3.34.1 (2021-04-30)
Issues Closed
- Fixed a regression in the `load_dataset` task where some sObjects
could not be loaded without explicitly turning off the new
`set_recently_viewed` option.
## 3.34.0 (2021-04-29)
Critical Changes:
- If you have custom flows that utilize the `github_release` task,
they will need to be updated to include the `package_type` option
(which is required). (#2546)
Changes:
- The `github_release` task now has a `package_type` option which is included in the information written to GitHub release tags. The following standard library "release" flows have been updated with hardcoded values (either `1GP` or `2GP`) for this option:
: - `release_beta` (1GP) - `release_production` (1GP) - `release_2gp_beta` (2GP) - `release_2gp_production` (2GP)
(#2546)
- The `update_dependencies` task now supports a `packages_only`
option, which suppresses the installation of unpackaged metadata
dependencies. This option is intended to support building
update-only or idempotent installers. (#2587)
- The `github_automerge_main` task has a new option,
`skip_future_releases`, which can be set to `False` to disable the
default behavior of skipping branches that are numeric (and thus
considered release branches) but not the lowest number. (#2582)
- Added an new option `set_recently_viewed` to the `load_dataset` task
that sets newly inserted data as recently viewed. This changes the
default behavior. By default (if you do not specify the option), the
first 1000 records inserted via the Bulk API will be set as recently
viewed. If fewer than 1000 records are inserted, existing objects of
the same type being inserted will also be set as recently viewed.
(#2578)
- The `update_dependencies` task can now consume 2GP releases in
upstream repositories, provided they're stored in release tags as
generated by CumulusCI. (#2557)
- The `extract_dataset` and `load_datast` tasks now support adding or
removing a namespace from a mapping file to match the target org for
sObjects and not just fields. (#2532)
- The `create_package_version` task can now increment package version
numbers when the package is not in a released state. (#2547)
- Includes [Snowfakery
1.10](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.10)
with upgrades to its Fake data functions.
Issues Closed
- Fixed an error in the `github_automerge_main` task when using a
branch prefix that doesn't contain a slash. (#2582)
- Fixed logic in the `push_sandbox` and `push_all` tasks which was
selecting the wrong package versions. (#2577)
- Improved logging of errors from sfdx while converting sfdx format
metadata to deploy via the Metadata API, so that they are not lost
when CumulusCI is embedded in another system like MetaCI or Metecho.
(#2574)
## 3.33.1 (2021-04-20)
Changes:
- The `create_package_version` task now accepts an `--ancestor-id`
option to specify the 04t Id of the package version that should be
considered the ancestor of a new managed package version. The option
can also be set to `latest_github_release` to look up the 04t Id of
the project's most recent release on GitHub. (#2540)
Issues closed:
- Fixed a regression where the `release_beta` flow would throw an
error if the project has unmanaged github dependencies. (#2566)
- Fixed a regression where the `cci service connect` command could no
longer connect a service without giving it a name. Now a default
name will be assigned. (#2568)
- Fixed a regression when resolving unpackaged dependencies from
GitHub releases. (#2571)
- Fixed a regression with creating a scratch org if the devhub service
was configured but not set as the default. (#2570)
- Improved the formatting of `cumulusci.yml` validation warnings.
(#2567)
## 3.33.0 (2021-04-19)
Critical Changes:
- CumulusCI's dependency management modules have been rewritten. This
grants new capabilities and removes some existing features. (#2456)
- All package installations now perform retries if the package is
not yet available.
- Package installations are also retried on common row locking
errors.
- You can now obtain fine-grained control over how your projects
resolve dependencies. It's much easier to control where your
application uses beta managed packages and second-generation
packages to satisfy dependencies.
- You can now execute 2GP builds that use 2GPs from upstream
feature branches matching your current branch, not just release
branches.
- The `update_dependencies` task no longer supports uninstalling
managed packages in a persistent org as part of the dependency
installation process.
- The `update_dependencies` task no longer supports the
`allow_newer` option, which is always True.
- The install order of `update_dependencies` changes slightly
where multiple levels of upstream dependency have
`unpackaged/pre` metadata. Where previously one package's
`unpackaged/pre` might be installed prior to its own upstream
dependency, `unpackaged/pre` will now always be installed
immediately prior to the repo's package.
- Projects using unmanaged dependencies that reference GitHub
subfolders will see a change in resolution behavior. Previously,
a dependency specified like this:
dependencies:
- github: https://github.com/SalesforceFoundation/NPSP
subfolder: unpackaged/config/trial
would always deploy from the latest commit on the default
branch. Now, this dependency will be resolved to a GitHub commit
just like a dependency without a subfolder, selecting the latest
beta or production release as determined by the chosen
resolution strategy.
- The `project__dependencies` section in `cumulusci.yml` no longer
supports nested dependencies specified like this:
dependencies:
- namespace: "test"
version: "1.0"
dependencies:
- namespace: "parent"
version: "2.2"
All dependencies should be listed in install order.
Changes:
- CumulusCI now supports named services! This means you can configure
multiple services of the same _type_ under different names. If you
run `cci service list` you will note that your existing global
services will have the name `global`, and any project-specific
services will have the name `project_name`. (#2499)
- You must now specify both a service type and a service name when
connecting a new service using `cci service connect`.
- CumulusCI has a new command: `cci service default`. This command
sets the default service for a given type.
- CumulusCI has a new command: `cci service rename`. This command
renames a given service.
- CumulusCI has a new command: `cci service remove`. This command
removes a given service.
- A validator now checks `cumulusci.yml` and shows warnings about
values that are not expected. (#1624)
- Added a friendly error message when a GitHub repository cannot be
found when set as a dependency or cross-project source. (#2535)
- Task option command line arguments can now be specified with either
an underscore or a dash: e.g. `clean_meta_xml` can be specified as
either `--clean_meta_xml` or `--clean-meta-xml` or
`-o clean-meta-xml` (#2504)
- Adjustments to existing tasks:
- The `update_package_xml` task now supports additional metadata
types. (#2549)
- The `push_sandbox` and `push_all` tasks now use the Bulk API to
query for subscriber orgs. (#2338)
- The `push_sandbox` and `push_all` tasks now default to including
all orgs whose status is not Inactive, rather than only orgs
with a status of Active. This means that sandboxes, scratch
orgs, and Developer Edition orgs are included. (#2338)
- The `user_alias` option for the `assign_permission_sets`,
`assign_permission_set_groups`, and
`assign_permission_set_licenses` tasks now accepts a list of
user aliases, and can now create permission assignments for
multiple users with a single task invocation. (#2483)
- The `command` task now sets the `return_values` to a dictionary
that contains the return code of the command that was run.
(#2453)
- Data generation with Snowfakery:
- Updated to [Snowfakery
1.9](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.9)
(#2538)
- Robot Framework:
- The `run task` keyword now includes all task output in the robot
log instead of printing it to stdout. (#2453)
- Documented the use of the options/options section of CumulusCI
for the `robot` task. (#2536)
- Changes for CumulusCI developers:
- Tasks now get access to the `--debug-mode` option and can output
debugging information conditional on it. (#2481)
- `cci org connect` can now connect to orgs running in an internal
build environment with a different port. (#2501, with thanks to
\@force2b)
Issues Closed:
- The `load_custom_settings` task now resolves a relative
`settings_path` correctly when used in a cross-project flow. (#2523)
- Fixed the `min_version` option for the `push_sandbox` and `push_all`
tasks to include the `min_version` and not only versions greater
than it. (#2338)
## 3.32.1 (2021-04-01)
April Fool's! This is the real new release, because there was a
packaging problem with 3.32.0.
## 3.32.0 (2021-04-01)
Changes:
- A new task, `create_network_member_groups`, creates
NetworkMemberGroup records to grant specified Profiles or
Permissions Sets access to an Experience Cloud site (community).
(#2460, thanks \@ClayTomerlin)
- A new preflight check task, `get_existing_sites`, returns a list of
existing Experience Cloud site names in the org. (#2493)
- It is now possible to create a flow which runs the same sub-flow
multiple times, as long as they don't create a self-referential
cycle. (#2494)
- Improvements to support for releasing 2nd-generation (2GP) packages:
- The `github_release` task now includes the package version's
04t id in the message of the tag that is created. (#2485)
- The `promote_package_version` task now defaults to promoting the
package version corresponding to the most recent beta tag in the
repository, if `version_id` is not specified explicitly. (#2485)
- Added a new flow, `release_2gp_beta`, which creates a beta
package version of a 2GP managed package and a corresponding tag
and release in GitHub. (#2509)
- Added a new flow, `release_2gp_production`, which promotes a 2gp
managed package version to released status and creates a
corresponding tag and release in GitHub. (#2510)
- Data generation with Snowfakery:
- Updated to [Snowfakery
1.8.1](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.8)
(#2516)
- Snowfakery can now use "load files" to provide hints about how
objects should be loaded.
- Values for the `bulk_mode`, `api`, and `action` parameters in
mapping files are now case insensitive.
- Robot Framework:
- Added a new keyword, `Input Form Data`, for populating form
fields of many different types. This keyword is considered
experimental but is intended to eventually replace
`Populate Form`. (#2496)
- Added a new keyword, `Locate Element by Label`, for finding form
inputs using their label. (#2496)
- Added a custom locator strategy called `label` which uses
`Locate Element By Label` (e.g. `label:First Name`). (#2496)
- Added two new options to the robot task: `ordering` and
`testlevelsplit`. These only have an effect when combined with
the `processes` option to run tests in parallel.
Issues Closed:
- The `cci org import` command now shows a clearer error message if
you try to import an org that is not a locally created scratch org.
(#2482)
## 3.31.0 (2021-03-18)
Changes:
- It is now possible to pass the `--noancestors` flag to sfdx when
creating a scratch org by setting `noancestors: True` in the scratch
org config in `cumulusci.yml`. Thanks \@lionelarmanet (#2452)
- The `robot_outputdir` return value from the `robot` task is now an
absolute path. (#2442)
- New tasks:
- `get_available_permission_sets`: retrieves the list of available
permission sets from an org. (#2455)
- `promote_2gp_package`: will promote a `Package2Version` to the
"IsReleased" state, making it available for installation in
production orgs. (#2454)
Snowfakery
[1.7](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.7):
- Adds support for Salesforce Person Accounts.
Issues Closed:
- `cci project init` no longer overwrites existing files. If files
already exist, it displays a warning and outputs the rendered file
template. (#1325)
## 3.30.0 (2021-03-04)
Critical changes:
- We are planning to remove functionality in CumulusCI's dependency
management in a future release.
- The `update_dependencies` task will no longer support
uninstalling managed packages in a persistent org as part of the
dependency installation process.
- The `allow_newer` option on `update_dependencies` will be
removed and always be True.
- The `project__dependencies` section in `cumulusci.yml` will no
longer support nested dependencies specified like this :
dependencies:
- namespace: "test"
version: "1.0"
dependencies:
- namespace: "parent"
version: "2.2"
All dependencies should be listed in install order.
We recommend reformatting nested dependencies and discontinuing use
of `allow_newer` and package uninstalls now to prepare for these
future changes.
Changes:
- We released a [new suite of documentation for
CumulusCI](https://cumulusci.readthedocs.io/en/latest/).
- CumulusCI now caches org describe data in a local database to
provide significant performance gains, especially in
`generate_dataset_mapping`.
- The `cci org browser` command now has a `--path` option to open a
specific page and a `--url-only` option to output the login URL
without spawning a browser.
- We improved messaging about errors while loading `cumulusci.yml`.
- CumulusCI now uses Snowfakery 1.6 (see its [release
notes](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.6)).
## 3.29.0 (2021-02-18)
Changes:
- The message shown at the end of running a flow now includes the org
name. ##2390, thanks \@Julian88Tex
- Added new preflight check tasks:
- `get_existing_record_types` checks for existing Record Types.
##2371, thanks \@ClayTomerlin
- `get_assigned_permission_sets` checks the current user's
Permission Set Assignments. ##2386
- The `generate_package_xml` task now supports the Muting Permission
Set metadata type. ##2382
- The `uninstall_packaged_incremental` and `uninstall_packaged` tasks
now support a `dry_run` option, which outputs the destructiveChanges
package manifest to the log instead of executing it. ##2393
- Robot Framework:
- The `Run Task` keyword now uses the correct project config when
running a task from a different source project. ##2391
- The SalesforceLibrary has a new keyword,
`Scroll Element Into View`, which is more reliable on Firefox
than the keyword of the same name in SeleniumLibrary. ##2391
Issues closed:
- Fixed very slow `cci org connect` on Safari. ##2373
- Added a workaround for decode errors that sometimes happen while
processing cci logs on Windows. ##2392
- If there's an error while doing JWT authentication to an org, we
now log the full response from the server. ##2384
- Robot Framework: Improved stability of the
`ObjectManagerPageObject`. ##2391
## 3.28.0 (2021-02-04)
Changes:
- Added a new task, `composite_request`, for calling the Composite
REST Resource. ##2341
- The `create_package_version` task has a new option, `version_base`,
which can be used to increment the package version from a different
base version instead of from the highest existing version of the 2gp
package. The `build_feature_test_package` flow now uses this option
to create a package version with the minor version incremented from
the most recent 1gp release published to github. ##2357
- The `create_package_version` task now supports setting a
post-install script and uninstall script when creating a managed
package version, by setting the `post_install_script` and
`uninstall_script` options. By default, these options will use the
values of `install_class` and `uninstall_class` from the `package`
section of `cumulusci.yml`. ##2366
- Updated to [Snowfakery
1.5](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.5).
- Robot Framework:
- The `Click related list button` keyword has been modified to be
more liberal in the types of DOM elements it will click on.
Prior to this change it only clicked on anchor elements, but now
also works for related list buttons that use an actual button
element. ##2356
- The `Click modal button` keyword now attempts to find the given
button anywhere on the modal rather than only inside a
`force-form-footer` element. ##2356
Issues closed:
- Robot Framework:
- Custom locators can now be used with keywords that expect no
element to be found (such as `Page should not contain`). This
previously resulted in an error. ##2346
- Fixed an error when setting the `tagstatexclude` option for the
`robot` task. ##2365
- Fixed a possible error when running CumulusCI flows embedded in a
multi-threaded context. ##2347
## 3.27.0 (2021-01-21)
Changes:
- Snowfakery 1.4 which includes min, max, round functions. PR ##2335
- The `ensure_record_types` task has a new option, `force_create`,
which will create the Record Type even if other Record Types already
exist on the object. (Thanks to \@bethbrains) PR ##2323
- Allow num_records and num_records_tablename to be omitted when using
the task generate_and_load_from_yaml. PR ##2322
- Added a new Metadata ETL task, add_fields_to_field_set which allows
adding fields to existing field sets. (Thanks to \@bethbrains) PR
##2334
- org_settings now accepts a dict option called settings in addition
to (or instead of) the existing definition_file option. (Thanks to
\@bethbrains) PR ##2337
- New Robot Keywords for Performance Testing: ##2291
> - Set Test Elapsed Time: This keyword captures a computed rather
> than measured elapsed time for performance tests.
> - Start Perf Time, End Perf Time: start a timer and then store
> the result.
> - Set Test Metric: store any test metric, not just elapsed time.
- CumulusCI now reports how long it took for flows to run. ##2249
Issues Closed:
- Fixed an error that could occur while cleaning cache directories.
- Fixed potential bugs in the Push Upgrade tasks.
- CumulusCI displays more user friendly error message when
encountering parsing errors in cumulusci.yml. ##2311
- We fixed an issue causing the extract_dataset task to fail in some
circumstances when both an anchor date and Record Types were used.
##2300
- Handle a possible gack while collecting info about installed
packages ##2299
## 3.26.0 (2021-01-08)
Changes:
- CumulusCI now reports how long it took for flows to run.
- Flows `ci_feature` and `ci_feature_beta_deps` now only run the
`github_automerge_feature` task if the branch begins with the
configured feature branch prefix.
- Running the `deploy` task with the `path` option set to a path that
doesn't exist will log a warning instead of raising an error.
- When the `ci_feature_2gp` and `qa_org_2gp` flows install
dependencies, the latest beta version will be used when available.
- CumulusCI can now resolve dependencies using second-generation
packages (2GPs) for upstream projects. When a
ci-feature-2gp or qa-org-2gp flow runs
on a release branch (starting with `prefix/NNN`, where `prefix` is
the feature branch prefix and `NNN` is an integer), CumulusCI will
look for a matching release branch in each upstream dependency and
use a 2GP package build on that release branch, if present, falling
back to a 1GP beta release if not present.
Issues Closed:
- Fixed the `org_settings` task to handle nested structures in org
settings.
- Fixed a bug where cci task run could fail without a helpful error if
run outside of a cci project folder.
- Fixed an issue that caused CumulusCI to generate invalid
`package.xml` entries for Metadata API-format projects that include
`__mocks__` or `__tests__` LWC directories.
- Fixed the `update_dependencies` task to handle automatic injection
of namespace prefixes when deploying an unpackaged dependency. The
fix for the same issue in CumulusCI 3.25.0 was incomplete.
- Fixed an issue where an unquoted `anchor_date` in bulk data mapping
failed validation.
- CumulusCI now handles an error that can occur while collecting info
about installed packages
- Fixed an issue causing the `extract_dataset` task to fail in some
circumstances when both an anchor date and Record Types were used.
- Fixed an issue where the deprecated syntax for record types was not
working.
## 3.25.0 (2020-12-10)
Changes:
- New tasks:
- `assign_permission_set_groups` assigns Permission Set Groups to
a user if not already assigned.
- `assign_permission_set_licenses` assigns Permission Set Licenses
to a user if not already assigned.
- New preflight checks for use with MetaDeploy install plans:
- `check_enhanced_notes_enabled` checks if Enhanced Notes are
enabled
- `check_my_domain_active` checks if My Domain is active
- The `github_copy_subtree` task has a new option, `renames`, which
allows mapping between local and target path names when publishing
to support renaming a file or directory from the source repository
in the target repository.
- The `ensure_record_types` task has a new option,
`record_type_description`, which can be used to set the description
of the new record type if it is created.
- Robot Framework:
- New keyword `Field value should be`
- New keyword `Modal should show edit error for fields` to check
form field error notifications in Spring '21
- Adjusted `Get field value` and `Select dropdown value` fields to
work in Spring '21
- Command line improvements:
- The various `cci org` commands now accept an org name with the
`--org` option, for better consistency with other commands.
Specifying an org name without `--org` also still works.
- Running `cci org default` without specifying an org name will
now display the current default org.
- Org configs now have properties
`org_config.is_multiple_currencies_enabled` and
`org_config.is_advanced_currency_management_enabled` which can be
used to check if these features are enabled.
- The `MergeBranchOld` task, which was previously deprecated, has now
been removed.
Issues closed:
- Fixed the `update_dependencies` task to handle automatic injection
of namespace prefixes when deploying an unpackaged dependency.
- Fixed the `query` task, which was completely broken.
- Fixed the `connected_app` task to pass the correct username to sfdx.
Thanks \@atrancadoris
- Fixed the display of task options with an underscore in
`cci task info` output.
- Fixed a confusing warning when creating record types using
Snowfakery. (#2093)
- Improved handling of errors while deleting a scratch org.
## 3.24.1 (2020-12-01)
Issues Closed:
- Fixed a regression that prevented running unmanaged flows on
persistent orgs, due to the use of the `include_beta` option while
installing dependencies, which is not allowed for persistent orgs.
We changed the `update_dependencies` task to ignore the option and
log a warning when running against a persistent org, instead of
erroring.
## 3.24.0 (2020-11-30)
Critical Changes:
- The flows `dev_org`, `dev_org_namespaced`, `qa_org`, `ci_feature`,
and `install_beta` now run the `update_dependencies` task with the
`include_beta` option enabled, so dependencies will be installed
using the most recent beta release instead of the most recent final
release. The `beta_dependencies` flow is no longer used and is
considered deprecated.
- The flows `ci_feature_beta_deps` and `dev_org_beta_deps` are now
deprecated and should be replaced by their default equivalents
above.
- The `ci_feature_2gp` flow has been changed to use `config_apextest`
instead of `config_managed` to avoid configuration steps that are
unnecessary for running Apex tests. This means that in order for
`ci_feature_2gp` to work, `config_apextest` must be set up to work
in both managed and unmanaged contexts.
- When connecting GitHub using `cci service connect github`, we now
prompt for a personal access token instead of a password. (GitHub
has removed support for accessing the API using a password as of
November 2020.) If you already had a token stored in the `password`
field, it will be transparently migrated to `token`. If you were
specifying `--password` on the command line when running this
command, you need to switch to `--token` instead.
- Removed the old `cumulusci.tasks.command.SalesforceBrowserTest` task
class which has not been used for some time.
Changes:
- Added a standard `qa_org_2gp` flow, which can be used to set up a QA
org using a 2nd-generation package version that was previously
created using the `build_feature_test_package` flow. This flow makes
use of the `config_qa` flow, which means that `config_qa` must be
set up to work in both managed and unmanaged contexts. This flow is
considered experimental and may change at any time.
- The `batch_apex_wait` task can now wait for Queueable Apex jobs in
addition to batch Apex.
- The `custom_settings_value_wait` task now waits if the expected
Custom Settings record does not yet exist, and does case insensitive
comparison of field names.
- Preflight checks:
- Added a task, `check_sobject_permissions`, to validate sObject
permissions.
- Added a task, `check_advanced_currency_management`, to determine
whether or not Advanced Currency Management is active.
- Robot Framework:
- In the Robot Framework Salesforce resource, the
`Open Test Browser` keyword now accepts an optional `useralias`
argument which can be used to open a browser as a different
user. The user must already have been created or authenticated
using the Salesforce CLI.
- Updated to [Snowfakery
1.3](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.3).
Issues Closed:
- Improved error handling of REST API responses to confirm they are
JSON.
- Fixed error handling in the `load_dataset` task in Windows.
- Fixed a bug where pressing `Ctrl+C` while running `cci org connect`
in Windows did not exit. (#2027)
- Fixed a bug where deploying an LWC component bundle using the
`deploy` task did not include files in subfolders.
- Fixed the `deploy` task so that deploying an empty metadata
directory does not error.
- Fixed a bug where the `namespace_inject` option was not included
when freezing deploy steps for MetaDeploy, causing namespace
injection to not work when running the plan in MetaDeploy.
- Fixed a bug where running the `robot` task as a cross-project task
could not load Robot Framework libraries from the other project.
## 3.23.0 (2020-11-12)
Changes:
- CumulusCI now accepts a normalized task option syntax in the form
of: `--opt-name value`. This can be used in place of the old task
option syntax: `-o opt-name value`.
- Tasks which perform namespace injection can now automatically
determine whether they are running in the context of a managed
installation or a namespaced scratch org. This means that in many
cases it is no longer necessary to explicitly specify options like
`managed`/`unmanaged`/`namespaced`/`namespaced_org`/`namespace_inject`,
or to use a separate flow for namespaced scratch orgs.
- The `deploy_unmanaged` flow now deploys sfdx-formatted metadata
using the Metadata API rather than the sfdx `force:source:push`
command. This avoids an issue where sfdx could show an error about
the pushed components conflicting with other changes that already
happened in the org. It also improves consistency between how
metadata is deployed to a scratch org and how it is deployed to a
packaging org.
- Removed the `namespaced_org` option for the `update_dependencies`
task, which was not functional.
- We added support for including SOQL where-clauses `Salesforce Query`
Robot keyword via the `where` keyword argument.
- The `create_package_version` task can accept a
`static_resource_path` option.
- The FindReplace task now has a `replace_env` option which, if true,
will interpret the `replace` option as the name of an environment
variable whose value should be used for the replacement.
- We added a new command, `cci project doc`, which will document
project-specific tasks to a reStructuredText file.
Issues closed:
- An error that occurred when building a second-generation package
using a cross-project task has been fixed.
- The `github_package_data` task will now work for projects using API
versions prior to 44.0.
- Fixed a bug where namespace injection of the `%%%NAMESPACED_ORG%%%`
token with the `namespaced_org` option enabled did not actually add
the namespace prefix unless the `managed` option was also enabled.
- We fixed an issue that resulted in the `batch_size`
option in a data mapping file being ignored.
## 3.22.0 (2020-10-29)
Changes:
- We added support for using Robot keywords from other projects that
are included as `sources`.
- The `suites` option of the robot task can now take a list of
suite paths. Paths can include a prefix representing a remote
repository as defined by the `sources` configuration option (eg:
`-o suites npsp:robot/Cumulus/tests/api`)
- The robot task has a new `sources` option to work in conjunction
with the global `sources` option to allow the use of keywords
and tests from other repositories.
- When running the `robot` task, the folder containing downloaded
repositories via the `sources` option are added to `PYTHONPATH`
so that robot tests can find library and resource files in those
repositories
- Bulk Data tasks now support adding or removing a namespace from a
mapping file to match the target org.
- We improved how we parse Boolean values in Bulk Data tasks and in
command line options. True can be represented as "yes", "y",
"true", "on", or "1", with any capitalization, and False as
"no", "n", "false", "off", "0". None as a synonym for
False is deprecated.
- We added support for including managed package release details in
automatically generated release notes.
- We added a task, `assign_permission_sets`, to assign Permission Sets
to a user.
- We updated the default API version for new projects to 50.0.
- The `build_feature_test_package` flow now creates a 2GP package
version with the "skip validation" option turned on.
- `github_automerge_main` now only merges to the lowest numbered
release branch when multiple are detected.
Issues closed:
- We fixed an issue with relative imports within parallel Robot test
runs by adding the repo root to PYTHONPATH.
- We fixed an issue with generating `package.xml` manifests for
directories that contain reports in folders that aren't owned by
the project.
- We now handle an exception that may occur while creating merge
conflict PRs during parent-child automerges.
## 3.21.1 (2020-10-19)
Issues closed: - Added a workaround for a slow query error while looking
up installed packages in Winter '21 orgs.
## 3.21.0 (2020-10-15)
Changes:
- The `update_admin_profile` task now accepts the `api_names` option
to target extra Profiles, even when using a custom `package.xml`.
- The `github_automerge_main` task can now be used on source branches
other than the default branch to merge them into branches starting
with the `branch_prefix` option, as long as the source branch does
not also start with `branch_prefix`.
- Added preflight check tasks to validate org settings
(`check_org_settings_value`) and to check that Chatter is enabled
(`check_chatter_enabled`). These are intended for use with
MetaDeploy install plans.
- Updated to [Snowfakery
1.2](https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v1.2).
Issues closed:
- Fixed an issue in the `load_dataset` task which left out
non-Person-Account Contacts if the dataset was extracted using the
REST API.
## 3.20.1 (2020-10-05)
Issues closed:
- Fixed a bug introduced in CumulusCI 3.20.0 in which the
`upload_beta` and `upload_production` tasks could hit a connection
error if uploading the package took over 10 minutes.
- We corrected edge cases in how we processed Boolean options for the
`custom_settings_wait`, `exec_anon`, and `uninstall_post` tasks.
(Thanks to \@davidjray)
## 3.20.0 (2020-09-30)
Critical Changes:
- We've removed the standard flow: `retrieve_scratch`. The
recommended way for retrieving source-tracked changes is to use the
`retrieve_changes` task.
- Changes to automatic merging:
- The `github_master_to_feature` task has been renamed to
`github_automerge_main`. It still merges changes from the
default branch to feature branches. In the case of an orphaned
feature branch (a branch with a name like
`feature/parent__child` where `feature/parent` does not exist as
its own branch), the `github_automerge_main` branch will no
longer merge to the orphaned branch.
- The `github_parent_to_children` task has been renamed to
`github_automerge_feature`. It still merges changes from feature
branches to their children (e.g. `feature/parent` would be
merged to `feature/parent__child`). It is now possible to use
multiple double-underscores to create more deeply nested
children, and the task will only merge to the next level (e.g.
`feature/parent` would merge to `feature/parent__child` which
would merge to `feature/parent__child__grandchild`).
- The `children_only` option for these tasks has been removed. The
strategy for picking which branches to target for merging is now
determined by the `source_branch`.
Tasks, Flows, and Automation:
- `cci flow list` now displays flows in different groups that are
organized by functional area. (This is similar to how
`cci task list` currently works).
- The `insert_record` task can now be used against the Tooling API. We
clarified that this task can accept a dict of values if configured
in `cumulusci.yml`.
- Added support for newer metadata types to the `update_package_xml`
task.
- Previously, large data loads and extracts would use enormous amounts
of memory. Now they should use roughly constant amounts of memory.
- Adjusted tasks: `install_managed` and `update_dependencies` can now
install packages from just a version id (04t).
- Added support for creating 2GP packages (experimental)
- New task: `github_package_data` gets a package version id from a
GitHub commit status. It is intended primarily for use as part
of the `ci_feature_2gp` flow. Implementation details can be
found in the
[features](https://cumulusci.readthedocs.io/en/latest/features.html)
section of the documentation.
- New task: `create_package_version` - Builds a 2gp package
(managed or unlocked) via a Dev Hub org. Includes some automated
handling of dependencies:
- New Flow: `build_feature_test_package` - Runs the
`create_package_version task`, and in the context of MetaCI it
will set a commit status with the package version id.
- New Flow: `ci_feature_2gp` - Retrieves the package version from
the commit status set by `build_feature_test_package`, installs
dependencies and the package itself in a scratch org, and runs
Apex tests. (There is another new task, `github_package_data`,
which is used by this flow.)
User Experience:
- Improved error messaging when encountering errors during bulk data
mapping validation.
Issues Closed:
- Fixed a very rare bug that caused CumulusCI to fail to retrieve
installed packages from an org when running package-related tasks or
evaluating `when` conditional expressions.
- Fixed `UnicodeDecodeError` while opening config files on Windows.
- Fixed a bug in `cumulusci.core.sfdx.sfdx` when capture_output is
False
## 3.19.1 (2020-09-18)
Issues closed:
- Fixed an issue (#2032) where REST API data loads incorrectly handled
Boolean values.
## 3.19.0 (2020-09-17)
Changes:
- Tasks and automation:
- CumulusCI now supports using the REST Collections API in data
load, extract, and delete operations. By default, CumulusCI will
select an API for you based on data volume (\<2000 records uses
the REST API, \>=2000 uses Bulk); a desired API can be
configured via the mapping file.
- Removed the namespace_tokenize option from tasks that deploy
metadata, and removed the namespace_inject option from tasks
that retrieve metadata, because it's unclear when they would be
useful.
- The task create_permission_set allows for creating and assigning
a Permission Set that enables specific User Permissions. (Note:
other types of permissions are not yet supported).
- The task create_bulk_data_permission_set creates a Permission
Set with the Hard Delete and Set Audit Fields permissions for
use with data load operations. The org permission to allow Set
Audit Fields must be turned on.
- CumulusCI's load_dataset and extract_dataset tasks now support
relative dates. To take advantage of relative dates, include the
anchor_date key (with a date in YYYY-MM-DD format) in each
mapping step you wish to relativize. On extract, dates will be
modified to be the same interval from the anchor date as they
are from the current date; on load, dates will be modified to be
the same interval from today's date as they are from their
anchor. Both date and date-time fields are supported.
- Other:
- The oid_as_pk key is no longer supported in bulk data mappings.
(This key was already deprecated). Select object Id mode by
including the Id field in mappings.
Issues closed:
> - Fixed an issue (#2001) that caused CumulusCI to extract invalid
> data sets when using after: steps with autoincrement primary keys.
> - Fixed an issue where the retrieve_changes task did not actually
> retrieve folders.
> - Fixed a bug in the metadeploy-publish task where labels starting
> with "Install " were not extracted for localization.
> - Fixed a bug that prevented using JWT auth with sandboxes if the
> sandbox's instance_url did not include an instance name.
> - Fixed a bug where `cci project init` generated an invalid mapping
> for bulk data tasks.
## 3.18.0 (2020-09-03)
Changes:
- Tasks and automation:
- CumulusCI now tries 10 times (instead of 5) to install managed
package versions, which helps ameliorate timeouts when new
versions are released.
- We added support for CSV files to the `push_list` task.
- We added a `ref` option to `github_copy_subtree` to allow
publishing a git reference (commit hash, branch, or tag).
- Changed the `disable_tdtm_trigger_handlers`
(SetTDTMHandlerStatus) task so that trigger handler state is
remembered in the cache directory instead of `REPO_ROOT`.
- User experience:
- The `cci error info` command now defaults to showing the entire
traceback when it is more than 30 lines.
- Robot Framework:
- The following robot keywords have been updated to work with
Winter '21:
- `Load related list`
- `Click related list button`
- `Click related item link`
- `Click related item popup link`
- `Go to object home`
- `Go to object list`
- `Go to record home`
- `Populate lookup field`
- The keyword `Load related list` has been rewritten to be
slightly more efficient. It also has a new parameter `tries`
which can be used if the target is more than 1000 pixels below
the bottom of the window.
Issues Closed:
- Fixed a bug where `cci error gist` could throw a UnicodeDecodeError
on Windows (fixes ##1977)
- Fixed a bug where `cci org list` could throw a TypeError when run
outside a project directory (fixes ##1998)
- The `metadeploy_publish` task can now update translations for
language codes with more than 2 letters.
- Fixed a bug where the `extract_dataset` task could fail with a
UnicodeEnodeError on Windows.
- `update_dependencies` deduplicates its package install list, making
it possible to handle situations where the same beta package is
reached by two dependency paths.
## 3.17.0 (2020-08-20)
Changes:
- Tasks and automation:
- We added the `upload_user_profile_photo` and
`upload_default_user_profile_photo` tasks, which allow for
setting Users' profile photos from images stored in the
repository. (Thanks to \@spelak-salesforce).
- We added the property `is_person_accounts_enabled` to the
`org_config` object, which is available in `when` clauses.
(Thanks to \@spelak-salesforce).
- Policies and inclusive language:
- We added information about Salesforce's Open Source Community
Code of Conduct and Security policies.
- We updated documentation to more consistently refer to the
"main" branch, reflecting CumulusCI's support for per-project
specification of main branches other than `master`.
- User experience:
- We modified how we handle situations where the default org is
not valid for better user experience.
- We catch a common mistake in entering command-line options
(`-org` instead of `--org`, as well as incorrectly-formatted
flow options) and show a clearer error.
- We now capture and display the `InstanceName` of orgs in
`cci org list`'s output.
- Robot Framework:
- We now cleanly fall back to the latest available API version for
Robot locators if the newest API version does not have an
available locator file. This change helps support Robot testing
on the latest prerelease editions of Salesforce.
- We included some updates to locators for API version 50.0.
- Other:
- We added a new environment variable, `SFDX_SIGNUP_INSTANCE`, and
an `instance` key in org definitions, to specify a preferred
instance routing. NOTE: this functionality requires Dev Hub
permissions that are not Generally Available.
Issues closed:
- Fixed a bug which prevented package install links from getting added
to release notes.
- Fixed a bug (#1914) which caused errors when customizing some Flow
steps with decimal step numbers.
- Fixed a bug making it difficult to troubleshoot issues with
Snowfakery and CumulusCI on Windows.
- Fixed a bug in `update_admin_profile` that resulted in errors when
attempting to manage Record Types across multiple objects.
## 3.16.0 (2020-08-06)
Changes:
- Project initialization:
- When starting a new CumulusCI project, the `cci project init`
command now uses the current git branch as the project's
default branch.
- API version 49.0 is now set as the default for new projects.
- Bulk data tasks:
- Added a task called `delete_data` for deleting all data from
specified objects. This was previously available but required
manually adding it to `cumulusci.yml`
- The `load_dataset`, `extract_dataset`, and `delete_data` tasks
now support automatic namespace injection. When object and field
names are specified without namespaces, but the target org only
has them with a namespace prefix attached, CumulusCI
automatically adds the namespace prefix. This makes it easier
for projects to use a single mapping file for unmanaged orgs,
namespaced scratch org, and managed orgs.
This behavior is on by default, but may be disabled by setting the
`inject_namespaces` option to False. This feature is believed to be
backwards-compatible; however, projects that subclass built-in data
loading classes, or which use data loading tasks in very unusual
ways, might be impacted.
- The `load_dataset` and `extract_dataset` tasks have a new
option, `drop_missing_schema`. When enabled, this option causes
CumulusCI to silently ignore elements in a dataset or mapping
that are not present in the target org. This option is useful
when building datasets that support additional, optional managed
packages or features, which may or may not be installed.
- The `extract_dataset` and `load_dataset` tasks now support
Person Accounts. These will be handled automatically as long as
both Account and Contact are in the mapping file. Additional
fields should be added to the Account mapping rather than
Contact. Thanks \@spelak-salesforce
- The `generate_dataset_mapping` task generates mappings in line
with the latest revisions of load/extract functionality: fields
are specified as a list, the `table` key is omitted, and
namespaces are stripped.
- The `generate_dataset_mapping` has improved logic for resolving
reference cycles between objects. If one of the lookup fields is
nillable, the object with that field will be listed first in the
generated mapping file.
- The `generate_and_load_from_yaml` task has a new option,
`working_directory`, which can be used to keep temporary files
for debugging. The `debug_dir` option has been removed.
- Robot Framework:
- The `robot` task has a new option, `processes`. If the value is
\> 1, tests will be run in parallel in the given number of
processes, using [pabot](https://pabot.org/). Note: It's still
up to the test author to make sure the tests won't conflict
with each other when running in parallel. This feature is
considered experimental.
- Added an `ObjectManager` page object for interacting with the
Object Manager in Setup. Thanks to \@rjanjanam
- [RequestsLibrary](https://github.com/MarketSquare/robotframework-requests)
is now included as a way to test REST APIs from Robot Framework.
- Metadata ETL:
- Added a new task, `set_field_help_text`, which can be used to
update Help Text values on existing fields.
- Added a new task, `update_metadata_first_child_text`, which can
be used to update a single value in existing metadata. Thanks
\@spelak-salesforce
- Added a new task, `assign_compact_layout`, which can update a
compact layout assignment in existing object metadata. Thanks
\@spelak-salesforce
- Added a new task, `github_copy_subtree`, to allow publishing
selected files or folders to another repository after a release.
This allows publishing a subset of your project's code from a
private repository to a public one, for example.
- The `create_community` task has a new option, `skip_existing`. When
True, the task will not error if a community with the specified name
already exists.
- The `release_beta` and `release_production` flows now generate a
section in the release notes on GitHub including package install
links.
- Task options can now use `$project_config` substitutions in any
position, not just at the start of the value.
Issues closed:
- Fixed a bug where changes to global orgs would be saved as
project-specific orgs.
- Fixed a bug where `cumulusci.yml` could fail to parse if certain
options were specified in `cci project init` (#1780)
- The `install_managed` task now recognizes an additional error
message that indicates a package version has not yet finished
propagating, and performs retries appropriately.
- Fixed a bug in the logic to prevent installing beta packages in
non-scratch orgs.
- Fixed a bug where the `list_changes`, `retrieve_changes`, and
`snapshot_changes` tasks could error while trying to reset sfdx
source tracking.
- Fixed a bug where the `push_failure_report` task could be missing
some failed orgs if there were more than 200 errors.
- Fixed a bug where the `github_release_notes` task could list a
change note under a wrong subheading from a different section.
- Fixed freezing of command tasks for MetaDeploy.
Internal changes (these should not affect you unless you're interacting
with CumulusCI at the Python level):
> - Standardized naming of different levels of configuration:
> - `BaseGlobalConfig` is now `UniversalConfig`.
> - `BaseGlobalConfig.config_global_local_path` is now
> `UniversalConfig.config_global_path`
> - `BaseGlobalConfig.config_global_path` is now
> `UniversalConfig.config_universal_path`
> - `BaseProjectConfig.global_config_obj` is now
> `universal_config_obj`
> - `BaseProjectConfig.config_global` is now `config_universal`
> - `BaseProjectConfig.config_global_local` is now `config_global`
> - `EncryptedFileProjectKeychain.config_local_dir` is now
> `global_config_dir`
> - `BaseCumulusCI.global_config_class` is now
> `universal_config_class`
> - `BaseCumulusCI.global_config` is now `universal_config`
> - Added `UniversalConfig.cumulusci_config_dir` as a central way to
> get the path for storing configuration.
> `UniversalConfig.config_local_dir` was removed.
> - OrgConfigs now keep track of which keychain they were loaded from,
> and have a new `save` method which is the preferred
> API for persisting updates to the config.
## 3.15.0 (2020-07-09)
Changes:
- The `run_tests` task now defaults to only logging tests that failed.
Set the `verbose` option to True to see all results including tests
that passed.
- The `update_dependencies` task now supports an `ignore_dependencies`
option, which prevents CumulusCI from processing a specific
dependency (whether direct or transitive). This feature may be
useful in installers for packages that extend other packages if the
installer is not meant to include the base package.
- Improvements to the mapping file for the `extract_dataset` and
`load_dataset` tasks:
- Fields can now be specified as a simple list of Salesforce API
names, instead of a mapping. CumulusCI will infer the database
column names.
- Mappings may omit the `table` key and CumulusCI will use the
object name.
- The tasks will check and show an error if mappings do not use a
consistent object Id mode.
- Mappings can now include junction objects with no additional
fields.
- The `generate_dataset_mapping` task now has an `include` option to
specify additional objects to include in the mapping if they aren't
found by the default heuristics.
- Added additional tasks intended for use as preflight checks for
MetaDeploy install plans:
- `check_sobjects_enabled` returns a set of available SObject
names.
- `check_org_wide_defaults` returns a boolean indicating whether
Organization-Wide Defaults match the specified values.
- The `update_package_xml` task now supports the MessageChannel
metadata type.
- Adjusted the default rules for the `robot_lint` task.
- CumulusCI can be configured to always show Python stack traces in
the case of an error by setting the `show_stacktraces` option to
True in the `cli` section of `~/.cumulusci/cumulusci.yml`.
- The prompt provided by `cci org shell` now has access to the Tooling
API through the keyword `tooling`.
- When using the JWT OAuth2 flow, CumulusCI can be configured to use
alternate Salesforce login URLs by setting the SF_PROD_LOGIN_URL and
SF_SANDBOX_LOGIN_URL environment variables.
Issues closed:
- Fixed a UnicodeDecodeError that could happen while using the
`extract_dataset` task on Windows. (#1838)
- Fixed support for the CustomHelpMenuSection metadata type in the
`update_package_xml` task. (#1832)
- Deleting a scratch org now clears its domain from showing in `cci org list`.
- If you try to use `cci org connect` with a login URL containing
`lightning.force.com`, CumulusCI will explain that you should use
the `.my.salesforce.com` domain instead.
- Fixed an issue with deriving the Lightning domain from the instance
URL for some orgs.
## 3.14.0 (2020-06-18)
Changes:
- Added a generic `dx` task which makes it easy to run Salesforce CLI
commands against orgs in CumulusCI's keychain. Use the `command`
option to specify the sfdx command.
- Tasks which do namespace injection now support the
`%%%NAMESPACE_DOT%%%` injection token, which can be used to support
references to packaged Apex classes and Record Types. The token is
replaced with `ns.` rather than `ns__` (for namespace `ns`).
- Updated to Robot Framework 3.2.1. Robot Framework has a new parser
with a few backwards incompatible changes. For details see the
[release
notes](https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-3.2.rst).
- The `run_tests` task now gracefully handles the
`required_org_code_coverage_percent` option as a string or an
integer.
- CumulusCI now logs a success message when a flow finishes running.
Issues closed:
- Fixed a regression introduced in CumulusCI 3.13.0 where connections
to a scratch org could fail with a ReadTimeout or other connection
error if more than 10 minutes elapsed since a prior task that
interacted with the org. This is similar to the fix from 3.13.2, but
for scratch orgs.
- Show a clearer error message if dependencies are configured in an
unrecognized format.
## 3.13.2 (2020-06-10)
Issues closed:
- Fixed a regression introduced in CumulusCI 3.13.0 where connections
to Salesforce could fail with a ReadTimeout or other connection
error if more than 10 minutes elapsed since a prior task that
interacted with the org.
## 3.13.1 (2020-06-09)
Issues closed:
- Fixed a bug with "after:" steps in the load-dataset
task.
- Fixed a bug with record types in the extract-dataset
task.
## 3.13.0 (2020-06-04)
Changes:
- A new Metadata ETL task, `add_picklist_entries`, safely adds
picklist values to an existing custom field.
- Added the `cci org prune` command to automatically remove all
expired scratch orgs from the CumulusCI keychain.
- Improvements to the `cci org shell` command:
- Better inline help
- New `query` and `describe` functions
- Scratch org creation will now wait up to 120 minutes for the org to
be created to avoid timeouts with more complex org shapes.
- The `generate_data_dictionary` task now has more features for
complex projects. By default, the task will walk through all project
dependencies and include them in the generated data dictionaries.
Other non-dependency projects can be included with the
`additional_dependencies` option. The output format has been
extensively improved.
- The `run_tests` task supports a new option,
`required_org_code_coverage_percent`. If set, the task will fail if
aggregate code coverage in the org is less than the configured
value. Code coverage verification is available only in unmanaged
builds.
- The `install_managed` and `update_dependencies` tasks now accept a
`security_type` option to specify whether the package should be
installed for all users or for admins only.
- `when` expressions can now use the `has_minimum_package_version`
method to check if a package is installed with a sufficient version.
For example:
`when: org_config.has_minimum_package_version("namespace", "1.0")`
- Robot Framework:
- Added a new keyword in the modal page objects,
`Select dropdown value`. This keyword will be available whenever
you use the `Wait for modal` keyword to pull in a modal page
object.
Issues closed:
> - Limited the variables available in global scope for the
> `cci shell` command.
> - Tasks based on `BaseSalesforceApiTask` which use the Bulk API now
> default to using the project's API version rather than 40.0.
> - Bulk data tasks:
> - The `extract_dataset` task no longer converts to snake_case
> when picking a name for lookup columns.
> - Improved error message when trying to use the `load_dataset`
> command with an incorrect record type.
> - Fixed a bug with the `generate_mapping_file` option.
## 3.12.2 (2020-05-07)
Changes:
- Added a task, `set_duplicate_rule_status`, which allows selective
activation and deactivation of Duplicate Rules.
- The `create_community` task now retries multiple times if there's
an error.
- The `generate_data_dictionary` task now supports multi-select
picklist fields and will indicate the related object for lookup
fields.
- The `update_package_xml` task now supports the `NavigationMenu`
metadata type.
Issues closed:
- In the Salesforce library for Robot Framework, fixed locators for
the actions ribbon and app launcher button in Summer '20.
- Fixed the `load_dataset` task so that steps which don't explicitly
specify a `bulk_mode` will inherit the option specified at the task
level.
- Fixed error handling if an exception occurs within one of the `cci error`
commands.
- Fixed error handling if the Metadata API returns a response that is
marked as done but also contains an `errorMessage`.
## 3.12.1 (2020-04-27)
Fixed a problem building the Homebrew formula for installing CumulusCI
3.12.0.
## 3.12.0 (2020-04-27)
Changes:
- We've removed the prompt that users see when trying to use a
scratch org that has expired, and now automatically recreate the
scratch org.
- The `load_dataset` task now automatically avoids creating Bulk API
batches larger than the 10 million character limit.
- Robot Framework:
- When opening an org in the browser, the Salesforce library now
attempts to detect if the org was created using the Classic UI
and automatically switch to Lightning Experience.
- The Salesforce library now has preliminary support for Summer
'20 preview orgs.
- CumulusCI now directs `simple-salesforce` to return results as
normal Python dicts instead of OrderedDicts. This should have
minimal impact since normal dicts are ordered in the versions of
Python that CumulusCI supports, but we mention it for the sake of
completeness.
Issues closed:
- Fixed an issue where non-ASCII output caused an error when trying to
write to the CumulusCI log in Windows. (#1619)
## 3.11.0 (2020-04-17)
Changes:
- CumulusCI now includes
[Snowfakery](https://pypi.org/project/snowfakery/), a tool for
generating fake data. It can be used to generate and load data into
an org via the new `generate_and_load_from_yaml` task.
- Added two new preflight check tasks for use in MetaDeploy:
`get_available_licenses` and
`get_available_permission_set_licenses`. These tasks make available
lists of the License Definition Keys for the org's licenses or
PSLs.
- The `get_installed_packages` task now logs its result.
- Robot Framework: Added two new keywords (`Get Fake Data` and
`Set Faker Locale`) and a global robot variable (`${faker}`) which
can be used to generate fake data using the
[Faker](https://pypi.org/project/Faker/) library.
Issues closed:
- Fixed an error when loading a dependency whose `cumulusci.yml`
contains non-breaking spaces.
- Fixed a PermissionError when running multiple concurrent CumulusCI
commands in Windows. (#1477)
- Show a more helpful error message if a keychain entry can't be
loaded due to a change in the encryption key.
- Fixed the `org_settings` task to use the API version of the org
rather than the API version of the package.
- In the Salesforce Robot Framework library, the `Open App Launcher`
keyword now tries to detect and recover from an occasional situation
where the app launcher fails to load.
## 3.10.0 (2020-04-02)
Changes:
- Added `custom_settings_value_wait` task to wait for a custom setting
to have a particular value.
- The `metadeploy_publish` task now has a `labels_path` option which
specifies a folder to store translations. After publishing a plan,
labels_en.json will be updated with the untranslated labels from the
plan. Before publishing a plan, labels from other languages will be
published to MetaDeploy.
Issues closed:
- Fixed an issue where running subprocesses could hang if too much
output was buffered.
## 3.9.1 (2020-03-25)
Issues closed:
- The `batch_apex_wait` task will now detect aborted and failed jobs
instead of waiting indefinitely.
- Fixed reporting of errors from Robot Framework when it exits with a
return code \> 250.
- Fixed an ImportError that could happen when importing the new
metadata ETL tasks.
- Fixed bugs in how the `set_organization_wide_defaults` and
`update_admin_profile` tasks operated in namespaced scratch orgs.
- Show a more helpful error message if CumulusCI can't find a
project's repository or release on GitHub. (#1281)
- Fixed the message shown for skipped steps in `cci flow info`.
- Fixed a regression which accidentally removed support for the
`bulk_mode` option in bulk data mappings.
## 3.9.0 (2020-03-16)
Critical changes:
- The `update_admin_profile` task can now add field-level permissions
for all packaged objects. This behavior is the default for projects
with `minimum_cumulusci_version` \>= 3.9.0 that are not using the
`package_xml` option. Other projects can opt into it using the
`include_packaged_objects` option.
The Python class used for this task has been renamed to
`ProfileGrantAllAccess` and refactored to use the Metadata ETL
framework. This is a breaking change for custom tasks that
subclassed `UpdateAdminProfile` or `UpdateProfile`.
- Refactored how CumulusCI uses the Bulk API to load, extract, and
delete data sets. These changes should have no functional impact,
but projects that subclass CumulusCI's bulk data tasks should
carefully review the changes.
Changes:
- New projects created using `cci project init` will now get set up
with scratch org settings to:
- Use the Enhanced Profile Editor
- Allow logging in as another user
- _Not_ force relogin after Login-As
- If `cumulusci.yml` contains non-breaking spaces in indentation, they
will be automatically converted to normal spaces.
- Bulk data tasks:
- Added improved validation that mapping files are in the expected
format.
- When using the `ignore_row_errors` option, warnings will be
suppressed after the 10th row with errors.
Issues closed:
- The `github_release` task now validates the `commit` option to make
sure it is in the right format.
- If there is an error from `sfdx` while using the `retrieve_changes`
task, it will now be logged.
## 3.8.0 (2020-02-28)
Changes:
- The `batch_apex_wait` task can now wait for chained batch jobs, i.e.
when one job starts another job of the same class.
- The metadata ETL tasks that were added in cumulusci 3.7.0 have been
refactored to use a new library,
`cumulusci.utils.xml.metadata_tree`, which streamlines building
Salesforce Metadata XML in Python. If you got an early start writing
custom tasks using the metadata ETL task framework, you may need to
adjust them to work with this library instead of lxml.
Issues closed:
- Adjusted the `run_tests` task to avoid an error due to not being
able to access the symbol table for managed Apex classes in Spring
'20. Due to this limitation, CumulusCI now will not attempt to
retry class-level concurrency failures when running Apex unit tests
in a managed package. Such failures will be logged but will not
cause a build failure.
- Corrected a bug in storing preflight check results for MetaDeploy
when multiple tasks have the same path.
## 3.7.0 (2020-02-20)
Changes:
- Added a framework for building tasks that extract, transform, and
load metadata from a Salesforce org. The initial set of tasks
include:
- `add_standard_value_set_entries` to add entries to a
StandardValueSet.
- `add_page_layout_related_lists` to add Related Lists to a Page
Layout.
- `add_permission_set_perms` to add field permissions and Apex
class accesses to a Permission Set.
- `set_organization_wide_defaults` to set the Organization-Wide
Defaults for one or more objects and wait for the operation to
complete.
- Added a new task `insert_record` to insert a single sObject record
via the REST API.
- The `update_admin_profile` task now accepts a `profile_name` option,
which defaults to Admin. This allows the task to be used to update
other Profiles. (The task class has been renamed to UpdateProfile,
but can still be used with the old name.)
- Updated to use Metadata API version 48.0 as the default for new
projects.
- Robot Framework: Improved documentation for the API keywords in the
Salesforce keyword library.
Issues closed:
- Fixed the `cci error info` command. It was failing to load the log
from the previous command.
- Fixed a bug where some error messages were not displayed correctly.
- Adjusted the Salesforce Robot Framework keyword library for better
stability in Chrome 80.
- Fixed a bug where using SFDXOrgTask to run an sfdx command on a
non-scratch org would break with "Must pass a username and/or OAuth
options when creating an AuthInfo instance."
- Fixed a bug where an error while extracting the repository of a
cross-project source could leave behind an incomplete copy of the
codebase which would then be used by future commands.
## 3.6.0 (2020-02-06)
Changes:
- `cci task info` now has Command Syntax section and
improved formatting of option information.
- CumulusCI now displays a more helpful error message when it detects
a network connection issue. (#1460)
- We've added the option `ignore_types` to the
uninstall-packaged-incremental task to allow all
components of the specified metadata type to be ignored without
having to explicitly list each one.
- The FindReplace task now accepts a list of strings for
the `file_pattern` option.
- If the DeleteData task fails to delete some rows, this
is now reported as an error.
- Robot Framework: Added a new variable
`\${SELENIUM_SPEED` that is used to control the speed
at which selenium runs when the `Open Test Browser`
keyword is called.
Issues Closed:
- Fixed an issue where existing scratch orgs could sometimes not be
used in Windows.
- Fixed a regression where [flow info]{.title-ref} and [task
info]{.title-ref} commands could show an error [AttributeError:
'NoneType' object has no attribute 'get_service']{.title-ref}
when trying to load tasks or flows from a cross-project source.
(#1529)
- Fixed an issue where certain HTTP errors while running the bulk data
tasks were not reported.
## 3.5.4 (2020-01-30)
Changes:
- There is a new top level [cci error]{.title-ref} command for
interacting with errors in CumulusCI
- [cci gist]{.title-ref} is now [cci error gist]{.title-ref}
- [cci error info]{.title-ref} displays the last 30 lines of a
stacktrace from the previous [cci]{.title-ref} command run (if
present).
- Changed the prompt users receive when encountering errors in
[cci]{.title-ref}.
Issues Closed:
- Robot Framework: Reverted a change to the
[select_record_type]{.title-ref} keyword in the Salesforce library
to work in both Winter '20 and Spring '20
## 3.5.3 (2020-01-23)
- Added new features for running Python code (in a file or string)
without bringing up an interactive shell. You can now use
[--python]{.title-ref} and [--script]{.title-ref} arguments for
the [cci shell]{.title-ref} and [cci org shell]{.title-ref}
commands.
- Added support for up to two optional parameters in Apex anonymous
via token substitution.
- The [EnsureRecordTypes]{.title-ref} class is now exposed as
ensure-record-types and correctly supports the Case,
Lead, and Solution sObjects (in addition to other standard objects).
- Fixed a bug where the github_parent_pr_notes was attempting to post
comments on issues related to child pull request change notes.
- Fixed various Robot keyword issues that have been reported for
Spring '20.
## 3.5.2 (2020-01-21)
Issues closed:
- Fixed an issue where errors running the [cci gist]{.title-ref}
command prompt the user to use the [cci gist]{.title-ref} command.
- Removed reference to [os.uname()]{.title-ref} so that [cci
gist]{.title-ref} works on Windows.
- Fixed an issue where the dx-pull task causes an
infinite loop to occur on Windows.
## 3.5.1 (2020-01-15)
Issues closed:
- Fixed an issue that was preventing newlines in output.
- Don't show the prompt to create a gist if the user aborts the
process.
- Avoid errors that can happen when trying to store the CumulusCI
encryption key in the system keychain using Python's keyring
library, which can fail on some systems such as CI systems:
- We fixed a regression that caused CumulusCI to try to load the
keychain even for commands where it's not used.
- We fixed a bug that caused CumulusCI to try to load the keychain
key even when using an unencrypted keychain such as the
EnvironmentProjectKeychain.
- Adjusted some keywords in the Salesforce library for Robot Framework
to handle changes in the Spring '20 release.
## 3.5.0 (2020-01-15)
Changes:
- The `load_dataset` task now accepts a `bulk_mode` option which can
be set to `Serial` to load batches serially instead of in parallel.
- CumulusCI now stores the logs from the last five executions under
`~/.cumulusci/logs`
- CumulusCI has a new top-level command: `cci gist`. This command
creates a secret GitHub gist which includes: The user's current
CumulusCI version, current Python version, path to python binary,
sysname (e.g. Darwin), machine (e.g. x86_64), and the most recent
CumulusCI logfile (`~/.cumulusci/logs/cci.log`). The command outputs
a link to the created gist and opens a browser tab with the new
GitHub gist. This can be helpful for sharing information regarding
errors and issues encountered when working with cci. This feature
uses a users GitHub access token for creation of gists. If your
access token does not have the 'gist (Create gists)' scope this
command will result in a 404 error. For more info see:
- Changed `UpdateAdminProfile` so that it only deploys the modified
Admin profile. While it is necessary to retrieve profiles along
their associated metadata objects, we don't need to do that for
deployments.
- Added options to the deploy task: `check_only`,
`test_level`, and `specified_tests`. Run `cci task info deploy` for
details. (#1066)
## 3.4.0 (2020-01-09)
Changes:
- Added `activate_flow` task which can be used to activate Flows and
Process Builder processes.
- Added two tasks, `disable_tdtm_trigger_handlers` and
`restore_tdtm_trigger_handlers`, which can be used to disable
trigger handlers for the table-driven trigger management feature of
NPSP and EDA.
- In the `load_dataset` task, added a way to avoid resetting the
Salesforce Id mapping tables by setting the `reset_oids` option to
False. This can be useful when running the task multiple times with
the same org.
- Added support for a few new metadata types from API versions 47 and
48 in the `update_package_xml` task.
- Added a way for Robot Framework libraries to register custom
locators for use by the selenium library.
Issues closed:
- Fixed a bug with freezing the `load_data` task for MetaDeploy where
it would use an invalid option for `database_url`.
- Fixed a bug in the `github_release_notes` task when processing a
pull request with no description. (#1444)
- Fixed inaccurate instructions shown at the end of
`cci project init`.
## 3.3.0 (2019-12-27)
Breaking changes:
- Removed tasks which are no longer in use: `mrbelvedere_publish`,
`generate_apex_docs`, and `commit_apex_docs`.
Changes:
- Updated Robot Framework Salesforce library to support the Spring
'20 release.
- Added `remove_metadata_xml_elements` task which can be used to
remove specified XML elements from metadata files.
- Updated references to the NPSP repository to use its new name
instead of Cumulus.
Issues closed:
- Fixed the error message shown when a task config has a bad
`class_path`.
- Fixed a warning when running the command task in Python 3.8.
- When the CumulusCI Robot Framework library calls Salesforce APIs, it
will now automatically retry when it is safe to do so. It will also
avoid reusing old connections that might have been closed.
- Fixed the `-o debug True` option for the `robot` task.
## 3.2.0 (2019-12-11)
Breaking changes:
- We upgraded the SeleniumLibrary for Robot Framework from version
3.3.1 to version 4.1.0. This includes the removal of some deprecated
keywords. See the [SeleniumLibrary
releases](https://github.com/robotframework/SeleniumLibrary/releases)
for links to detailed release notes.
Changes:
- The `Persistent Orgs` table shown by `cci org list` has been renamed
to `Connected Orgs` since scratch orgs will be shown here if they
were connected using `cci org connect` instead of created via the
Salesforce CLI. This table now shows the org's expiration date, if
known.
- Improvements to the `retrieve_changes` task:
- The task now retrieves only the components that actually
changed, not all components listed in `package.xml` in the
target directory.
- Changes can now be retrieved into folders in DX source format.
The target directory defaults to `src` if the project is using
`mdapi` format or the default entry in `packageDirectories` in
`sfdx-project.json` if the project is using `sfdx` format.
(Namespace tokenization is not supported in DX format, since
there isn't currently a way to deploy DX format source
including namespace tokens.)
- Added a task, `load_custom_settings`, to upload Custom Settings
defined in YAML into a target org. See
for more info.
Issues closed:
- Fixed an issue with how the package upload task logs Apex test
failures to make sure they show up in MetaCI.
- Fixed `KeyError: createdDate` error when trying to get scratch org
info.
- A rare issue where CumulusCI could fail to load the symbol table for
a failed Apex test class is now caught and reported.
- CumulusCI now displays the underlying error if it encounters a
problem with storing its encryption key in the system keychain.
## 3.1.2 (2019-11-20)
Breaking changes:
- We changed the default path for the mapping file created by the
`generate_dataset_mapping` task to `datasets/mapping.yml` so that it
matches the defaults for `extract_dataset` and `load_dataset`
- We changed the `extract_dataset` and `load_dataset` tasks to default
to storing data in an SQL file, `datasets/sample.sql`, instead of a
binary SQLite database file.
Changes:
- `run_tests` can now detect and optionally retry two classes of
concurrency issues with Apex unit tests. `run_tests` should always
report an accurate total of test methods run, in parallel or serial
mode.
- Added the task `generate_data_dictionary`. This task indexes the
fields and objects created in each GitHub release for the project
and generates a data dictionary in CSV format.
- Added a `devhub` service. This can be used to switch a project to a
non-default sfdx Dev Hub using
`cci service connect devhub --project`
- Added a predefined `qa` scratch org. It uses the same scratch org
definition file as the `dev` org, but makes it easier to spin up a
second org for QA purposes without needing to first create it using
`cci org scratch`.
- The `database_url` option for the `extract_dataset` and
`load_dataset` tasks is no longer required. Either `database_url` or
`sql_path` must be specified. If both are specified, the `sql_path`
will be ignored.
- Developers can now directly execute CumulusCI from the Python
command line using `python -m cumulusci` or
`python cumulusci/__main__.py`
Issues closed:
- A problem with how `run_tests` performed Apex test retries when
`retry_always` is set to True has been corrected.
## 3.1.1 (2019-11-13)
New features:
- After connecting an org with `cci org connect`, the browser now
shows the message "Congratulations! Your authentication
succeeded." instead of "OK"
- External GitHub sources can now specify `release: latest`,
`release: latest_beta`, or `release: previous` instead of a commit,
branch, or tag.
- The `execute_anon` task has been revised to detect when a gack
occurred during execution.
Issues closed:
- When importing a scratch org from sfdx using `cci org import`, the
org's `days` is now set correctly from the org's actual expiration
date. (#1101)
- The package API version from `cumulusci.yml` is now validated to
make sure it's in the "XX.0" format expected by the API. (#1134)
- Fixed an error deploying new setting objects using the
`org_settings` task in Winter '20.
- Fixed a bug in processing preflight check tasks for MetaDeploy.
- Fixed path handling in the `update_admin_profile` task when run in a
cross-project flow.
## 3.1.0 (2019-11-01)
Breaking changes:
- The `metadeploy_publish` task now requires setting `-o publish True`
in order to automatically set the Version's is_listed flag to True.
(This is backwards incompatible in order to provide a safer
default.)
New features:
- Python 3.8 is now officially supported.
- Flows can now include tasks or flows from a different project. See
[Using Tasks and Flows from a Different
Project](https://cumulusci.readthedocs.io/en/latest/features.html)
for details.
- In the `metadeploy_publish` task it is now possible to specify a
commit hash with `-o commit [sha]`, instead of a tag. This is useful
while MetaDeploy plans are in development.
- Bulk data:
- Added support for mapping Record Types between orgs (by
Developer Name) during bulk data extract and load.
- Added support for Record Type mapping in the
`generate_dataset_mapping` task.
- Added [new
documentation](https://cumulusci.readthedocs.io/en/latest/bulk_data.html)
for bulk data tasks.
- Robot Framework:
- The sample `create_contact.robot` test that is created when
initializing a new project with `cci project init` now makes use
of page objects.
- The page objects library has two new keywords, `wait for modal`
and `wait for page object`, which wait for a new page object to
appear.
- `cumulusci.robotframework.utils` now has a decorator named
`capture_screenshot_on_error` which can be used to automatically
capture a screenshot when a keyword fails.
- Prior to this change, `Go to page Detail Contact` required you
to use a keyword argument for the object id (eg:
`Go to page Detail Contact object_id=${object_id}`). You can
now specify the object id as a positional parameter (eg:
`Go to page Detail Contact ${object_id}`).
- `OrgConfig` objects now have a `latest_api_version` property which
can be used to check what Salesforce API version is available.
Issues closed:
- Updated the scratch org definition files generated by
`cci project init` to the new recommended format for org settings.
Thanks to \@umeditor for the fix.
- The `create_unmanaged_ee_src` task (part of the `unmanaged_ee` flow)
has been revised to remove the Protected setting on Custom Objects,
to ensure that projects using this setting can be deployed to an
Enterprise Edition org.
- The Salesforce REST API client used by many tasks will now
automatically retry requests on certain connection and HTTP errors.
- Fixed an issue where posts to the Metadata API could reuse an
existing connection and get a connection reset error if Salesforce
had closed the connection.
- Disabled use of PyOpenSSL by the Python requests library, since it
is no longer needed in the versions of Python we support.
## 3.0.2 (2019-10-17)
Issues closed:
- Fixed a bug in deploying email templates and dashboards that was
introduced in 3.0.1.
- Removed broken `config_qa` flow from the `cci project init`
template.
## 3.0.1 (2019-10-16)
New features:
- Added support for new metadata types when generating `package.xml`
from a directory of metadata using the `update_package_xml` task.
- The `ci_feature` flow now supports generating change notes for a
parent feature branch's pull request from the notes on child pull
requests. The parent pull request description will be overwritten
with the new notes after a child branch is merged to the parent if
the parent pull request has a special label, `Build Change Notes`.
- When running Apex tests with the `run_tasks` task, if there is a
single remaining class being run, its name will be logged.
- Apex test failures that happen while uploading a package are now
logged.
- In the `robot_libdoc` task, wildcards can now be used in the `path`
option.
- Added an `org_settings` task which can deploy scratch org settings
from a scratch org definition file.
Issues closed:
- Added a workaround for an issue where refreshing the access token
for a sandbox or scratch org could fail if the user's credentials
were new and not fully propagated.
## 3.0.0 (2019-09-30)
Breaking change:
- CumulusCI 3.0.0 removes support for Python 2 (which will reach end
of life at the end of 2019). If you're still running Python 2 you
can use an older version of CumulusCI, but we recommend upgrading to
Python 3. See our [installation
instructions](https://cumulusci.readthedocs.io/en/latest/install.html)
for your platform.
## 2.5.9 (2019-09-26)
New features:
- Added a Domain column to the list of scratch orgs in `cci org list`.
(thanks \@bethbrains)
- Tasks related to Salesforce Communities (thanks \@MatthewBlanski)
: - New `list_community_templates` task - New `list_communities` task - New `publish_community` task - The `create_community` task can now be used to create a
community with no URL prefix, as long as one does not
already exist.
- Robot Framework:
: -
Added keywords for generating a collection of sObjects according to a template:
: - `Generate Test Data`
- `Salesforce Collection Insert`
- `Salesforce Collection Update`
-
Changes to Page Objects:
: - More than one page object can be loaded at once.
Once loaded, the keywords of a page object remain
visible in the suite. Robot will give priority to
keywords in the reverse order in which they were
imported.
- There is a new keyword, `Log Current Page Object`,
which can be useful to see information about the
most recently loaded page object.
- There is a new keyword, `Get Page Object`, which
will return the robot library for a given page
object. This can be used in other keywords to access
keywords from another page object if necessary.
- The `Go To Page` keyword will now automatically load
the page object for the given page.
- Added a basic debugger for Robot tests. It can be enabled
using the `-o debug True` option to the robot task.
- Added support for deploying new metadata types
`ProfilePasswordPolicy` and `ProfileSessionSetting`.
Issues closed:
- Fixed a bug where the `batch_apex_wait` task would sometimes fail to
conclude that the batch was complete.
- Fixed a bug in rendering tables in Python 2.
## 2.5.8 (2019-09-13)
New features:
- `LoadData` now supports the key `action: update` to perform a Bulk
API update job
- `LoadData` now supports an `after: ` on a lookup entry to
defer updating that lookup until a dependent sObject step is
completed.
- `GenerateMapping` now handles self-lookups and reference cycles by
generating `after:` markers wherever needed.
Issues closed:
- Patch selenium to convert `executeScript` to `executeAsyncScript`.
This is a workaround for the `executeScript` issue in chromedriver 77.
- A small issue in `QueryData` affecting mappings using
`oid_as_pk: False` has been fixed.
## 2.5.7 (2019-09-03)
Breaking changes:
- The `retries`, `retry_interval`, and `retry_interval_add` options
have been removed from the `run_tests` task. These were misleading
as they did not actually retry failing tests.
New features:
- The `run_tests` task now supports a `retry_failures` parameter. This
is a list of regular expressions to match against each unit test
failure's message and stack trace; if all failing tests match, the
failing tests will be retried serially. Set `retry_always` to True
to trigger this behavior when any failure matches.
- There is now a default CumulusCI global connected app that can be
used to connect to persistent orgs (assuming you know the
credentials) without creating a new connected app. It's still
possible to configure a custom connected app using
`cci service connect connected_app` if more control over the
connected app settings is needed.
- When CumulusCI is being run in a non-interactive context it can now
obtain an access token for a persistent org using a JWT instead of a
refresh token. This approach is used if the SFDX_CLIENT_ID and
SFDX_HUB_KEY environment variables are set. This makes it easier to
manage persistent org connections in the context of a hosted service
because it's possible to replace the connected app's certificate
without needing to obtain new refresh tokens for each org.
Issues closed:
- Fixed a bug where showing the summary of flow steps would break with
sub-steps in MetaDeploy.
- Fixed a bug in the caching of preflight task results in MetaDeploy.
## 2.5.6 (2019-08-15)
New features:
- We've changed how the output of some commands are displayed in
tables. For users that prefer simpler style tables we've added a
`--plain` option to approximate the previous behavior. To
permanently set this option, add this in
`~/.cumulusci/cumulusci.yml`:
cli:
plain_output: True
- Added additional info to the `cci version` command, including the
Python version, an upgrade check, and a warning on Python 2.
- Improved the summary of flow steps that is shown at the start of
running a flow.
- The `github_release_notes` task now has an `include_empty` option to
include links to pull requests that have no release notes. This is
enabled by default when this task is called as part of the
`release_beta` flow.
- Robot Framework:
- Added locators file to support the Winter '20 release of
Salesforce.
- New `robot_lint` task to check for common problems in Robot
Framework test suites.
- The `Open Test Browser` keyword will now log details about the
browser.
- Added a new keyword to the CumulusCI library,
`Get Community Info`. It can be used to get information about a
Community by name via the Salesforce API.
Issues closed:
- Added workarounds for some intermittent 401 errors when
authenticating to the GitHub API as a GitHub App.
- `cci org info` shouldn't show traceback if the org isn't found
(#1023)
## 2.5.5 (2019-07-31)
New features:
- Add the `cci org shell` command, which opens a Python shell
pre-populated with a simple_salesforce session on the selected org
(as `sf`).
- The `cci flow info` command now shows nested subflows.
- Added the `create_community` task allowing for API-based Community
creation.
- Added the `generate_dataset_mapping` task to generate a Bulk Data
mapping file for a package.
- CumulusCI can now authenticate for GitHub API calls as either a user
or an app. The latter is for use when CumulusCI is used as part of a
hosted service.
- The `OrgConfig` object now provides access to the Organization
SObject data via the `organization_sobject` attribute.
Issues closed:
- The `install_regression` flow now upgrades to the latest beta from
the most recent final release instead of from the previous final
release.
- Made sure that an `errorMessage` returned from a metadata API deploy
will be reported.
- The `load_dataset` task will now stop with an exception if any
records fail during the load operation.
## 2.5.4 (2019-07-03)
- Updated the default API version for new projects to 46.0
- Fixed a bug in reporting scratch org creation errors encountered
while running a flow.
- Fixed the `snapshot_changes` and `list_changes` tasks to avoid
breaking when the last revision number of a component is null.
## 2.5.3 (2019-06-24)
Breaking changes:
- Added two new options to the UpdateDependencies task:
- `allow_newer`: If the org already has a newer release, use it.
Defaults to True.
- `allow_uninstalls`: Allow uninstalling a beta release or newer
final release if needed in order to install the requested
version. Defaults to False.
These defaults are a change from prior behavior since uninstalling
packages is not commonly needed when working with scratch orgs, and
it is potentially destructive.
New features:
- Added support for defining and evaluating preflight checks for
MetaDeploy plans.
- The tasks for bulk data extract and load are now configured by
default as `extract_data` and `load_data`.
- Updated the project template created by `cci project init`:
- Added `.gitignore`, `README.md`, and a template for GitHub pull
requests
- Added an option to store metadata in DX source format
- Added a sample `mapping.yml` for the bulk data tasks
- Specify the currently installed CumulusCI version as the
project's `minimum_cumulusci_version`
- Check to make sure the project name only contains supported
characters
- The `robot_libdoc` task can now generate documentation for Robot
Framework page objects.
Issues fixed:
- Colors in terminal output are now displayed correctly in Windows.
(#813)
- `cci` no longer prints tracebacks when a flow or task is not found.
Additionally, it will suggest a name if a close enough match can be
found. (#960)
- Fixed UnicodeDecodeError when reading output from subprocesses if
the console encoding is different from Python's preferred file
encoding.
- Fixes related to source tracking:
- Track the max revision retrieved for each component instead of
the overall max revision. This way components can be retrieved
in stages into different paths.
- If `snapshot_changes` doesn't find any changes, wait 5 seconds
and try again. There can be a delay after a deployment before
source tracking is updated.
## 2.5.2 (2019-06-10)
Issues fixed:
- When generating package.xml, translate `___NAMESPACE___` tokens in
filenames into `%%%NAMESPACE%%%` tokens in package.xml (#1104).
- Avoid extraneous output when `--json` output was requested (#1103).
- Display OS notification when a task or flow completes even if it
failed.
- Robot Framework: Added logic to retry the initial page load if it is
not loading successfully.
- Internal API change: Errors while processing a response from the
Metadata API are now raised as MetadataParseError.
## 2.5.1 (2019-05-31)
Issues fixed:
- Fixed `cci service connect` when run outside of a directory
containing a CumulusCI project.
## 2.5.0 (2019-05-25)
Breaking changes:
- We reorganized the flows for setting up a package for regression
testing for better symmetry with other flows. If you were running
the `install_regression` flow before, you now probably want
`regression_org`.
Details: The `install_regression` flow now installs the package
_without_ configuring it. There is a new `config_regression`
flow to configure the package (it defaults to calling
`config_managed`) and a `regression_org` flow that includes both
`install_regression` and `config_regression`.
New features:
- CumulusCI now has experimental support for deploying projects in [DX
source
format](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_source_file_format.htm).
To enable this, set `source_format: sfdx` in the project section of
`cumulusci.yml`. CumulusCI will deploy DX-format projects to scratch
orgs using `sfdx force:source:push` and to other orgs using the
Metadata API (by converting to metadata source format in a temporary
directory).
- Setting a default org in CumulusCI (using `cci org default` or the
`--default` flag when creating a scratch org) will now also update
the sfdx `defaultusername`. (#868)
- When connecting to GitHub using `cci service connect github`,
CumulusCI will now check to make sure the credentials are valid
before saving them.
- Robot Framework:
- Added a framework for creating "page object" classes to
contain keywords related to a particular page or component.
- The `robot` task now takes a `name` option to control the name
of the robot suite in output.
- Updates to the keyword `Open Test Browser`:
- It allows you to open more than one browser in a single test
case. (#1068)
- It sets the default size for the browser window to
1280x1024.
- Added a new keyword argument `size` to override the default
size.
- Added a new keyword argument `alias` to let you assign an
alias to multiple browser windows.
Issues fixed:
- Robot Framework: Fixed a bug where the `Delete Session Records`
keyword would skip deleting some records. (#973)
- If Salesforce returns an error response while refreshing an OAuth
token, CumulusCI will now show the response instead of just the HTTP
status code.
- Fixed a bug in reporting errors from the Metadata API if the
response contains `componentFailures` with no `problem` or
`problemType`.
## 2.4.4 (2019-05-09)
New features:
- Added tasks `list_changes` and `retrieve_changes` which interact
with source tracking in scratch orgs to handle retrieving changed
metadata as Metadata API format source.
- Added task `EnsureRecordTypes` to generate a Record Type and
optional Business Process for a specific sObject and deploy the
metadata, if the object does not already have Record Types.
- The `update_admin_profile` task now uses Python string formatting on
the `package.xml` file used for retrieve. This allows injection of
namespace prefixes using `{managed}` and `{namespaced_org}`.
Issues fixed:
- If CumulusCI gets a connection error while trying to call the
Salesforce Metadata API, it will now retry several times before
giving up.
- The GitHub release notes parser now recognizes Issues Closed if they
are linked in Markdown format.
- Robot Framework: Fixed a locator used by the
`Select App Launcher App` keyword to work in Summer '19.
- The `cci project init` command now uses an updated repository URL
when extending EDA.
## 2.4.3 (2019-04-26)
- Allow configuration of the email address assigned to scratch org
users, with the order of priority being (1) any `adminEmail` key in
the scratch org definition; (2) the `email_address` property on the
scratch org configuration in `cumulusci.yml`; (3) the `user.email`
configuration property in Git.
- CumulusCI can now handle building static resource bundles
(`*.resource`) while deploying using the Metadata API. To use this
option, specify the `static_resource_path` option for the deploy
task. Any subdirectory in this path will be turned into a resource
file and added to the package during deployment. There must be a
corresponding `*.resource-meta.xml` file for each static resource
bundle.
- Bulk data tasks: Fixed a bug that added extra underscores to field
names when processing lookups.
- Robot Framework: The Salesforce library now has the ability to
switch between different sets of locators based on the Salesforce
version, and thanks to it we've fixed the robot so it can click on
modal buttons in the Summer '19 release.
- The `cci project init` command now generates projects with a
different preferred structure for Robot Framework tests and
resources, with everything inside the `robot` directory. Existing
projects with tests in the `tests` directory should continue to
work.
## 2.4.2 (2019-04-22)
- The `purgeOnDelete` flag for the `deploy` task will now
automatically be set to false when deploying metadata to production
orgs (previously deployment would fail on production orgs if this
flag was true).
- The installation documentation now recommends using `pipx` to
install CumulusCI on Windows, so that you don't have to set up a
virtualenv manually.
## 2.4.1 (2019-04-09)
Changes:
- Updated the default Salesforce Metadata API version to 45.0
- The scratch org definition files generated by `cci project init` now
use `orgPreferenceSettings` instead of the deprecated
`orgPreferences`.
- The `metadeploy_publish` task now defaults to describing tasks based
on `Deploy` as "metadata" steps instead of "other".
Issues Fixed:
- Fixed a couple problems with generating passwords for new scratch
orgs:
- A project's predefined scratch org configs now default to
`set_password: True` (which was already the case for orgs
created explicitly using cci org scratch).
- A scratch org config's `set_password` flag is now retained when
recreating an expired org. (Fixes ##670)
- Fixed the logic for finding the most recent GitHub release so that
it now only considers tags that start with the project's git
`prefix_release`.
- Fixed the `install_prod_no_config` flow. The `deploy_post` task was
not injecting namespace tokens correctly.
- Fixed the `connected_app` task to work with version 7 of the
sfdx CLI. (Fixes ##1013)
- Robot Framework: Fixed the `Populate Field` keyword to work around
intermittent problems clearing existing field values.
## 2.4.0 (2019-03-18)
Critical changes:
- If you are publishing installation plans to MetaDeploy, there have
been some significant changes:
> - Plan options are now read from a new `plans` section of
> `cumulusci.yml` instead of from task options. This means that
> a single run of the task can now handle publishing multiple
> plans, and there is now a generic `metadeploy_publish` task
> which can be used instead of setting up different tasks for
> each project.
> - Plan steps are now defined inline in the plan configuration
> rather than by naming a flow. This makes it easier to
> configure a plan that is like an existing flow with one or two
> adjustments.
> - There is now a way to customize MetaDeploy step settings such
> as `name` and `is_required` on a step-by-step basis, using
> `ui_options` in the plan config.
> - The task will now find or create a `PlanTemplate` as
> necessary, matching existing PlanTemplates on the product and
> plan name. This means the plan config no longer needs to
> reference a plan template by id, which makes it easier to
> publish to multiple instances of MetaDeploy.
- The `install_upgrade` flow was renamed to `install_regression` to
better reflect the use case it is focused on. There are also a few
updates to what it does:
> - It will now install the latest beta release of managed
> packages instead of the latest final release.
> - It now runs the `config_managed` flow after upgrading the
> managed package, so that it will work if this flow has
> references to newly added components.
Changes:
- Added support for deploying Lightning Web Components.
- Fixed the bulk data load task to handle null values in a datetime
column.
- The ci-master flow now explicitly avoids trying to
install beta releases of dependencies (since it's meant for use
with non-scratch orgs and we block installing betas there since they
can't be upgraded).
## 2.3.4 (2019-03-06)
- Added a new flow, `install_upgrade`, which can be used for testing
package upgrades. It installs and configures the _previous_
release of the package, then installs the latest release.
- Fixed an error when using `cci org info --json` (fixes ##1013).
## 2.3.3 (2019-02-28)
- Fixed a bug where flow options specified on the command line were
not passed to tasks correctly.
- `cci service connect` now shows a more helpful error message if you
call it with a service name that CumulusCI doesn't know about.
Fixes ##752.
- Deleted scratch orgs will no longer show the number of days since
they were created in `cci org list`. Thanks to \@21aslade for the
fix.
- Updates to the MetaDeploy publish task:
- It is now possible to publish a new plan for an existing
version.
- It is now possible to specify the AllowedList to which a plan is
visible.
- Updates to Robot Framework support:
- Fixed a bug in the `robot` task: it now accepts an option called
`test` rather than `tests`, since the latter was ignored by
Robot Framework.
- Fixed some stability problems with the `Populate Field` keyword.
- The `robot_libdoc` task has been replaced with a new task of the
same name that can generate a single HTML document for multiple
keyword files by passing a comma-separated list of files to the
`path` option.
## 2.3.2 (2019-02-19)
- Mapping enhancements for bulk `QueryData` and `LoadData` tasks
- The mapping yaml file no longer requires using `Id: sf_id` as a
field mapping. If not provided, `QueryData` and `LoadData` will
use local database ids instead of Saleforce OIDs for storing
lookup relationships. Previous mappings which specify the
`Id: sf_id` mapping will continue to work as before using the
Salesforce OID as the mapping value.
- The mapping yaml file's `lookups:` section now handles defaults
to allow simpler lookup mappings. The only key required is now
`table`. If the `key_field` is provided it will be used.
- The `sql_path` option on `QueryData` can be used to provide the file
path where a SQL script should be written. If this option is used, a
sqlite in-memory database is used and discarded. This is useful for
storing data sets in a Github repository and allowing diffs of the
dataset to be visible when reviewing Pull Requests
- When using this option, it is best to make sure your mapping
yaml file does not provide a field mapping for the `Id` field.
This will help avoid merge conflicts if querying data from
different orgs such as scratch orgs.
- The [sql_path]{.title-ref} option on `LoadData` can be used to
provide the file path where a SQL script file should be read and
used to load an in-memory sqlite database for the load operation.
## 2.3.1 (2019-02-15)
- Fixed a bug that caused the `cci` command to check for a newer
version on every run, rather than occasionally. Also we now detect
whether CumulusCI was installed using Homebrew and recommend an
upgrade command accordingly.
- CumulusCI now automatically generates its own keychain key and
stores it in the system keychain (using the Python
[keyring]{.title-ref} library). This means that it is no longer
necessary to specify a CUMULUSCI_KEY as an environment variable.
(However, the environment variable will still be preferred if it is
there, and it will be migrated to the system keychain.)
- New task `connected_app` makes it easier to deploy and configure the
Connected App needed for CumulusCI's keychain to work with
persistent orgs. The connected app is deployed using `sfdx` to an
org in the `sfdx` keychain and defaults to the
`defaultdevhubusername`.
- The `robot` task gives a more helpful error message if you forget to
specify an org.
- Updates to the task for publishing to MetaDeploy:
- Dependency installation steps are now named using the package
name and version.
- The task options have been revised to match changes in the
MetaDeploy API. An optional `plan_template_id` is now accepted.
`preflight_message` is now named `preflight_message_additional`
and is optional. `post_install_message` is now named
`post_install_message_additional` and is optional.
## 2.3.0 (2019-02-04)
Changes:
- When installing a managed package dependency, pre & post metadata
bundles are now fetched from the git commit corresponding to the
most recent release of the managed package, instead of master.
- Improvements to the task for publishing a release to MetaDeploy:
- It can now publish a tag even if it's a different commit than
what is currently checked out in the working directory.
- It now pins managed deployments of metadata bundles to the git
commit corresponding to the most recent release of the managed
package.
Issues Closed:
- ##962: `cumulusci.utils.findReplace` uses wrong file encoding in
Python 3
- ##967: Allow `cci service` commands to be run from outside a project
repository
## 2.3.0b1 (2019-01-28)
Breaking Changes:
- We refactored the code for running flows. The full list of steps to
run is now calculated from nested flow configuration when the flow
is initialized instead of during runtime. Your existing flows should
continue to run as before, but if you're interacting with CumulusCI
at the Python API level, you'll need to use the `FlowCoordinator`
instead of `BaseFlow`.
- Tasks are now expected to have no side effects when they are
instantiated. If tasks need to set up resources, do that in
`_init_task` instead of `__init__` or `_init_options` to make sure
it doesn't happen until the task is actually being run.
Changes:
- There is now a `dev_org_beta_deps` flow which sets up an org in the
same way as `dev_org`, but installs the latest beta versions of
managed package dependencies.
- The `github_release` task now records the release dependencies as
JSON in the release's tag message.
- Looking up the latest release from GitHub is now done using a single
HTTP request rather than listing all releases.
- We added S-Controls to the list of metadata types that the
`uninstall_packaged_incremental` task will delete.
- Salesforce Robot Framework library: The `Get Current Record Id`
keyword now parses the Id correctly when prefixed with `%2F`, which
apparently happens.
- The `push_failure_report` task now avoids an error when querying for
info about lots of subscriber orgs.
Issues Closed:
- ##911: Fix UnicodeDecodeError when parsing XML retrieved from the
Metadata API.
## 2.2.6 (2019-01-03)
Changes:
- Added support for more metadata types: Group, SharingSet,
SharingCriteriaRule, SharingOwnerRule, and SharingTerritoryRule.
- Release process: We now have tools in place to release cumulusci so
that it can be installed using Homebrew or Linuxbrew.
Issues Closed:
- Fixed an issue where tasks using the Salesforce REST API could build
a wrong URL with an extra slash after the instance URL.
- Fixed an issue where overriding a flow step to set flow: None did
not work.
- Robot Framework: Added an automatic retry to work around an issue
with an intermittent ConnectionResetError when connecting to
headless Chrome in Python 3.
## 2.2.5 (2018-12-26)
- The `install_managed` and `install_managed_beta` tasks now take
optional `activateRSS` and `password` options. `activateRSS` is set
to true by default so that any active Remote Site Settings in the
package will remain active when installed.
- When running a task with the `--debug` flag, HTTP requests are now
logged.
- Robot Framework:
- Fix issue where "Get Current Record Id" could accidentally
match the object name instead of the record Id.
- Fix issue where "Load Related List" would fail to scroll down
to the list.
- Fix issue where errors deleting records during test teardown
would cause a hidden test failure.
## 2.2.4 (2018-12-17)
Changes:
- Bulk query task:
- Fixed an issue with querying data filtered by record type
(#904).
- Fixed an issue where the optimized approach for loading data
into PostgreSQL was not used.
- The task will now prevent you from accidentally overwriting
existing data by exiting with an error if the table already
exists.
- The `deploy` task now logs the size of the zip payload in bytes.
- Fixed a TypeError in the `commit_apex_docs` task (#901).
- Robot Framework:
- Add location strategies for locating elements by text and by
title.
## 2.2.3 (2018-12-07)
Changes:
- Improved error messages when scratch org creation failed and when a
service is not configured.
- Robot Framework: Limit how long the "Load Related List" keyword
will wait.
## 2.2.2 (2018-11-27)
Changes:
- Improved error handling during scratch org creation:
- Capture and display stderr output from SFDX (issue ##413).
- Avoid infinite recursion if username wasn't found in output
from SFDX.
- Robot Framework: Increased the timeout for initial loading of the
browser.
## 2.2.1 (2018-11-21)
Oops, an update in CumulusCI 2.2.0 ended up breaking the
update_dependencies task! Now fixed.
## 2.2.0 (2018-11-21)
Changes:
- Tasks can now be placed in groups for the task list! Just specify a
`group` when defining the task in YAML.
- By popular request, there is now an `org import` command to import
an org from the SFDX keychain to the CumulusCI keychain. It takes
two arguments: the SFDX username or alias, and the org name.
- Robot Framework:
- The `Populate Field` keyword now clears an existing value using
keystrokes to make sure that change events are fired.
- Added a `Get Namespace Prefix` keyword to the CumulusCI library
to get the namespace prefix for a package.
- Fixed a bug that broke opening a browser after using the
`Run Task` keyword.
- Documentation updates:
- The readme now includes a link to the full documentation.
- The instructions for installing CumulusCI on macOS have been
simplified and now recommend using the official Python installer
from python.org instead of Homebrew. (Homebrew should still work
fine, but is no longer necessary.) We also now suggest creating
a virtualenv using venv rather than pyenv since the former is
included with Python. It's fine to continue using pyenv if you
want.
- Give more useful links for how to set up SFDX.
- Updated robot library docs.
- Internal refactoring:
- Removed dependency on HiYaPyCo for YAML loading, which would not
report which file failed to load in the event of a YAML parse
error.
- We now consistently load YAML in the same manner throughout the
entire library, which will work with all supported Python
versions.
- Simplified the Python API for setting up a CumulusCI runtime.
Begone, YamlGlobalConfig and YamlProjectConfig. Our Python API
is not yet documented, but we're working on it. In the
meantime, if you were relying on running CCI from within Python,
you can now just use BaseGlobalConfig (and its
get_project_config member) to bootstrap CCI.
- BaseProjectConfig has shrugged off some methods that just
delegated to the keychain.
- BaseGlobalConfig has shrugged off some unimplemented methods,
and BaseGlobalConfig.get_project_config is now deprecated in
favor of using a runtime.
- Introducing\... CumulusCIRuntime! In order to alleviate the
complexities of getting CumulusCI tasks/flows running from
within a Python application, CumulusCIRuntime encapsulates a lot
of the details and wiring between Keychain, GlobalConfig, and
ProjectConfig. Usage docs are barely included.
- CliConfig has been renamed to CliRuntime and now inherits from
CumulusCIRuntime. It is still accessible as CliConfig.
- Upgraded dependencies.
- Contributor improvement: The contributor docs now explain how to
install pre-commit hooks to make sure our linters have run before
you commit.
Issues Closed:
- ##674: `cci org import `
- ##877: CumulusCI should be able to connect to any DX alias and/or
understand dx auth files
## 2.1.2 (2018-10-29)
Oops, we broke a few things! This is a bugfix release to fix a few
issues found during the Salesforce.org Open Source Community Sprint last
week.
Issues Closed:
- ##858 Dataload bulk query fails to load data into the sqlite db
- ##862 CLI options fail on robot task in 2.1.1
- ##864 Deploying a -meta.xml file with non-ASCII characters breaks in
Python 2
## 2.1.1 (2018-10-23)
Changes:
- Our robotframework library for Salesforce got a number of
improvements:
- New keywords:
- `Click Header Field Link`: Clicks a link in a record header
- `Load Related List`: Scrolls to a related list and waits for
it to load
- `Click Related List Button`: Clicks a button in the header
of a related list
- `Click Related Item Link`: Clicks the main link for an item
in a related list
- `Click Related Item Popup Link`: Clicks a link in the popup
menu for an item in a related list
- Updated to `robotframework-seleniumlibrary` 3.2.0 which includes
a `Scroll Element Into View` keyword.
- `Wait Until Loading Is Complete` now waits for the main body of
the page to render
- `Populate Lookup Field` now tries several times in case there's
an indexing delay
- Added a `-o verbose True` option to the robot task which logs
each keyword as it runs.
- We now ignore errors while running the script that waits for
XHRs to complete (it can fail if the page reloads before the
script finishes).
- Popup notifications upon completion of a flow or task now work on
Linux too, if you have the `notify-send` command from libnotify. On
Ubuntu, install the `notify-osd` package.
Issues Closed:
- ##827 Bulk data load breaks in Python 2
- ##832 pip install cumulusci gets the wrong version of urllib3
## 2.1.1b1 (2018-10-17)
- `uninstall_packaged_incremental` task: Added `ignore` option to
specify components to skip trying to delete even if they are present
in the org but not in the local source.
## 2.1.0 (2018-10-16)
- Fixed the `cci project init` command, which was failing because it
wanted the project to already exist! Fixes ##816. In addition, other
commands will now function without an active project or keychain
when it possible to do so. (For example, try `cci version` which now
works when you're not in a project directory.)
- `update_dependencies` task:
: - Added support for installing private github repositories as
dependencies. Thanks to Anthony Backhouse (@1handclapping)
for the patch. Fixes ##793 - Added a `dependencies` option to override the project
dependencies.
- `execute_apex` task:
: - Print more useful error messages when there are Apex
exceptions.
- `robot` task:
: - Our logic for automatically retrying failed selenium
commands has been encapsulated into the
`cumulusci.robotframework.utils.selenium_retry` decorator
which can be applied to a robot library class for increased
stability. - There is now an option to pause and enter the Python
debugger after a keyword fails. Run with `-o pdb True`. - Revised keywords and locators to support the Winter '19
release of Salesforce and improve stability. - The `Salesforce.robot` file now includes the
`OperatingSystem` and `XML` libraries from Robot Framework
by default. These libraries are helpful in building
integration tests such as modifying and deploying a
PageLayout to include a field needed in Suite Setup of an
integration test.
- Revised installation instructions for Windows. Thanks Matthew
Blanski (@Auchtor).
- Internal change: Use a thread-local variable instead of a global to
track the current running task.
## 2.1.0b1 (2018-10-05)
- It's happening! Hot on the heels of the last release, CumulusCI is
making the jump to the modern era by adding **support for Python
3**! (Specifically, Python 3.6 and 3.7.) Don't worry, we'll also
continue to support Python 2 for the time being. Because this is a
bit more wide-reaching change than normal, we're releasing a beta
first. To install the beta you'll need to explicitly request its
version: `pip install cumulusci==2.1.0b1`. If you already have
CumulusCI, after the update it will continue to run under your
Python 2 interpreter. If you want to switch to the Python 3
interpreter (which is not yet required), we recommend deleting your
Python virtualenv and starting over with the instructions in the
[tutorial](https://cumulusci.readthedocs.io/en/latest/tutorial.html).
If you want to keep your Python 2-based virtualenv around just in
case, follow those instructions but name the new virtualenv
`cci-py3` instead of `cci`.
- There are also some big changes to the **bulk data** tasks. Did you
know CumulusCI has bulk data tasks? They are not configured by
default, because we need to finish documenting them. But we'll list
the changes in case someone is already relying on them:
- Fixed connection resets by downloading an entire result file
before processing.
- Improved performance by processing batches in parallel, avoiding
the SQLAlchemy ORM, storing inserted Ids in separate tables, and
doing lookups using SQL joins rather than a separate query for
each row.
- If you're using a postgres database for local storage,
performance gets even better by taking advantage of postgres'
`COPY` command to load CSV directly.
- Added a `hardDelete` option for bulk deletes.
- Added a `start_step` option for bulk loads which can be used to
resume loading after an error.
- The `push_failure_report` task will now by default hide failures
that occurred due to the "Package Uninstalled" or "Salesforce
Subscription Expired" errors, which are generally benign.
- Fixed the check for newer CumulusCI versions to work around an issue
with old `setuptools`.
- Contributor change: We switched CumulusCI's own tests to run using
`pytest`.
- Internal change: We switched to the `cryptography` library for
handling keychain encryption.
## 2.0.13 (2018-10-02)
- Happy Spooky October! It's unlucky release 2.0.13, with some
scary-cool improvements. Just to show you how ramped up our RelEng
team is now, this release had TWENTY THREE pull requests in 12 days!
From all four of your friendly SFDO Release Engineering committers.
Thanks so much for continuing to use CCI for all your Salesforce
automation needs.
- NEW FLOW: ci_beta_dependencies installs the latest beta of project
dependencies and run tests. Includes task error when running against
non-scratch orgs.
- NEW TASK: ReportPushFailures pulls a list of Package Push Upgrade
Request failures after a push attempt, including grouping by
important factors.
- Issue a terminal "Bell" sound and attempt to display a macOS
notification when a commandline task or flow completes.
- Cleaned up python exception and error handling across the board, so
that we can provide you, the user, with only the most relevant
information. Try using CCI without setting your CUMULUSCI_KEY and
see a simplified error message.
- Fixed the utils for processing namespaces in package zip files to
handle non-ASCII characters
- The CONTRIBUTING.rst docs and Makefile have been updated to show how
we release updates of CCI.
- Skip beta releases when checking for a newer cumulusci version
- When using the strip_namespace option on deployments, we now log
which files had changes made before deploying.
- Going Out: the SFDXDeploy and SFDXJsonPollingTasks have been
removed, as they didn't work.
- Going Out: Use the safe_load() method when loading YAML instead of
the naive load(). If you relied on executing code in your CCI YAML
file parsing, that will no longer work.
## 2.0.12 (2018-09-20)
- Fixed apexdoc URL
- Fixed update-admin-profile to set any existing record
type defaults to false before setting new defaults.
- Fixed deployment of -meta.xml files containing non-ASCII characters.
- Updated the robot selector for "Click Modal Button" to work for
modals opened by a Quick Action.
## 2.0.11 (2018-09-14)
- update-admin-profile now uses xml parsing instead of
string replacement for more targeted editing of Admin.profile to fix
issues with deploying record types via dependencies
- Projects can declare a dependency on a minimum version of cumulusci
by specifying [minimum_cumulusci_version]{.title-ref} in
cumulusci.yml
## 2.0.10 (2018-09-13)
- update-admin-profile task now sets application and tab
visibility and supports setting record type visibility and default
via the new record-types task option
- Restructured exceptions to include two new parent exceptions useful
in client implementations:
- CumulusCIFailure: Used to signify a failure rather than an
error, such as test or metadata deployment failures
- CumulusCIUsageError: Use to signify a usage error such as
accessing a task that does not exist
- execute-anon task now accepts either
[apex]{.title-ref} (string) or [path]{.title-ref} (Apex in a local
file) for the Apex to execute. Also, the [managed]{.title-ref} and
[namespaced]{.title-ref} options allow injecting namespace prefixes
into the Apex to be executed.
- New flow [retrieve_scratch]{.title-ref} can be used to retrieve
declarative changes from a scratch org into the src/ directory
## 2.0.9 (2018-09-10)
- Make robot commands use new lightning URLs
- Remove unused filter_name arg from Go to Record Home robot keyword.
- Fix metadata map for Settings.
## 2.0.8 (2018-08-21)
- Flows that are executed from within another flow now support
task-level control flow.
- We no longer support the undocumented ability for a Flow to provide
its own class_path.
- Use the connected app details to set a client name on HTTP requests
to Salesforce.
## 2.0.7 (2018-08-16)
- [cci service show]{.title-ref} has been renamed [cci service
info]{.title-ref}!
- Update default API version in the base YAML to v43.0.
- Doc updates in the tutorial, thanks to \@justindonnaruma!
- Significant refactor of the cli module, including a bunch of small
usability and exception handling changes. See
for details.
- Display the file name for error causing files in more cases.
- Strip packageVersions tags from aura/, components/, and pages/
metadata.
- Update PyYAML dependency.
## 2.0.6 (2018-08-07)
- In Robot tests that use the standard keyword for interacting with a
lookup field, we now wait for all AJAX requests to complete before
submitting.
- Add unit tests for large sections of the library.
- We now support Flow, DuplicateRule, and other new Metadata types
thanks to \@carlosvl.
- Fixed refreshing oauth token when deploying metadata to persistent
orgs.
## 2.0.5 (2018-08-01)
- Fixes ##695: Update InstallPackageZipBuilder to set activateRSS to
unblock installs.
## 2.0.4 (2018-07-30)
- Fixes ##611: Scratch org operations were failing on Windows
- Fixes ##664: Scratch org aliases incorrectly included double quotes
in the alias name
## 2.0.3 (2018-07-27)
- Added support for waiting on Aura HTTP Requests to complete after a
browser action is performed in selenium from the Robot Salesforce
Library:
- Github API client will now automatically retry on 502 errors
- Better error messages from parsing errors during package.xml
generation which show the file causing the error
## 2.0.2 (2018-06-06)
- Bugfix: Update InstallPackageZipBuilder to use a recent api version
to unblock installs.
## 2.0.1 (2018-06-06)
- Bugfix: Allow passing a connected app directly to
OrgConfig.refresh_oauth_token.
## 2.0.0 (2018-06-01)
After over 19 months of development as alpha (40 version over 3 months)
and beta (98 releases over 16 months) releases and over a year running
production builds using CumulusCI, it's time to remove the "beta"
label.
This marks the first production release of CumulusCI 2.x!
## 2.0.0-beta99 (2018-05-31)
- Ensure that github credentials are never shown in the log for github
dependencies with unmanaged metadata
## 2.0.0-beta98 (2018-05-31)
**WARNING: This release introduces breaking changes to the syntax for
flow definitions and to the default flows. If you customized any of the
default flows in your project or have defined custom flows, you will
need to modify your cumulusci.yml file to work with this release.**
Changes default flows shipped with CumulusCI to a new syntax and
structure taking advantage of the ability for flows to call other flows.
This allows flows to be modularized in ways that weren't possible when
the original set of flows was designed.
- The **tasks:** section in cumulusci.yml for a flow is now renamed to
**steps:** A **FlowConfigError** will be raised if an old style flow
definition is detected. All existing flow customizations and custom
flows need to be changed in the **cumulusci.yml** to avoid raising
an exception.
- All default flows have been restructured. Existing customizations of
default flows likely need to be changed to adapt to the new
structure. In most cases, you will want to move your customizations
to some of the new **config\_**\* or **deploy\_**\* instead of the
main flows.
- **ci_beta_install** has been removed and replaced with
**install_beta** and **uninstall_managed** **install_beta** does not
attempt to uninstall an existing version of the package. If you need
to uninstall the package first, use the **uninstall_managed** flow
before running **install_beta**
- Added new **qa_org** flow to allow different configurations for dev
vs QA orgs
- New modularized flows structure allows for easier and more reusable
customization:
> - **dependencies** Runs the pre-package deployment dependency
> tasks **update_dependencies** and **deploy_pre** This flow is
> called by almost all the main flows.
> - **config\_**\* flows provide a place to customize the package
> configuration for different environments. These flows are
> called by the main flows after the package metadata is
> deployed or a managed version is installed. Customizations to
> the config flows automatically apply to the main flows.
>
> > - **config_apextest** Configure org for running apex tests
> > - **config_dev** Configure org for dev use
> > - **config_managed** Configure org with a managed package
> > version installed
> > - **config_packaging** Configure the packaging org
> > - **config_qa** Configure org for QA use
>
> - **deploy\_**\* flows provide a place to customize how metadata
> deployments are done. The deploy flows do more than just a
> simple deployment such as unscheduling scheduled jobs,
> rebuilding the package.xml, and incrementally deleting any
> stale metadata in the package from the org.
>
> > - **deploy_unmanaged** Used to do a standard deployment of
> > the unmanaged metadata
> > - **deploy_packaging** Used to deploy to packaging. Wraps
> > the **create_managed_src** task around the deploy to
> > inject metadata that can only be deployed to the
> > packaging org
> > - **deploy_unmanaged_ee** Used to deploy unmanaged
> > metadata to an Enterprise Edition org using the
> > **create_unmanaged_ee_src** task
- **github** dependencies can now point to a private Github
repository. All zip downloads from Github will pass the password
(should be a personal access token) from the **github** service
configured in the CumulusCI keychain.
- **GithubRelease**, **PushUpgradeRequest**, and
**PackageUploadRequest** now track the release data as return values
## 2.0.0-beta97 (2018-05-31)
- Salesforce Connected App is now a CCI Service! Instead of using [cci
org config_connected_app]{.title-ref} you can use the familiar [cci
service]{.title-ref} commands.
- Better error handling when running commands without specifying a
default org (thanks \@topherlandry)
- Fix issue where scratch org password may become outdated
- Improve Robot test runner task to use the already configured CCI
environment instead of trying to create a new one.
- Enable Robot testing in Headless Chrome on Heroku.
- Address Python3 print statement issues.
- Add LogLine task class to log statements and variables.
- Add PassOptionAsResult, PassOptionAsReturnValue to pass options
around in Flows.
- Further extended the Flow runner subclass API.
## 2.0.0-beta96 (2018-05-18)
- Fixes for CumulusCI on Windows - CumulusCI 2 now supports Windows
environments!
- Support skipping scratch org password creation by specifying
[--no-password]{.title-ref} to [cci org scratch]{.title-ref}
- Add additional logging to PackageUpload
## 2.0.0-beta95 (2018-05-10)
- Add pytz to requirements
## 2.0.0-beta94 (2018-05-10)
- Support added for nested flows. Specify a flow instead of a task
inside another flow in cumulusci.yml
- Add new task github_release_report to report info from GitHub
release notes
- Add new flow dev_deploy for minimal deploy (tasks: unschedule_jobs,
deploy)
- Enhance BaseFlow to be more easily subclassed/overridden/observed.
Preserves task step number and adds several hook methods for
subclasses (\_pre_task, \_post_task, \_post_task_exception)
- Refactor github_release_notes task to use github3.py instead of calling the GitHub API directly. Includes these minor changes to functionality:
: - Cannot create release with this task (use
github_create_release instead) - Merge existing release notes even when not publishing
- Fix issue that caused duplicate entries in the dependency tree
- Sort output of os.listdir in all occurrences. Guarantees ordered
iteration over files on disk
- Validate CUMULUSCI_KEY value and raise more helpful exceptions if
invalid
## 2.0.0-beta93 (2018-04-20)
- Fix issue in command task for Windows
- Support interactive in command task (thanks Chris Landry!)
- Search more pull requests (100 vs 30) when generating release notes
- Add options to Apex documentation generator task
## 2.0.0-beta92 (2018-04-04)
- Ignore OWNERS file in package.xml generation
- Pipe stderr in command tasks
## 2.0.0-beta91 (2018-04-03)
- Fix issue in ZIP functionality for Windows
## 2.0.0-beta90 (2018-03-26)
- Include missing scratch_def.json template file needed by cci project
init
## 2.0.0-beta89 (2018-03-23)
- Improved cci project init
: - Prompt for extending a repository with HEDA and NPSP as
selectable options - Use jinja2 templates included with cumulusci to create files - Include a default Robot test
- update_package_xml now ignores CODEOWNERS files used by Github
- Fixed an import error for click in cci
## 2.0.0-beta88 (2018-03-20)
- Fix issue in parsing version from tag name
## 2.0.0-beta87 (2018-03-15)
- Fix issue in getting latest version
## 2.0.0-beta86 (2018-03-13)
- Initial Integration with Robot Framework (see here for details:
)
- Add support for GlobalValueSetTranslation Metadata Type (thanks
Christian Szandor Knapp!)
- Use Tooling API for PackageUploadRequest
- New doc "Why CumulusCI?"
- Add documentation for the skip option on GitHub dependencies
## 2.0.0-beta85 (2018-02-21)
- Support bigobject index element in .object
- Only run meta.xml file cleaning on classes/\* and triggers/\*
directory
- Add docs on CumulusCI Flow
- Add reference to needing the Push API to run release_beta in
tutorial doc
## 2.0.0-beta84 (2018-02-12)
- Add new Status 'Queued' to PackageUploadRequest check
## 2.0.0-beta83 (2018-02-08)
- Add a sleep in between successful PackageUploadRequest and querying
for MetadataPackageVersion to address issue in Spring '18 packaging
orgs.
## 2.0.0-beta82 (2018-02-02)
- Update salesforce-bulk package to version 2.0.0
- Fix issue in bulk load data task
## 2.0.0-beta81 (2018-01-18)
- Filter SObjects by record type in bulk data retrieve
- Fix issue in removing XML elements from file
## 2.0.0-beta80 (2018-01-08)
- The deploy tasks now automatically clean all meta.xml files in the deployed metadata of any namespace references by removing the \ element and children. This allows CumulusCI to fully manage the dependencies and avoids the need for new commits to change referenced versions in meta.xml files.
: - The default functionality can be disabled with the by
setting [clean_meta_xml]{.title-ref} to False
- Github dependencies can now point to a specific tag in the
repository. The tag is used to determine the version to install for
the dependency if the repository has a namespace configured and will
be used to determine which unpackaged metadata to deploy.
## 2.0.0-beta79 (2017-11-30)
- Fixes ##540: Using a custom [prefix_beta]{.title-ref} fails if
releases with the same version but different prefix already exist in
the repository. Changed to use [tag_name]{.title-ref} instead of
[name]{.title-ref} to check if the release already exists in Github.
## 2.0.0-beta78 (2017-11-22)
Resolving a few issues from beta77:
- A bug in BaseKeychain.create_scratch_org was causing the creation of
ScratchOrgConfig's with a days value of None. This caused issues
with subsequent calls against the org.
- Fixed output from new logging in namespace injection
- Switch to using org_config.date_created to check if an org has been
created
- Fix bug in recreation of an expired scratch org
## 2.0.0-beta77 (2017-11-22)
- New Salesforce DX tasks: dx-convert-from,
dx-convert-to, dx-pull, and
dx-push
- New flow for creating production releases (use with caution!):
release-production
- Scratch org configs can now specify [days]{.title-ref} as an option
which defaults to 1. The default for a scratch config can be
overridden in [cci org scratch]{.title-ref} with the [--days
N]{.title-ref} option
- [cci org remove]{.title-ref} will now attempt to first delete a
scratch org if one was already created
- [cci org scratch]{.title-ref} will prevent you from overwritting a
scratch config that has already created a scratch org (which would
create an orphaned scratch org) and direct you to use [cci org
remove]{.title-ref} instead.
- [cci org list]{.title-ref} now shows the duration days, elapsed
days, and if an org is expired.
- [cci org info]{.title-ref} now shows the expiration date for scratch
orgs
- All [cci]{.title-ref} commands that update an org config will now
attept to automatically recreate an expired scratch org
- New namespace inject token strings are supported for injecting
namespaces into Lightning Component references:
- **%%%NAMESPACE_OR_C%%%**\*: Replaced with either
'your_namespace' (unmanaged = False) or 'c' (unmanaged =
True)
- **%%%NAMESPACED_ORG_OR_C%%%**\*: Replaced with either
'your_namespace' (namespaced_org = True) or 'c'
(namespaced_org = False)
- Deleted all tasks and code related to [apextestsdb]{.title-ref}
since its functionality is now integrated into MetaCI and no longer
used
## 2.0.0-beta76 (2017-11-14)
- Fix bug in namespace injection
- Add option to print org info as JSON
## 2.0.0-beta75 (2017-11-07)
- Fix syntax for github dependency with [--extend]{.title-ref} option
on [cci project init]{.title-ref}
## 2.0.0-beta74 (2017-11-07)
- Default to Salesforce API version 41.0
## 2.0.0-beta73 (2017-11-07)
- Fix bug in creating the [dev_namespaced]{.title-ref} scratch org
config from [cci project init]{.title-ref}
## 2.0.0-beta72 (2017-11-06)
- Fix bug in setting namespace from [cci project init]{.title-ref}
## 2.0.0-beta71 (2017-11-06)
- Update docs, including tutorial for Windows (thanks Dave Boyce!)
- Add missing "purge on delete" option for BaseUninstallMetadata
- Fix crash when decoding certain strings from the Metadata API
response
- Add support for featureParameter\* metadata types (thanks Christian
Szandor Knapp!)
## 2.0.0-beta70 (2017-10-30)
- Fix issue in zip file processing that was introduced in v2.0.0b69
## 2.0.0-beta69 (2017-10-27)
- cumulusci.core has been made compatible with Python 3!
- [cci project init]{.title-ref} has been upgraded
- Better prompt driven user experience with explanations of each
prompt
- [--extend \]{.title-ref} option to set up a
recursive dependency on another CumulusCI project's Github
repository
- Creates [sfdx-project.json]{.title-ref} if it doesn't already
exist
- Creates and populates the [orgs/]{.title-ref} directory if it
does not already exist. The directory is populated with starter
scratch org shape files for the 4 main scratch org configs in
CumulusCI: [beta.json]{.title-ref}, [dev.json]{.title-ref},
[feature.json]{.title-ref}, [release.json]{.title-ref}
- Fix issue with namespace injection
- [push\_\*]{.title-ref} tasks now accept [now]{.title-ref} for the
[start_time]{.title-ref} option which will start the push upgrade
now (technically 5 seconds from now but that's better than 5
minutes).
## 2.0.0-beta68 (2017-10-20)
- Configure [namespace_inject]{.title-ref} for
[deploy_post_managed]{.title-ref}
## 2.0.0-beta67 (2017-10-20)
- Fix bug where auto-created scratch orgs weren't getting the
[scratch]{.title-ref} attribute set properly on their
[ScratchOrgConfig]{.title-ref} instance.
## 2.0.0-beta66 (2017-10-20)
- Configure [namespace_inject]{.title-ref} for
deploy-post
- Fix the [--debug]{.title-ref} flag on [cci task run]{.title-ref}
and [cci flow run]{.title-ref} to allow debugging of exceptions
which are caught by the CLI such as MetadataApiError,
MetadataComponentError, etc.
## 2.0.0-beta65 (2017-10-18)
### Breaking Changes
- If you created custom tasks off of [DeployNamespaced]{.title-ref} or
[DeployNamespacedBundles]{.title-ref}, you will need to switch to
using [Deploy]{.title-ref} and [DeployBundles]{.title-ref}. The
recommended configuration for such custom tasks is represented
below. In flows that need to inject the actual namespace prefix,
override the [unmanaged]{.title-ref} option .. :
custom_deploy_task:
class_path: cumulusci.tasks.salesforce.Deploy
options:
path: your/custom/metadata
namespace_inject: $project_config.project__package__namespace
unmanaged: False
### Enhancements
- The [cci]{.title-ref} CLI will now check for new versions and print
output at the top of the log if a new version is available
- The [cci]{.title-ref} keychain now automatically creates orgs for
all named scratch org configs in the project. The orgs are created
with the same name as the config. Out of the box, CumulusCI comes
with 4 org configs: [dev]{.title-ref}, [feature]{.title-ref},
[beta]{.title-ref}, and [release]{.title-ref}. You can add
additional org configs per project using the [orgs]{.title-ref} -\>
[scratch]{.title-ref} section of the project's
[cumulusci.yml]{.title-ref}. With this change, [cci org
list]{.title-ref} will always show at least 4 orgs for any project.
If an org already exists in the keychain, it is not touched and no
scratch org config is auto-created for that config. The goal is to
eliminate the need to call [cci org scratch]{.title-ref} in most
cases and make it easier for new users to get up and running with
scratch orgs and CumulusCI.
- [cci org remove \]{.title-ref} is now available to remove
orgs from the keychain
- Scratch orgs created by CumulusCI are now aliased using the naming
format [ProjectName\_\_org_name]{.title-ref} so you can easily run
sfdx commands against scratch orgs created by CumulusCI
- [cci org list]{.title-ref} now shows more information including
[scratch]{.title-ref}, [config_name]{.title-ref}, and
[username]{.title-ref}. NOTE: config_name will only be populated for
newly created scratch configs. You can use [cci org
scratch]{.title-ref} to recreate the config in the keychain.
- The new flow dev-org-namespaced provides a base flow
for deploying unmanaged metadata into a namespaced org such as a
namespaced scratch org
- All tasks which previously supported [namespace_inject]{.title-ref}
now support a new option, [namespaced_org]{.title-ref}. This option
is designed to handle use cases of namespaced orgs such as a
namespaced scratch org. In namespaced orgs, all unmanaged metadata
gets the namespace prefix even if it is not included in the package.
You can now use the [namespaced_org]{.title-ref} option along with
the file content token [%%%NAMESPACED_ORG%%%]{.title-ref} and the
file name token [\_\_\_NAMESPACED_ORG\_\_\_]{.title-ref} to inject
the namespace when deploying to a namespaced org.
[namespaced_org]{.title-ref} defaults to False to be backwards
compatible with previous functionality.
- New task push-list supports easily pushing a list of
OrgIds via the Push API from the CLI: [cci task run push_list -o
file \ -o version 1.2 --org packaging]{.title-ref}
## 2.0.0-beta64 (2017-09-29)
- Show proper exit status for failed tests in heroku_ci.sh
- Handle BrowserTestFailure in CLI
- Fix issue that prevented auto-merging master to parent branch
## 2.0.0-beta63 (2017-09-26)
- Documentation has been updated!
- CumulusCI now supports auto detection of repository information from
CI environments. This release includes an implementation for Heroku
CI
## 2.0.0-beta62 (2017-09-19)
- cci now supports both namespaced and non-namespaced scratch org
configurations in the same project. The default behavior changes
slightly with this release. Before, if the
[sfdx-project.json]{.title-ref} had a namespace configured, all
scratch orgs created via [cci org scratch]{.title-ref} would get the
namespace. With the new functionality, all orgs would by default not
have the namespace. You can configure individual org configs in your
project's [cumulusci.yml]{.title-ref} file by setting [namespace:
True]{.title-ref} under [orgs -\> scratch -\>
\]{.title-ref}
## 2.0.0-beta61 (2017-09-12)
- Fix bug that was causing a forced token refresh with [sfdx
force:org:open]{.title-ref} at the start of a flow or task run
against a freshly created scratch org.
- Add support for Big Objects with [\_\_b]{.title-ref} suffix in
update-package-xml and
update-package-xml-managed
- Fix bug that caused release notes sections to not render if only h2
content found
## 2.0.0-beta60 (2017-09-06)
- Add support for Platform Events with [\_\_e]{.title-ref} suffix in
update-package-xml and
update-package-xml-managed
## 2.0.0-beta59 (2017-09-06)
- [YamlProjectConfig]{.title-ref} can now accept an
[additional_yaml]{.title-ref} keyword argument on initialization.
This allows a 5th level of layering to the
[cumulusci.yml]{.title-ref} config. This change is not wired up to
the CLI yet but is available for application built on top of
cumulusci to use.
- [cumulusci.core.flow]{.title-ref} and
[cumulusci.core.keychain]{.title-ref} now have 100% test coverage
## 2.0.0-beta58 (2017-08-29)
- Fix import error in []github-release-notes() task
introduced in beta57
## 2.0.0-beta57 (2017-08-28)
- Task options can now dynamically reference attributes from the
project_config using the syntax
[\$project_config.attr_name]{.title-ref}. For example,
[\$project_config.repo_branch]{.title-ref} will resolve to the
current branch when the task options are initialized.
- New task [github_parent_to_children]{.title-ref} uses new
functionality in [MergeBranch]{.title-ref} to support merging from a
parent feature branch (ex. [feature/parent]{.title-ref}) into all
child branches (ex. [feature/parent\_\_child]{.title-ref}).
- github-master-to-feature task will now skip child
branches if their corresponding parent branch exists
- ci-feature flow now runs
[github_parent_to_children]{.title-ref} at the end of the flow
- Github task classes were restructured but the
[class_path]{.title-ref} used in [cumulusci.yml]{.title-ref} remains
the same
- New test coverage for github tasks
## 2.0.0-beta56 (2017-08-07)
- Add stderr logging to scratch org info command
## 2.0.0-beta55 (2017-08-07)
- Fix API version issue in Apex test runner
## 2.0.0-beta54 (2017-08-04)
- Fix issue in parsing test failure details when org has objects that
need to be recompiled.
## 2.0.0-beta53 (2017-08-04)
- Fix "cci org config_connected_app" for Windows
- Update tutorial for Windows usage
- Reverse pull request order for release notes
## 2.0.0-beta52 (2017-08-02)
- Release notes parsers now specified in cumulusci.yml
## 2.0.0-beta51 (2017-08-01)
- New task to commit ApexDoc output
- New test runner uses Tooling API to get limits data
## 2.0.0-beta50 (2017-07-18)
- Fix handling of boolean command line args
## 2.0.0-beta49 (2017-07-10)
- New task batch-apex-wait allows pausing until an Apex
batch job completes. More details at
- SalesforceBrowserTest task now accepts [extra]{.title-ref} argument
for specifying extra command line arguments separate from the
command itself
- Resolved ##369: Scratch org tokens expiring after upgrade to SFDX
beta
## 2.0.0-beta48 (2017-06-28)
- Upgraded to the Salesforce DX Beta (thanks to \@Szandor72 for the
contribution!)
- NOTE: CumulusCI will no longer work with the sfdx pilot release
after this version!
- Replaced call to [force:org:describe]{.title-ref} with
[force:org:display]{.title-ref}
- Changed json response parsing to match beta format
- New SFDX wrapper tasks
- \`SFDXBaseTask\`: Use for tasks that don't need org access
- \`SFDXOrgTask\`: Use for sfdx tasks that need org access. The
task will refresh the cci keychain org's token and pass it to
sfdx as the target org for the command
- \`SFDXJsonTask\`: Use for building tasks that interact with sfdx
via json responses
- \`SFDXJsonPollingTask\`: Use for building tasks that wrap sfdx
json responses including polling for task completion
- \`SFDXDeploy\`: An example of using
[SFDXJsonPollingTask]{.title-ref} to wrap
[force:mdapi:deploy]{.title-ref}
- Fixed infinite loop if setting scratch org password fails
## 2.0.0-beta47 (2017-06-26)
- Fix typo in tasks.util
## 2.0.0-beta46 (2017-06-23)
- Fix bug in implementation of the [--no-prompt]{.title-ref} flag
when sentry is configured
## 2.0.0-beta45 (2017-06-23)
- The new [BaseSalesforceApiTask]{.title-ref} class replaces
[BaseSalesforceApiTask]{.title-ref},
[BaseSalesforceBulkApiTask]{.title-ref}, and
[BaseSalesforceToolingApiTask]{.title-ref} by combining them into a
single task class with access to all 3 API's via
[self.sf]{.title-ref}, [self.tooling]{.title-ref}, and
[self.bulk]{.title-ref} from inside a task instance.
- Added integration with sentry.io
- Use [cci service connect sentry]{.title-ref} to enable the
sentry service
- All task execution exceptions will be logged as error events in
sentry
- [cci task run]{.title-ref} and [cci flow run]{.title-ref} will
now show you the url to the sentry event if one was registered
and prompt to open in a browser.
- [cci task run]{.title-ref} and [cci flow run]{.title-ref} now
accept the [--no-prompt]{.title-ref} option flag for running in
non-interactive mode with the sentry service configured. Use
this if you want to log build errors in sentry but not have
builds fail due to a hanging prompt.
- If a scratch org password has expired, it is now regenerated when
calling [cci org info]{.title-ref}
- New task unschedule-apex was added to unschedule
background jobs and added to the start of the [dev_org]{.title-ref}
flow
- update-meta-xml task now uses the project's
dependencies as the namespace/version to update in the meta.xml
files
- The bulkdata mapping now properly supports Record Types
- Fixed a bug with BulkDataQuery where local references weren't
getting properly set
- New CumulusCI Branch & Release Overview diagram presention is
available at
Use left/right arrow buttons on your keyboard to navigate through
the presentation.
- CumulusCI is now being built by Heroku CI using the config in
[app.json]{.title-ref}
## 2.0.0-beta44 (2017-06-09)
- Fix issue in update-dependencies when a github
dependency depends on another github dependency
## 2.0.0-beta43 (2017-06-09)
- Fix issue in [mrbelvedere_publish]{.title-ref} where the new zip_url
dependencies weren't being skipped
## 2.0.0-beta42 (2017-06-09)
- Move github dependency resolution logic into
project_config.get_static_dependencies() for reuse in tasks other
than UpdateDependencies
- Fixed the mrbelvedere_publish task when using github references
- Improved output from parsing github dependencies
- Fix issue in [BulkDataQuery]{.title-ref} character encoding when
value contains utf8 special characters
## 2.0.0-beta41 (2017-06-07)
- The [dependencies]{.title-ref} section in cumulusci.yml now supports
the [skip]{.title-ref} option for Github dependencies which can be
used to skip specific subfolders under [unpackaged/]{.title-ref} in
the target repository
- New task class BulkDataQuery reverses the BulkDataLoad and uses the
mapping to build SOQL queries to capture the data in the mapping
from the target org. The data is written to a database that can then
be used by BulkDataLoad to load into a different org.
- The Delete util task now uses the glob library so it can support
paths with wildcards like src/\*
- New tasks meta-xml-api and
meta-xml-dependencies handle updating
[\*-meta.xml]{.title-ref} files with api versions or underlying
package versions.
## 2.0.0-beta40 (2017-06-03)
- More enhancements to update-dependencies including the
ability to handle namespace injection, namespace stripping, and
unmanaged versions of managed repositories. See the new doc at
## 2.0.0-beta39 (2017-06-02)
- Fix new bug in update-dependencies which caused
failure when running against an org that already has a required
package installed
## 2.0.0-beta38 (2017-06-01)
- update-dependencies now properly handles references to
a github repository that itself contains dependencies in its
cumulusci.yml file
- update-dependencies now handles deploying unmanaged
metadata from subfolders under unpackaged/pre of a referenced Github
repository
- The [dependencies]{.title-ref} section of
[cumulusci.yml]{.title-ref} now supports installing from a zip of
metadata hosted at a url if you provide a [zip_url]{.title-ref} and
optionally a [subfolder]{.title-ref}
## 2.0.0-beta37 (2017-06-01)
- update-dependencies now supports dynamically
referencing other Github repositories configured with a
cumulusci.yml file. The referenced repository's cumulusci.yml is
parsed and the dependencies are included. Also, the Github API is
used to find the latest release of the referenced repo if the
cumulusci.yml has a namespace configured. Welcome to dynamic package
dependency management ;)
- [cci task run]{.title-ref} now supports the option flags
[--debug-before]{.title-ref} and [--debug-after]{.title-ref}
- Fix for JUnit output rendering in run_tests
## 2.0.0-beta36 (2017-05-19)
- Flows can now accept arguments in the CLI to override task options
- [cci flow run install_beta -o install_managed_beta\_\_version
"1.0 (Beta 123)"]{.title-ref}
- Flows can now accept arguments to in the CLI to skip tasks
- [cci flow run ci_feature --skip run_tests_debug --skip
deploy_post]{.title-ref}
- Anonymous apex failures will now throw an exception and fail the
build in execute-anon
- Fixes ##322: local variable 'message' referenced before assignment
## 2.0.0-beta35 (2017-05-19)
- New task execute-anon is available to run anonymous
apex and takes the extra task option [apex]{.title-ref}
## 2.0.0-beta34 (2017-05-16)
- Fixes ##317: ERROR: Invalid version specified
## 2.0.0-beta33 (2017-05-11)
- cci org connect and cci org scratch now accept the --default option
flag to set the newly connected org as the default org for the repo
- cci org scratch now accepts a new option, --devhub \,
which allows you to specify an alternate devhub username to use when
creating the scratch org
- The SalesforceBrowserTest class now throws a BrowserTestFailure if
the command returns an exit status of 1
- Scratch org creation no longer throws an exception if it fails to
set a random password on the newly created org
- Push API task enhancements:
- Push org lists (text files with one org ID per line) can now
have comments and blank lines. The first word on the line is
assumed to be the org ID and anything after that is ignored.
- Fixes ##294
- Fixes ##306
- Fixes ##208
## 2.0.0-beta32 (2017-05-04)
- Scratch orgs now get an auto-generated password which is available
via [cci org info]{.title-ref}
- Added metadata mapping for StandardValueSets to fix ##310
- Throw nicer exceptions when scratch org interaction fails
## 2.0.0-beta31 (2017-04-12)
- Use UTC for all Salesforce API date/time fields
- Fix issue with listing metadata types
- Add generic polling method to BaseTask
## 2.0.0-beta30 (2017-04-04)
- New task list_metadata_types
- \[push upgrades\] Fix push request status Cancelled --\> Canceled
- \[push upgrades\] Fix datetime namespace issues
- \[pyinstaller\] Import project-level modules with run-time hook
## 2.0.0-beta29 (2017-04-04)
- Report push status if start time is less than 1 minute in the future
## 2.0.0-beta28 (2017-03-30)
- Fix bug in Push API batch retry logic introduced in beta25
## 2.0.0-beta27 (2017-03-29)
- Skip org in push if statusCode is UKNOWN_EXCEPTION
## 2.0.0-beta26 (2017-03-29)
- Fixes ##278: Push upgrade raises exception for DUPLICATE_VALUE
statusCode
## 2.0.0-beta25 (2017-03-28)
- Fixes ##277: Push API tasks now correctly handle errors in individual
orgs in a batch when scheduling a push job
## 2.0.0-beta24 (2017-03-27)
- Fixes ##231: Handle unicode in package.xml generation
- Fixes ##239: Replace fix for windows path issues from beta23 with a
better implementation
- Fixes ##275: Properly pass purge_on_delete option value in
uninstall_packaged_incremental
## 2.0.0-beta23 (2017-03-22)
- Fixes ##239: Add local path to import path when looking up classes.
This should fix an error that appeared only in Windows
## 2.0.0-beta22 (2017-03-20)
- []github-release-notes() now supports the
[link_pr]{.title-ref} option to add links to the pull request where
each line of content came from
- Fixes ##266: update-dependencies now supports the
[purge_on_delete]{.title-ref} option to allow running against
production orgs
- Fixes ##267: package.xml generation now skips RecordType when
rendering in delete mode
## 2.0.0-beta21 (2017-03-17)
- Fix parsing of OrgId from the access token using the new sfdx CLI
## 2.0.0-beta20 (2017-03-17)
- Switch to using the [sfdx]{.title-ref} CLI for interacting with
scratch orgs. If you use [cci]{.title-ref} with scratch orgs, this
release will no longer work with the [heroku force:\*]{.title-ref}
commands from the prior Salesforce DX release.
- Upgrades to release notes generator
- Content is now grouped by subheading under each heading
- Better error message is thrown if a lightweight tag is found
when an annotated tag is needed
## 2.0.0-beta19 (2017-03-15)
- Fixes ##261: cci org info should refresh token first
## 2.0.0-beta18 (2017-03-14)
- Skip deleting Scontrols in incremental delete
- Escape package name when generating package.xml
## 2.0.0-beta17 (2017-03-14)
- OrgConfig and subclasses now support self.username to get the
username
- Flows no longer have access to task instance attributes for
subsequent task options. Instead, custom task classes should set
their task return_values member.
- Improve printing of org info when running tasks from a flow by only
printing once at the start of flow. All tasks have an optional
self.flow attribute now that contains the flow instance if the task
is being run from a flow.
- BaseTask now includes methods for handling retry logic. Implemented
in the InstallPackageVersion and RunApexTests
- New task retrieve-unpackaged can be used to retrieve
metadata from a package.xml manifest
- Fixes ##240 - CumulusCI should now properly handle escaping special
characters in xml where appropriate
- Fixes ##245 - Show config values in task info
- Fixes ##251 - ApiRetrieveUnpackaged \_clean_package_xml() can't
handle metadata with spaces in names
- Fixes ##255 - ApiListMetadata does not list certain metadata types
with default folder value
## 2.0.0-beta16 (2017-02-17)
- Allow batch size to be configured for push jobs with the
[batch_size]{.title-ref} job
## 2.0.0-beta15 (2017-02-15)
- Bug fix release for bug in update-admin-profile from
the beta 14 release changes to the ApiRetrieveUnpackaged class
## 2.0.0-beta14 (2017-02-15)
- The new [RetrieveReportsAndDashboards]{.title-ref} task class that
can retrieve all reports and dashboards from a specified list of
folders
- Documentation improvements contributed by \@tet3
- Include userinfo in the OrgConfig, and print username and org id at
the beginning of every task run. Contribution by \@cdcarter
- [project_local_dir]{.title-ref} (e.g.,
[\~/.cumulusci/NPSP-Extension-Template/]{.title-ref}, home of the
encrypted keychain and local override config) now rely on the
project name configured in cumulusci.yml instead of the existence of
a git remote named origin. Contribution by \@cdcarter
## 2.0.0-beta13 (2017-02-09)
- New services registration support added by community contribution
from \@cdcarter
- Services and their schemas can now be defined in the
cumulusci.yml file. See
for more
details until docs are fully updated
- [cci services list]{.title-ref}
- [cci services show github]{.title-ref}
- [cci services connect github]{.title-ref}
- Improved error handling for metadata deployment failures:
- Metadata deployments now throw more specific errors when
appropriate: MetadataComponentFailure, ApexTestFailure, or
MetadataApiError
- Output for each component failure on a deploy now includes more
information such as the column number of the error
- release-beta now ignores errors in the
[]github-release-notes() process by default
## 2.0.0-beta12 (2017-02-02)
- Throw better exceptions if there are failures creating or deleting
scratch orgs
## 2.0.0-beta11 (2017-02-01)
- Fixes and new functionality for
update-package-xml-managed task.
- Added support for project -\> package -\> name_managed in the
cumulusci.yml file to specify a different package name to use
when deploying to the packaging org.
- Fixed bug with install_class and uninstall_class handling
## 2.0.0-beta10 (2017-01-20)
- Completed removed CumulusCI 1 code from the repository and egg. The
egg should be 17MB smaller now.
- Removed [cumulusci.tasks.ant.AntTask]{.title-ref}. Please replace
any usage with [cumulusci.tasks.command.Command]{.title-ref} or
[cumulusci.tasks.command.SalesforceCommand]{.title-ref}
- Removed the [update_meta_xml]{.title-ref} task for now since it was
the only task relying on Ant. A new and much better Python based
implementation will be coming soon.
## 2.0.0-beta9 (2017-01-20)
- A few upgrades to the Command task:
- No longer strip left side whitespace from output to preserve
indentation
- New method [\_process_output]{.title-ref} can be overridden to
change how output lines are processed
- New method [\_handle_returncode]{.title-ref} can be overridden
to change how exit status is handled
## 2.0.0-beta8 (2017-01-19)
- Added new task classes util.DownloadZip, command.SalesforceCommand,
and command.SalesforceBrowserTestCommand that can be mapped in
individual projects to configure browser tests or other commands run
against a Salesforce org. The commands are automatically passed a
refreshed [SF_ACCESS_TOKEN]{.title-ref} and
[SF_INSTANCE_URL]{.title-ref} environment variables.
- Added new CLI commands [cci project connect_saucelabs]{.title-ref}
and [cci project show_saucelabs]{.title-ref}
- Added ci-install-beta flow that uninstalls the
previous managed version then installs the latest beta without
running apex tests
- Added new method cumulusci.utils.download_extract_zip to download
and extract a zip including re-rooting the zip to a subfolder.
- All Salesforce tasks now delete any tempdirs they create to prevent
wasting disk space
## 2.0.0-beta7 (2017-01-17)
- [run_tests_debug]{.title-ref} now ignores all non-test methods
including any method decorated with \@testSetup
## 2.0.0-beta6 (2017-01-17)
- Return full info when a component failure occurs on a Metadata API
deployment. Previously only the problem was shown without context
like file name and line number making it difficult to figure out
what caused the failure.
- [run_tests_debug]{.title-ref} now ignores the \@testSetup method
when parsing debug logs. Previously it would throw an error if tests
used \@testSetup
## 2.0.0-beta5 (2017-01-16)
- Fixes for the unmanaged-ee flow to fix a bug where
avialableFields elements were not properly being stripped from
fieldsSets in .object files
- Fixes for github-master-to-feature where merge
conflicts would throw exception rather than creating a pull request
as expected
## 2.0.0-beta4 (2017-01-13)
- Add update-admin-profile to all flows that deploy or
install to a Salesforce org. Note that this adjusted the task
numbers in some flows so you should double check your project
specific flow customizations.
## 2.0.0-beta3 (2017-01-13)
- Remove `deploy-post-managed` task from the default
ci-master flow. Deploying the unpackaged/post content
to the packaging org risks the spider accidentally including some of
it in the package. Projects that want to run
`deploy-post-managed` against the packaging org can
extend ci-master in their cumulusci.yml file to add
it.
## 2.0.0-beta2 (2017-01-12)
- Fix a bug in project_config.get_latest_version() with tags that
don't match either the beta or release prefix.
## 2.0.0-beta1 (2017-01-12)
- Move into the master branch!
- Changed primary CLI command to [cci]{.title-ref} and left
[cumulusci2]{.title-ref} available for legacy support
- Changed all docs to use [cci]{.title-ref} command in examples
- Peg push api tasks to api version 38.0 rather than project api
version
- Added 2 new flows: install-beta and
install-prod which install the latest managed version
of the package with all dependencies but without running tests
- release-beta flow now runs
github-master-to-feature at the end of the flow
## 2.0.0-alpha42 (2017-01-10)
- Metadata API calls now progressively wait longer between each status
check to handle calls with long Pending times. Each check also now
outputs a line saying how long it will sleep before the next check.
## 2.0.0-alpha41 (2017-01-06)
- Fix bug in uninstall-packaged-incremental where the
task would error out if no metadata was found to delete
## 2.0.0-alpha40 (2017-01-06)
- uninstall-packaged-incremental task now skips the
deploy step if now metadata was found to be deleted
## 2.0.0-alpha39 (2017-01-06)
- Two new task classes exist for loading and deleting data via Bulk
API. Note that there are no default task mappings for these classes
as the mappings should be project specific. Define your own mappings
in your project's cumulusci.yml file to use them.
- **cumulusci.tasks.bulkdata.LoadData**: Loads relational data
from a sqlite database into Salesforce objects using a yaml file
for mapping
- **cumulusci.tasks.bulkdata.DeleteData**: Deletes all records
from specified objects in order of object list
- Added support for customPermissions
- Added new Command task that can be used to call arbitrary commands
with configurable environment variables
## 2.0.0-alpha38 (2016-12-28)
- Scratch orgs now cache the org info locally during flow execution to
prevent multiple calls out to the Heroku CLI that are unnecessary
- Scratch org calls now properly capture and print both stdout and
stderr in the case of an exception in calls to Heroku CLI
- [run_tests_debug]{.title-ref} now deletes existing TraceFlag objects
in addition to DebugLevels
- Fix bug in push-all and push-sandbox
- Push tasks now use timezone for start_date option
## 2.0.0-alpha37 (2016-12-20)
- []github-release-notes() now correctly handles the
situation where a merge commit's date can be different than the
PR's merged_at date in Github by comparing commit sha's
## 2.0.0-alpha36 (2016-12-20)
- github-release now works with an existing tag/ref and
sleeps for 3 seconds after creating the tag to allow Github time to
catch up
## 2.0.0-alpha35 (2016-12-20)
- Remove github-release
since the Github API doesn't support querying draft releases
## 2.0.0-alpha34 (2016-12-20)
- Fix bug with github-release that was causing
validation errors from Github
## 2.0.0-alpha33 (2016-12-20)
- []github-release-notes() now raises an exception in
[publish]{.title-ref} mode if the release doesn't exist instead of
attempting to create it. Use github-release to create
the release first before calling []github-release-notes()
- Fix a bug with dynamic task option lookup in flows
## 2.0.0-alpha32 (2016-12-19)
- Move logger configuration out of core and into CLI so other
implementations can provide their own logger configurations
- Added [retry_interval]{.title-ref} and
[retry_interval_add]{.title-ref} options to
install-beta to introduce a progressive delay between
retry attempts when the package is unavailable
## 2.0.0-alpha30 (2016-12-13)
- **IMPORANT** This release changes the yaml structure for flows. The
new structure now looks like this:
flows:
flow_name:
tasks:
1:
task: deploy
2:
task: run_tests
- See the new flow customization examples in the cookbook for examples
of why this change was made and how to use it:
## 2.0.0-alpha30 (2016-12-12)
- Bug fixes submitted by \@ccarter:
- uninstall-post was failing to substitute
namespaces
- new util method [findRename]{.title-ref} to rename files with a
token in their name
- Bug fix with Unicode handling in run_tests_debug
## 2.0.0-alpha29 (2016-12-12)
- Require docutils to supprot rst2ansi
## 2.0.0-alpha28 (2016-12-12)
- Modified tasks and flows to properly re-raise exceptions
## 2.0.0-alpha27 (2016-12-12)
- [cci]{.title-ref} should now throw the direct exception rather than
making it look like the exception came through click
- [cci task doc]{.title-ref} command outputs RST format documentation
of all tasks
- New doc with info on all tasks:
## 2.0.0-alpha26 (2016-12-09)
- Bug fix, missing import of re in core/config.py
## 2.0.0-alpha25 (2016-12-09)
- Fixed run_tests and run_tests_debug tasks to fail throwing an
exception on test failure
- run_tests_debug now stores debug logs in a tempdir
- Have the CLI handle ApexTestException events with a nicer error
rather than a full traceback which isn't helpful to determining the
apex failure
- BaseMetadataApi will now throw MetadataApiError after a Failed
status is set
- BaseFlow now throws the original exception rather than a more
generic one that obscures the actual failure
## 2.0.0-alpha24 (2016-12-09)
- Bug fix release, flow_run in the CLI should accept debug argument
and was throwing and error
## 2.0.0-alpha23 (2016-12-09)
- [cci org browser]{.title-ref} now saves the org back to the
keychain. This fixes an issue with scratch orgs where a call to org
browser on a scratch org that hasn't been created yet gets created
but doesn't persist after the command
- [task run]{.title-ref} and [flow run]{.title-ref} now support the
[--debug]{.title-ref} flag which will drop you into the Python
interactive debugger (pdb) at the point of the exception.
- Added Cookbook to the docs:
- [flow run]{.title-ref} with the [--delete-org]{.title-ref} option
flag and scratch orgs no longer fails the flow if the delete org
call fails.
- Fixed the deploy-post task which has having errors
with namespaced file names
- Fixed update-admin-profile to properly update the
profile. This involved fixing the utils [findReplace]{.title-ref}
and [findReplaceRegex]{.title-ref}.
- Reworked exceptions structure and ensure that tasks throw an
exception where approriate.
## 2.0.0-alpha22 (2016-12-02)
- Fix for bug in deploy_post when using the filename token to merge
namespace into a filename
## 2.0.0-alpha21 (2016-12-01)
- Added support for global and project specific orgs, services, and
connected app. The global credentials will be used by default if
they exist and individual projects an override them.
- Orgs still default to creating in the project level but the
[--global]{.title-ref} flag can be used in the CLI to create an
org
- [config_connected_app]{.title-ref} command now sets the
connected app as global by default. Use the '--project' flag
to set as a project override
- [connect_github]{.title-ref}, [connect_mrbelvedere]{.title-ref},
and [connect_apextestsdb]{.title-ref} commands now set the
service as global by default. Use the '--project' flag to set
as a project override
## 2.0.0-alpha20 (2016-11-29)
- Remove pdb from BaseFlow.\_\_call\_\_ (oops)
## 2.0.0-alpha19 (2016-11-29)
- Fix IOError issue with update_admin_profile when using the egg
version
- Changed cci task_run and flow_run commands to no longer swallow
unknown exceptions so a useful error message with traceback is shown
- Centralized loggers for BaseConfig, BaseTask, and BaseFlow under
cumulusci.core.logger and changed logs to always write to a temp
file available as self.log_file on any config, task, or flow
subclass.
## 2.0.0-alpha18 (2016-11-17)
- New task [apextestsdb_upload]{.title-ref} uploads json test data to
an instance of ApexTestsDB
- Fixed bug in CLI when running tasks that don't require an org
- Include mappings for Community Template metadata types in
package.xml generator
## 2.0.0-alpha17 (2016-11-15)
- Community contributions by \@cdcarter
- query task using the Bulk Data API
- [--login-url]{.title-ref} option on [cci org
connect]{.title-ref}
- Salesforce DX wrapper
- NOTE: Requires developer preview access to Salesforce DX
- [cci org scratch \ \]{.title-ref}
creates a wrapper for a scratch org in your keychain
- Tasks and Flows run against a scratch org will create the
scratch org if needed
- [cci org scratch_delete \]{.title-ref} deletes a
scratch org that was created by running a task or flow
- [cci flow run]{.title-ref} now supports the
[--delete-org]{.title-ref} option to delete a scratch org at
the end of the flow
- [BaseSalesforceDXTask]{.title-ref} wraps the heroku force:\*
commands. The dx-push task is provided as an
example.
- NOTE: Currently the command output is buffered and only
outputs when the command completes.
- Integration with mrbelvedere
- mrbelvedere-publish task publishes a beta or
release tag to an existing package on mrbelvedere
- Flow changes
> - ci-feature now runs tests as part of the flow
> - New flow task configuration [ignore_failure]{.title-ref} can
> be used to ignore a failure from a particular task in the flow
- CUMULUSCI_KEY is no longer required if using a keychain class with
the encrypted attribute set to False such as the
EnvironmentProjectKeychain
- Refactored OAuth token refresh to be more centralized and raise a
proper exception if there is an issue
- The org keychain now correctly uses the instance url when
appropriate
- Calls to runTestsAsynchronous in the Tooling API are now done via
POST instead of GET
## 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:
## 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]{.title-ref}
- Added handling for packed git references in the file
.git/packed-refs
- Docs now available at
- 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 [cci version]{.title-ref} 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]{.title-ref} for printing text tables in
the following CLI commands:
- cci org list
- cci task list
- cci task info
- cci flow list
- Easier project set up: [cci project init]{.title-ref} 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: cci 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: cci task run --org packaging -o version 1.1 push_qa
- push_sandbox: Pushes a package version to all available sandbox
subscriber orgs
- ex: cci 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: cci 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
- cci project connect_apextestsdb: Stores ApexTestDB auth
configuration in the keychain for use by tasks that require
ApexTestsDB access
- cci project connect_github: Stores Github auth configuration in
the keychain for use by tasks that require Github access
- cci project connect_mrbelvedere: Stores mrbelvedere auth
configuration in the keychain for use by tasks that require
access to mrbelvedere
- cci project show_apextestsdb: Shows the configured ApexTestsDB
auth info
- cci project show_github: Shows the configured Github auth info
- cci 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 \
- 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.