Skip to content

Commit dee52ae

Browse files
Merge branch 'main' into fix/#70296-2
2 parents 7b63b1c + ae54b2b commit dee52ae

1,029 files changed

Lines changed: 40222 additions & 8220 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/airflow-translations/SKILL.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,12 @@ If there are **missing** keys, scaffold them with `TODO: translate:` stubs:
122122
breeze ui check-translation-completeness --language <locale> --add-missing
123123
```
124124

125-
If there are **extra** keys (present in the locale but not in English), remove
126-
them:
125+
If there are **unused** keys — keys that are not required, meaning they are
126+
absent from the English locale or are plural suffixes this language does not
127+
need — remove them:
127128

128129
```bash
129-
breeze ui check-translation-completeness --language <locale> --remove-extra
130+
breeze ui check-translation-completeness --language <locale> --remove-unused
130131
```
131132

132133
Now translate the `TODO: translate:` entries following the locale-specific
@@ -138,7 +139,8 @@ guideline, then continue to **Validation** below.
138139

139140
After completing translations, run these checks:
140141

141-
Check completeness. The output should show 0 missing, 0 extra, and 0 TODOs:
142+
Check completeness. The output table should show 0 missing, 0 TODOs, 0 unused,
143+
and 100% coverage:
142144

143145
```bash
144146
breeze ui check-translation-completeness --language <locale>

.agents/skills/prepare-providers-documentation/SKILL.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,20 @@ Rules:
631631
so normalize to excluded.
632632
- Always keep the `(#NNNN)` PR suffix (or, for a collapsed chain, the
633633
comma-separated list of all involved PRs).
634+
- **Order entries within each section by merge order, newest first** — the exact
635+
order `git log` printed them in Phase 1. `CHANGELOG_TEMPLATE.rst.jinja2`
636+
iterates the changes without sorting, so that order *is* the format. It is
637+
**not** descending PR number: a long-lived PR merged late carries a low number
638+
and still belongs at the top (real example: `#64274` sits second in amazon
639+
9.32.0's `Features`). Don't re-sort by PR number and don't group by theme.
640+
The excluded block follows the same order. A collapsed chain — one entry
641+
naming several PRs — sits at the position of its **first** commit, which is
642+
when the change became relevant, not at the position of the later rework.
643+
- **Never adopt an entry a contributor pre-wrote at the top of
644+
`changelog.rst`** — above the first version header — without checking its PR
645+
number against `git log`. Those blocks are written before the PR merges, so
646+
the number in them is a guess and is often wrong or nonexistent. Keep the
647+
prose, replace the reference with the real merge commit's `(#NNNN)`.
634648

635649
#### 4c. Regenerate templates with breeze
636650

@@ -732,6 +746,10 @@ provider-by-provider:
732746
touched** that no `.. note::` appears after the
733747
`.. Below changes are excluded …` marker; a note belongs directly under the
734748
version underline, before the first `~~~` header.
749+
750+
The same applies to a bare `Breaking changes` / `Features` / … heading sitting
751+
above the first version header: a contributor pre-wrote it, and it must be
752+
folded into the new version section with its PR reference corrected (Phase 4b).
735753
- Confirm Phase 4d ran: no `# use next version` comment remains where the
736754
referenced provider was bumped in this wave.
737755
- **If any inter-provider `>=` floor changed** (Phase 4d resolved a pin, or a
@@ -741,6 +759,26 @@ provider-by-provider:
741759
*"Provider dependency version bumps detected that should only be performed
742760
by Release Managers!"*. `git diff` the changed `pyproject.toml` files for
743761
`apache-airflow-providers-*` `>=` changes and list them for the RM.
762+
- **Reconcile every new section against `git log` — this gate is mandatory.** Run
763+
764+
```bash
765+
python3 dev/check_changelog_entries.py --fix
766+
```
767+
768+
It compares each provider's newest section against the commits actually being
769+
released and exits non-zero on four defects that eyeballing the diff misses:
770+
771+
| Code | Meaning | Action |
772+
| --- | --- | --- |
773+
| `MISSING` | a released commit has no entry | classify and add it (Phase 3 + 4b) |
774+
| `UNKNOWN` | an entry cites a PR outside the release range | replace with the real `(#NNNN)` |
775+
| `SECTION` | heading is not one of the template's five | move the entry under a template heading |
776+
| `ORDER` | entries are off merge order | repaired by `--fix` |
777+
778+
Re-run it after **any** rebase of the release branch. A rebase silently pulls
779+
new provider commits into the release range without touching `changelog.rst`,
780+
and that is exactly how a shipped change ends up undocumented. Only `ORDER`
781+
is auto-repairable — resolve every other code by hand before handing off.
744782
- **Scan the new changelog sections for these entry defects** — grep the lines
745783
you added: (1) a bullet whose text starts with a lowercase letter → capitalize
746784
it (Phase 4b); (2) a bullet in a *visible* section (Features / Bug Fixes /
@@ -964,6 +1002,12 @@ above the next existing section, matching the order in
9641002
`CHANGELOG_TEMPLATE.rst.jinja2`:
9651003
`Breaking changes``Features``Bug Fixes``Misc``Doc-only`.
9661004

1005+
Insert each entry at its **merge-order position** within the section — new
1006+
commits are newer than everything already there, so they go at the *top*, not
1007+
appended at the bottom. Appending is what drifts incremental providers off the
1008+
format; `check_changelog_entries.py --fix` repairs it either way, so run it
1009+
after this phase.
1010+
9671011
If you re-bumped the version in Incremental Phase 3.5, also add or remove the
9681012
`.. note::` block about the Airflow min version requirement to match the
9691013
new bump kind.

.github/CODEOWNERS

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/ @Lee-W @jason810496 @guan
9393
/providers/celery/ @hussein-awala @dheerajturaga
9494
/providers/cncf/kubernetes @jedcunningham @hussein-awala @jscheffl
9595
/providers/common/messaging/ @vincbeck
96-
/providers/common/ai/ @gopidesupavan @kaxil @Lee-W
96+
/providers/common/ai/ @gopidesupavan @kaxil @Lee-W @ashb
9797
/providers/dbt/cloud/ @josh-fell
9898
/providers/edge3/ @jscheffl @dheerajturaga @shubhamraj-git
9999
/providers/fab/ @vincbeck
@@ -179,12 +179,12 @@ Dockerfile.ci @potiuk @ashb @gopidesupavan @amoghrajesh @jscheffl @bugraoz93 @ja
179179
/shared/ @ashb @amoghrajesh @potiuk
180180

181181
# Agentic instructions
182-
/AGENTS.md @potiuk @kaxil @jscheffl @amoghrajesh @ashb @sjyangkevin @Dev-iL @jason810496 @shahar1 @choo121600
183-
/.github/instructions/ @potiuk @kaxil @jscheffl @amoghrajesh @ashb @sjyangkevin @Dev-iL @jason810496 @shahar1 @choo121600
184-
/airflow-core/src/airflow/api_fastapi/execution_api/AGENTS.md @potiuk @kaxil @jscheffl @amoghrajesh @ashb @sjyangkevin @Dev-iL @jason810496 @shahar1 @choo121600
185-
/providers/AGENTS.md @potiuk @kaxil @jscheffl @amoghrajesh @ashb @sjyangkevin @Dev-iL @jason810496 @shahar1 @choo121600
186-
/.github/skills/ @potiuk @kaxil @jscheffl @amoghrajesh @ashb @sjyangkevin @Dev-iL @jason810496 @shahar1 @choo121600
187-
/.claude/skills/ @potiuk @kaxil @jscheffl @amoghrajesh @ashb @sjyangkevin @Dev-iL @jason810496 @shahar1 @choo121600
182+
/AGENTS.md @potiuk @kaxil @jscheffl @amoghrajesh @ashb @jason810496 @shahar1 @choo121600
183+
/.github/instructions/ @potiuk @kaxil @jscheffl @amoghrajesh @ashb @jason810496 @shahar1 @choo121600
184+
/airflow-core/src/airflow/api_fastapi/execution_api/AGENTS.md @potiuk @kaxil @jscheffl @amoghrajesh @ashb @jason810496 @shahar1 @choo121600
185+
/providers/AGENTS.md @potiuk @kaxil @jscheffl @amoghrajesh @ashb @jason810496 @shahar1 @choo121600
186+
/.github/skills/ @potiuk @kaxil @jscheffl @amoghrajesh @ashb @jason810496 @shahar1 @choo121600
187+
/.claude/skills/ @potiuk @kaxil @jscheffl @amoghrajesh @ashb @jason810496 @shahar1 @choo121600
188188

189189
# RMs on release documents
190190
/dev/README_RELEASE_*.md @potiuk @jscheffl @vincbeck @shahar1 @jedcunningham @bugraoz93

.github/dependabot.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,31 @@ updates:
7575
patterns:
7676
- "*"
7777

78+
- package-ecosystem: gradle
79+
directories:
80+
- /java-sdk
81+
- /java-sdk/example
82+
- /java-sdk/scala_spark_example
83+
cooldown:
84+
default-days: 14
85+
schedule:
86+
interval: weekly
87+
groups:
88+
java-sdk-dependency-updates:
89+
patterns:
90+
- "*"
91+
update-types:
92+
- minor
93+
- patch
94+
java-sdk-security-updates:
95+
applies-to: security-updates
96+
patterns:
97+
- "*"
98+
ignore:
99+
- dependency-name: "*"
100+
update-types:
101+
- version-update:semver-major
102+
78103
- package-ecosystem: npm
79104
cooldown:
80105
default-days: 4
@@ -371,6 +396,24 @@ updates:
371396
- dependency-name: "*"
372397
update-types: ["version-update:semver-major"]
373398

399+
- package-ecosystem: npm
400+
cooldown:
401+
default-days: 7
402+
directory: /ts-sdk
403+
schedule:
404+
interval: "weekly"
405+
groups:
406+
ts-sdk-package-updates:
407+
patterns:
408+
- "*"
409+
update-types:
410+
- "minor"
411+
- "patch"
412+
ts-sdk-security-updates:
413+
applies-to: security-updates
414+
patterns:
415+
- "*"
416+
374417
- package-ecosystem: "uv"
375418
cooldown:
376419
default-days: 4

.github/workflows/airflow-e2e-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ jobs:
135135
# arch-specific auto-provisioned JDKs (the example pins a Java 11 toolchain).
136136
- name: "Setup Java for the Java SDK build"
137137
if: inputs.e2e_test_mode == 'java_sdk'
138-
uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5.6.0
138+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
139139
with:
140140
distribution: 'temurin'
141141
java-version: ${{ inputs.java-sdk-version }}
@@ -175,7 +175,7 @@ jobs:
175175
e2e-go-sdk-go-v1-${{ runner.os }}-${{ runner.arch }}-
176176
- name: "Setup pnpm for the TypeScript SDK build"
177177
if: inputs.e2e_test_mode == 'ts_sdk'
178-
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
178+
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
179179
with:
180180
package_json_file: ts-sdk/package.json
181181
run_install: false

.github/workflows/asf-allowlist-check.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ jobs:
3131
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
3232
with:
3333
persist-credentials: false
34-
- uses: apache/infrastructure-actions/allowlist-check@0ff9972b5872e19c9f4555c9159c2fea4f794355 # main
34+
- uses: apache/infrastructure-actions/allowlist-check@e0a5f64438492ea3ee6cbe06336b2d8e25f5d222 # main

.github/workflows/basic-tests.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ jobs:
115115
- name: "Install SVN"
116116
run: sudo apt-get update && sudo apt-get install -y subversion
117117
- name: "Install Java (for Apache RAT)"
118-
uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5.6.0
118+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
119119
with:
120120
distribution: 'temurin'
121121
java-version: '17'
@@ -192,7 +192,7 @@ jobs:
192192
with:
193193
persist-credentials: false
194194
- name: Setup pnpm
195-
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
195+
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
196196
with:
197197
version: 9
198198
run_install: false
@@ -203,7 +203,7 @@ jobs:
203203
cache: 'pnpm'
204204
cache-dependency-path: 'airflow-core/src/airflow/**/pnpm-lock.yaml'
205205
- name: "Restore eslint cache (ui)"
206-
uses: apache/infrastructure-actions/stash/restore@0ff9972b5872e19c9f4555c9159c2fea4f794355
206+
uses: apache/infrastructure-actions/stash/restore@e0a5f64438492ea3ee6cbe06336b2d8e25f5d222
207207
with:
208208
path: airflow-core/src/airflow/ui/node_modules/
209209
# yamllint disable-line rule:line-length
@@ -214,15 +214,15 @@ jobs:
214214
env:
215215
FORCE_COLOR: 2
216216
- name: "Save eslint cache (ui)"
217-
uses: apache/infrastructure-actions/stash/save@0ff9972b5872e19c9f4555c9159c2fea4f794355
217+
uses: apache/infrastructure-actions/stash/save@e0a5f64438492ea3ee6cbe06336b2d8e25f5d222
218218
with:
219219
path: airflow-core/src/airflow/ui/node_modules/
220220
key: cache-ui-node-modules-v1-${{ runner.os }}-${{ hashFiles('airflow/ui/**/pnpm-lock.yaml') }}
221221
if-no-files-found: 'error'
222222
retention-days: '2'
223223
if: steps.restore-eslint-cache-ui.outputs.stash-hit != 'true'
224224
- name: "Restore eslint cache (simple auth manager UI)"
225-
uses: apache/infrastructure-actions/stash/restore@0ff9972b5872e19c9f4555c9159c2fea4f794355
225+
uses: apache/infrastructure-actions/stash/restore@e0a5f64438492ea3ee6cbe06336b2d8e25f5d222
226226
with:
227227
path: airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/node_modules/
228228
key: >
@@ -234,7 +234,7 @@ jobs:
234234
env:
235235
FORCE_COLOR: 2
236236
- name: "Save eslint cache (ui)"
237-
uses: apache/infrastructure-actions/stash/save@0ff9972b5872e19c9f4555c9159c2fea4f794355
237+
uses: apache/infrastructure-actions/stash/save@e0a5f64438492ea3ee6cbe06336b2d8e25f5d222
238238
with:
239239
path: airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/node_modules/
240240
key: >

.github/workflows/ci-amd.yml

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ jobs:
138138
run-coverage: ${{ steps.source-run-info.outputs.run-coverage }}
139139
run-go-sdk-tests: ${{ steps.selective-checks.outputs.run-go-sdk-tests }}
140140
run-java-sdk-tests: ${{ steps.selective-checks.outputs.run-java-sdk-tests }}
141+
run-ts-sdk-docs: ${{ steps.selective-checks.outputs.run-ts-sdk-docs }}
141142
run-helm-tests: ${{ steps.selective-checks.outputs.run-helm-tests }}
142143
run-kubernetes-tests: ${{ steps.selective-checks.outputs.run-kubernetes-tests }}
143144
run-mypy-providers: ${{ steps.selective-checks.outputs.run-mypy-providers }}
@@ -997,7 +998,10 @@ jobs:
997998
- name: Setup Go
998999
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
9991000
with:
1000-
go-version: 1.25
1001+
# Pinned to the patch: actions/go-versions trails Go security releases by weeks, and
1002+
# setup-go resolves from that manifest whenever it can match, so a bare 1.25 lands on a
1003+
# toolchain whose standard library still carries advisories the scan below fails on.
1004+
go-version: '1.25.13'
10011005
cache-dependency-path: go-sdk/go.sum
10021006
# keep this in sync with go.mod in go-sdk/
10031007
- name: Setup Gotestsum
@@ -1040,7 +1044,7 @@ jobs:
10401044
with:
10411045
persist-credentials: false
10421046
- name: Setup Java
1043-
uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5.6.0
1047+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
10441048
with:
10451049
distribution: 'temurin'
10461050
java-version: ${{ env.JAVA_VERSION }}
@@ -1082,6 +1086,38 @@ jobs:
10821086
if-no-files-found: error
10831087
overwrite: 'true'
10841088

1089+
build-ts-sdk-docs:
1090+
name: "TypeScript SDK docs"
1091+
needs: [build-info]
1092+
runs-on: ${{ fromJSON(needs.build-info.outputs.runner-type) }}
1093+
timeout-minutes: 30
1094+
permissions:
1095+
contents: read
1096+
packages: read
1097+
if: needs.build-info.outputs.run-ts-sdk-docs == 'true'
1098+
env:
1099+
GITHUB_REPOSITORY: ${{ github.repository }}
1100+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1101+
GITHUB_USERNAME: ${{ github.actor }}
1102+
VERBOSE: "true"
1103+
steps:
1104+
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
1105+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
1106+
with:
1107+
persist-credentials: false
1108+
- name: "Install Breeze"
1109+
uses: ./.github/actions/breeze
1110+
- name: "Build TypeScript SDK API reference"
1111+
run: breeze build-docs --sdk-docs-only --sdk=typescript
1112+
- name: "Upload TypeScript SDK docs artifact"
1113+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
1114+
with:
1115+
name: ts-sdk-docs
1116+
path: generated/_build/docs/ts-sdk/
1117+
retention-days: 7
1118+
if-no-files-found: error
1119+
overwrite: 'true'
1120+
10851121
tests-airflow-ctl:
10861122
name: "Airflow CTL tests"
10871123
uses: ./.github/workflows/airflow-distributions-tests.yml
@@ -1137,6 +1173,7 @@ jobs:
11371173
- tests-go-sdk
11381174
- tests-java-sdk
11391175
- build-java-sdk-docs
1176+
- build-ts-sdk-docs
11401177
- tests-with-lowest-direct-resolution-core
11411178
- tests-with-lowest-direct-resolution-providers
11421179
uses: ./.github/workflows/finalize-tests.yml
@@ -1183,6 +1220,9 @@ jobs:
11831220
echo "failed-jobs<<EOF" >> "${GITHUB_OUTPUT}"
11841221
echo "${FAILED_JOBS}" >> "${GITHUB_OUTPUT}"
11851222
echo "EOF" >> "${GITHUB_OUTPUT}"
1223+
# A literal newline would end the double-quoted YAML scalar the Slack payload
1224+
# interpolates job names into, and the action would reject the whole payload.
1225+
echo "failed-jobs-text=${FAILED_JOBS//$'\n'/\\n}" >> "${GITHUB_OUTPUT}"
11861226
if [[ -n "${FAILED_JOBS}" ]]; then
11871227
echo "has-failures=true" >> "${GITHUB_OUTPUT}"
11881228
else
@@ -1217,12 +1257,12 @@ jobs:
12171257
# yamllint disable rule:line-length
12181258
payload: |
12191259
channel: "internal-airflow-ci-cd"
1220-
text: "🚨 Failure Alert: Scheduled CI (${{ needs.build-info.outputs.platform }}) on branch *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
1260+
text: "🚨 Failure Alert: Scheduled CI (${{ needs.build-info.outputs.platform }}) on branch *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs-text }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
12211261
blocks:
12221262
- type: "section"
12231263
text:
12241264
type: "mrkdwn"
1225-
text: "🚨 Failure Alert: Scheduled CI (${{ needs.build-info.outputs.platform }}) on *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
1265+
text: "🚨 Failure Alert: Scheduled CI (${{ needs.build-info.outputs.platform }}) on *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs-text }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
12261266
# yamllint enable rule:line-length
12271267
- name: "Notify Slack (still not fixed)"
12281268
if: steps.notification.outputs.action == 'notify_reminder'
@@ -1233,12 +1273,12 @@ jobs:
12331273
# yamllint disable rule:line-length
12341274
payload: |
12351275
channel: "internal-airflow-ci-cd"
1236-
text: "🚨🔁 Still not fixed: Scheduled CI (${{ needs.build-info.outputs.platform }}) on branch *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
1276+
text: "🚨🔁 Still not fixed: Scheduled CI (${{ needs.build-info.outputs.platform }}) on branch *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs-text }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
12371277
blocks:
12381278
- type: "section"
12391279
text:
12401280
type: "mrkdwn"
1241-
text: "🚨🔁 Still not fixed: Scheduled CI (${{ needs.build-info.outputs.platform }}) on *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
1281+
text: "🚨🔁 Still not fixed: Scheduled CI (${{ needs.build-info.outputs.platform }}) on *${{ github.ref_name }}*\n\nFailing jobs:\n${{ steps.get-failures.outputs.failed-jobs-text }}\n\n*Details:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View the failure log>"
12421282
# yamllint enable rule:line-length
12431283
- name: "Notify Slack (all tests passing)"
12441284
if: steps.notification.outputs.action == 'notify_recovery'

0 commit comments

Comments
 (0)