Skip to content

Commit a51dcf5

Browse files
committed
Merge branch 'master' into aliu/ccc
2 parents 63f03a5 + be04ab2 commit a51dcf5

7,909 files changed

Lines changed: 257921 additions & 116136 deletions

File tree

Some content is hidden

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

.docker/gitpod-blueprint/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ FROM ubuntu:jammy
1010
USER root
1111

1212
ENV DEBIAN_FRONTEND=noninteractive
13-
RUN apt-get update && apt-get install sudo git curl git bash-completion texlive texlive-xetex latexmk graphviz graphviz-dev python3 python3-pip python3-requests -y && apt-get clean
13+
RUN apt-get update && apt-get install sudo git curl git bash-completion texlive texlive-xetex latexmk graphviz graphviz-dev tzdata python3 python3-pip python3-requests -y && apt-get clean
1414

1515
RUN useradd -l -u 33333 -G sudo -md /home/gitpod -s /bin/bash -p gitpod gitpod \
1616
# passwordless sudo for users in the 'sudo' group

.docker/gitpod/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ FROM ubuntu:jammy
99
USER root
1010

1111
ENV DEBIAN_FRONTEND=noninteractive
12-
RUN apt-get update && apt-get install sudo git curl git bash-completion python3 python3-pip python3-requests -y && apt-get clean
12+
RUN apt-get update && apt-get install sudo git curl git tzdata bash-completion python3 python3-pip python3-requests -y && apt-get clean
1313

1414
RUN useradd -l -u 33333 -G sudo -md /home/gitpod -s /bin/bash -p gitpod gitpod \
1515
# passwordless sudo for users in the 'sudo' group

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11

22
---
3-
<!-- The text above the `---` will become the commit message when your
4-
PR is merged. Please leave a blank newline before the `---`, otherwise
5-
GitHub will format the text above it as a title.
3+
<!-- Your PR title will become the first line of the commit message.
4+
5+
In this box, the text above the `---` (if not empty) will be appended
6+
to the commit message, and can be used to give additional context or
7+
details. Please leave a blank newline before the `---`, otherwise GitHub
8+
will format the text above it as a title.
69
710
For details on the "pull request lifecycle" in mathlib, please see:
811
https://leanprover-community.github.io/contribute/index.html

.github/actionlint.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ self-hosted-runner:
33
- bors
44
- pr
55
- doc-gen
6+
- lean4checker

.github/build.in.yml

Lines changed: 127 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
lint-outcome: ${{ steps.lint.outcome }}
3939
mk_all-outcome: ${{ steps.mk_all.outcome }}
4040
noisy-outcome: ${{ steps.noisy.outcome }}
41-
shake-outcome: ${{ steps.shake.outcome }}
41+
# shake-outcome: ${{ steps.shake.outcome }}
4242
test-outcome: ${{ steps.test.outcome }}
4343
defaults: # On Hoskinson runners, landrun is already installed.
4444
run: # note that .pr-branch/.lake must be created in a step below before we use this
@@ -78,7 +78,7 @@ jobs:
7878

7979
# Checkout the master branch into a subdirectory
8080
- name: Checkout master branch
81-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
81+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
8282
with:
8383
# Recall that on the `leanprover-community/mathlib4-nightly-testing` repository,
8484
# we don't maintain a `master` branch at all.
@@ -88,7 +88,7 @@ jobs:
8888

8989
# Checkout the PR branch into a subdirectory
9090
- name: Checkout PR branch
91-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
91+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
9292
with:
9393
ref: "${{ PR_BRANCH_REF }}"
9494
path: pr-branch
@@ -223,7 +223,7 @@ jobs:
223223
224224
# Extract all inputRevs from the manifest
225225
invalid_revs=$(jq -r '.packages[].inputRev // empty' lake-manifest.json | \
226-
grep -v -E '^(main|master|v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?)$' || true)
226+
grep -v -E '^(main|master|v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?)$' || true)
227227
228228
if [ -n "$invalid_revs" ]; then
229229
echo "❌ Error: Found invalid inputRevs in lake-manifest.json:"
@@ -232,12 +232,57 @@ jobs:
232232
echo "All inputRevs must be one of:"
233233
echo " - 'main'"
234234
echo " - 'master'"
235-
echo " - 'vX.Y.Z' (semantic version, e.g., v1.2.3 or v1.2.3-pre)"
235+
echo " - 'vX.Y.Z' (semantic version, e.g., v1.2.3, v1.2.3-pre, or v1.2.3+build)"
236236
exit 1
237237
else
238238
echo "✅ All inputRevs in lake-manifest.json are valid"
239239
fi
240240
241+
- name: verify ProofWidgets lean-toolchain matches on versioned releases
242+
# Only enforce this on the main mathlib4 repository, not on nightly-testing
243+
if: github.repository == 'leanprover-community/mathlib4'
244+
shell: bash
245+
run: |
246+
cd pr-branch
247+
248+
# Read the lean-toolchain file
249+
TOOLCHAIN=$(cat lean-toolchain | tr -d '[:space:]')
250+
echo "Lean toolchain: $TOOLCHAIN"
251+
252+
# Check if toolchain matches the versioned release pattern: leanprover/lean4:vX.Y.Z (with optional suffix like -rc1)
253+
if [[ "$TOOLCHAIN" =~ ^leanprover/lean4:v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?$ ]]; then
254+
echo "✓ Detected versioned Lean release: $TOOLCHAIN"
255+
echo "Verifying ProofWidgets lean-toolchain matches..."
256+
257+
# Check if ProofWidgets lean-toolchain exists
258+
if [ ! -f .lake/packages/proofwidgets/lean-toolchain ]; then
259+
echo "❌ Error: .lake/packages/proofwidgets/lean-toolchain does not exist"
260+
echo "This file should be created by 'lake env' during dependency download."
261+
exit 1
262+
fi
263+
264+
# Read ProofWidgets lean-toolchain
265+
PROOFWIDGETS_TOOLCHAIN=$(cat .lake/packages/proofwidgets/lean-toolchain | tr -d '[:space:]')
266+
echo "ProofWidgets toolchain: $PROOFWIDGETS_TOOLCHAIN"
267+
268+
# Compare the two
269+
if [ "$TOOLCHAIN" != "$PROOFWIDGETS_TOOLCHAIN" ]; then
270+
echo "❌ Error: Lean toolchain mismatch!"
271+
echo " Main lean-toolchain: $TOOLCHAIN"
272+
echo " ProofWidgets lean-toolchain: $PROOFWIDGETS_TOOLCHAIN"
273+
echo ""
274+
echo "When using a versioned Lean release (leanprover/lean4:vX.Y.Z),"
275+
echo "the ProofWidgets dependency must use the same toolchain."
276+
echo "Please update the ProofWidgets dependency to use $TOOLCHAIN"
277+
exit 1
278+
else
279+
echo "✅ ProofWidgets lean-toolchain matches: $TOOLCHAIN"
280+
fi
281+
else
282+
echo "ℹ Lean toolchain is not a versioned release (pattern: leanprover/lean4:vX.Y.Z)"
283+
echo "Skipping ProofWidgets toolchain verification."
284+
fi
285+
241286
- name: get cache (1/3 - setup and initial fetch)
242287
id: get_cache_part1_setup
243288
shell: bash # only runs `cache get` from `master-branch`, so doesn't need to be inside landrun
@@ -320,7 +365,7 @@ jobs:
320365
321366
- name: upload artifact containing contents of pr-branch
322367
# temporary measure for debugging no-build failures
323-
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
368+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
324369
with:
325370
name: mathlib4_artifact
326371
include-hidden-files: true
@@ -350,7 +395,7 @@ jobs:
350395
# do not try to upload files just downloaded
351396
352397
echo "Uploading cache to Azure..."
353-
USE_FRO_CACHE=0 ../master-branch/.lake/build/bin/cache --repo=${{ github.event.pull_request.head.repo.full_name || github.repository }} put-unpacked
398+
MATHLIB_CACHE_USE_CLOUDFLARE=0 ../master-branch/.lake/build/bin/cache --repo=${{ github.event.pull_request.head.repo.full_name || github.repository }} put-unpacked
354399
env:
355400
MATHLIB_CACHE_SAS_RAW: ${{ secrets.MATHLIB_CACHE_SAS }}
356401

@@ -406,13 +451,13 @@ jobs:
406451
export MATHLIB_CACHE_SAS="${MATHLIB_CACHE_SAS_RAW%"${MATHLIB_CACHE_SAS_RAW##*[![:space:]]}"}"
407452
408453
echo "Uploading Archive and Counterexamples cache to Azure..."
409-
USE_FRO_CACHE=0 ../master-branch/.lake/build/bin/cache --repo=${{ github.event.pull_request.head.repo.full_name || github.repository }} put-unpacked Archive.lean
410-
USE_FRO_CACHE=0 ../master-branch/.lake/build/bin/cache --repo=${{ github.event.pull_request.head.repo.full_name || github.repository }} put-unpacked Counterexamples.lean
454+
MATHLIB_CACHE_USE_CLOUDFLARE=0 ../master-branch/.lake/build/bin/cache --repo=${{ github.event.pull_request.head.repo.full_name || github.repository }} put-unpacked Archive.lean
455+
MATHLIB_CACHE_USE_CLOUDFLARE=0 ../master-branch/.lake/build/bin/cache --repo=${{ github.event.pull_request.head.repo.full_name || github.repository }} put-unpacked Counterexamples.lean
411456
env:
412457
MATHLIB_CACHE_SAS_RAW: ${{ secrets.MATHLIB_CACHE_SAS }}
413458

414459
- name: Check {Mathlib, Tactic, Counterexamples, Archive}.lean
415-
if: always()
460+
if: ${{ always() && steps.mk_all.outcome != 'skipped' }}
416461
run: |
417462
if [[ "${{ steps.mk_all.outcome }}" != "success" ]]; then
418463
echo "Please run 'lake exe mk_all' to regenerate the import all files"
@@ -443,18 +488,72 @@ jobs:
443488
action: add # In order to be able to run a multiline script, we need to add/remove the problem matcher before and after.
444489
linters: gcc
445490

446-
- name: check for unused imports
447-
id: shake
491+
# With the arrival of the module system, the old `shake` is no longer functional.
492+
# This will be replaced soon.
493+
# - name: check for unused imports
494+
# id: shake
495+
# run: |
496+
# cd pr-branch
497+
# env LEAN_ABORT_ON_PANIC=1 lake exe shake --gh-style
498+
499+
- name: kill stray runLinter processes
500+
if: ${{ always() && steps.build.outcome == 'success' || steps.build.outcome == 'failure' }}
501+
continue-on-error: true
502+
shell: bash
448503
run: |
449-
cd pr-branch
450-
env LEAN_ABORT_ON_PANIC=1 lake exe shake --gh-style
504+
echo "Checking for runLinter processes..."
505+
if ps -eo pid,lstart,command | grep -F runLinter | grep -v grep; then
506+
echo "Killing runLinter processes..."
507+
pkill -f runLinter || true
508+
else
509+
echo "No stray runLinter processes found."
510+
fi
451511
452512
- name: lint mathlib
453513
if: ${{ always() && steps.build.outcome == 'success' || steps.build.outcome == 'failure' }}
454514
id: lint
515+
timeout-minutes: 40
455516
run: |
456517
cd pr-branch
457-
env LEAN_ABORT_ON_PANIC=1 ../master-branch/scripts/lake-build-wrapper.py .lake/build_summary_lint.json lake exe runLinter Mathlib
518+
set -o pipefail
519+
# Try running with --trace; if it fails due to argument parsing, the PR needs to merge master
520+
# We use .lake/ for the output file because landrun restricts /tmp access
521+
for attempt in 1 2; do
522+
if timeout 15m env LEAN_ABORT_ON_PANIC=1 stdbuf -oL lake exe runLinter --trace Mathlib 2>&1 | tee ".lake/lint_output_attempt_${attempt}.txt"; then
523+
break
524+
fi
525+
status=${PIPESTATUS[0]}
526+
if grep -q "cannot parse arguments" ".lake/lint_output_attempt_${attempt}.txt"; then
527+
echo ""
528+
echo "=============================================================================="
529+
echo "ERROR: Your branch uses an older version of runLinter that doesn't support"
530+
echo "the --trace flag. Please merge 'master' into your PR branch to get the"
531+
echo "updated linter, then push again."
532+
echo ""
533+
echo "You can do this with:"
534+
echo " git fetch upstream"
535+
echo " git merge upstream/master"
536+
echo " git push"
537+
echo "=============================================================================="
538+
echo ""
539+
exit 1
540+
fi
541+
if [ "$status" -eq 124 ]; then
542+
echo "runLinter timed out (attempt $attempt)."
543+
if [ "$attempt" -lt 2 ]; then
544+
echo "Checking for runLinter processes..."
545+
if ps -eo pid,lstart,command | grep -F runLinter | grep -v grep; then
546+
echo "Killing runLinter processes..."
547+
pkill -f runLinter || true
548+
else
549+
echo "No stray runLinter processes found."
550+
fi
551+
echo "Retrying runLinter after timeout..."
552+
continue
553+
fi
554+
fi
555+
exit $status
556+
done
458557
459558
- name: end gh-problem-match-wrap for shake and lint steps
460559
uses: leanprover-community/gh-problem-matcher-wrap@20007cb926a46aa324653a387363b52f07709845 # 2025-04-23
@@ -480,6 +579,15 @@ jobs:
480579
exit 1
481580
fi
482581
582+
- name: list stray runLinter processes
583+
shell: bash
584+
if: always()
585+
run: |
586+
echo "Checking for runLinter processes..."
587+
if ! ps -eo pid,lstart,command | grep -F runLinter | grep -v grep; then
588+
echo "No stray runLinter processes found."
589+
fi
590+
483591
- name: Post comments for lean-pr-testing-NNNN and batteries-pr-testing-NNNN branches
484592
if: always()
485593
shell: bash
@@ -505,7 +613,7 @@ jobs:
505613
runs-on: ubuntu-latest # Note these steps run on disposable GitHub runners, so no landrun sandboxing is needed.
506614
steps:
507615

508-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
616+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
509617
with:
510618
ref: "${{ PR_BRANCH_REF }}"
511619

@@ -553,7 +661,7 @@ jobs:
553661
lake exe graph
554662
555663
- name: upload the import graph
556-
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
664+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
557665
with:
558666
name: import-graph
559667
path: import_graph.dot
@@ -577,34 +685,7 @@ jobs:
577685
lake build AesopTest
578686
579687
# We no longer run `lean4checker` in regular CI, as it is quite expensive for little benefit.
580-
# Instead we run it in a cron job on master: see `lean4checker.yml`.
581-
# Output is posted to the zulip topic
582-
# https://leanprover.zulipchat.com/#narrow/stream/345428-mathlib-reviewers/topic/lean4checker
583-
584-
- name: checkout lean4checker
585-
if: ${{ (always() && needs.build.outputs.build-outcome == 'success' || needs.build.outputs.build-outcome == 'failure') && contains(github.event.pull_request.changed_files, 'lean-toolchain') }}
586-
shell: bash
587-
run: |
588-
git clone https://github.com/leanprover/lean4checker
589-
cd lean4checker
590-
# Read lean-toolchain file and checkout appropriate branch
591-
TOOLCHAIN=$(cat ../lean-toolchain)
592-
if [[ "$TOOLCHAIN" =~ ^leanprover/lean4:v ]]; then
593-
VERSION=${TOOLCHAIN#leanprover/lean4:}
594-
git checkout "$VERSION"
595-
else
596-
git checkout master
597-
fi
598-
599-
- name: run leanchecker on itself
600-
if: ${{ (always() && needs.build.outputs.build-outcome == 'success' || needs.build.outputs.build-outcome == 'failure') && contains(github.event.pull_request.changed_files, 'lean-toolchain') }}
601-
run: |
602-
cd lean4checker
603-
# Build lean4checker using the same toolchain
604-
cp ../lean-toolchain .
605-
lake build
606-
lake -q exe lean4checker Lean4Checker
607-
688+
# Instead we run it in a cron job on master: see `daily.yml`.
608689
style_lint:
609690
name: Lint styleJOB_NAME
610691
if: FORK_CONDITION
@@ -641,15 +722,6 @@ jobs:
641722
echo "number=${{ steps.PR_from_push.outputs.number || github.event.pull_request.number }}" | tee -a "$GITHUB_OUTPUT"
642723
echo "pr_labels=${{ steps.PR_from_push.outputs.pr_labels || join(github.event.pull_request.labels.*.name, ',') }}" | tee -a "$GITHUB_OUTPUT"
643724
644-
- if: contains(steps.PR.outputs.pr_labels, 'bench-after-CI')
645-
name: If `bench-after-CI` is present, add a `!bench` comment.
646-
uses: GrantBirki/comment@608e41b19bc973020ec0e189ebfdae935d7fe0cc # v2.1.1
647-
with:
648-
token: ${{ secrets.AUTO_MERGE_TOKEN }}
649-
issue-number: ${{ steps.PR.outputs.number }}
650-
body: |
651-
!bench
652-
653725
- id: remove_labels
654726
name: Remove "awaiting-CI"
655727
# we use curl rather than octokit/request-action so that the job won't fail
@@ -666,7 +738,7 @@ jobs:
666738
# unfortunately we cannot query only for 'auto-merge-after-CI' events
667739
# so we have to process this with jq in the next step
668740
id: get-timeline
669-
uses: octokit/graphql-action@8ad880e4d437783ea2ab17010324de1075228110 # v2.3.2
741+
uses: octokit/graphql-action@ddde8ebb2493e79f390e6449c725c21663a67505 # v3.0.2
670742
with:
671743
query: |
672744
query($owner: String!, $name: String!, $number: Int!) {

.github/workflows/PR_summary.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ jobs:
1717

1818
steps:
1919
- name: Checkout code
20-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
20+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2121
with:
2222
ref: ${{ github.event.pull_request.head.sha }}
2323
fetch-depth: 0
2424
path: pr-branch
2525

2626
# Checkout the master branch into a subdirectory
2727
- name: Checkout master branch
28-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
28+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2929
with:
3030
# When testing the scripts, comment out the "ref: master"
3131
ref: master
@@ -60,7 +60,7 @@ jobs:
6060
fi
6161
6262
- name: Set up Python
63-
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
63+
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
6464
with:
6565
python-version: 3.12
6666

.github/workflows/actionlint.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ jobs:
1010
runs-on: ubuntu-latest
1111
steps:
1212
- name: Checkout
13-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
13+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
1414

1515
- name: suggester / actionlint
16-
uses: reviewdog/action-actionlint@f00ad0691526c10be4021a91b2510f0a769b14d0 # v1.68.0
16+
uses: reviewdog/action-actionlint@83e4ed25b168066ad8f62f5afbb29ebd8641d982 # v1.69.1
1717
with:
1818
tool_name: actionlint
1919
fail_level: error
@@ -22,7 +22,7 @@ jobs:
2222
name: check workflows generated by build.in.yml
2323
runs-on: ubuntu-latest
2424
steps:
25-
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
25+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2626

2727
- name: update workflows
2828
run: |

.github/workflows/add_label_from_diff.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
if: github.repository == 'leanprover-community/mathlib4'
2323
steps:
2424
- name: Checkout code
25-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
25+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2626
with:
2727
ref: ${{ github.event.pull_request.head.sha }}
2828
fetch-depth: 0

0 commit comments

Comments
 (0)