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 76c92c3e0a Extract checkout target commit to a composite action
(#38682)
76c92c3e0a is described below
commit 76c92c3e0a94aa10cdf035c495886f72abb993f8
Author: Jarek Potiuk <[email protected]>
AuthorDate: Tue Apr 2 20:54:51 2024 +0200
Extract checkout target commit to a composite action (#38682)
We already had to do this very sensitive part of the workflow in
three places, so it makes sense to extract it to a composite
action. This means that we need to do one more checkout from the
target branch first (otherwise the action would not be available)
but we avoid code duplication and fragility this way.
---
.github/actions/checkout_target_commit/action.yml | 78 ++++++++++++++++
.github/workflows/ci-image-build.yml | 51 ++---------
.github/workflows/prod-image-build.yml | 106 ++++------------------
3 files changed, 101 insertions(+), 134 deletions(-)
diff --git a/.github/actions/checkout_target_commit/action.yml
b/.github/actions/checkout_target_commit/action.yml
new file mode 100644
index 0000000000..e90ae01998
--- /dev/null
+++ b/.github/actions/checkout_target_commit/action.yml
@@ -0,0 +1,78 @@
+# 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: 'Checkout target commit'
+description: >
+ Checks out target commit with the exception of .github scripts directories
that come from the target branch
+inputs:
+ target-commit-sha:
+ description: 'SHA of the target commit to checkout'
+ required: true
+ pull-request-target:
+ description: 'Whether the workflow is a pull request target workflow'
+ required: true
+ is-committer-build:
+ description: 'Whether the build is done by a committer'
+ required: true
+runs:
+ using: "composite"
+ steps:
+ - name: "Checkout target commit"
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.target-commit-sha }}
+ persist-credentials: false
+
####################################################################################################
+ # BE VERY CAREFUL HERE! THIS LINE AND THE END OF THE WARNING. IN PULL
REQUEST TARGET WORKFLOW
+ # WE CHECK OUT THE TARGET COMMIT ABOVE TO BE ABLE TO BUILD THE IMAGE FROM
SOURCES FROM THE
+ # INCOMING PR, RATHER THAN FROM TARGET BRANCH. THIS IS A SECURITY RISK,
BECAUSE THE PR
+ # CAN CONTAIN ANY CODE AND WE EXECUTE IT HERE. THEREFORE, WE NEED TO BE
VERY CAREFUL WHAT WE
+ # DO HERE. WE SHOULD NOT EXECUTE ANY CODE THAT COMES FROM THE PR. WE
SHOULD NOT RUN ANY BREEZE
+ # COMMAND NOR SCRIPTS NOR COMPOSITE ACTIONS. WE SHOULD ONLY RUN CODE THAT
IS EMBEDDED DIRECTLY IN
+ # THIS WORKFLOW - BECAUSE THIS IS THE ONLY CODE THAT WE CAN TRUST.
+
####################################################################################################
+ - name: Checkout target branch to 'target-airflow' folder to use
ci/scripts and breeze from there.
+ uses: actions/checkout@v4
+ with:
+ path: "target-airflow"
+ ref: ${{ github.base_ref }}
+ persist-credentials: false
+ if: inputs.pull-request-target == 'true' && inputs.is-committer-build !=
'true'
+ - name: >
+ Replace "scripts/ci", "dev", ".github/actions" and ".github/workflows"
with the target branch
+ so that the those directories are not coming from the PR
+ shell: bash
+ run: |
+ echo
+ echo -e "\033[33m Replace scripts, dev, actions with target branch for
non-committer builds!\033[0m"
+ echo
+ rm -rfv "scripts/ci"
+ rm -rfv "dev"
+ rm -rfv ".github/actions"
+ rm -rfv ".github/workflows"
+ mv -v "target-airflow/scripts/ci" "scripts"
+ mv -v "target-airflow/dev" "."
+ mv -v "target-airflow/.github/actions"
"target-airflow/.github/workflows" ".github"
+ if: inputs.pull-request-target == 'true' && inputs.is-committer-build !=
'true'
+
####################################################################################################
+ # AFTER IT'S SAFE. THE `dev`, `scripts/ci` AND `.github/actions` ARE
NOW COMING FROM THE
+ # BASE_REF - WHICH IS THE TARGET BRANCH OF THE PR. WE CAN TRUST THAT
THOSE SCRIPTS ARE SAFE TO RUN.
+ # ALL THE REST OF THE CODE COMES FROM THE PR, AND FOR EXAMPLE THE CODE
IN THE `Dockerfile.ci` CAN
+ # BE RUN SAFELY AS PART OF DOCKER BUILD. BECAUSE IT RUNS INSIDE THE
DOCKER CONTAINER AND IT IS
+ # ISOLATED FROM THE RUNNER.
+
####################################################################################################
diff --git a/.github/workflows/ci-image-build.yml
b/.github/workflows/ci-image-build.yml
index d9ae80dad1..07ba028cf7 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -134,54 +134,17 @@ ${{ inputs.do-build == 'true' && inputs.image-tag || ''
}}"
shell: bash
run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm
-rf /workspace/*"
if: inputs.do-build == 'true'
- - uses: actions/checkout@v4
+ - name: "Checkout target branch"
+ uses: actions/checkout@v4
with:
- ref: ${{ inputs.target-commit-sha }}
persist-credentials: false
+ - name: "Checkout target commit"
+ uses: ./.github/actions/checkout_target_commit
if: inputs.do-build == 'true'
-
####################################################################################################
- # BE VERY CAREFUL HERE! THIS LINE AND THE END OF THE WARNING. IN PULL
REQUEST TARGET WORKFLOW
- # WE CHECK OUT THE TARGET COMMIT ABOVE TO BE ABLE TO BUILD THE IMAGE
FROM SOURCES FROM THE
- # INCOMING PR, RATHER THAN FROM TARGET BRANCH. THIS IS A SECURITY RISK,
BECAUSE THE PR
- # CAN CONTAIN ANY CODE AND WE EXECUTE IT HERE. THEREFORE, WE NEED TO BE
VERY CAREFUL WHAT WE
- # DO HERE. WE SHOULD NOT EXECUTE ANY CODE THAT COMES FROM THE PR. WE
SHOULD NOT RUN ANY BREEZE
- # COMMAND NOR SCRIPTS NOR COMPOSITE ACTIONS. WE SHOULD ONLY RUN CODE
THAT IS EMBEDDED DIRECTLY IN
- # THIS WORKFLOW - BECAUSE THIS IS THE ONLY CODE THAT WE CAN TRUST.
-
####################################################################################################
- - name: Checkout target branch to 'target-airflow' folder to use
ci/scripts and breeze from there.
- uses: actions/checkout@v4
with:
- path: "target-airflow"
- ref: ${{ github.base_ref }}
- persist-credentials: false
- if: >
- inputs.do-build == 'true' && inputs.pull-request-target == 'true' &&
- inputs.is-committer-build != 'true'
- - name: >
- Replace "scripts/ci", "dev", ".github/actions" and
".github/workflows" with the target branch
- so that the those directories are not coming from the PR
- shell: bash
- run: |
- echo
- echo -e "\033[33m Replace scripts, dev, actions with target branch
for non-committer builds!\033[0m"
- echo
- rm -rfv "scripts/ci"
- rm -rfv "dev"
- rm -rfv ".github/actions"
- rm -rfv ".github/workflows"
- mv -v "target-airflow/scripts/ci" "scripts"
- mv -v "target-airflow/dev" "."
- mv -v "target-airflow/.github/actions"
"target-airflow/.github/workflows" ".github"
- if: >
- inputs.do-build == 'true' && inputs.pull-request-target == 'true' &&
- inputs.is-committer-build != 'true'
-
####################################################################################################
- # HERE IT'S A BIT SAFER. THE `dev`, `scripts/ci` AND `.github/actions`
ARE NOW COMING FROM THE
- # BASE_REF - WHICH IS THE TARGET BRANCH OF THE PR. WE CAN TRUST THAT
THOSE SCRIPTS ARE SAVE TO RUN.
- # ALL THE REST OF THE CODE COMES FROM THE PR, AND FOR EXAMPLE THE CODE
IN THE `Dockerfile.ci` CAN
- # BE RUN SAFELY AS PART OF DOCKER BUILD. BECAUSE IT RUNS INSIDE THE
DOCKER CONTAINER AND IT IS
- # ISOLATED FROM THE RUNNER.
-
####################################################################################################
+ target-commit-sha: ${{ inputs.target-commit-sha }}
+ pull-request-target: ${{ inputs.pull-request-target }}
+ is-committer-build: ${{ inputs.is-committer-build }}
- name: "Cleanup docker"
run: ./scripts/ci/cleanup_docker.sh
if: inputs.do-build == 'true'
diff --git a/.github/workflows/prod-image-build.yml
b/.github/workflows/prod-image-build.yml
index cc7aa921a6..fceb287bc4 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -127,54 +127,17 @@ jobs:
shell: bash
run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm
-rf /workspace/*"
if: inputs.do-build == 'true' && inputs.upload-package-artifact ==
'true'
- - uses: actions/checkout@v4
- with:
- ref: ${{ inputs.target-commit-sha }}
- persist-credentials: false
- if: inputs.do-build == 'true' && inputs.upload-package-artifact ==
'true'
-
####################################################################################################
- # BE VERY CAREFUL HERE! THIS LINE AND THE END OF THE WARNING. IN PULL
REQUEST TARGET WORKFLOW
- # WE CHECK OUT THE TARGET COMMIT ABOVE TO BE ABLE TO BUILD THE IMAGE
FROM SOURCES FROM THE
- # INCOMING PR, RATHER THAN FROM TARGET BRANCH. THIS IS A SECURITY RISK,
BECAUSE THE PR
- # CAN CONTAIN ANY CODE AND WE EXECUTE IT HERE. THEREFORE, WE NEED TO BE
VERY CAREFUL WHAT WE
- # DO HERE. WE SHOULD NOT EXECUTE ANY CODE THAT COMES FROM THE PR. WE
SHOULD NOT RUN ANY BREEZE
- # COMMAND NOR SCRIPTS NOR COMPOSITE ACTIONS. WE SHOULD ONLY RUN CODE
THAT IS EMBEDDED DIRECTLY IN
- # THIS WORKFLOW - BECAUSE THIS IS THE ONLY CODE THAT WE CAN TRUST.
-
####################################################################################################
- - name: Checkout target branch to 'target-airflow' folder to use
ci/scripts and breeze from there.
+ - name: "Checkout target branch"
uses: actions/checkout@v4
with:
- path: "target-airflow"
- ref: ${{ github.base_ref }}
persist-credentials: false
- if: >
- inputs.do-build == 'true' && inputs.pull-request-target == 'true' &&
- inputs.is-committer-build != 'true' &&
inputs.upload-package-artifact == 'true'
- - name: >
- Replace "scripts/ci", "dev", ".github/actions" and
".github/workflows" with the target branch
- so that the those directories are not coming from the PR
- shell: bash
- run: |
- echo
- echo -e "\033[33m Replace scripts, dev, actions with target branch
for non-committer builds!\033[0m"
- echo
- rm -rfv "scripts/ci"
- rm -rfv "dev"
- rm -rfv ".github/actions"
- rm -rfv ".github/workflows"
- mv -v "target-airflow/scripts/ci" "scripts"
- mv -v "target-airflow/dev" "."
- mv -v "target-airflow/.github/actions"
"target-airflow/.github/workflows" ".github"
- if: >
- inputs.do-build == 'true' && inputs.pull-request-target == 'true' &&
- inputs.is-committer-build != 'true'
-
####################################################################################################
- # HERE IT'S A BIT SAFER. THE `dev`, `scripts/ci` AND `.github/actions`
ARE NOW COMING FROM THE
- # BASE_REF - WHICH IS THE TARGET BRANCH OF THE PR. WE CAN TRUST THAT
THOSE SCRIPTS ARE SAVE TO RUN.
- # ALL THE REST OF THE CODE COMES FROM THE PR, AND FOR EXAMPLE THE CODE
IN THE `Dockerfile.ci` CAN
- # BE RUN SAFELY AS PART OF DOCKER BUILD. BECAUSE IT RUNS INSIDE THE
DOCKER CONTAINER AND IT IS
- # ISOLATED FROM THE RUNNER.
-
####################################################################################################
+ - name: "Checkout target commit"
+ uses: ./.github/actions/checkout_target_commit
+ with:
+ target-commit-sha: ${{ inputs.target-commit-sha }}
+ pull-request-target: ${{ inputs.pull-request-target }}
+ is-committer-build: ${{ inputs.is-committer-build }}
+ if: inputs.do-build == 'true' && inputs.upload-package-artifact ==
'true'
- name: "Cleanup docker"
run: ./scripts/ci/cleanup_docker.sh
if: inputs.do-build == 'true' && inputs.upload-package-artifact ==
'true'
@@ -263,54 +226,17 @@ ${{ inputs.do-build == 'true' && inputs.image-tag || ''
}}"
shell: bash
run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm
-rf /workspace/*"
if: inputs.do-build == 'true'
- - uses: actions/checkout@v4
- with:
- ref: ${{ inputs.target-commit-sha }}
- persist-credentials: false
- if: inputs.do-build == 'true'
-
####################################################################################################
- # BE VERY CAREFUL HERE! THIS LINE AND THE END OF THE WARNING. IN PULL
REQUEST TARGET WORKFLOW
- # WE CHECK OUT THE TARGET COMMIT ABOVE TO BE ABLE TO BUILD THE IMAGE
FROM SOURCES FROM THE
- # INCOMING PR, RATHER THAN FROM TARGET BRANCH. THIS IS A SECURITY RISK,
BECAUSE THE PR
- # CAN CONTAIN ANY CODE AND WE EXECUTE IT HERE. THEREFORE, WE NEED TO BE
VERY CAREFUL WHAT WE
- # DO HERE. WE SHOULD NOT EXECUTE ANY CODE THAT COMES FROM THE PR. WE
SHOULD NOT RUN ANY BREEZE
- # COMMAND NOR SCRIPTS NOR COMPOSITE ACTIONS. WE SHOULD ONLY RUN CODE
THAT IS EMBEDDED DIRECTLY IN
- # THIS WORKFLOW - BECAUSE THIS IS THE ONLY CODE THAT WE CAN TRUST.
-
####################################################################################################
- - name: Checkout target branch to 'target-airflow' folder to use
ci/scripts and breeze from there.
+ - name: "Checkout target branch"
uses: actions/checkout@v4
with:
- path: "target-airflow"
- ref: ${{ github.base_ref }}
persist-credentials: false
- if: >
- inputs.do-build == 'true' && inputs.pull-request-target == 'true' &&
- inputs.is-committer-build != 'true'
- - name: >
- Replace "scripts/ci", "dev", ".github/actions" and
".github/workflows" with the target branch
- so that the those directories are not coming from the PR
- shell: bash
- run: |
- echo
- echo -e "\033[33m Replace scripts, dev, actions with target branch
for non-committer builds!\033[0m"
- echo
- rm -rfv "scripts/ci"
- rm -rfv "dev"
- rm -rfv ".github/actions"
- rm -rfv ".github/workflows"
- mv -v "target-airflow/scripts/ci" "scripts"
- mv -v "target-airflow/dev" "."
- mv -v "target-airflow/.github/actions"
"target-airflow/.github/workflows" ".github"
- if: >
- inputs.do-build == 'true' && inputs.pull-request-target == 'true' &&
- inputs.is-committer-build != 'true'
-
####################################################################################################
- # HERE IT'S A BIT SAFER. THE `dev`, `scripts/ci` AND `.github/actions`
ARE NOW COMING FROM THE
- # BASE_REF - WHICH IS THE TARGET BRANCH OF THE PR. WE CAN TRUST THAT
THOSE SCRIPTS ARE SAVE TO RUN.
- # ALL THE REST OF THE CODE COMES FROM THE PR, AND FOR EXAMPLE THE CODE
IN THE `Dockerfile.ci` CAN
- # BE RUN SAFELY AS PART OF DOCKER BUILD. BECAUSE IT RUNS INSIDE THE
DOCKER CONTAINER AND IT IS
- # ISOLATED FROM THE RUNNER.
-
####################################################################################################
+ - name: "Checkout target commit"
+ uses: ./.github/actions/checkout_target_commit
+ with:
+ target-commit-sha: ${{ inputs.target-commit-sha }}
+ pull-request-target: ${{ inputs.pull-request-target }}
+ is-committer-build: ${{ inputs.is-committer-build }}
+ if: inputs.do-build == 'true'
- name: "Cleanup docker"
run: ./scripts/ci/cleanup_docker.sh
if: inputs.do-build == 'true'