|
| 1 | +version: '3' |
| 2 | + |
| 3 | +vars: |
| 4 | + SHOULD_RUN: "yes" |
| 5 | + ENV: "prod" |
| 6 | + FEATURE_ENABLED: "true" |
| 7 | + FEATURE_DISABLED: "false" |
| 8 | + |
| 9 | +tasks: |
| 10 | + # Basic command-level if (condition met) |
| 11 | + cmd-if-true: |
| 12 | + cmds: |
| 13 | + - cmd: echo "executed" |
| 14 | + if: "true" |
| 15 | + |
| 16 | + # Basic command-level if (condition not met) |
| 17 | + cmd-if-false: |
| 18 | + cmds: |
| 19 | + - cmd: echo "should not appear" |
| 20 | + if: "false" |
| 21 | + - echo "this runs" |
| 22 | + |
| 23 | + # Task-level if (condition met) |
| 24 | + task-if-true: |
| 25 | + if: "true" |
| 26 | + cmds: |
| 27 | + - echo "task executed" |
| 28 | + |
| 29 | + # Task-level if (condition not met) |
| 30 | + task-if-false: |
| 31 | + if: "false" |
| 32 | + cmds: |
| 33 | + - echo "should not appear" |
| 34 | + |
| 35 | + # With template variables |
| 36 | + if-with-template: |
| 37 | + cmds: |
| 38 | + - cmd: echo "Running because SHOULD_RUN={{.SHOULD_RUN}}" |
| 39 | + if: '[ "{{.SHOULD_RUN}}" = "yes" ]' |
| 40 | + |
| 41 | + # If inside for loop |
| 42 | + if-in-for-loop: |
| 43 | + cmds: |
| 44 | + - for: ["a", "b", "c"] |
| 45 | + cmd: echo "processing {{.ITEM}}" |
| 46 | + if: '[ "{{.ITEM}}" != "b" ]' |
| 47 | + |
| 48 | + # If on task call |
| 49 | + if-on-task-call: |
| 50 | + cmds: |
| 51 | + - task: subtask |
| 52 | + if: "true" |
| 53 | + |
| 54 | + subtask: |
| 55 | + internal: true |
| 56 | + cmds: |
| 57 | + - echo "subtask ran" |
| 58 | + |
| 59 | + # If combined with platforms (both must pass) |
| 60 | + if-with-platforms: |
| 61 | + cmds: |
| 62 | + - cmd: echo "condition and platform met" |
| 63 | + platforms: [linux, darwin, windows] |
| 64 | + if: "true" |
| 65 | + |
| 66 | + # Skip task call |
| 67 | + skip-task-call: |
| 68 | + cmds: |
| 69 | + - task: subtask |
| 70 | + if: "false" |
| 71 | + - echo "after skipped task call" |
| 72 | + |
| 73 | + # Task call in cmds with if condition met |
| 74 | + task-call-if-true: |
| 75 | + cmds: |
| 76 | + - task: subtask |
| 77 | + if: "true" |
| 78 | + - echo "after task call" |
| 79 | + |
| 80 | + # Task call in cmds with if condition not met |
| 81 | + task-call-if-false: |
| 82 | + cmds: |
| 83 | + - task: subtask |
| 84 | + if: "false" |
| 85 | + - echo "continues after skipped task" |
| 86 | + |
| 87 | + # Template eq - condition met |
| 88 | + template-eq-true: |
| 89 | + cmds: |
| 90 | + - cmd: echo "env is prod" |
| 91 | + if: '{{ eq .ENV "prod" }}' |
| 92 | + |
| 93 | + # Template eq - condition not met |
| 94 | + template-eq-false: |
| 95 | + cmds: |
| 96 | + - cmd: echo "should not appear" |
| 97 | + if: '{{ eq .ENV "dev" }}' |
| 98 | + - echo "this runs" |
| 99 | + |
| 100 | + # Template ne (not equal) |
| 101 | + template-ne: |
| 102 | + cmds: |
| 103 | + - cmd: echo "env is not dev" |
| 104 | + if: '{{ ne .ENV "dev" }}' |
| 105 | + |
| 106 | + # Template with boolean-like variable |
| 107 | + template-bool-true: |
| 108 | + cmds: |
| 109 | + - cmd: echo "feature enabled" |
| 110 | + if: '{{ eq .FEATURE_ENABLED "true" }}' |
| 111 | + |
| 112 | + # Template with boolean-like variable (false) |
| 113 | + template-bool-false: |
| 114 | + cmds: |
| 115 | + - cmd: echo "should not appear" |
| 116 | + if: '{{ eq .FEATURE_DISABLED "true" }}' |
| 117 | + - echo "feature was disabled" |
| 118 | + |
| 119 | + # Direct true/false from template |
| 120 | + template-direct-true: |
| 121 | + cmds: |
| 122 | + - cmd: echo "direct true works" |
| 123 | + if: '{{ .FEATURE_ENABLED }}' |
| 124 | + |
| 125 | + # Direct true/false from template (false case) |
| 126 | + template-direct-false: |
| 127 | + cmds: |
| 128 | + - cmd: echo "should not appear" |
| 129 | + if: '{{ .FEATURE_DISABLED }}' |
| 130 | + - echo "direct false skipped correctly" |
| 131 | + |
| 132 | + # Template with CLI variable override |
| 133 | + template-cli-var: |
| 134 | + cmds: |
| 135 | + - cmd: echo "MY_VAR is yes" |
| 136 | + if: '{{ eq .MY_VAR "yes" }}' |
| 137 | + |
| 138 | + # Combined template conditions with and |
| 139 | + template-and: |
| 140 | + cmds: |
| 141 | + - cmd: echo "both conditions met" |
| 142 | + if: '{{ and (eq .ENV "prod") (eq .FEATURE_ENABLED "true") }}' |
| 143 | + |
| 144 | + # Combined template conditions with or |
| 145 | + template-or: |
| 146 | + cmds: |
| 147 | + - cmd: echo "at least one condition met" |
| 148 | + if: '{{ or (eq .ENV "dev") (eq .ENV "prod") }}' |
| 149 | + |
| 150 | + # Task-level if with template |
| 151 | + task-level-template: |
| 152 | + if: '{{ eq .ENV "prod" }}' |
| 153 | + cmds: |
| 154 | + - echo "task runs in prod" |
| 155 | + |
| 156 | + # Task-level if with template (not met) |
| 157 | + task-level-template-false: |
| 158 | + if: '{{ eq .ENV "dev" }}' |
| 159 | + cmds: |
| 160 | + - echo "should not appear" |
0 commit comments