Skip to content

Commit a8ff0eb

Browse files
committed
implement diff workflow
Change-Id: Ib894b3ac877afe5471d24c663945149a668183e1
1 parent 019ae9d commit a8ff0eb

File tree

2 files changed

+218
-0
lines changed

2 files changed

+218
-0
lines changed

.github/config/chromium_diffing.json

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
{
2+
"diff_label_prefix": "diff-",
3+
"stable_branches": [
4+
{
5+
"milestone": "m114",
6+
"branch_num": 5735
7+
},
8+
{
9+
"milestone": "m120",
10+
"branch_num": 6099
11+
},
12+
{
13+
"milestone": "m126",
14+
"branch_num": 6478
15+
}
16+
],
17+
"code_ownership": {
18+
"ours": [
19+
".github/",
20+
"cobalt/",
21+
"media/starboard/",
22+
"media/mojo/clients/starboard/",
23+
"media/mojo/services/starboard/",
24+
"media/base/starboard/",
25+
"starboard/",
26+
"third_party/blink/renderer/modules/cobalt/",
27+
"third_party/blink/renderer/core/cobalt/",
28+
"third_party/blink/web_tests/wpt_internal/cobalt/",
29+
"components/viz/service/display/starboard/",
30+
"ui/ozone/platform/starboard/",
31+
".pre-commit-config.yaml",
32+
".pylintrc",
33+
"docker-compose.yaml"
34+
],
35+
"our_files": [
36+
"base/base_paths_starboard.cc",
37+
"base/base_paths_starboard.h",
38+
"base/message_loop/message_pump_ui_starboard.cc",
39+
"base/message_loop/message_pump_ui_starboard.h",
40+
"base/system/sys_info_starboard_unittest.cc",
41+
"base/system/sys_info_starboard.cc",
42+
"base/system/sys_info_starboard.h",
43+
"base/test/test_support_starboard.cc",
44+
"base/test/test_support_starboard.h",
45+
"base/time/time_now_starboard.cc",
46+
"base/time/time_starboard.cc",
47+
"net/base/network_change_notifier_starboard.h",
48+
"net/base/network_interfaces_starboard.cc",
49+
"net/base/platform_mime_util_starboard.cc",
50+
"media/formats/mp4/ac3_unittest.cc",
51+
"media/formats/mp4/eac3_unittest.cc",
52+
"third_party/blink/renderer/core/frame/csp/local_ip.cc",
53+
"third_party/blink/renderer/core/frame/csp/local_ip.h",
54+
"third_party/blink/renderer/platform/media/web_content_decryption_module_impl_unittest.cc",
55+
"third_party/blink/web_tests/external/wpt/media-source/SourceBuffer-writeHead.html",
56+
"third_party/blink/web_tests/media/encrypted-media/encrypted-media-getmetrics.html"
57+
],
58+
"our_owned_dep": [
59+
"third_party/boringssl/src",
60+
"third_party/googletest/src"
61+
],
62+
"our_added_dep": [
63+
"third_party/android_deps/libs/com_google_android_gms_play_services_ads_identifier",
64+
"third_party/de265_includes",
65+
"third_party/ffmpeg_includes",
66+
"third_party/libfdkaac",
67+
"third_party/llvm-project",
68+
"third_party/lz4_lib",
69+
"third_party/musl",
70+
"third_party/openh264/include",
71+
"third_party/pulseaudio_includes"
72+
],
73+
"our_deleted_dep": [
74+
"third_party/google_input_tools",
75+
"third_party/rust/atty",
76+
"third_party/rust/camino",
77+
"third_party/rust/cargo_metadata",
78+
"third_party/rust/cargo_platform",
79+
"third_party/rust/fastrand",
80+
"third_party/rust/hashbrown",
81+
"third_party/rust/indexmap",
82+
"third_party/rust/once_cell",
83+
"third_party/rust/remove_dir_all",
84+
"third_party/rust/tempfile",
85+
"third_party/rust/toml",
86+
"tools/stats_viewer",
87+
"tools/win/ChromeDebug"
88+
],
89+
"updated": [
90+
"third_party/crashpad/crashpad/third_party/cpp-httplib",
91+
"third_party/rust/rstest/v0_12/crate/docs/head",
92+
"ui/file_manager/image_loader/piex/package-lock.json"
93+
]
94+
}
95+
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
name: Diff from Chromium branches
2+
on:
3+
workflow_dispatch:
4+
inputs:
5+
upstream_branches:
6+
description: 'List of Chromium branches to diff from (comma separated).'
7+
required: true
8+
type: string
9+
downstream_branch:
10+
description: 'Name of the branch to perform the diff with.'
11+
required: true
12+
type: string
13+
pull_request:
14+
types:
15+
- labeled
16+
jobs:
17+
initialize:
18+
runs-on: ubuntu-latest
19+
steps:
20+
- name: Set upstream branches
21+
id: set-upstream-branches
22+
env:
23+
PR_LABELS: ${{ toJson(github.event.pull_request.labels) }}
24+
shell: bash
25+
run: |
26+
set -x
27+
if [[ $EVENT_ACTION == 'labeled' ]]; then
28+
# Get the upstream branches from labels prefixed with $DIFF_PREFIX
29+
DIFF_PREFIX=$(cat ${GITHUB_WORKSPACE}/.github/config/chromium_diffing.json | jq -r '.diff_label_prefix')
30+
export DIFF_LABELS=$(echo "$PR_LABELS" | jq -r --arg prefix "$DIFF_PREFIX" '.[] | select(.name | startswith($prefix)) | .name | sub($prefix; "")')
31+
else
32+
# If manually triggered, get branches from comma-separated branches from inputs
33+
export DIFF_LABELS=$(echo ${{ inputs.upstream_branches }} | tr ',' '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//)
34+
fi
35+
# Convert into regex needed for filtering with jq
36+
SELECTED_BRANCHES=$(echo "$DIFF_LABELS" | tr '\n' '|' | sed 's/|$/\n/')
37+
JQ_QUERY="[.stable_branches[] | select(.milestone | test(\"^($SELECTED_BRANCHES)$\"))]"
38+
UPSTREAM_BRANCHES=$(cat ${GITHUB_WORKSPACE}/.github/config/chromium_diffing.json | jq "${JQ_QUERY}")
39+
echo "upstream_branches=${UPSTREAM_BRANCHES}" >> $GITHUB_OUTPUT
40+
- name: Set downstream branch
41+
id: set-downstream-branch
42+
shell: bash
43+
run: |
44+
set -x
45+
if [[ $EVENT_ACTION == 'labeled' ]]; then
46+
# Get the downstream branch from the labelled PR
47+
DOWNSTREAM_BRANCH={{ github.ref_name}}
48+
else
49+
# Get the trimmed downstream branch directly from inputs
50+
DOWNSTREAM_BRANCH=$(echo ${{ inputs.downstream_branch }} | sed 's/^[[:space:]]*//;s/[[:space:]]*$//))
51+
fi
52+
echo "downstream_branch=${DOWNSTREAM_BRANCH}" >> $GITHUB_OUTPUT
53+
- name: Set code ownership
54+
id: set-code-ownership
55+
shell: bash
56+
run: |
57+
set -x
58+
code_ownership=$(cat ${GITHUB_WORKSPACE}/.github/config/chromium_diffing.json | jq .code_ownership")
59+
echo "code_ownership=${code_ownership}" >> $GITHUB_OUTPUT
60+
outputs:
61+
upstream_branches: ${{ steps.set-upstream-branches.outputs.upstream_branches }}
62+
downstream_branch: ${{ steps.set-downstream-branch.outputs.downstream_branch }}
63+
code_ownership: ${{ steps.set-code-ownership.outputs.code_ownership }}
64+
calculate_diffs:
65+
needs: [initialize]
66+
runs-on: ubuntu-latest
67+
strategy:
68+
fail-fast: false
69+
matrix:
70+
upstream_branch: ${{ fromJson(needs.initialize.outputs.upstream_branches) }}
71+
steps:
72+
- uses: actions/checkout@v4
73+
with:
74+
ref: chromium/${{ matrix.upstream_branch.milestone }}
75+
- name: Calculate main diff (excluding downstream-owned folders)
76+
env:
77+
DOWNSTREAM_REF: ${{ needs.initialize.outputs.downstream_branch }}
78+
CODE_OWNERSHIP: ${{ needs.initialize.outputs.code_ownership }}
79+
run: |
80+
set -x
81+
git config set diff.renameLimit 100000
82+
EXCLUDE_PATHS_FOR_MAIN_DIFF=$(echo "$CODE_OWNERSHIP" | jq -r '
83+
.ours +
84+
.our_files +
85+
.our_owned_dep +
86+
.our_added_dep +
87+
.our_deleted_dep +
88+
.updated
89+
| map(":(exclude)" + .) | .[]
90+
')
91+
# Diff downstream to checked out branch (upstream)
92+
readarray -t EXCLUDE_PATHS_ARRAY <<< "$EXCLUDE_PATHS_FOR_MAIN_DIFF"
93+
git diff HEAD..$DOWNSTREAM_REF -- . "${EXCLUDE_PATHS_ARRAY[@]}" > main_diff.diff
94+
- name: Check for upstream addtions in excluded folders
95+
env:
96+
DOWNSTREAM_REF: ${{ needs.initialize.outputs.downstream_branch }}
97+
CODE_OWNERSHIP: ${{ needs.initialize.outputs.code_ownership }}
98+
run: |
99+
set -x
100+
DOWNSTREAM_OWNED_FOLDER_TO_CHECK=$(echo "$CODE_OWNERSHIP" | jq -r '
101+
.ours +
102+
.our_files +
103+
.our_owned_dep +
104+
.our_added_dep +
105+
.updated
106+
| .[]
107+
')
108+
readarray -t PATHS_TO_CHECK_ARRAY <<< "$DOWNSTREAM_OWNED_FOLDER_TO_CHECK"
109+
$(git diff --diff-filter=A $DOWNSTREAM_REF..HEAD -- ${PATHS_TO_CHECK_ARRAY[@]}) > upstream_additions.diff
110+
- name: Report Diffs
111+
run: |
112+
echo "This is will be replaced with proper logging later"
113+
echo "--------------------------------------------------"
114+
echo "SUMMARY OF MAIN DIFFS"
115+
echo "--------------------------------------------------"
116+
echo ""
117+
echo $(diffstat main_diff.diff)
118+
echo ""
119+
echo "--------------------------------------------------"
120+
echo "SUMMARY OF ADDED DIFFS"
121+
echo "--------------------------------------------------"
122+
echo ""
123+
echo $(diffstat main_diff.diff)

0 commit comments

Comments
 (0)