Conditionally skip pipeline step based on param

I have a project which is deployed in two phases.

  1. canary setup and traffic shaping
  2. full traffic switch and canary promotion

There are multiple other steps that are triggered as part of deployment (shipping container, publishing assets, warming cache etc.).
Lets take the configuration for example:

pipeline:
    ship:
        when:
            event: deployment
    assets:
        when:
            event: deployment
    deploy:
        when:
            event: deployment
    promote:
        when:
            event: deployment

In my actual use case I want to trigger the deployment with parameter action=deploy and have all steps but promote triggered, and then trigger the deployment once again with parameter action=switch but this time only trigger promote.

Since drone does not allow params in condition blocks I am struggling to make this work.
Is there any way to achieve this?