-
Notifications
You must be signed in to change notification settings - Fork 1
160 lines (134 loc) · 5.99 KB
/
jit-diff.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
name: JIT Diffs
on:
workflow_dispatch:
inputs:
baseUser:
description: Base user/org
required: true
default: dotnet
baseBranch:
description: Base branch
required: true
default: main
diffUser:
description: Diff user/org
required: true
default: am11
diffBranch:
description: Diff branch
required: true
default: main
diffCloneName:
description: Diff clone name
required: true
default: runtime
uploadArtifacts:
description: "Upload artifacts (yes: 1, no: 0)"
required: true
default: 0
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install dependencies
run: |
sudo apt install -y liblttng-ust-dev libkrb5-dev libssl-dev libicu-dev g++ llvm-dev clang dotnet6
dotnet --info
- name: Cleanup
run: |
echo "Before cleanup:"
df -h
sudo rm -rf "/usr/local/share/boost" "$AGENT_TOOLSDIRECTORY"
sudo apt clean
echo "After cleanup:"
df -h
- name: Checkout runtime repos
run: |
BASE_USER=${{ github.event.inputs.baseUser }}
BASE_BRANCH=${{ github.event.inputs.baseBranch }}
DIFF_USER=${{ github.event.inputs.diffUser }}
DIFF_BRANCH=${{ github.event.inputs.diffBranch }}
DIFF_CLONE_NAME=${{ github.event.inputs.diffCloneName }}
git clone https://github.com/${BASE_USER:-dotnet}/runtime runtime-base
git clone https://github.com/${DIFF_USER:-dotnet}/${DIFF_CLONE_NAME:-runtime} runtime-diff
git -C runtime-diff checkout $DIFF_BRANCH
git -C runtime-diff remote add $BASE_USER https://github.com/$BASE_USER/runtime
git -C runtime-diff fetch --all
NEAREST_PARENT="$(git -C runtime-diff merge-base HEAD $BASE_USER/$BASE_BRANCH)"
git -C runtime-base checkout $NEAREST_PARENT
- name: Build runtime-base
run: |
$(pwd)/runtime-base/build.sh Clr+Libs -c Release
$(pwd)/runtime-base/build.sh Clr -c Checked
$(pwd)/runtime-base/src/tests/build.sh Checked generatelayoutonly
$(pwd)/runtime-base/src/tests/build.sh Release generatelayoutonly
- name: Cleanup
run: |
echo "Before cleanup:"
df -h
sudo rm -rf $(pwd)/runtime-base/artifacts/obj
echo "After cleanup:"
df -h
- name: Build runtime-diff
run: |
$(pwd)/runtime-diff/build.sh Clr+Libs -c Release
$(pwd)/runtime-diff/build.sh Clr -c Checked
$(pwd)/runtime-diff/src/tests/build.sh Checked generatelayoutonly
$(pwd)/runtime-diff/src/tests/build.sh Release generatelayoutonly
- name: Cleanup
run: |
echo "Before cleanup:"
df -h
sudo rm -rf $(pwd)/runtime-diff/artifacts/obj
echo "After cleanup:"
df -h
- name: Build jitutils
run: |
git clone https://github.com/dotnet/jitutils
cd jitutils
$(pwd)/bootstrap.sh
$(pwd)/build.sh -c Release
cd ..
- name: Collect and analyze jit-diffs (crossgen + framework)
run: |
export PATH=$PATH:$(pwd)/jitutils/bin
mkdir -p /tmp/jit-diffs/crossgen2
jit-diff diff --output /tmp/jit-diffs/crossgen2 \
--base $(pwd)/runtime-base/artifacts/bin/coreclr/Linux.x64.Checked \
--core_root $(pwd)/runtime-base/artifacts/tests/coreclr/Linux.x64.Release/Tests/Core_Root \
--crossgen $(pwd)/runtime-base/artifacts/tests/coreclr/Linux.x64.Release/Tests/Core_Root/crossgen2/crossgen2 \
--frameworks || true | while read line; do df -h; echo "$line"; done
jit-diff diff --output /tmp/jit-diffs/crossgen2 \
--diff $(pwd)/runtime-diff/artifacts/bin/coreclr/Linux.x64.Checked \
--core_root $(pwd)/runtime-diff/artifacts/tests/coreclr/Linux.x64.Release/Tests/Core_Root \
--crossgen $(pwd)/runtime-diff/artifacts/tests/coreclr/Linux.x64.Release/Tests/Core_Root/crossgen2/crossgen2 \
--frameworks || true | while read line; do df -h; echo "$line"; done
jit-analyze -b /tmp/jit-diffs/crossgen2/dasmset_1/base -d /tmp/jit-diffs/crossgen2/dasmset_2/diff -r -c 100 || true
- name: Collect and analyze jit-diffs (pmi + framework)
run: |
export PATH=$PATH:$(pwd)/jitutils/bin
mkdir -p /tmp/jit-diffs/pmi
jit-diff diff --output /tmp/jit-diffs/pmi \
--base $(pwd)/runtime-base/artifacts/bin/coreclr/Linux.x64.Checked \
--base_root runtime-base \
--core_root $(pwd)/runtime-base/artifacts/tests/coreclr/Linux.x64.Release/Tests/Core_Root \
--pmi --frameworks || true | while read line; do df -h; echo "$line"; done
jit-diff diff --output /tmp/jit-diffs/pmi \
--diff $(pwd)/runtime-diff/artifacts/bin/coreclr/Linux.x64.Checked \
--diff_root runtime-diff \
--core_root $(pwd)/runtime-diff/artifacts/tests/coreclr/Linux.x64.Release/Tests/Core_Root \
--pmi --frameworks || true | while read line; do df -h; echo "$line"; done
jit-analyze -b /tmp/jit-diffs/pmi/dasmset_1/base -d /tmp/jit-diffs/pmi/dasmset_2/diff -r -c 100 || true
# runs when uploadArtifacts value is 1 (true) set from UI, with on-demand run
- name: Upload artifacts
if: ${{ github.event.inputs.uploadArtifacts == '1' }}
run: |
# hub(1) requires release to be created inside a git repo
git clone https://${{ secrets.CLONE_TOKEN }}:x-oauth-basic@github.com/${{ github.repository }}.git repo
cd repo
tar czf jit-diffs.tar.gz -C /tmp jit-diffs
artifacts="-a ./jit-diffs.tar.gz"
tag_name="jit-diffs_$GITHUB_RUN_ID"
hub release create $artifacts -m "$tag_name" "$tag_name"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}