Skip to content

Commit dd0c3bd

Browse files
Merge branch 'main' into add-unroll-full-option
2 parents 17c0715 + 251377c commit dd0c3bd

File tree

2,344 files changed

+385037
-355974
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,344 files changed

+385037
-355974
lines changed

.ci/metrics/metrics.py

Lines changed: 53 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class JobMetrics:
2424
status: int
2525
created_at_ns: int
2626
workflow_id: int
27+
workflow_name: str
2728

2829

2930
@dataclass
@@ -43,40 +44,60 @@ def get_sampled_workflow_metrics(github_repo: github.Repository):
4344
Returns a list of GaugeMetric objects, containing the relevant metrics about
4445
the workflow
4546
"""
47+
queued_job_counts = {}
48+
running_job_counts = {}
4649

4750
# Other states are available (pending, waiting, etc), but the meaning
4851
# is not documented (See #70540).
4952
# "queued" seems to be the info we want.
50-
queued_workflow_count = len(
51-
[
52-
x
53-
for x in github_repo.get_workflow_runs(status="queued")
54-
if x.name in WORKFLOWS_TO_TRACK
55-
]
56-
)
57-
running_workflow_count = len(
58-
[
59-
x
60-
for x in github_repo.get_workflow_runs(status="in_progress")
61-
if x.name in WORKFLOWS_TO_TRACK
62-
]
63-
)
53+
for queued_workflow in github_repo.get_workflow_runs(status="queued"):
54+
if queued_workflow.name not in WORKFLOWS_TO_TRACK:
55+
continue
56+
for queued_workflow_job in queued_workflow.jobs():
57+
job_name = queued_workflow_job.name
58+
# Workflows marked as queued can potentially only have some jobs
59+
# queued, so make sure to also count jobs currently in progress.
60+
if queued_workflow_job.status == "queued":
61+
if job_name not in queued_job_counts:
62+
queued_job_counts[job_name] = 1
63+
else:
64+
queued_job_counts[job_name] += 1
65+
elif queued_workflow_job.status == "in_progress":
66+
if job_name not in running_job_counts:
67+
running_job_counts[job_name] = 1
68+
else:
69+
running_job_counts[job_name] += 1
70+
71+
for running_workflow in github_repo.get_workflow_runs(status="in_progress"):
72+
if running_workflow.name not in WORKFLOWS_TO_TRACK:
73+
continue
74+
for running_workflow_job in running_workflow.jobs():
75+
job_name = running_workflow_job.name
76+
if running_workflow_job.status != "in_progress":
77+
continue
78+
79+
if job_name not in running_job_counts:
80+
running_job_counts[job_name] = 1
81+
else:
82+
running_job_counts[job_name] += 1
6483

6584
workflow_metrics = []
66-
workflow_metrics.append(
67-
GaugeMetric(
68-
"workflow_queue_size",
69-
queued_workflow_count,
70-
time.time_ns(),
85+
for queued_job in queued_job_counts:
86+
workflow_metrics.append(
87+
GaugeMetric(
88+
f"workflow_queue_size_{queued_job}",
89+
queued_job_counts[queued_job],
90+
time.time_ns(),
91+
)
7192
)
72-
)
73-
workflow_metrics.append(
74-
GaugeMetric(
75-
"running_workflow_count",
76-
running_workflow_count,
77-
time.time_ns(),
93+
for running_job in running_job_counts:
94+
workflow_metrics.append(
95+
GaugeMetric(
96+
f"running_workflow_count_{running_job}",
97+
running_job_counts[running_job],
98+
time.time_ns(),
99+
)
78100
)
79-
)
80101
# Always send a hearbeat metric so we can monitor is this container is still able to log to Grafana.
81102
workflow_metrics.append(
82103
GaugeMetric("metrics_container_heartbeat", 1, time.time_ns())
@@ -157,7 +178,7 @@ def get_per_workflow_metrics(
157178
# longer in a testing state and we can directly assert the workflow
158179
# result.
159180
for step in workflow_job.steps:
160-
if step.conclusion != "success":
181+
if step.conclusion != "success" and step.conclusion != "skipped":
161182
job_result = 0
162183
break
163184

@@ -179,6 +200,7 @@ def get_per_workflow_metrics(
179200
job_result,
180201
created_at_ns,
181202
workflow_run.id,
203+
workflow_run.name,
182204
)
183205
)
184206

@@ -235,8 +257,6 @@ def upload_metrics(workflow_metrics, metrics_userid, api_key):
235257
def main():
236258
# Authenticate with Github
237259
auth = Auth.Token(os.environ["GITHUB_TOKEN"])
238-
github_object = Github(auth=auth)
239-
github_repo = github_object.get_repo("llvm/llvm-project")
240260

241261
grafana_api_key = os.environ["GRAFANA_API_KEY"]
242262
grafana_metrics_userid = os.environ["GRAFANA_METRICS_USERID"]
@@ -248,20 +268,19 @@ def main():
248268
# Enter the main loop. Every five minutes we wake up and dump metrics for
249269
# the relevant jobs.
250270
while True:
271+
github_object = Github(auth=auth)
272+
github_repo = github_object.get_repo("llvm/llvm-project")
273+
251274
current_metrics = get_per_workflow_metrics(github_repo, workflows_to_track)
252275
current_metrics += get_sampled_workflow_metrics(github_repo)
253-
# Always send a hearbeat metric so we can monitor is this container is still able to log to Grafana.
254-
current_metrics.append(
255-
GaugeMetric("metrics_container_heartbeat", 1, time.time_ns())
256-
)
257276

258277
upload_metrics(current_metrics, grafana_metrics_userid, grafana_api_key)
259278
print(f"Uploaded {len(current_metrics)} metrics", file=sys.stderr)
260279

261280
for workflow_metric in reversed(current_metrics):
262281
if isinstance(workflow_metric, JobMetrics):
263282
workflows_to_track[
264-
workflow_metric.job_name
283+
workflow_metric.workflow_name
265284
] = workflow_metric.workflow_id
266285

267286
time.sleep(SCRAPE_INTERVAL_SECONDS)

.github/workflows/build-ci-container-windows.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
container-filename: ${{ steps.vars.outputs.container-filename }}
2828
steps:
2929
- name: Checkout LLVM
30-
uses: actions/checkout@v4
30+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
3131
with:
3232
sparse-checkout: .github/workflows/containers/github-action-ci-windows
3333
- name: Write Variables
@@ -46,7 +46,7 @@ jobs:
4646
run: |
4747
docker save ${{ steps.vars.outputs.container-name-tag }} > ${{ steps.vars.outputs.container-filename }}
4848
- name: Upload container image
49-
uses: actions/upload-artifact@v4
49+
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
5050
with:
5151
name: container
5252
path: ${{ steps.vars.outputs.container-filename }}
@@ -63,7 +63,7 @@ jobs:
6363
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6464
steps:
6565
- name: Download container
66-
uses: actions/download-artifact@v4
66+
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
6767
with:
6868
name: container
6969
- name: Push Container

.github/workflows/build-ci-container.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
runs-on: depot-ubuntu-22.04-arm-16
3333
steps:
3434
- name: Checkout LLVM
35-
uses: actions/checkout@v4
35+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
3636
with:
3737
sparse-checkout: .github/workflows/containers/github-action-ci/
3838
# podman is not installed by default on the ARM64 images.
@@ -66,7 +66,7 @@ jobs:
6666
podman save ${{ steps.vars.outputs.container-name-agent-tag }} > ${{ steps.vars.outputs.container-agent-filename }}
6767
6868
- name: Upload container image
69-
uses: actions/upload-artifact@v4
69+
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
7070
with:
7171
name: container-${{ matrix.arch }}
7272
path: "*.tar"
@@ -90,7 +90,7 @@ jobs:
9090
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9191
steps:
9292
- name: Download container
93-
uses: actions/download-artifact@v4
93+
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
9494

9595
- name: Push Container
9696
run: |

.github/workflows/premerge.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ jobs:
3333
runs-on: llvm-premerge-linux-runners
3434
steps:
3535
- name: Checkout LLVM
36-
uses: actions/checkout@v4
36+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
3737
with:
3838
fetch-depth: 2
3939
- name: Setup ccache
40-
uses: hendrikmuhs/[email protected].14
40+
uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17
4141
with:
4242
max-size: "2000M"
4343
- name: Build and Test
@@ -94,11 +94,11 @@ jobs:
9494
shell: bash
9595
steps:
9696
- name: Checkout LLVM
97-
uses: actions/checkout@v4
97+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
9898
with:
9999
fetch-depth: 2
100100
- name: Setup ccache
101-
uses: hendrikmuhs/[email protected].14
101+
uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17
102102
with:
103103
variant: "sccache"
104104
max-size: "2000M"
@@ -144,7 +144,7 @@ jobs:
144144
call C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat -arch=amd64 -host_arch=amd64
145145
bash .ci/monolithic-windows.sh "${{ steps.vars.outputs.windows-projects }}" "${{ steps.vars.outputs.windows-check-targets }}"
146146
147-
permerge-check-macos:
147+
premerge-check-macos:
148148
runs-on: macos-14
149149
if: >-
150150
github.repository_owner == 'llvm' &&
@@ -153,11 +153,11 @@ jobs:
153153
(github.event_name != 'pull_request' || github.event.action != 'closed')
154154
steps:
155155
- name: Checkout LLVM
156-
uses: actions/checkout@v4
156+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
157157
with:
158158
fetch-depth: 2
159159
- name: Setup ccache
160-
uses: hendrikmuhs/[email protected].14
160+
uses: hendrikmuhs/ccache-action@a1209f81afb8c005c13b4296c32e363431bffea5 # v1.2.17
161161
with:
162162
max-size: "2000M"
163163
- name: Install Ninja

.github/workflows/release-asset-audit.py

Lines changed: 63 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import github
2+
import re
23
import sys
34

45
_SPECIAL_CASE_BINARIES = {
@@ -16,38 +17,73 @@ def _is_valid(uploader_name, valid_uploaders, asset_name):
1617
return False
1718

1819

20+
def _get_uploaders(release_version):
21+
# Until llvm 18, assets were uploaded by community members, the release managers
22+
# and the GitHub Actions bot.
23+
if release_version <= 18:
24+
return set(
25+
[
26+
"DimitryAndric",
27+
"stefanp-ibm",
28+
"lei137",
29+
"omjavaid",
30+
"nicolerabjohn",
31+
"amy-kwan",
32+
"mandlebug",
33+
"zmodem",
34+
"androm3da",
35+
"tru",
36+
"rovka",
37+
"rorth",
38+
"quinnlp",
39+
"kamaub",
40+
"abrisco",
41+
"jakeegan",
42+
"maryammo",
43+
"tstellar",
44+
"github-actions[bot]",
45+
]
46+
)
47+
# llvm 19 and beyond, only the release managers, bot and a much smaller
48+
# number of community members.
49+
elif release_version >= 19:
50+
return set(
51+
[
52+
"zmodem",
53+
"omjavaid",
54+
"tru",
55+
"tstellar",
56+
"github-actions[bot]",
57+
]
58+
)
59+
60+
61+
def _get_major_release_version(release_title):
62+
# All release titles are of the form "LLVM X.Y.Z(-rcN)".
63+
match = re.match("LLVM ([0-9]+)\.", release_title)
64+
if match is None:
65+
_write_comment_and_exit_with_error(
66+
f'Could not parse release version from release title "{release_title}".'
67+
)
68+
else:
69+
return int(match.groups()[0])
70+
71+
72+
def _write_comment_and_exit_with_error(comment):
73+
with open("comment", "w") as file:
74+
file.write(comment)
75+
sys.exit(1)
76+
77+
1978
def main():
2079
token = sys.argv[1]
2180

2281
gh = github.Github(login_or_token=token)
2382
repo = gh.get_repo("llvm/llvm-project")
2483

25-
uploaders = set(
26-
[
27-
"DimitryAndric",
28-
"stefanp-ibm",
29-
"lei137",
30-
"omjavaid",
31-
"nicolerabjohn",
32-
"amy-kwan",
33-
"mandlebug",
34-
"zmodem",
35-
"androm3da",
36-
"tru",
37-
"rovka",
38-
"rorth",
39-
"quinnlp",
40-
"kamaub",
41-
"abrisco",
42-
"jakeegan",
43-
"maryammo",
44-
"tstellar",
45-
"github-actions[bot]",
46-
]
47-
)
48-
4984
for release in repo.get_releases():
5085
print("Release:", release.title)
86+
uploaders = _get_uploaders(_get_major_release_version(release.title))
5187
for asset in release.get_assets():
5288
created_at = asset.created_at
5389
updated_at = (
@@ -57,9 +93,9 @@ def main():
5793
f"{asset.name} : {asset.uploader.login} [{created_at} {updated_at}] ( {asset.download_count} )"
5894
)
5995
if not _is_valid(asset.uploader.login, uploaders, asset.name):
60-
with open('comment', 'w') as file:
61-
file.write(f'@{asset.uploader.login} is not a valid uploader.')
62-
sys.exit(1)
96+
_write_comment_and_exit_with_error(
97+
f"@{asset.uploader.login} is not a valid uploader."
98+
)
6399

64100

65101
if __name__ == "__main__":

.github/workflows/release-binaries.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,13 @@ jobs:
133133
# add extra CMake args to disable them.
134134
# See https://github.com/llvm/llvm-project/issues/99767
135135
if [ "$RUNNER_OS" = "macOS" ]; then
136-
target_cmake_flags="$target_cmake_flags -DBOOTSTRAP_COMPILER_RT_ENABLE_IOS=OFF"
136+
target_cmake_flags="$target_cmake_flags -DBOOTSTRAP_BOOTSTRAP_COMPILER_RT_ENABLE_IOS=OFF"
137137
if [ "$RUNNER_ARCH" = "ARM64" ]; then
138138
arches=arm64
139139
else
140140
arches=x86_64
141141
fi
142-
target_cmake_flags="$target_cmake_flags -DBOOTSTRAP_DARWIN_osx_ARCHS=$arches -DBOOTSTRAP_DARWIN_osx_BUILTIN_ARCHS=$arches"
142+
target_cmake_flags="$target_cmake_flags -DBOOTSTRAP_BOOTSTRAP_DARWIN_osx_ARCHS=$arches -DBOOTSTRAP_BOOTSTRAP_DARWIN_osx_BUILTIN_ARCHS=$arches"
143143
fi
144144
145145
build_flang="true"

.mailmap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ Jianjian GUAN <[email protected]> <[email protected]>
3838
3939
4040
41+
42+
4143
LLVM GN Syncbot <[email protected]>
4244
Martin Storsjö <[email protected]>
4345
Med Ismail Bennani <[email protected]> <[email protected]>

0 commit comments

Comments
 (0)