Skip to main content
Featured group

CumulusCI (CCI)

CumulusCI is built and maintained by Salesforce.org. We use it for our own product development and look forward to helping you use it for everything from app development to maintaining your individual Salesforce org.

I'm trying to retire an email address, and changed the email for my github account, then reconnected github for cumulusCI, but the admin-email hasn't changed. 

 

Anyone know how to change it?

3 answers
  1. Jun 5, 6:44 PM

    I'm not 100% certain but it might be your local git configuration, unless you've defined the email_address property in your scratch org config file. 

     

    If you type this command, does it show your old email address?

    git config user.email

     

    If so, to change it type:

    git config user.email "your@emailhere.com"

     

    To apply the change across all git projects, use --global:

    git config --global user.email "your@emailhere.com"

     

    Reference:

    https://docs.github.com/en/account-and-profile/how-tos/email-preferences/setting-your-commit-email-address

0/9000

Every time I try to run a flow on my dev org, it re-creates it, and then fails with an error: 

 

Error: Expired session for 

https://drive-momentum-5540-dev-ed.scratch.my.salesforce.com/services/data/v66.0/sobjects/Organization/%5BREDACTED%5D%20Use%20'sf%20org%20auth%20show-access-token'%20to%20view

. Response content: [{'message': 'INVALID_AUTH_HEADER', 'errorCode': 'INVALID_AUTH_HEADER'}] 

Run this command for more information about debugging errors: cci error --help 

 

What's going on? 

 

Here's a gist from the `cci error` command:

https://gist.github.com/deb761/a40f8531d8785fcf3b249ec5044fa2e6

3 comments
0/9000

Help with an error?

I'm trying to push from a repo to a sandbox. I've been working through all the stupid little errors due to fields in scratch org that aren't in the sandbox. But now I'm down to the last few things and I'm a little stuck. It looks like it's not happy with my Quick Action on a custom object for sending email. Any suggestions?

Here's the stacktrace:

2020-10-02 14:54:21: [Failed]: Update of QuickAction Ticket__c.TicketEmail: Error: Parent Target Field: bad value for restricted picklist field: RelatedTo

 

Update of Profile Law Firm Platform User: Error: Unknown user permission: AllowUniversalSearch

 

Update of Profile Admin: Error: Unknown user permission: AllowUniversalSearch

 

Update of Layout Ticket__c-Ticket Layout: Error: In field: QuickAction - no QuickAction named Ticket__c.TicketEmail found

2020-10-02 14:54:21: Exception in task deploy_unmanaged.deploy

 

Error: Could not process MDAPI response: Update of QuickAction Ticket__c.TicketEmail: Error: Parent Target Field: bad value for restricted picklist field: RelatedTo

 

Update of Profile Law Firm Platform User: Error: Unknown user permission: AllowUniversalSearch

 

Update of Profile Admin: Error: Unknown user permission: AllowUniversalSearch

 

Update of Layout Ticket__c-Ticket Layout: Error: In field: QuickAction - no QuickAction named Ticket__c.TicketEmail found

Run this command for more information about debugging errors: cci error --help

michaelkolodner@Michaels-MacBook-Pro LawFirm % cci error info

 

Traceback (most recent call last):

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/cli/cci.py", line 223, in main

  cli(standalone_mode=False)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/click/core.py", line 829, in __call__

  return self.main(*args, **kwargs)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/click/core.py", line 782, in main

  rv = self.invoke(ctx)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/click/core.py", line 1259, in invoke

  return _process_result(sub_ctx.command.invoke(sub_ctx))

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/click/core.py", line 1259, in invoke

  return _process_result(sub_ctx.command.invoke(sub_ctx))

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/click/core.py", line 1066, in invoke

  return ctx.invoke(self.callback, **ctx.params)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/click/core.py", line 610, in invoke

  return callback(*args, **kwargs)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/cli/cci.py", line 166, in new_func

  func(RUNTIME, *args, **kw)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/cli/cci.py", line 1549, in flow_run

  coordinator.run(org_config)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/core/flowrunner.py", line 359, in run

  self._run_step(step)

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/core/flowrunner.py", line 398, in _run_step

  raise result.exception # PY3: raise an exception type we control *from* this exception instead?

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/core/flowrunner.py", line 216, in run_step

  task()

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/core/tasks.py", line 136, in __call__

  self.result = self._run_task()

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/tasks/salesforce/BaseSalesforceMetadataApiTask.py", line 15, in _run_task

  result = api()

 File "/usr/local/Cellar/cumulusci/3.20.0/libexec/lib/python3.8/site-packages/cumulusci/salesforce_api/metadata.py", line 70, in __call__

  raise MetadataParseError(

cumulusci.salesforce_api.exceptions.MetadataParseError: Could not process MDAPI response: Update of QuickAction Ticket__c.TicketEmail: Error: Parent Target Field: bad value for restricted picklist field: RelatedTo

 

Update of Profile Law Firm Platform User: Error: Unknown user permission: AllowUniversalSearch

 

Update of Profile Admin: Error: Unknown user permission: AllowUniversalSearch

 

Update of Layout Ticket__c-Ticket Layout: Error: In field: QuickAction - no QuickAction named Ticket__c.TicketEmail found

 

michaelkolodner@Michaels-MacBook-Pro LawFirm % 

13 comments
  1. May 2, 2:58 AM

    or if your org has been hibernating for a decade - you may need to enable enhanced email

0/9000

We are trying to set up an Allow List with Org Ids at the Product level with the following settings: 

  • All Org Types are Unchecked 
  • List for Allow By Orgs is Checked

After adding an Org Id in the allow list and logging into the allowed org, the product tile does not show up on the site and additionally the installation (by URL) remains restricted.  

If we restart the dynos then eventually the Org restricted product tile shows up on the site and the install url works for a while.  

After the installation, the product tile disappears again and the url is back to restricted.  

What is the expected behavior? Should the tile appear or not? Once the Org Id is on the Allowed list is it unrestricted forever? Should we have to restart the dynos for this to take effect when Org Ids are added? 

We are observing very inconsistent behavior, but unsure how this should work. Any guidance would be much appreciated.  

Thanks!

1 answer
  1. Apr 23, 8:28 PM

    Just in case anyone else runs into this. This turned out to require a change in the metadeploy view.py code to remove products caching. Restricting by org Id works nicely now! 

0/9000

Hi, 

 

I'm trying to setup metadeploy to deploy 2 products that are in the same git repo, and I'm getting an error

[MultipleObjectsReturned: get() returned more than one Product -- it returned 2!]

 on installing either one of them. Does this mean that metadeploy requires each product to have a separate repo? 

 

  File "/app/metadeploy/api/

jobs.py

", line 76, in finalize_result 

    yield 

  File "/app/metadeploy/api/

jobs.py

", line 220, in run_flows 

    repo_root = stack.enter_context( 

                ^^^^^^^^^^^^^^^^^^^^ 

  File "/app/.heroku/python/lib/python3.12/

contextlib.py

", line 526, in enter_context 

    result = _enter(cm) 

             ^^^^^^^^^^ 

  File "/app/.heroku/python/lib/python3.12/

contextlib.py

", line 137, in __enter__ 

    return next(self.gen) 

           ^^^^^^^^^^^^^^ 

  File "/app/metadeploy/api/

github.py

", line 21, in local_github_checkout 

    product = Product.objects.get(repo_url__endswith=repo_url_ending) 

              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

  File "/app/.heroku/python/lib/python3.12/site-packages/django/db/models/

manager.py

", line 87, in manager_method 

    return getattr(self.get_queryset(), name)(*args, **kwargs) 

           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

  File "/app/.heroku/python/lib/python3.12/site-packages/django/db/models/

query.py

", line 640, in get 

    raise self.model.MultipleObjectsReturned( 

 

MultipleObjectsReturned: get() returned more than one Product -- it returned 2!

1 answer
  1. Apr 20, 1:34 PM

    Yes, Metadeploy requires a 1-1 product to repository relationship.

0/9000

Has anyone managed to successfully configure MetaDeploy to use a Salesforce External App instead of a Connected app to authenticate to a Dev Hub org and scratch orgs using OAuth2? 

4 answers
  1. Apr 13, 4:07 PM

    Thank you all for responding. I was still able to create a connected app last week so for now it's working.  

    I did run into errors when trying with an ECA. I will try again in the way

    @Kai Amundsen is suggesting and post back here if successful. It's not ideal, but I need to understand all the options. 

0/9000

Is anybody out there using CumulusCI for Education Cloud? 

 

I've been getting back into using CumulusCI for my own personal use, specifically for learning and using Education Cloud with scratch orgs. I've started automating some of the setup and configuration of certain features, as well as using Snowfakery for creating sample records, and I'm just curious if other folks are doing the same. It's nowhere near complete, but I'm considering making the repository public for others to benefit from it, too. 

 

If you are using CCI for Education Cloud scratch orgs or demo orgs - are there specific configuration steps that you would find helpful to be automated? What sample data is most important for you to have? 

 

I'm going to keep working on this for my own benefit regardless but would love to prioritize automating the things that would be most beneficial!

3 comments
  1. Apr 3, 6:17 PM

    Just circling back on this post to share that I've made the repository public: https://github.com/Soaring-Peaks-Consulting/education-cloud-customizations

      

     

    While it's still a work in progress, I wanted to get it out there early to get feedback from others using scratch orgs for development and exploration of Education Cloud. 

     

    And for more information about what's included, a demo video, and more, I've created a dedicated page here:

    https://soaringpeaksconsulting.com/resources/education-cloud-scratch-orgs/

0/9000

Trying to make a beta package with the "build_feature_test_package" command, and I'm getting an error when trying to install the package. It's happening in flows, and the component referenced is part of the package. 

 

1. Flow(Letter_Template_Clone_with_Merge_Fields) Navigate_to_new_Letter_Template (Action) - We can't find an action with the name and action type that you specified. 

Letter_Template_Clone_with_Merge_Fields: Navigate_to_new_Letter_Template (Action) - We can't find an action with the name and action type that you specified. 

 

2. Flow(Letter_Template_Generate_Template) duplicate value found: <unknown> duplicates value on record with id: <unknown> 

Letter_Template_Generate_Template: duplicate value found: <unknown> duplicates value on record with id: <unknown>

1 answer
  1. Mar 21, 2:31 AM
    Might be a namespace issue. If you paste the relevant XML snippets for those two Flow elements, I might be able to reproduce in a scratch org or if you can share a gut repo I can investigate.
0/9000

I opened a bug last June about a warning message CCI (or rather setuptools) has been giving for a while about pkg_resources being deprecated: https://github.com/SFDO-Tooling/CumulusCI/issues/3907

 

Well, setuptools v. 82 is out since 8th Feb and pkg_resources is finally gone:

https://github.com/pypa/setuptools/tree/v82.0.0

 

 

As a workaround, we can still pin setuptools at v. 81, but realistically, this needed addressed long before the end of the year, and the bug hasn't even been acknowledged as yet. 

 

Given that the last bug marked as fixed was another one of mine back in September, and the continued dependency on Pydantic V1 forcing users to stick with Python 3.11 (

https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000j9Ux40AE), this does raise concerns about whether CCI is actually still being maintained to the degree that it will remain usable.

2 answers
0/9000

I think I've found a bug where CCI projects can't have a flow with an asynchronous path. 

 

I'm still confirming to my satisfaction that this is replicable, and I don't know if it's a CCI problem or an SFDX problem. Steps to reproduce: 

1. Create a scratch org. 

2. Build a flow (mine's on Opportunity) that has an asynchronous path. (This, of course, requires entry criteria for "only when the record is updated to meet conditions.) Leave the default that you're building in auto-layout. 

3. Put something on that async path. (I have a Get Records element.) 

4. Save the flow. 

5. Download the flow to your repo (cci task run retrieve_changes) 

6. Spin up a new scratch org that includes with your project and the flow we just built. 

7. Open the org in the browser and go into the flow.  

8. Notice that the flow is now in freeform layout. And the asynch path doesn't exist. And your flow element isn't attached to the Start element. And you get an error warning that nothing is connected to the Start element.

1 answer
  1. Jan 22, 10:01 PM

    Definitely replicable for me. 

    Also (in #8) if you go into the start element, the slider for Add Asynchronous Path is actually turned off.

0/9000