You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2022/10/30 20:40:54 UTC
[airflow] branch main updated: Extract Build images to composite actions (#27372)
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 53c91f178a Extract Build images to composite actions (#27372)
53c91f178a is described below
commit 53c91f178ac848d451bd001c446e0079efe10ffb
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Sun Oct 30 21:40:43 2022 +0100
Extract Build images to composite actions (#27372)
Follow-up after #27371
---
.github/actions/build-ci-images/action.yml | 56 +++++++++++
.github/actions/build-prod-images/action.yml | 71 ++++++++++++++
.github/workflows/build-images.yml | 102 +++++----------------
.github/workflows/ci.yml | 100 ++++----------------
.../commands/release_management_commands.py | 1 +
5 files changed, 166 insertions(+), 164 deletions(-)
diff --git a/.github/actions/build-ci-images/action.yml b/.github/actions/build-ci-images/action.yml
new file mode 100644
index 0000000000..08259aadab
--- /dev/null
+++ b/.github/actions/build-ci-images/action.yml
@@ -0,0 +1,56 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+---
+name: 'Build CI images'
+description: 'Build CI images'
+runs:
+ using: "composite"
+ steps:
+ - name: "Install Breeze"
+ uses: ./.github/actions/breeze
+ - name: "Regenerate dependencies"
+ # This is done in case some someone updated provider dependencies and did not generate
+ # dependencies - in which case build image might fail because of lack of new dependencies
+ shell: bash
+ run: |
+ pip install rich>=12.4.4 pyyaml
+ python scripts/ci/pre_commit/pre_commit_update_providers_dependencies.py
+ if: env.UPGRADE_TO_NEWER_DEPENDENCIES != 'false'
+ - name: "Build & Push AMD64 CI images ${{ env.IMAGE_TAG }} ${{ env.PYTHON_VERSIONS }}"
+ shell: bash
+ run: breeze ci-image build --push --tag-as-latest --run-in-parallel --upgrade-on-failure
+ - name: "Show dependencies to be upgraded"
+ shell: bash
+ run: >
+ breeze release-management generate-constraints --run-in-parallel
+ --airflow-constraints-mode constraints-source-providers
+ if: env.UPGRADE_TO_NEWER_DEPENDENCIES != 'false'
+ - name: Push empty CI image ${{ env.PYTHON_MAJOR_MINOR_VERSION }}:${{ env.IMAGE }}
+ if: failure() || cancelled()
+ shell: bash
+ run: breeze ci-image build --push --empty-image --run-in-parallel
+ env:
+ IMAGE_TAG: ${{ env.IMAGE_TAG }}
+ - name: "Candidates for pip resolver backtrack triggers"
+ shell: bash
+ run: breeze ci find-newer-dependencies --max-age 1 --python 3.7
+ if: failure() || cancelled()
+ - name: "Fix ownership"
+ shell: bash
+ run: breeze ci fix-ownership
+ if: always()
diff --git a/.github/actions/build-prod-images/action.yml b/.github/actions/build-prod-images/action.yml
new file mode 100644
index 0000000000..b4cec13ddc
--- /dev/null
+++ b/.github/actions/build-prod-images/action.yml
@@ -0,0 +1,71 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+---
+name: 'Build PROD images'
+description: 'Build PROD images'
+inputs:
+ build-provider-packages:
+ description: 'Whether to build provider packages from sources'
+ required: true
+runs:
+ using: "composite"
+ steps:
+ - name: "Install Breeze"
+ uses: ./.github/actions/breeze
+ - name: "Regenerate dependencies in case they was modified manually so that we can build an image"
+ shell: bash
+ run: |
+ pip install rich>=12.4.4 pyyaml
+ python scripts/ci/pre_commit/pre_commit_update_providers_dependencies.py
+ if: env.UPGRADE_TO_NEWER_DEPENDENCIES != 'false'
+ - name: "Pull CI image for PROD build: ${{ env.PYTHON_VERSIONS }}:${{ env.IMAGE_TAG }}"
+ shell: bash
+ run: breeze ci-image pull --tag-as-latest
+ env:
+ PYTHON_MAJOR_MINOR_VERSION: "3.7"
+ - name: "Cleanup dist and context file"
+ shell: bash
+ run: rm -fv ./dist/* ./docker-context-files/*
+ - name: "Prepare providers packages"
+ shell: bash
+ run: >
+ breeze release-management prepare-provider-packages
+ --package-list-file ./scripts/ci/installed_providers.txt
+ --package-format wheel --version-suffix-for-pypi dev0
+ if: ${{ inputs.build-provider-packages == 'true' }}
+ - name: "Prepare airflow package"
+ shell: bash
+ run: >
+ breeze release-management prepare-airflow-package
+ --package-format wheel --version-suffix-for-pypi dev0
+ - name: "Move dist packages to docker-context files"
+ shell: bash
+ run: mv -v ./dist/*.whl ./docker-context-files
+ - name: "Build & Push PROD images ${{ env.IMAGE_TAG }}:${{ env.PYTHON_VERSIONS }}"
+ shell: bash
+ run: >
+ breeze prod-image build --tag-as-latest --run-in-parallel --push
+ --install-packages-from-context --upgrade-on-failure
+ - name: Push empty PROD images ${{ env.IMAGE_TAG }}
+ shell: bash
+ run: breeze prod-image build --cleanup-context --push --empty-image --run-in-parallel
+ if: failure() || cancelled()
+ - name: "Fix ownership"
+ shell: bash
+ run: breeze ci fix-ownership
+ if: always()
diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml
index c7d544ca70..0f399da2f9 100644
--- a/.github/workflows/build-images.yml
+++ b/.github/workflows/build-images.yml
@@ -162,7 +162,8 @@ jobs:
permissions:
packages: write
timeout-minutes: 80
- name: "Build CI images ${{ needs.build-info.outputs.all-python-versions-list-as-string }}"
+ name: >
+ Build CI images ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
runs-on: ${{ needs.build-info.outputs.runs-on }}
needs: [build-info]
if: |
@@ -173,7 +174,6 @@ jobs:
DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
RUNS_ON: ${{ needs.build-info.outputs.runs-on }}
BACKEND: sqlite
- outputs: ${{toJSON(needs.build-info.outputs) }}
steps:
- name: Cleanup repo
run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
@@ -182,10 +182,6 @@ jobs:
ref: ${{ needs.build-info.outputs.target-commit-sha }}
persist-credentials: false
submodules: recursive
- - name: "Setup python"
- uses: actions/setup-python@v4
- with:
- python-version: ${{ needs.build-info.outputs.default-python-version }}
- name: >
Checkout "main branch to 'main-airflow' folder
to use ci/scripts from there.
@@ -208,45 +204,22 @@ jobs:
mv -v "main-airflow/dev" "."
rm -rfv "./github/actions"
mv -v "main-airflow/.github/actions" "actions"
- - name: "Regenerate dependencies in case they was modified manually so that we can build an image"
- run: |
- pip install rich>=12.4.4 pyyaml
- python scripts/ci/pre_commit/pre_commit_update_providers_dependencies.py
- if: needs.build-info.outputs.default-branch == 'main'
- - name: "Install Breeze"
- uses: ./.github/actions/breeze
- - name: >-
- Build & Push AMD64 CI images ${{ env.IMAGE_TAG }}
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- run: breeze ci-image build --push --tag-as-latest --run-in-parallel --upgrade-on-failure
+ - name: >
+ Build CI Images ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
+ uses: ./.github/actions/build-ci-images
env:
UPGRADE_TO_NEWER_DEPENDENCIES: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- - name: "Show dependencies to be upgraded"
- run: >
- breeze release-management generate-constraints --run-in-parallel
- --airflow-constraints-mode constraints-source-providers
- env:
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- if: needs.build-info.outputs.upgrade-to-newer-dependencies != 'false'
- - name: Push empty CI image ${{ env.PYTHON_MAJOR_MINOR_VERSION }}:${{ env.IMAGE_TAG }}
- if: failure() || cancelled()
- run: breeze ci-image build --push --empty-image --run-in-parallel
- - name: "Candidates for pip resolver backtrack triggers"
- if: failure() || cancelled()
- run: >
- breeze ci find-newer-dependencies --max-age 1
- --python "${{ needs.build-info.outputs.default-python-version }}"
- - name: "Fix ownership"
- run: breeze ci fix-ownership
- if: always()
+ PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
+ DEBUG_RESOURCES: ${{ needs.build-info.outputs.debug-resources }}
build-prod-images:
permissions:
packages: write
timeout-minutes: 80
- name: "Build PROD images ${{ needs.build-info.outputs.all-python-versions-list-as-string }}"
+ name: >
+ Build PROD images
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
runs-on: ${{ needs.build-info.outputs.runs-on }}
needs: [build-info, build-ci-images]
if: |
@@ -287,55 +260,22 @@ jobs:
mv -v "main-airflow/dev" "."
rm -rfv "./github/actions"
mv -v "main-airflow/.github/actions" "actions"
- - name: "Install Breeze"
- uses: ./.github/actions/breeze
- - name: "Regenerate dependencies in case they was modified manually so that we can build an image"
- run: |
- pip install rich>=12.4.4 pyyaml
- python scripts/ci/pre_commit/pre_commit_update_providers_dependencies.py
- name: >
- Pull CI image for PROD build:
- ${{ needs.build-info.outputs.default-python-version }}:${{ env.IMAGE_TAG }}
- run: breeze ci-image pull --tag-as-latest
- env:
- # Always use default Python version of CI image for preparing packages
- PYTHON_MAJOR_MINOR_VERSION: ${{ needs.build-info.outputs.default-python-version }}
- - name: "Cleanup dist and context file"
- run: rm -fv ./dist/* ./docker-context-files/*
- - name: "Prepare providers packages"
- run: >
- breeze release-management prepare-provider-packages
- --package-list-file ./scripts/ci/installed_providers.txt
- --package-format wheel
- --version-suffix-for-pypi dev0
- if: needs.build-info.outputs.default-branch == 'main'
- - name: "Prepare airflow package"
- run: >
- breeze release-management prepare-airflow-package
- --package-format wheel --version-suffix-for-pypi dev0
- - name: "Move dist packages to docker-context files"
- run: mv -v ./dist/*.whl ./docker-context-files
- - name: >-
- Build & Push PROD images ${{ env.IMAGE_TAG }}
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- run: >
- breeze prod-image build --run-in-parallel --tag-as-latest --push
- --install-packages-from-context --upgrade-on-failure
+ Build PROD Images
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
+ uses: ./.github/actions/build-prod-images
+ if: needs.build-info.outputs.in-workflow-build == 'true'
+ with:
+ build-provider-packages: ${{ needs.build-info.outputs.default-branch == 'main' }}
env:
UPGRADE_TO_NEWER_DEPENDENCIES: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- - name: Push empty PROD images ${{ env.IMAGE_TAG }}
- if: failure() || cancelled()
- run: breeze prod-image build --cleanup-context --push --empty-image --run-in-parallel
- - name: "Fix ownership"
- run: breeze ci fix-ownership
- if: always()
-
+ PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
+ DEBUG_RESOURCES: ${{ needs.build-info.outputs.debug-resources }}
build-ci-images-arm:
timeout-minutes: 50
- name: "Build ARM CI images ${{ needs.build-info.outputs.all-python-versions-list-as-string }}"
+ name: "Build ARM CI images ${{needs.build-info.outputs.all-python-versions-list-as-string}}"
runs-on: ${{ needs.build-info.outputs.runs-on }}
needs: [build-info, build-prod-images]
if: |
@@ -384,13 +324,13 @@ jobs:
uses: ./.github/actions/breeze
- name: >
Build ARM CI images ${{ env.IMAGE_TAG }}
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}
run: >
breeze ci-image build --run-in-parallel --builder airflow_cache --platform "linux/arm64"
env:
UPGRADE_TO_NEWER_DEPENDENCIES: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
- name: "Stop ARM instance"
run: ./scripts/ci/images/ci_stop_arm_instance.sh
if: always()
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index bbf51b1787..85461787b8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -332,7 +332,7 @@ jobs:
timeout-minutes: 80
name: >-
${{needs.build-info.outputs.build-job-description}} CI images
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}
runs-on: "${{needs.build-info.outputs.runs-on}}"
needs: [build-info]
env:
@@ -349,43 +349,16 @@ jobs:
persist-credentials: false
submodules: recursive
if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Install Breeze"
- uses: ./.github/actions/breeze
- if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Regenerate dependencies in case they was modified manually so that we can build an image"
- run: |
- pip install rich>=12.4.4 pyyaml
- python scripts/ci/pre_commit/pre_commit_update_providers_dependencies.py
- if: >
- needs.build-info.outputs.in-workflow-build == 'true' &&
- needs.build-info.outputs.default-branch == 'main'
- name: >
- Build & Push CI images ${{ env.IMAGE_TAG }}
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- run: breeze ci-image build --push --tag-as-latest --run-in-parallel --upgrade-on-failure
+ Build CI Images
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
+ uses: ./.github/actions/build-ci-images
+ if: needs.build-info.outputs.in-workflow-build == 'true'
env:
UPGRADE_TO_NEWER_DEPENDENCIES: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
DEBUG_RESOURCES: ${{needs.build-info.outputs.debug-resources}}
- if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Show dependencies to be upgraded"
- run: >
- breeze release-management generate-constraints --run-in-parallel
- --airflow-constraints-mode constraints-source-providers
- env:
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.python-versions-list-as-string }}
- if: >
- needs.build-info.outputs.upgrade-to-newer-dependencies != 'false' &&
- needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Candidates for pip resolver backtrack triggers"
- if: failure() || cancelled()
- run: >
- breeze ci find-newer-dependencies --max-age 1
- --python "${{ needs.build-info.outputs.default-python-version }}"
- - name: "Fix ownership"
- run: breeze ci fix-ownership
- if: always() && needs.build-info.outputs.in-workflow-build == 'true'
build-prod-images:
permissions:
@@ -393,7 +366,7 @@ jobs:
timeout-minutes: 80
name: >
${{needs.build-info.outputs.build-job-description}} PROD images
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}
runs-on: "${{needs.build-info.outputs.runs-on}}"
needs: [build-info, build-ci-images]
env:
@@ -414,57 +387,18 @@ jobs:
persist-credentials: false
submodules: recursive
if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Install Breeze"
- uses: ./.github/actions/breeze
- if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Regenerate dependencies in case they was modified manually so that we can build an image"
- run: |
- pip install rich>=12.4.4 pyyaml
- python scripts/ci/pre_commit/pre_commit_update_providers_dependencies.py
- if: >
- needs.build-info.outputs.in-workflow-build == 'true' &&
- needs.build-info.outputs.default-branch == 'main'
- name: >
- Pull CI image for PROD build:
- "${{needs.build-info.outputs.default-python-version}}":${{ env.IMAGE_TAG }}"
- run: breeze ci-image pull --tag-as-latest
- env:
- # Always use default Python version of CI image for preparing packages
- PYTHON_MAJOR_MINOR_VERSION: "${{needs.build-info.outputs.default-python-version}}"
- if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Cleanup dist and context file"
- run: rm -fv ./dist/* ./docker-context-files/*
- if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Prepare providers packages"
- run: >
- breeze release-management prepare-provider-packages
- --package-list-file ./scripts/ci/installed_providers.txt
- --package-format wheel --version-suffix-for-pypi dev0
- if: >
- needs.build-info.outputs.in-workflow-build == 'true' &&
- needs.build-info.outputs.default-branch == 'main'
- - name: "Prepare airflow package"
- run: >
- breeze release-management prepare-airflow-package
- --package-format wheel --version-suffix-for-pypi dev0
- if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Move dist packages to docker-context files"
- run: mv -v ./dist/*.whl ./docker-context-files
+ Build PROD Images
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
+ uses: ./.github/actions/build-prod-images
if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: >
- Build & Push PROD images ${{ env.IMAGE_TAG }}
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- run: >
- breeze prod-image build --tag-as-latest --run-in-parallel --push
- --install-packages-from-context --upgrade-on-failure
+ with:
+ build-provider-packages: ${{ needs.build-info.outputs.default-branch == 'main' }}
env:
UPGRADE_TO_NEWER_DEPENDENCIES: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
- if: needs.build-info.outputs.in-workflow-build == 'true'
- - name: "Fix ownership"
- run: breeze ci fix-ownership
- if: always() && needs.build-info.outputs.in-workflow-build == 'true'
+ PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
+ DEBUG_RESOURCES: ${{ needs.build-info.outputs.debug-resources }}
run-new-breeze-tests:
timeout-minutes: 10
@@ -1398,7 +1332,7 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
timeout-minutes: 50
name: >
Build CI ARM images
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
runs-on: "${{needs.build-info.outputs.runs-on}}"
needs:
- build-info
@@ -1431,13 +1365,13 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
run: ./scripts/ci/images/ci_start_arm_instance_and_connect_to_docker.sh
- name: >
Build CI ARM images ${{ env.IMAGE_TAG }}
- ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
run: >
breeze ci-image build --run-in-parallel --builder airflow_cache --platform "linux/arm64"
env:
UPGRADE_TO_NEWER_DEPENDENCIES: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
- PYTHON_VERSIONS: ${{ needs.build-info.outputs.all-python-versions-list-as-string }}
+ PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
DEBUG_RESOURCES: ${{needs.build-info.outputs.debug-resources}}
- name: "Stop ARM instance"
run: ./scripts/ci/images/ci_stop_arm_instance.sh
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 7732f2feab..b348eecee1 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -292,6 +292,7 @@ def run_generate_constraints(
command=cmd_to_run,
debug=debug,
output=output,
+ output_outside_the_group=True,
)
return (
generate_constraints_result.returncode,