
By default, every step in your .probo.yaml runs on every build. When you need a step to run only for certain branches — for example, deploying only from main, or seeding demo content everywhere except release branches — you can add branch restrictions to individual steps.
| Key | Behavior |
|---|---|
branches | Allow-list. The step only runs when the build’s branch matches. |
skipBranches | Deny-list. The step is skipped when the build’s branch matches. |
Each key accepts a single branch name or a list of names. When both keys are present on the same step, skipBranches takes precedence. A step with neither key always runs, preserving the default behavior.
A * acts as a wildcard that matches any run of characters. This is useful for matching a family of branches:
release/* matches release/1.2, release/hotfix, and release/next.feature/* matches any feature branch.Matching is performed against the full branch name.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | steps: # Runs on every branch (no restrictions). - name: Run Tests plugin: Shell command: ./run-tests.sh # Only runs on the main branch. - name: Deploy to Staging plugin: Shell command: ./deploy.sh branches: main # Only runs on release branches. - name: Tag Release Build plugin: Shell command: ./tag-release.sh branches: - 'release/*' # Runs everywhere except release and hotfix branches. - name: Seed Demo Content plugin: Shell command: drush en demo_content -y skipBranches: - 'release/*' - hotfix/* |
Branch-based builds started from a specific commit or hash may not carry branch context. When no branch is known, restricted steps are run rather than skipped, so a step is never silently dropped when Probo cannot determine the branch.

When you sign up for a Probo.CI registration code, you will get a two week trial of the plan of your choosing. For more information on how to get started, click here .
LEARN MORE ABOUT PROBO.CI'S PRICING