2727 # https://reproducible-builds.org/specs/source-date-epoch/
2828 SOURCE_DATE_EPOCH : " 1580601600"
2929
30- jobs :
30+ jobs :
3131 # measure-disk-usage.yml depends on this workflow being triggered and completed,
3232 # so it can wait for the build to calculate dependency sizes.
3333 # The 'on' setting ensures it runs, but this job cancels it if no dependency changes are detected.
3434
35- check-dependency-changes :
36- name : Check dependency changes
35+ check-should-run :
36+ name : Check if build should run
3737 runs-on : ubuntu-22.04
3838 permissions :
3939 actions : write
40+ contents : read
4041 outputs :
41- dependency_changed : ${{ steps.dependency-check.outputs.dependency_changed }}
4242 builder_changed : ${{ steps.dependency-check.outputs.builder_changed }}
43+ should_run_build : ${{ steps.dependency-check.outputs.should_run_build }}
4344 steps :
45+ - name : Checkout code
46+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
47+
4448 - name : Define diff commits
4549 id : set_sha
46- run : |
47- if [ "${{ github.event_name }}" == "pull_request" ]; then
48- PREV_SHA=${{ github.event.pull_request.base.sha }}
49- CURR_SHA=${{ github.event.pull_request.head.sha }}
50- else
51- PREV_SHA=${{ github.event.before }}
52- CURR_SHA=${{ github.sha }}
53- fi
54-
55- echo "prev_sha=$PREV_SHA" >> $GITHUB_OUTPUT
56- echo "curr_sha=$CURR_SHA" >> $GITHUB_OUTPUT
57-
58- echo "Current SHA: $CURR_SHA"
59- echo "Previous SHA: $PREV_SHA"
50+ if : github.event_name != 'workflow_dispatch'
51+ run : .github/workflows/scripts/resolve_deps_define_diff_commits.sh
52+ env :
53+ PR_BASE_SHA : ${{ github.event.pull_request.base.sha }}
54+ PR_HEAD_SHA : ${{ github.event.pull_request.head.sha }}
55+ EVENT_BEFORE : ${{ github.event.before }}
6056
6157 - name : Get changed files
6258 id : changed-files
59+ if : github.event_name != 'workflow_dispatch'
6360 run : |
6461 REPO="${{ github.repository }}"
6562
@@ -71,50 +68,24 @@ jobs:
7168 env :
7269 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
7370
74- - name : Check for dependency changes
71+ - name : Check if build should run
7572 id : dependency-check
76- run : |
77- FILES_CHANGED="${{ steps.changed-files.outputs.files_changed }}"
78-
79- cat << EOF > dependency_files.txt
80- agent_requirements\.in
81- \.github/workflows/resolve-build-deps\.yaml
82- \.builders/
83- EOF
84-
85- cat <<EOF > builder_files.txt
86- \.builders/
87- EOF
88-
89- DEPENDENCY_CHANGED=$(
90- echo "$FILES_CHANGED" | \
91- grep -qf dependency_files.txt \
92- && echo "true" || echo "false"
93- )
94-
95- BUILDER_CHANGED=$(
96- echo "$FILES_CHANGED" | \
97- grep -qf builder_files.txt \
98- && echo "true" || echo "false"
99- )
100-
101-
102- echo "dependency_changed=$DEPENDENCY_CHANGED" | tee -a $GITHUB_OUTPUT
103- echo "builder_changed=$BUILDER_CHANGED" | tee -a $GITHUB_OUTPUT
104-
73+ run : .github/workflows/scripts/resolve_deps_check_should_run.sh
10574 env :
10675 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
76+ FILES_CHANGED : ${{ steps.changed-files.outputs.files_changed }}
10777
10878 test :
10979 name : Run tests
11080 needs :
111- - check-dependency-changes
112- if : needs.check-dependency-changes .outputs.dependency_changed == 'true'
81+ - check-should-run
82+ if : needs.check-should-run .outputs.should_run_build == 'true'
11383 runs-on : ubuntu-22.04
11484 steps :
11585 - name : Checkout code
11686 uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
117- - name : Set up Python ${{ env.PYTHON_VERSION }}
87+
88+ - name : Set up Python ${{ env.PYTHON_VERSION }}
11889 uses : actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
11990 with :
12091 python-version : ${{ env.PYTHON_VERSION }}
@@ -130,8 +101,8 @@ jobs:
130101 build :
131102 name : Target ${{ matrix.job.image }} on ${{ matrix.job.os }}
132103 needs :
133- - check-dependency-changes
134- if : needs.check-dependency-changes .outputs.dependency_changed == 'true'
104+ - check-should-run
105+ if : needs.check-should-run .outputs.should_run_build == 'true'
135106 runs-on : ${{ matrix.job.os }}
136107 strategy :
137108 fail-fast : false
@@ -162,8 +133,7 @@ jobs:
162133 python-version : ${{ env.PYTHON_VERSION }}
163134
164135 - name : Install management dependencies
165- run : |
166- pip install -r .builders/deps/host_dependencies.txt
136+ run : pip install -r .builders/deps/host_dependencies.txt
167137
168138 - name : Log in to GitHub Packages
169139 uses : docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
@@ -173,29 +143,28 @@ jobs:
173143 password : ${{ secrets.GITHUB_TOKEN }}
174144
175145 - name : Build image and wheels
176- if : needs.check-dependency-changes.outputs.builder_changed == 'true'
177- run : |-
178- python .builders/build.py ${{ matrix.job.image }} --python 3 ${{ env.OUT_DIR }}/py3
146+ if : needs.check-should-run.outputs.builder_changed == 'true'
147+ run : python .builders/build.py ${{ matrix.job.image }} --python 3 ${{ env.OUT_DIR }}/py3
179148
180149 - name : Pull image and build wheels
181- if : needs.check-dependency-changes .outputs.builder_changed == 'false'
182- run : |-
150+ if : needs.check-should-run .outputs.builder_changed == 'false'
151+ run : |
183152 digest=$(jq -r '.["${{ matrix.job.image }}"]' .deps/image_digests.json)
184153 python .builders/build.py ${{ matrix.job.image }} --python 3 ${{ env.OUT_DIR }}/py3 --digest $digest
185154
186155 - name : Publish image
187- if : github.event_name == 'push' && needs.check-dependency-changes .outputs.builder_changed == 'true'
156+ if : github.event_name == 'push' && needs.check-should-run .outputs.builder_changed == 'true'
188157 run : ${DOCKER} push ${{ env.BUILDER_IMAGE }}
189158
190159 - name : Save new image digest
191- if : github.event_name == 'push' && needs.check-dependency-changes .outputs.builder_changed == 'true'
160+ if : github.event_name == 'push' && needs.check-should-run .outputs.builder_changed == 'true'
192161 run : >-
193162 ${DOCKER} inspect --format "{{index .RepoDigests 0}}" ${{ env.BUILDER_IMAGE }}
194163 | cut -d '@' -f 2
195164 > ${{ env.OUT_DIR }}/image_digest
196165
197166 - name : Persist current image digest
198- if : github.event_name == 'push' && needs.check-dependency-changes .outputs.builder_changed == 'false'
167+ if : needs.check-should-run .outputs.builder_changed == 'false'
199168 run : >-
200169 jq -r '.["${{ matrix.job.image }}"]' .deps/image_digests.json
201170 > ${{ env.OUT_DIR }}/image_digest
@@ -209,8 +178,8 @@ jobs:
209178 build-macos :
210179 name : Target macOS/${{ matrix.job.arch }} on ${{ matrix.job.os }}
211180 needs :
212- - check-dependency-changes
213- if : needs.check-dependency-changes .outputs.dependency_changed == 'true'
181+ - check-should-run
182+ if : needs.check-should-run .outputs.should_run_build == 'true'
214183 runs-on : ${{ matrix.job.os }}
215184 strategy :
216185 fail-fast : false
@@ -230,7 +199,7 @@ jobs:
230199
231200 steps :
232201 - name : Set up environment
233- run : |-
202+ run : |
234203 # We remove everything that comes pre-installed via Homebrew to avoid depending on or shipping stuff that
235204 # comes in the runner through Homebrew to better control what might get shipped in the wheels via `delocate`
236205 brew remove --force --ignore-dependencies $(brew list --formula)
@@ -256,16 +225,15 @@ jobs:
256225 id : cache-builder-root
257226 uses : actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
258227 with :
259- path : |
260- ~/builder_root
228+ path : ~/builder_root
261229 key : macos-${{ matrix.job.arch }}-deps-builder-root-cache-${{ hashFiles('./.builders/images/macos/*', './.builders/images/*', './.builders/deps/*', './.builders/build.py', './.github/workflows/resolve-build-deps.yml') }}
262230
263231 - name : Run the build
264232 env :
265233 # This sets the minimum macOS version compatible for all built artifacts
266234 MACOSX_DEPLOYMENT_TARGET : " 11.0" # https://docs.datadoghq.com/agent/supported_platforms/?tab=macos
267235 CACHE_HIT : ${{ steps.cache-builder-root.outputs.cache-hit }}
268- run : |-
236+ run : |
269237 # If we hit the cache, we can skip the builder setup
270238 if [[ ${CACHE_HIT} == "true" ]]; then
271239 ${DD_PYTHON3} .builders/build.py ${{ env.TARGET_NAME }} --builder-root ~/builder_root --python 3 ${{ env.OUT_DIR }}/py3 --skip-setup
@@ -283,11 +251,11 @@ jobs:
283251
284252 publish :
285253 name : Publish artifacts and update lockfiles via PR
286- if : needs.check-dependency-changes .outputs.dependency_changed == 'true' && (github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && (github.ref_name == github.event.repository.default_branch || startsWith(github.ref_name, '7.'))))
254+ if : needs.check-should-run .outputs.should_run_build == 'true' && (github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && (github.ref_name == github.event.repository.default_branch || startsWith(github.ref_name, '7.'))))
287255 needs :
288256 - build
289257 - build-macos
290- - check-dependency-changes
258+ - check-should-run
291259 runs-on : ubuntu-latest
292260
293261 permissions :
@@ -329,7 +297,7 @@ jobs:
329297 run : python .builders/lock.py targets
330298
331299 - name : Clean up repository
332- run : |-
300+ run : |
333301 rm ${{ steps.auth.outputs.credentials_file_path }}
334302 rm -rf targets
335303
0 commit comments