antelope-cli 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/ansible/onboarding-ca/README.md +105 -105
  2. package/ansible/onboarding-ca/onboard-ca.yml +43 -51
  3. package/ansible/onboarding-ca/requirements.yml +8 -8
  4. package/ansible/onboarding-ca/roles/onboard_ca/defaults/main.yml +77 -49
  5. package/ansible/onboarding-ca/roles/onboard_ca/meta/main.yml +10 -10
  6. package/ansible/onboarding-ca/roles/onboard_ca/tasks/main.yml +311 -193
  7. package/ansible/onboarding-ca/roles/onboard_ca/tasks/per_branch.yml +114 -107
  8. package/ansible/onboarding-ca/roles/onboard_ca/vars/main.yml +9 -9
  9. package/ansible/onboarding-crm/README.md +107 -0
  10. package/ansible/onboarding-crm/onboard-crm.yml +60 -0
  11. package/ansible/onboarding-crm/requirements.yml +8 -0
  12. package/ansible/onboarding-crm/roles/onboard_crm/defaults/main.yml +99 -0
  13. package/ansible/onboarding-crm/roles/onboard_crm/meta/main.yml +10 -0
  14. package/ansible/onboarding-crm/roles/onboard_crm/tasks/main.yml +324 -0
  15. package/ansible/onboarding-crm/roles/onboard_crm/tasks/per_branch.yml +121 -0
  16. package/ansible/onboarding-crm/roles/onboard_crm/vars/main.yml +9 -0
  17. package/index.js +12 -12
  18. package/onboarding/brand.js +21 -21
  19. package/onboarding/createConfig.js +71 -71
  20. package/onboarding/favicon.js +24 -24
  21. package/onboarding/index.js +62 -62
  22. package/onboarding/logo.js +16 -16
  23. package/onboarding/themes.js +92 -92
  24. package/onboarding/translations.js +41 -41
  25. package/onboarding/variablesColors.js +58 -58
  26. package/onboarding-ca/brand.js +13 -13
  27. package/onboarding-ca/index.js +94 -94
  28. package/onboarding-ca/riskDisclaimer.js +27 -27
  29. package/onboarding-ca/scss.js +24 -24
  30. package/onboarding-ca/templates/risk-disclaimer.html +12 -12
  31. package/onboarding-crm/brand.js +22 -22
  32. package/onboarding-crm/brandLogos.js +31 -0
  33. package/onboarding-crm/createConfig.js +40 -40
  34. package/onboarding-crm/index.js +175 -171
  35. package/onboarding-crm/themes.js +1 -1
  36. package/onboarding-crm/variablesColors.js +2 -3
  37. package/package.json +30 -30
@@ -1,193 +1,311 @@
1
- ---
2
- # --- Resolve secrets: prefer the provided value, else fall back to 1Password (op CLI) ---
3
- # The op fallback needs a signed-in `op` on the control node (op signin, or
4
- # OP_SERVICE_ACCOUNT_TOKEN). A missing/failed op is tolerated here; the validate step
5
- # below reports the still-empty token with a clear message.
6
- - name: Fetch the Bitbucket API token from 1Password
7
- when: (bitbucket_token | default('') | length) == 0
8
- ansible.builtin.command:
9
- argv:
10
- - op
11
- - item
12
- - get
13
- - "{{ onepassword_bitbucket_item }}"
14
- - "--fields"
15
- - "label={{ onepassword_bitbucket_field }}"
16
- - "--reveal"
17
- register: op_bitbucket
18
- changed_when: false
19
- failed_when: false
20
- no_log: true
21
-
22
- - name: Adopt the 1Password Bitbucket token
23
- when:
24
- - (bitbucket_token | default('') | length) == 0
25
- - op_bitbucket is not skipped
26
- - (op_bitbucket.rc | default(1)) == 0
27
- - (op_bitbucket.stdout | default('') | length) > 0
28
- ansible.builtin.set_fact:
29
- bitbucket_token: "{{ op_bitbucket.stdout | trim }}"
30
- no_log: true
31
-
32
- # Consul token is only needed when destination branches are derived (no dest_branches override).
33
- - name: Resolve the Consul token from the environment
34
- when: (consul_token | default('') | length) == 0
35
- ansible.builtin.set_fact:
36
- consul_token: "{{ lookup('env', 'CONSUL_HTTP_TOKEN') }}"
37
- no_log: true
38
-
39
- - name: Fetch the Consul token from 1Password
40
- when:
41
- - (consul_token | default('') | length) == 0
42
- - (dest_branches | default('') | length) == 0
43
- ansible.builtin.command:
44
- argv:
45
- - op
46
- - item
47
- - get
48
- - "{{ onepassword_consul_item }}"
49
- - "--fields"
50
- - "label={{ onepassword_consul_field }}"
51
- - "--reveal"
52
- register: op_consul
53
- changed_when: false
54
- failed_when: false
55
- no_log: true
56
-
57
- - name: Adopt the 1Password Consul token
58
- when:
59
- - (consul_token | default('') | length) == 0
60
- - op_consul is not skipped
61
- - (op_consul.rc | default(1)) == 0
62
- - (op_consul.stdout | default('') | length) > 0
63
- ansible.builtin.set_fact:
64
- consul_token: "{{ op_consul.stdout | trim }}"
65
- no_log: true
66
-
67
- - name: Validate required inputs
68
- ansible.builtin.assert:
69
- that:
70
- - brand_name is defined and (brand_name | length) > 0
71
- - jira_key_client_branding is defined and (jira_key_client_branding | length) > 0
72
- - bitbucket_token is defined and (bitbucket_token | length) > 0
73
- - bitbucket_email is defined and (bitbucket_email | length) > 0
74
- fail_msg: >-
75
- brand_name, jira_key_client_branding and bitbucket_email are required, and bitbucket_token must be
76
- provided (via --extra-vars / prompt) or resolvable from 1Password item
77
- '{{ onepassword_bitbucket_item }}' field '{{ onepassword_bitbucket_field }}' (op signin).
78
-
79
- - name: Compute effective brand assets folder
80
- ansible.builtin.set_fact:
81
- brand_assets_folder: >-
82
- {{ brand_assets_folder
83
- if (brand_assets_folder | default('') | length) > 0
84
- else (brand_name | lower | regex_replace(' ', '')) }}
85
-
86
- # --- Destination branches: derived from the release train in Consul ------------------
87
- # develop is always onboarded. master-<version/prod> tracks the live release; while a new
88
- # release is staged (version/staging != version/prod) its master-<version/staging> exists
89
- # too and is onboarded as well. Once staging == prod (the release has shipped) there is a
90
- # single master branch. An explicit dest_branches extra-var bypasses the lookup entirely.
91
- - name: Resolve destination branches from Consul
92
- when: (dest_branches | default('') | length) == 0
93
- block:
94
- - name: Consul token is required to derive destination branches
95
- ansible.builtin.assert:
96
- that:
97
- - consul_token is defined and (consul_token | length) > 0
98
- fail_msg: >-
99
- consul_token is required to read version/prod and version/staging. Provide it via
100
- -e consul_token=..., $CONSUL_HTTP_TOKEN, or 1Password item '{{ onepassword_consul_item }}'
101
- (op signin); or pass -e dest_branches=develop,master-XX.Y to bypass the Consul lookup.
102
-
103
- - name: Read the prod release version from Consul
104
- ansible.builtin.uri:
105
- url: "{{ consul_url }}/v1/kv/version/prod?raw=1"
106
- headers:
107
- X-Consul-Token: "{{ consul_token }}"
108
- return_content: true
109
- register: consul_prod
110
-
111
- - name: Read the staging release version from Consul
112
- ansible.builtin.uri:
113
- url: "{{ consul_url }}/v1/kv/version/staging?raw=1"
114
- headers:
115
- X-Consul-Token: "{{ consul_token }}"
116
- return_content: true
117
- register: consul_staging
118
-
119
- - name: Derive the destination branch list from the release versions
120
- ansible.builtin.set_fact:
121
- dest_branch_list: >-
122
- {{ ['develop', 'master-' + (consul_prod.content | trim)]
123
- + (['master-' + (consul_staging.content | trim)]
124
- if (consul_staging.content | trim) != (consul_prod.content | trim) else []) }}
125
-
126
- - name: Normalize destination branch list (explicit override)
127
- when: (dest_branches | default('') | length) > 0
128
- ansible.builtin.set_fact:
129
- dest_branch_list: "{{ dest_branches.split(',') | map('trim') | reject('equalto', '') | list }}"
130
-
131
- - name: Show the resolved destination branches
132
- ansible.builtin.debug:
133
- msg: "Destination branches: {{ dest_branch_list }}"
134
-
135
- # --- Reviewers: pull from the repo's Bitbucket default-reviewers config -------------
136
- - name: Resolve reviewers from repo default-reviewers config
137
- when: (reviewers | length) == 0
138
- block:
139
- - name: Identify the authenticating Bitbucket account (PR author)
140
- ansible.builtin.uri:
141
- url: "{{ api_base }}/user"
142
- url_username: "{{ bitbucket_email }}"
143
- url_password: "{{ bitbucket_token }}"
144
- force_basic_auth: true
145
- return_content: true
146
- register: bb_user
147
-
148
- - name: Fetch the repository default reviewers
149
- ansible.builtin.uri:
150
- url: "{{ api_base }}/repositories/{{ workspace }}/{{ repo_slug }}/default-reviewers?pagelen=100"
151
- url_username: "{{ bitbucket_email }}"
152
- url_password: "{{ bitbucket_token }}"
153
- force_basic_auth: true
154
- return_content: true
155
- register: bb_default_reviewers
156
-
157
- # Bitbucket rejects a PR whose author is also a reviewer, so drop the authenticating account.
158
- # The REST API does not auto-apply default reviewers, so we pass them explicitly.
159
- # Bitbucket's PR-create reviewers array is keyed by uuid; exclude the author by account_id.
160
- # Built in a single expression (not an accumulating set_fact loop, which is nondeterministic).
161
- - name: Build reviewers list (excluding the PR author)
162
- ansible.builtin.set_fact:
163
- reviewers: >-
164
- {{ bb_default_reviewers.json['values']
165
- | rejectattr('account_id', 'equalto', bb_user.json.account_id)
166
- | map(attribute='uuid')
167
- | map('community.general.dict_kv', 'uuid')
168
- | list }}
169
-
170
- - name: Ensure clone parent directory exists
171
- ansible.builtin.file:
172
- path: "{{ work_dir | dirname }}"
173
- state: directory
174
- mode: "0755"
175
-
176
- - name: Clone / refresh web-client-area over SSH
177
- ansible.builtin.git:
178
- repo: "{{ repo_ssh_url }}"
179
- dest: "{{ work_dir }}"
180
- version: "{{ dest_branch_list[0] }}"
181
- update: true
182
- force: true
183
- accept_hostkey: true
184
-
185
- - name: Onboard the brand on each destination branch
186
- ansible.builtin.include_tasks: per_branch.yml
187
- loop: "{{ dest_branch_list }}"
188
- loop_control:
189
- loop_var: dest_branch
190
-
191
- - name: Summary of pull requests
192
- ansible.builtin.debug:
193
- msg: "{{ pr_results | default([]) }}"
1
+ ---
2
+ # --- Resolve secrets: prefer the provided value, else fall back to 1Password (op CLI) ---
3
+ # The op fallback needs a signed-in `op` on the control node (op signin, or
4
+ # OP_SERVICE_ACCOUNT_TOKEN). A missing/failed op is tolerated here; the validate step
5
+ # below reports the still-empty token with a clear message.
6
+ - name: Fetch the Bitbucket API token from 1Password
7
+ when: (bitbucket_token | default('') | length) == 0
8
+ ansible.builtin.command:
9
+ argv:
10
+ - op
11
+ - item
12
+ - get
13
+ - "{{ onepassword_bitbucket_item }}"
14
+ - "--vault"
15
+ - "{{ onepassword_vault }}"
16
+ - "--fields"
17
+ - "label={{ onepassword_bitbucket_field }}"
18
+ - "--reveal"
19
+ register: op_bitbucket
20
+ changed_when: false
21
+ failed_when: false
22
+ no_log: true
23
+
24
+ - name: Adopt the 1Password Bitbucket token
25
+ when:
26
+ - (bitbucket_token | default('') | length) == 0
27
+ - op_bitbucket is not skipped
28
+ - (op_bitbucket.rc | default(1)) == 0
29
+ - (op_bitbucket.stdout | default('') | length) > 0
30
+ ansible.builtin.set_fact:
31
+ bitbucket_token: "{{ op_bitbucket.stdout | trim }}"
32
+ no_log: true
33
+
34
+ # Consul token is only needed when destination branches are derived (no dest_branches override).
35
+ - name: Resolve the Consul token from the environment
36
+ when: (consul_token | default('') | length) == 0
37
+ ansible.builtin.set_fact:
38
+ consul_token: "{{ lookup('env', 'CONSUL_HTTP_TOKEN') }}"
39
+ no_log: true
40
+
41
+ - name: Fetch the Consul token from 1Password
42
+ when:
43
+ - (consul_token | default('') | length) == 0
44
+ - (dest_branches | default('') | length) == 0
45
+ ansible.builtin.command:
46
+ argv:
47
+ - op
48
+ - item
49
+ - get
50
+ - "{{ onepassword_consul_item }}"
51
+ - "--vault"
52
+ - "{{ onepassword_vault }}"
53
+ - "--fields"
54
+ - "label={{ onepassword_consul_field }}"
55
+ - "--reveal"
56
+ register: op_consul
57
+ changed_when: false
58
+ failed_when: false
59
+ no_log: true
60
+
61
+ - name: Adopt the 1Password Consul token
62
+ when:
63
+ - (consul_token | default('') | length) == 0
64
+ - op_consul is not skipped
65
+ - (op_consul.rc | default(1)) == 0
66
+ - (op_consul.stdout | default('') | length) > 0
67
+ ansible.builtin.set_fact:
68
+ consul_token: "{{ op_consul.stdout | trim }}"
69
+ no_log: true
70
+
71
+ - name: Validate required inputs
72
+ ansible.builtin.assert:
73
+ that:
74
+ - brand_name is defined and (brand_name | length) > 0
75
+ - jira_key_client_branding is defined and (jira_key_client_branding | length) > 0
76
+ - bitbucket_token is defined and (bitbucket_token | length) > 0
77
+ - bitbucket_email is defined and (bitbucket_email | length) > 0
78
+ fail_msg: >-
79
+ brand_name, jira_key_client_branding and bitbucket_email are required, and bitbucket_token must be
80
+ provided (via --extra-vars / prompt) or resolvable from 1Password item
81
+ '{{ onepassword_bitbucket_item }}' field '{{ onepassword_bitbucket_field }}' (op signin).
82
+
83
+ - name: Compute effective brand assets folder
84
+ ansible.builtin.set_fact:
85
+ brand_assets_folder: >-
86
+ {{ brand_assets_folder
87
+ if (brand_assets_folder | default('') | length) > 0
88
+ else (brand_name | lower | regex_replace(' ', '')) }}
89
+
90
+ # --- Destination branches: derived from the release train in Consul ------------------
91
+ # develop is always onboarded. master-<version/prod> tracks the live release; while a new
92
+ # release is staged (version/staging != version/prod) its master-<version/staging> exists
93
+ # too and is onboarded as well. Once staging == prod (the release has shipped) there is a
94
+ # single master branch. An explicit dest_branches extra-var bypasses the lookup entirely.
95
+ - name: Resolve destination branches from Consul
96
+ when: (dest_branches | default('') | length) == 0
97
+ block:
98
+ - name: Consul token is required to derive destination branches
99
+ ansible.builtin.assert:
100
+ that:
101
+ - consul_token is defined and (consul_token | length) > 0
102
+ fail_msg: >-
103
+ consul_token is required to read version/prod and version/staging. Provide it via
104
+ -e consul_token=..., $CONSUL_HTTP_TOKEN, or 1Password item '{{ onepassword_consul_item }}'
105
+ (op signin); or pass -e dest_branches=develop,master-XX.Y to bypass the Consul lookup.
106
+
107
+ - name: Read the prod release version from Consul
108
+ ansible.builtin.uri:
109
+ url: "{{ consul_url }}/v1/kv/version/prod?raw=1"
110
+ headers:
111
+ X-Consul-Token: "{{ consul_token }}"
112
+ return_content: true
113
+ register: consul_prod
114
+
115
+ - name: Read the staging release version from Consul
116
+ ansible.builtin.uri:
117
+ url: "{{ consul_url }}/v1/kv/version/staging?raw=1"
118
+ headers:
119
+ X-Consul-Token: "{{ consul_token }}"
120
+ return_content: true
121
+ register: consul_staging
122
+
123
+ - name: Derive the destination branch list from the release versions
124
+ ansible.builtin.set_fact:
125
+ dest_branch_list: >-
126
+ {{ ['develop', 'master-' + (consul_prod.content | trim)]
127
+ + (['master-' + (consul_staging.content | trim)]
128
+ if (consul_staging.content | trim) != (consul_prod.content | trim) else []) }}
129
+
130
+ - name: Normalize destination branch list (explicit override)
131
+ when: (dest_branches | default('') | length) > 0
132
+ ansible.builtin.set_fact:
133
+ dest_branch_list: "{{ dest_branches.split(',') | map('trim') | reject('equalto', '') | list }}"
134
+
135
+ - name: Show the resolved destination branches
136
+ ansible.builtin.debug:
137
+ msg: "Destination branches: {{ dest_branch_list }}"
138
+
139
+ # --- Jira Fix Version: DangerJS fails any web-client-area PR whose linked issue has no
140
+ # Fix Version, so stamp the release version (V<version/prod>) on the ticket BEFORE the
141
+ # branches are pushed. Non-fatal — a missing token / unmatched version warns and skips.
142
+ - name: Set the Jira Fix Version on the branding ticket
143
+ when: manage_jira_fix_version | bool
144
+ block:
145
+ - name: Fetch the Jira token from 1Password
146
+ when: (jira_token | default('') | length) == 0
147
+ ansible.builtin.command:
148
+ argv:
149
+ - op
150
+ - item
151
+ - get
152
+ - "{{ onepassword_jira_item }}"
153
+ - "--vault"
154
+ - "{{ onepassword_vault }}"
155
+ - "--fields"
156
+ - "label={{ onepassword_jira_field }}"
157
+ - "--reveal"
158
+ register: op_jira
159
+ changed_when: false
160
+ failed_when: false
161
+ no_log: true
162
+
163
+ - name: Adopt the 1Password Jira token
164
+ when:
165
+ - (jira_token | default('') | length) == 0
166
+ - op_jira is not skipped
167
+ - (op_jira.rc | default(1)) == 0
168
+ - (op_jira.stdout | default('') | length) > 0
169
+ ansible.builtin.set_fact:
170
+ jira_token: "{{ op_jira.stdout | trim }}"
171
+ no_log: true
172
+
173
+ # master-<ver> / release-<ver> destination branches → Fix Version names (e.g. V27.0).
174
+ - name: Derive the release Fix Version name(s)
175
+ ansible.builtin.set_fact:
176
+ jira_fix_versions: >-
177
+ {{ dest_branch_list
178
+ | select('match', '^(master|release)-')
179
+ | map('regex_replace', '^(master|release)-', jira_version_prefix)
180
+ | list | unique }}
181
+
182
+ - name: Warn when the Fix Version cannot be set
183
+ when: (jira_token | default('') | length) == 0 or (jira_fix_versions | length) == 0
184
+ ansible.builtin.debug:
185
+ msg: >-
186
+ Skipping Jira Fix Version ({{ 'no jira_token — provide -e jira_token= or 1Password item '
187
+ ~ onepassword_jira_item if (jira_token | default('') | length) == 0
188
+ else 'no master-<ver> destination branch to derive the version from' }}).
189
+ DangerJS will fail until a Fix Version is set on {{ jira_key_client_branding }}.
190
+
191
+ - name: Look up the Jira project versions
192
+ when:
193
+ - (jira_token | default('') | length) > 0
194
+ - (jira_fix_versions | length) > 0
195
+ ansible.builtin.uri:
196
+ url: "{{ jira_base_url }}/rest/api/2/project/{{ jira_project_key }}/versions"
197
+ url_username: "{{ jira_email }}"
198
+ url_password: "{{ jira_token }}"
199
+ force_basic_auth: true
200
+ return_content: true
201
+ register: jira_versions
202
+ failed_when: false
203
+ no_log: true
204
+
205
+ - name: Map Fix Version name(s) to id(s)
206
+ when:
207
+ - jira_versions is defined
208
+ - (jira_versions.status | default(0)) == 200
209
+ ansible.builtin.set_fact:
210
+ jira_fix_version_ids: >-
211
+ {{ jira_versions.json
212
+ | selectattr('name', 'in', jira_fix_versions)
213
+ | map(attribute='id')
214
+ | map('community.general.dict_kv', 'id')
215
+ | list }}
216
+
217
+ - name: Report Fix Version names not found in the project
218
+ when:
219
+ - jira_versions is defined
220
+ - (jira_versions.status | default(0)) == 200
221
+ - (jira_fix_version_ids | default([]) | length) < (jira_fix_versions | length)
222
+ ansible.builtin.debug:
223
+ msg: >-
224
+ Some Fix Version name(s) in {{ jira_fix_versions }} do not exist in project
225
+ {{ jira_project_key }} — create them in Jira first. Setting only the matched ones.
226
+
227
+ # Additive (keeps any existing fixVersions); Jira dedups by id, so re-runs are idempotent.
228
+ - name: Set the Fix Version on {{ jira_key_client_branding }}
229
+ when: (jira_fix_version_ids | default([]) | length) > 0
230
+ ansible.builtin.uri:
231
+ url: "{{ jira_base_url }}/rest/api/2/issue/{{ jira_key_client_branding }}"
232
+ method: PUT
233
+ url_username: "{{ jira_email }}"
234
+ url_password: "{{ jira_token }}"
235
+ force_basic_auth: true
236
+ body_format: json
237
+ body:
238
+ update:
239
+ fixVersions: "{{ jira_fix_version_ids | map('community.general.dict_kv', 'add') | list }}"
240
+ status_code: [204]
241
+ register: jira_fixver_set
242
+ failed_when: false
243
+ no_log: true
244
+
245
+ - name: Confirm the Fix Version result
246
+ ansible.builtin.debug:
247
+ msg: >-
248
+ {{ 'Set Fix Version ' ~ jira_fix_versions | join(', ') ~ ' on ' ~ jira_key_client_branding
249
+ if (jira_fixver_set.status | default(0)) == 204
250
+ else 'Fix Version not set (HTTP ' ~ (jira_fixver_set.status | default('n/a')) ~ ')' }}
251
+ when: jira_fixver_set is defined and (jira_fixver_set is not skipped)
252
+
253
+ # --- Reviewers: pull from the repo's Bitbucket default-reviewers config -------------
254
+ - name: Resolve reviewers from repo default-reviewers config
255
+ when: (reviewers | length) == 0
256
+ block:
257
+ - name: Identify the authenticating Bitbucket account (PR author)
258
+ ansible.builtin.uri:
259
+ url: "{{ api_base }}/user"
260
+ url_username: "{{ bitbucket_email }}"
261
+ url_password: "{{ bitbucket_token }}"
262
+ force_basic_auth: true
263
+ return_content: true
264
+ register: bb_user
265
+
266
+ - name: Fetch the repository default reviewers
267
+ ansible.builtin.uri:
268
+ url: "{{ api_base }}/repositories/{{ workspace }}/{{ repo_slug }}/default-reviewers?pagelen=100"
269
+ url_username: "{{ bitbucket_email }}"
270
+ url_password: "{{ bitbucket_token }}"
271
+ force_basic_auth: true
272
+ return_content: true
273
+ register: bb_default_reviewers
274
+
275
+ # Bitbucket rejects a PR whose author is also a reviewer, so drop the authenticating account.
276
+ # The REST API does not auto-apply default reviewers, so we pass them explicitly.
277
+ # Bitbucket's PR-create reviewers array is keyed by uuid; exclude the author by account_id.
278
+ # Built in a single expression (not an accumulating set_fact loop, which is nondeterministic).
279
+ - name: Build reviewers list (excluding the PR author)
280
+ ansible.builtin.set_fact:
281
+ reviewers: >-
282
+ {{ bb_default_reviewers.json['values']
283
+ | rejectattr('account_id', 'equalto', bb_user.json.account_id)
284
+ | map(attribute='uuid')
285
+ | map('community.general.dict_kv', 'uuid')
286
+ | list }}
287
+
288
+ - name: Ensure clone parent directory exists
289
+ ansible.builtin.file:
290
+ path: "{{ work_dir | dirname }}"
291
+ state: directory
292
+ mode: "0755"
293
+
294
+ - name: Clone / refresh web-client-area over SSH
295
+ ansible.builtin.git:
296
+ repo: "{{ repo_ssh_url }}"
297
+ dest: "{{ work_dir }}"
298
+ version: "{{ dest_branch_list[0] }}"
299
+ update: true
300
+ force: true
301
+ accept_hostkey: true
302
+
303
+ - name: Onboard the brand on each destination branch
304
+ ansible.builtin.include_tasks: per_branch.yml
305
+ loop: "{{ dest_branch_list }}"
306
+ loop_control:
307
+ loop_var: dest_branch
308
+
309
+ - name: Summary of pull requests
310
+ ansible.builtin.debug:
311
+ msg: "{{ pr_results | default([]) }}"