branch: elpa/proof-general
commit eb4555c6ef064571b7af987226010100c754b156
Author: Hendrik Tews <hend...@askra.de>
Commit: Hendrik Tews <hend...@askra.de>

    CI: add Coq/Rocq 9.0.0, Emacs 30.1 and switch container infrastructure
    
    Additionally removed
    - 9.0+rc1
    - some 8.18.0 test runs, because 8.18 moved out of the 18 month period
    - some 8.20.1 test runs, because 9.0.0 is the newest version now
    
    Containers are now built independently of the coqorg/coq docker
    repository. The base image in proofgeneral/ci-base adds OCaml, opam,
    and nix to a Debian container. The images in proofgeneral/ci-coq add
    different Coq versions on top of it. Finally, proofgeneral/coq-emacs
    adds Emacs via nix.
---
 .github/workflows/test.yml               | 146 ++++++++++++--------------
 ci/doc/README.md                         |  66 ++++++------
 ci/doc/coq-emacs-releases.org            |   4 +-
 ci/doc/currently-used-ci-coq-versions    |  13 +++
 ci/doc/currently-used-coq-emacs-versions |  35 ++++---
 ci/doc/currently-used-coq-nix-versions   |  13 ---
 ci/tools/cipg.ml                         | 175 +++++++++++++++++--------------
 7 files changed, 231 insertions(+), 221 deletions(-)

diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index b025c07bef..baa2832d45 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -39,6 +39,7 @@ jobs:
           - 29.2
           - 29.3
           - 29.4
+          - 30.1
           # CIPG change marker end
       # don't cancel all in-progress jobs if one matrix job fails:
       fail-fast: false
@@ -80,8 +81,8 @@ jobs:
           # The content between the CIPG markers is automatically
           # changed by the cipg program. Do not change these markers.
           # CIPG change marker: magic-emacs-version
-          - 28.2
           - 29.4
+          - 30.1
           # CIPG change marker end
       # don't cancel all in-progress jobs if one matrix job fails:
       fail-fast: false
@@ -109,48 +110,43 @@ jobs:
           # changed by the cipg program. Do not change these markers.
           # CIPG change marker: test-coq-emacs-versions
           - coq-8.11.2-emacs-26.3
-          - coq-8.11.2-emacs-29.4
+          - coq-8.11.2-emacs-30.1
           - coq-8.12.2-emacs-27.1
-          - coq-8.12.2-emacs-29.4
+          - coq-8.12.2-emacs-30.1
           - coq-8.13.2-emacs-27.2
-          - coq-8.13.2-emacs-29.4
+          - coq-8.13.2-emacs-30.1
           - coq-8.14.1-emacs-27.2
-          - coq-8.14.1-emacs-29.4
+          - coq-8.14.1-emacs-30.1
           - coq-8.15.2-emacs-27.1
           - coq-8.15.2-emacs-28.1
-          - coq-8.15.2-emacs-29.4
+          - coq-8.15.2-emacs-30.1
           - coq-8.16.1-emacs-28.2
-          - coq-8.16.1-emacs-29.4
+          - coq-8.16.1-emacs-30.1
           - coq-8.17.1-emacs-29.1
-          - coq-8.17.1-emacs-29.4
-          - coq-8.18.0-emacs-26.3
-          - coq-8.18.0-emacs-27.1
-          - coq-8.18.0-emacs-28.2
+          - coq-8.17.1-emacs-30.1
           - coq-8.18.0-emacs-29.3
-          - coq-8.18.0-emacs-29.4
+          - coq-8.18.0-emacs-30.1
           - coq-8.19.2-emacs-26.3
           - coq-8.19.2-emacs-27.1
           - coq-8.19.2-emacs-28.2
           - coq-8.19.2-emacs-29.3
           - coq-8.19.2-emacs-29.4
+          - coq-8.19.2-emacs-30.1
           - coq-8.20.1-emacs-26.3
           - coq-8.20.1-emacs-27.1
-          - coq-8.20.1-emacs-27.2
-          - coq-8.20.1-emacs-28.1
           - coq-8.20.1-emacs-28.2
-          - coq-8.20.1-emacs-29.1
-          - coq-8.20.1-emacs-29.2
           - coq-8.20.1-emacs-29.3
-          - coq-8.20.1-emacs-29.4
-          - coq-9.0-rc1-emacs-26.3
-          - coq-9.0-rc1-emacs-27.1
-          - coq-9.0-rc1-emacs-27.2
-          - coq-9.0-rc1-emacs-28.1
-          - coq-9.0-rc1-emacs-28.2
-          - coq-9.0-rc1-emacs-29.1
-          - coq-9.0-rc1-emacs-29.2
-          - coq-9.0-rc1-emacs-29.3
-          - coq-9.0-rc1-emacs-29.4
+          - coq-8.20.1-emacs-30.1
+          - coq-9.0.0-emacs-26.3
+          - coq-9.0.0-emacs-27.1
+          - coq-9.0.0-emacs-27.2
+          - coq-9.0.0-emacs-28.1
+          - coq-9.0.0-emacs-28.2
+          - coq-9.0.0-emacs-29.1
+          - coq-9.0.0-emacs-29.2
+          - coq-9.0.0-emacs-29.3
+          - coq-9.0.0-emacs-29.4
+          - coq-9.0.0-emacs-30.1
           # CIPG change marker end
       # don't cancel all in-progress jobs if one matrix job fails:
       fail-fast: false
@@ -173,7 +169,7 @@ jobs:
           startGroup other relevant configuration
             echo getconf _NPROCESSORS_ONLN: $(getconf _NPROCESSORS_ONLN)
             emacs --version
-            coqc --version
+            coqc --version || rocq --version
             ocamlc -v
           endGroup
           startGroup Run tests
@@ -193,48 +189,43 @@ jobs:
           # changed by the cipg program. Do not change these markers.
           # CIPG change marker: compile-coq-emacs-versions
           - coq-8.11.2-emacs-26.3
-          - coq-8.11.2-emacs-29.4
+          - coq-8.11.2-emacs-30.1
           - coq-8.12.2-emacs-27.1
-          - coq-8.12.2-emacs-29.4
+          - coq-8.12.2-emacs-30.1
           - coq-8.13.2-emacs-27.2
-          - coq-8.13.2-emacs-29.4
+          - coq-8.13.2-emacs-30.1
           - coq-8.14.1-emacs-27.2
-          - coq-8.14.1-emacs-29.4
+          - coq-8.14.1-emacs-30.1
           - coq-8.15.2-emacs-27.1
           - coq-8.15.2-emacs-28.1
-          - coq-8.15.2-emacs-29.4
+          - coq-8.15.2-emacs-30.1
           - coq-8.16.1-emacs-28.2
-          - coq-8.16.1-emacs-29.4
+          - coq-8.16.1-emacs-30.1
           - coq-8.17.1-emacs-29.1
-          - coq-8.17.1-emacs-29.4
-          - coq-8.18.0-emacs-26.3
-          - coq-8.18.0-emacs-27.1
-          - coq-8.18.0-emacs-28.2
+          - coq-8.17.1-emacs-30.1
           - coq-8.18.0-emacs-29.3
-          - coq-8.18.0-emacs-29.4
+          - coq-8.18.0-emacs-30.1
           - coq-8.19.2-emacs-26.3
           - coq-8.19.2-emacs-27.1
           - coq-8.19.2-emacs-28.2
           - coq-8.19.2-emacs-29.3
           - coq-8.19.2-emacs-29.4
+          - coq-8.19.2-emacs-30.1
           - coq-8.20.1-emacs-26.3
           - coq-8.20.1-emacs-27.1
-          - coq-8.20.1-emacs-27.2
-          - coq-8.20.1-emacs-28.1
           - coq-8.20.1-emacs-28.2
-          - coq-8.20.1-emacs-29.1
-          - coq-8.20.1-emacs-29.2
           - coq-8.20.1-emacs-29.3
-          - coq-8.20.1-emacs-29.4
-          - coq-9.0-rc1-emacs-26.3
-          - coq-9.0-rc1-emacs-27.1
-          - coq-9.0-rc1-emacs-27.2
-          - coq-9.0-rc1-emacs-28.1
-          - coq-9.0-rc1-emacs-28.2
-          - coq-9.0-rc1-emacs-29.1
-          - coq-9.0-rc1-emacs-29.2
-          - coq-9.0-rc1-emacs-29.3
-          - coq-9.0-rc1-emacs-29.4
+          - coq-8.20.1-emacs-30.1
+          - coq-9.0.0-emacs-26.3
+          - coq-9.0.0-emacs-27.1
+          - coq-9.0.0-emacs-27.2
+          - coq-9.0.0-emacs-28.1
+          - coq-9.0.0-emacs-28.2
+          - coq-9.0.0-emacs-29.1
+          - coq-9.0.0-emacs-29.2
+          - coq-9.0.0-emacs-29.3
+          - coq-9.0.0-emacs-29.4
+          - coq-9.0.0-emacs-30.1
           # CIPG change marker end
       # don't cancel all in-progress jobs if one matrix job fails:
       fail-fast: false
@@ -253,7 +244,7 @@ jobs:
           startGroup other relevant configuration
             echo getconf _NPROCESSORS_ONLN: $(getconf _NPROCESSORS_ONLN)
             emacs --version
-            coqc --version
+            coqc --version || rocq --version
             ocamlc -v
           endGroup
           startGroup Run tests
@@ -273,48 +264,43 @@ jobs:
           # changed by the cipg program. Do not change these markers.
           # CIPG change marker: simple-coq-emacs-versions
           - coq-8.11.2-emacs-26.3
-          - coq-8.11.2-emacs-29.4
+          - coq-8.11.2-emacs-30.1
           - coq-8.12.2-emacs-27.1
-          - coq-8.12.2-emacs-29.4
+          - coq-8.12.2-emacs-30.1
           - coq-8.13.2-emacs-27.2
-          - coq-8.13.2-emacs-29.4
+          - coq-8.13.2-emacs-30.1
           - coq-8.14.1-emacs-27.2
-          - coq-8.14.1-emacs-29.4
+          - coq-8.14.1-emacs-30.1
           - coq-8.15.2-emacs-27.1
           - coq-8.15.2-emacs-28.1
-          - coq-8.15.2-emacs-29.4
+          - coq-8.15.2-emacs-30.1
           - coq-8.16.1-emacs-28.2
-          - coq-8.16.1-emacs-29.4
+          - coq-8.16.1-emacs-30.1
           - coq-8.17.1-emacs-29.1
-          - coq-8.17.1-emacs-29.4
-          - coq-8.18.0-emacs-26.3
-          - coq-8.18.0-emacs-27.1
-          - coq-8.18.0-emacs-28.2
+          - coq-8.17.1-emacs-30.1
           - coq-8.18.0-emacs-29.3
-          - coq-8.18.0-emacs-29.4
+          - coq-8.18.0-emacs-30.1
           - coq-8.19.2-emacs-26.3
           - coq-8.19.2-emacs-27.1
           - coq-8.19.2-emacs-28.2
           - coq-8.19.2-emacs-29.3
           - coq-8.19.2-emacs-29.4
+          - coq-8.19.2-emacs-30.1
           - coq-8.20.1-emacs-26.3
           - coq-8.20.1-emacs-27.1
-          - coq-8.20.1-emacs-27.2
-          - coq-8.20.1-emacs-28.1
           - coq-8.20.1-emacs-28.2
-          - coq-8.20.1-emacs-29.1
-          - coq-8.20.1-emacs-29.2
           - coq-8.20.1-emacs-29.3
-          - coq-8.20.1-emacs-29.4
-          - coq-9.0-rc1-emacs-26.3
-          - coq-9.0-rc1-emacs-27.1
-          - coq-9.0-rc1-emacs-27.2
-          - coq-9.0-rc1-emacs-28.1
-          - coq-9.0-rc1-emacs-28.2
-          - coq-9.0-rc1-emacs-29.1
-          - coq-9.0-rc1-emacs-29.2
-          - coq-9.0-rc1-emacs-29.3
-          - coq-9.0-rc1-emacs-29.4
+          - coq-8.20.1-emacs-30.1
+          - coq-9.0.0-emacs-26.3
+          - coq-9.0.0-emacs-27.1
+          - coq-9.0.0-emacs-27.2
+          - coq-9.0.0-emacs-28.1
+          - coq-9.0.0-emacs-28.2
+          - coq-9.0.0-emacs-29.1
+          - coq-9.0.0-emacs-29.2
+          - coq-9.0.0-emacs-29.3
+          - coq-9.0.0-emacs-29.4
+          - coq-9.0.0-emacs-30.1
           # CIPG change marker end
       # don't cancel all in-progress jobs if one matrix job fails:
       fail-fast: false
@@ -334,7 +320,7 @@ jobs:
           startGroup other relevant configuration
             echo getconf _NPROCESSORS_ONLN: $(getconf _NPROCESSORS_ONLN)
             emacs --version
-            coqc --version
+            coqc --version || rocq --version
             ocamlc -v
           endGroup
           startGroup Run tests
@@ -365,6 +351,7 @@ jobs:
           - 29.2
           - 29.3
           - 29.4
+          - 30.1
           # CIPG change marker end
       # don't cancel all in-progress jobs if one matrix job fails:
       fail-fast: false
@@ -402,6 +389,7 @@ jobs:
           - 29.2
           - 29.3
           - 29.4
+          - 30.1
           # CIPG change marker end
       # don't cancel all in-progress jobs if one matrix job fails:
       fail-fast: false
diff --git a/ci/doc/README.md b/ci/doc/README.md
index e312e613ef..227e2db99c 100644
--- a/ci/doc/README.md
+++ b/ci/doc/README.md
@@ -169,28 +169,28 @@ This results in
 <!-- The content between the CIPG markers is automatically changed by
  !-- the cipg program. Do not change these markers. -->
 <!-- CIPG change marker: container-number -->
-66
+71
 <!-- CIPG change marker end -->
 containers.
 
 <!-- The content between the CIPG markers is automatically changed by
  !-- the cipg program. Do not change these markers. -->
 <!-- CIPG change marker: container-table -->
-|         | 26.2 | 26.3 | 27.1 | 27.2 | 28.1 | 28.2 | 29.1 | 29.2 | 29.3 | 
29.4 |
-|---------+------+------+------+------+------+------+------+------+------+------|
-|   8.9.1 |   H  |      |      |      |      |      |      |      |      |     
 |
-|  8.10.2 |      |   H  |      |      |      |      |      |      |      |     
 |
-|  8.11.2 |      |  SUP |      |      |      |      |      |      |      |   N 
 |
-|  8.12.2 |      |  SUP |   H  |      |      |      |      |      |      |   N 
 |
-|  8.13.2 |      |  SUP |      |   H  |      |      |      |      |      |   N 
 |
-|  8.14.1 |      |  SUP |      |   H  |      |      |      |      |      |   N 
 |
-|  8.15.2 |      |  SUP |  SUP |      |   H  |      |      |      |      |   N 
 |
-|  8.16.1 |      |  SUP |  SUP |      |      |  SUP |      |      |      |   N 
 |
-|  8.17.1 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |
-|  8.18.0 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |
-|  8.19.2 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |
-|  8.20.1 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |
-| 9.0-rc1 |      |   RC |   RC |   RC |   RC |   RC |   RC |   RC |   RC |   
RC |
+|         | 26.2 | 26.3 | 27.1 | 27.2 | 28.1 | 28.2 | 29.1 | 29.2 | 29.3 | 
29.4 | 30.1 |
+|---------+------+------+------+------+------+------+------+------+------+------+------|
+|   8.9.1 |   H  |      |      |      |      |      |      |      |      |     
 |      |
+|  8.10.2 |      |   H  |      |      |      |      |      |      |      |     
 |      |
+|  8.11.2 |      |  SUP |      |      |      |      |      |      |      |     
 |   N  |
+|  8.12.2 |      |  SUP |   H  |      |      |      |      |      |      |     
 |   N  |
+|  8.13.2 |      |  SUP |      |   H  |      |      |      |      |      |     
 |   N  |
+|  8.14.1 |      |  SUP |      |   H  |      |      |      |      |      |     
 |   N  |
+|  8.15.2 |      |  SUP |  SUP |      |   H  |      |      |      |      |     
 |   N  |
+|  8.16.1 |      |  SUP |  SUP |      |      |  SUP |      |      |      |     
 |   N  |
+|  8.17.1 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |   X  |
+|  8.18.0 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |   X  |
+|  8.19.2 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |   X  |
+|  8.20.1 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |   X  |
+|   9.0.0 |      |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X  |   X 
 |   X  |
 <!-- CIPG change marker end -->
 
 In the table above,
@@ -288,28 +288,28 @@ This results in
 <!-- The content between the CIPG markers is automatically changed by
  !-- the cipg program. Do not change these markers. -->
 <!-- CIPG change marker: testrun-number -->
-43
+38
 <!-- CIPG change marker end -->
 version pairs for the Proof General interaction tests with Coq.
 
 <!-- The content between the CIPG markers is automatically changed by
  !-- the cipg program. Do not change these markers. -->
 <!-- CIPG change marker: testrun-table -->
-|         | 26.2 | 26.3 | 27.1 | 27.2 | 28.1 | 28.2 | 29.1 | 29.2 | 29.3 | 
29.4 |
-|---------+------+------+------+------+------+------+------+------+------+------|
-|   8.9.1 |      |      |      |      |      |      |      |      |      |     
 |
-|  8.10.2 |      |      |      |      |      |      |      |      |      |     
 |
-|  8.11.2 |      |  SUP |      |      |      |      |      |      |      |   N 
 |
-|  8.12.2 |      |      |   H  |      |      |      |      |      |      |   N 
 |
-|  8.13.2 |      |      |      |   H  |      |      |      |      |      |   N 
 |
-|  8.14.1 |      |      |      |   H  |      |      |      |      |      |   N 
 |
-|  8.15.2 |      |      |  SUP |      |   H  |      |      |      |      |   N 
 |
-|  8.16.1 |      |      |      |      |      |  SUP |      |      |      |   N 
 |
-|  8.17.1 |      |      |      |      |      |      |   H  |      |      |   N 
 |
-|  8.18.0 |      |   X  |   X  |      |      |   X  |      |      |   X  |   N 
 |
-|  8.19.2 |      |   X  |   X  |      |      |   X  |      |      |   X  |   N 
 |
-|  8.20.1 |      |   X  |   X  |   N  |   N  |   X  |   N  |   N  |   X  |   N 
 |
-| 9.0-rc1 |      |   RC |   RC |   RC |   RC |   RC |   RC |   RC |   RC |   
RC |
+|         | 26.2 | 26.3 | 27.1 | 27.2 | 28.1 | 28.2 | 29.1 | 29.2 | 29.3 | 
29.4 | 30.1 |
+|---------+------+------+------+------+------+------+------+------+------+------+------|
+|   8.9.1 |      |      |      |      |      |      |      |      |      |     
 |      |
+|  8.10.2 |      |      |      |      |      |      |      |      |      |     
 |      |
+|  8.11.2 |      |  SUP |      |      |      |      |      |      |      |     
 |   N  |
+|  8.12.2 |      |      |   H  |      |      |      |      |      |      |     
 |   N  |
+|  8.13.2 |      |      |      |   H  |      |      |      |      |      |     
 |   N  |
+|  8.14.1 |      |      |      |   H  |      |      |      |      |      |     
 |   N  |
+|  8.15.2 |      |      |  SUP |      |   H  |      |      |      |      |     
 |   N  |
+|  8.16.1 |      |      |      |      |      |  SUP |      |      |      |     
 |   N  |
+|  8.17.1 |      |      |      |      |      |      |   H  |      |      |     
 |   N  |
+|  8.18.0 |      |      |      |      |      |      |      |      |  SUP |     
 |   N  |
+|  8.19.2 |      |   X  |   X  |      |      |   X  |      |      |   X  |   H 
 |   N  |
+|  8.20.1 |      |   X  |   X  |      |      |   X  |      |      |   X  |     
 |   N  |
+|   9.0.0 |      |   X  |   X  |   N  |   N  |   X  |   N  |   N  |   X  |   N 
 |   N  |
 <!-- CIPG change marker end -->
 
 See [Container build strategy](#contbuild) for an explanation of the
@@ -319,7 +319,7 @@ In summary, all Proof General testing jobs run
 <!-- The content between the CIPG markers is automatically changed by
  !-- the cipg program. Do not change these markers. -->
 <!-- CIPG change marker: total-checks-number -->
-158
+146
 <!-- CIPG change marker end -->
 github checks.
 
diff --git a/ci/doc/coq-emacs-releases.org b/ci/doc/coq-emacs-releases.org
index 67e86a6fbc..31cfec5e3f 100644
--- a/ci/doc/coq-emacs-releases.org
+++ b/ci/doc/coq-emacs-releases.org
@@ -13,10 +13,12 @@
 
 | date    |     coq | emacs | distribution name | EOL      | historic |
 |---------+---------+-------+-------------------+----------+----------|
+| 2025/03 |   9.0.0 |       |                   |          |          |
+| 2025/02 |         |  30.1 |                   |          |          |
 | 2025/01 | 9.0-rc1 |       |                   |          |          |
 | 2025/01 |  8.20.1 |       |                   |          |          |
 | 2024/09 |  8.20.0 |       |                   |          |          |
-| 2024/06 |  8.19.2 |  29.4 |                   |          |          |
+| 2024/06 |  8.19.2 |  29.4 |                   |          | X        |
 | 2024/03 |  8.19.1 |  29.3 |                   |          |          |
 | 2024/01 |  8.19.0 |  29.2 |                   |          |          |
 | 2024/04 |         |  29.3 | ubu 24 noble num  | 2029/06  |          |
diff --git a/ci/doc/currently-used-ci-coq-versions 
b/ci/doc/currently-used-ci-coq-versions
new file mode 100644
index 0000000000..372c01a00d
--- /dev/null
+++ b/ci/doc/currently-used-ci-coq-versions
@@ -0,0 +1,13 @@
+coq-8.9.1
+coq-8.10.2
+coq-8.11.2
+coq-8.12.2
+coq-8.13.2
+coq-8.14.1
+coq-8.15.2
+coq-8.16.1
+coq-8.17.1
+coq-8.18.0
+coq-8.19.2
+coq-8.20.1
+coq-9.0.0
diff --git a/ci/doc/currently-used-coq-emacs-versions 
b/ci/doc/currently-used-coq-emacs-versions
index 2c7a467b6d..47545105fe 100644
--- a/ci/doc/currently-used-coq-emacs-versions
+++ b/ci/doc/currently-used-coq-emacs-versions
@@ -1,24 +1,24 @@
 coq-8.9.1-emacs-26.2
 coq-8.10.2-emacs-26.3
 coq-8.11.2-emacs-26.3
-coq-8.11.2-emacs-29.4
+coq-8.11.2-emacs-30.1
 coq-8.12.2-emacs-26.3
 coq-8.12.2-emacs-27.1
-coq-8.12.2-emacs-29.4
+coq-8.12.2-emacs-30.1
 coq-8.13.2-emacs-26.3
 coq-8.13.2-emacs-27.2
-coq-8.13.2-emacs-29.4
+coq-8.13.2-emacs-30.1
 coq-8.14.1-emacs-26.3
 coq-8.14.1-emacs-27.2
-coq-8.14.1-emacs-29.4
+coq-8.14.1-emacs-30.1
 coq-8.15.2-emacs-26.3
 coq-8.15.2-emacs-27.1
 coq-8.15.2-emacs-28.1
-coq-8.15.2-emacs-29.4
+coq-8.15.2-emacs-30.1
 coq-8.16.1-emacs-26.3
 coq-8.16.1-emacs-27.1
 coq-8.16.1-emacs-28.2
-coq-8.16.1-emacs-29.4
+coq-8.16.1-emacs-30.1
 coq-8.17.1-emacs-26.3
 coq-8.17.1-emacs-27.1
 coq-8.17.1-emacs-27.2
@@ -28,6 +28,7 @@ coq-8.17.1-emacs-29.1
 coq-8.17.1-emacs-29.2
 coq-8.17.1-emacs-29.3
 coq-8.17.1-emacs-29.4
+coq-8.17.1-emacs-30.1
 coq-8.18.0-emacs-26.3
 coq-8.18.0-emacs-27.1
 coq-8.18.0-emacs-27.2
@@ -37,6 +38,7 @@ coq-8.18.0-emacs-29.1
 coq-8.18.0-emacs-29.2
 coq-8.18.0-emacs-29.3
 coq-8.18.0-emacs-29.4
+coq-8.18.0-emacs-30.1
 coq-8.19.2-emacs-26.3
 coq-8.19.2-emacs-27.1
 coq-8.19.2-emacs-27.2
@@ -46,6 +48,7 @@ coq-8.19.2-emacs-29.1
 coq-8.19.2-emacs-29.2
 coq-8.19.2-emacs-29.3
 coq-8.19.2-emacs-29.4
+coq-8.19.2-emacs-30.1
 coq-8.20.1-emacs-26.3
 coq-8.20.1-emacs-27.1
 coq-8.20.1-emacs-27.2
@@ -55,12 +58,14 @@ coq-8.20.1-emacs-29.1
 coq-8.20.1-emacs-29.2
 coq-8.20.1-emacs-29.3
 coq-8.20.1-emacs-29.4
-coq-9.0-rc1-emacs-26.3
-coq-9.0-rc1-emacs-27.1
-coq-9.0-rc1-emacs-27.2
-coq-9.0-rc1-emacs-28.1
-coq-9.0-rc1-emacs-28.2
-coq-9.0-rc1-emacs-29.1
-coq-9.0-rc1-emacs-29.2
-coq-9.0-rc1-emacs-29.3
-coq-9.0-rc1-emacs-29.4
+coq-8.20.1-emacs-30.1
+coq-9.0.0-emacs-26.3
+coq-9.0.0-emacs-27.1
+coq-9.0.0-emacs-27.2
+coq-9.0.0-emacs-28.1
+coq-9.0.0-emacs-28.2
+coq-9.0.0-emacs-29.1
+coq-9.0.0-emacs-29.2
+coq-9.0.0-emacs-29.3
+coq-9.0.0-emacs-29.4
+coq-9.0.0-emacs-30.1
diff --git a/ci/doc/currently-used-coq-nix-versions 
b/ci/doc/currently-used-coq-nix-versions
deleted file mode 100644
index fad04ae37c..0000000000
--- a/ci/doc/currently-used-coq-nix-versions
+++ /dev/null
@@ -1,13 +0,0 @@
-8.9.1
-8.10.2
-8.11.2
-8.12.2
-8.13.2
-8.14.1
-8.15.2
-8.16.1
-8.17.1
-8.18.0
-8.19.2
-8.20.1
-9.0-rc1
diff --git a/ci/tools/cipg.ml b/ci/tools/cipg.ml
index d72304384d..b65a57c149 100644
--- a/ci/tools/cipg.ml
+++ b/ci/tools/cipg.ml
@@ -1,6 +1,6 @@
 (* This file is part of Proof General.
  *
- * Copyright 2024  Hendrik Tews
+ * Copyright 2024-2025  Hendrik Tews
  *
  * Authors:   Hendrik Tews
  *
@@ -22,11 +22,11 @@ let readme_file = "ci/doc/README.md"
 (* github yaml workflow file *)
 let test_workflow_file = ".github/workflows/test.yml"
 
-(* directory in which the coq-nix-docker and coq-emacs-docker repos are *)
-let src_dir = ref "~/src"
+(* directory in which the pg-ci-coq and pg-ci-emacs directories are *)
+let src_dir = ref "~/src/docker"
 
-(* file containing the currently needed coq-nix containers *)
-let currently_used_nix_file = "ci/doc/currently-used-coq-nix-versions"
+(* file containing the currently needed ci-coq containers *)
+let currently_used_coq_file = "ci/doc/currently-used-ci-coq-versions"
 
 (* file containing the currently used coq-emacs containers *)
 let currently_used_coq_emacs_file = "ci/doc/currently-used-coq-emacs-versions"
@@ -98,9 +98,18 @@ type version = {
     release_candidate : int option;
   }
 
+(* Some version smaller than everything encountered. Used as start
+   value in the extract_lts_versions iteration.
+ *)
 let null_version = {major = 0; minor = 0; patch = None;
                     release_candidate = None; }
 
+(* Coq version 9 for deciding the name of the opam package coq or
+   rocq-prover
+ *)
+let coq_9_version = {major = 9; minor = 0; patch = Some 0;
+                    release_candidate = None; }
+
 (* record for lines of the Coq/Emacs/Debian/Ubuntu release table *)
 type release_record = {
     rel_date : date;
@@ -1004,34 +1013,38 @@ let docker_tags_channel repo_name =
         ^^ "/%s/tags?page_size=1024' | jq -r '.\"results\"[][\"name\"]'")
        repo_name)
 
-(* Read all coq-nix container tags from inc, accumulating the result
- * as Coq versions in nix_conts. Ignore container tags without patch
- * level.
+(* Read all ci-coq container tags from inc, accumulating the result
+ * as Coq versions in coq_conts. Ignore container tags without patch
+ * level. ci-coq tags look like coq-9.0.0.
  *)
-let rec read_nix_containers inc nix_conts =
+let rec read_coq_containers inc coq_conts =
   match input_line inc with
     | line ->
-       (match scan_version line with
-          | None -> assert false
-          | Some v ->
-             if v.release_candidate <> None || v.patch <> None
-             then read_nix_containers inc (v :: nix_conts)
-             else read_nix_containers inc nix_conts
-       )
-    | exception End_of_file -> nix_conts
+       if String.starts_with ~prefix:"coq-" line
+       then
+         (match scan_version (String.sub line 4 (String.length line - 4)) with
+            | None -> assert false
+            | Some v ->
+               if v.release_candidate <> None || v.patch <> None
+               then read_coq_containers inc (v :: coq_conts)
+               else read_coq_containers inc coq_conts
+         )
+       else
+         assert false
+    | exception End_of_file -> coq_conts
        
 (* Read all coq-nix container tags from the docker registry. Return
  * them as a sorted list of Coq versions.
  *)
-let get_nix_containers () =
-  let inc = docker_tags_channel "coq-nix" in
+let get_coq_containers () =
+  let inc = docker_tags_channel "ci-coq" in
   (* let inc = U.open_process_in "cat coq-nix-tags-for-testing" in *)
-  let nix_conts = read_nix_containers inc [] in
+  let coq_conts = read_coq_containers inc [] in
   (match U.close_process_in inc with
      | WEXITED(0) -> ()
      | _ -> assert false
   );
-  sort_versions nix_conts
+  sort_versions coq_conts
 
 
 (* Read an Coq/Emacs tag from line, return a corresponding Coq/Emacs
@@ -1111,15 +1124,18 @@ let get_coq_emacs_containers () =
  *
  *****************************************************************************)
 
+(* Return the coq-emacs docker tag for version coq and emacs. *)
+let coq_tag coq = Printf.sprintf "coq-%s" (version_to_string coq)
+
 (* Return the coq-emacs docker tag for version coq and emacs. *)
 let coq_emacs_tag coq emacs =
   Printf.sprintf "coq-%s-emacs-%s"
     (version_to_string coq) (version_to_string emacs)
 
 (* Read currently needed coq-nix containers from doc subdir. *)
-let read_currently_used_nix_containers () =
-  let ic = open_in (Filename.concat !pg_repo currently_used_nix_file) in
-  let used = read_nix_containers ic [] in
+let read_currently_used_coq_containers () =
+  let ic = open_in (Filename.concat !pg_repo currently_used_coq_file) in
+  let used = read_coq_containers ic [] in
   close_in ic;
   used  
 
@@ -1130,15 +1146,15 @@ let read_currently_used_coq_emacs_containers () =
   close_in ic;
   used
 
-(* Write the currently used coq-nix and coq-emacs containers into
+(* Write the currently used ci-coq and coq-emacs containers into
  * their respective files in the doc subdir
  *)
 let update_currently_used coqs coq_emacs_used =
   print_endline"\nupdate files with currently used containers\n";
-  let oc = open_out_bin (Filename.concat !pg_repo currently_used_nix_file) in
+  let oc = open_out_bin (Filename.concat !pg_repo currently_used_coq_file) in
   List.iter
     (fun (coq_v, _) ->
-      output_string oc (version_to_string coq_v);
+      output_string oc (coq_tag coq_v);
       output_string oc "\n";
     )
     coqs;
@@ -1166,39 +1182,42 @@ let update_currently_used coqs coq_emacs_used =
  * docker build and push commands for missing containers. Return the
  * superfluous containers as list of Coq versions.
  *)
-let check_nix_containers coqs =
-  let nix_containers = get_nix_containers () in
-  Printf.printf "existing nix versions: %s\n"
-    (String.concat " " (List.map version_to_string nix_containers));
-  let missing = list_diff coqs nix_containers in
-  Printf.printf "missing nix versions: %s\n"
+let check_coq_containers coqs =
+  let coq_containers = get_coq_containers () in
+  Printf.printf "existing coq versions: %s\n"
+    (String.concat " " (List.map version_to_string coq_containers));
+  let missing = list_diff coqs coq_containers in
+  Printf.printf "missing coq versions: %s\n"
     (String.concat " " (List.map version_to_string missing));
-  let now_in_use = read_currently_used_nix_containers () in
-  let not_needed = list_diff nix_containers coqs in
+  let now_in_use = read_currently_used_coq_containers () in
+  let not_needed = list_diff coq_containers coqs in
   let del_now = list_diff not_needed now_in_use in
   let del_soon = list_intersection not_needed now_in_use in
-  Printf.printf "now superfluous nix versions: %s\n"
+  Printf.printf "now superfluous coq versions: %s\n"
     (String.concat " " (List.map version_to_string del_now));
-  Printf.printf "soon superfluous nix versions: %s\n\n"
+  Printf.printf "soon superfluous coq versions: %s\n\n"
     (String.concat " " (List.map version_to_string del_soon));
   if missing <> [] then
     begin
       print_endline
         "####################################################################";
-      Printf.printf "# built missing coq-nix containers\n";
+      Printf.printf "# build missing ci-coq containers\n";
       print_endline
         
"####################################################################\n";
-      Printf.printf "pushd %s/coq-nix-docker/coq-nix\n" !src_dir;
+      Printf.printf "pushd %s/pg-ci-coq\n" !src_dir;
       List.iter
         (fun coqv ->
-          let coq_version = version_to_string coqv in
           Printf.printf
-            ("docker image build -t proofgeneral/coq-nix:%s \\\n"
-             ^^ "\t--build-arg COQV=%s \\\n"
-             ^^ "\t--build-arg OCAMLV=4.13.1-flambda .\n")
-            coq_version coq_version;
-          Printf.printf "docker image push proofgeneral/coq-nix:%s\n\n"
-            coq_version;
+            ("docker image build -t proofgeneral/ci-coq:%s \\\n"
+             ^^ "\t--build-arg COQ_NAME=%s \\\n"
+             ^^ "\t--build-arg COQ_VERSION=%s .\n")
+            (coq_tag coqv)
+            (if compare_versions coqv coq_9_version < 0
+             then "coq"
+             else "rocq-prover")
+            (version_to_string coqv);
+          Printf.printf "docker image push proofgeneral/ci-coq:%s\n\n"
+            (coq_tag coqv);
         )
         missing;
       print_endline "popd";
@@ -1209,29 +1228,26 @@ let check_nix_containers coqs =
 (* Print docker build and push commands for a keyed Coq/Emacs version
  * list of the form [(coq_v1, [emacs_v1; v2; ...]); (coq_v2, [...]); ...]
  *)
-let rec print_coq_emacs_build_commands = function
-  | [] -> ()
-  | (coq, emacses) :: l ->
-     let coq_version = version_to_string coq in
-     print_endline
-       "##############################################";
-     Printf.printf "# built Coq %s containers\n\n" coq_version;
-     List.iter
-       (fun emacs ->
-         let emacs_version = version_to_string emacs in
-         let coq_emacs_tag = coq_emacs_tag coq emacs in
-         Printf.printf
-           ("docker image build -t proofgeneral/coq-emacs:%s \\\n"
-            ^^ "\t--build-arg NIX_BASE_TAG=%s \\\n"
-            ^^ "\t--build-arg EMACS_VERSION=%s .\n")
-           coq_emacs_tag
-           coq_version
-           emacs_version;
-         Printf.printf
-           "docker image push proofgeneral/coq-emacs:%s\n\n" coq_emacs_tag;
-       )
-       emacses;
-     print_coq_emacs_build_commands l
+let print_coq_emacs_build_command (coq, emacses) =
+  let coq_version = version_to_string coq in
+  print_endline
+    "##############################################";
+  Printf.printf "# built Coq %s containers\n\n" coq_version;
+  List.iter
+    (fun emacs ->
+      let emacs_version = version_to_string emacs in
+      let coq_emacs_tag = coq_emacs_tag coq emacs in
+      Printf.printf
+        ("docker image build -t proofgeneral/coq-emacs:%s \\\n"
+         ^^ "\t--build-arg COQ_VERSION=%s \\\n"
+         ^^ "\t--build-arg EMACS_VERSION=%s .\n")
+        coq_emacs_tag
+        coq_version
+        emacs_version;
+      Printf.printf
+        "docker image push proofgeneral/coq-emacs:%s\n\n" coq_emacs_tag;
+    )
+    emacses
   
 (* Print Coq/Emacs version pairs with title. Outputs one line for each
  * Coq version with all Emacs versions for this Coq version.
@@ -1272,8 +1288,8 @@ let check_coq_emacs_containers coqs emacses conts =
       print_endline "# build coq-emacs containers";
       print_endline
         
"####################################################################\n";
-      Printf.printf "pushd %s/coq-emacs-docker/coq-emacs\n\n" !src_dir;
-      print_coq_emacs_build_commands (pairs_to_keyed_list missing);
+      Printf.printf "pushd %s/pg-ci-emacs\n\n" !src_dir;
+      List.iter print_coq_emacs_build_command (pairs_to_keyed_list missing);
       print_endline "popd"
     end;
   del_now
@@ -1387,18 +1403,17 @@ let delete_coq_emacs_containers token coq_emacs_pairs =
   List.iter (delete_coq_emacs_container token) coq_emacs_pairs
 
 
-(* Delete the coq-nix containers for Coq versions coqv.
+(* Delete the ci-coq containers for Coq versions coqv.
  * Argument token must be a personal docker access token.
  *)
-let delete_nix_container token coqv =
-  let coq_version = version_to_string coqv in
-  delete_container token "coq-nix" coq_version
+let delete_coq_container token coqv =
+  delete_container token "ci-coq" (coq_tag coqv)
 
 (* Delete coq-nix containers for Coq versions in coqs.
  * Argument token must be a personal docker access token.
  *)
-let delete_nix_containers token coqs =
-  List.iter (delete_nix_container token) coqs
+let delete_coq_containers token coqs =
+  List.iter (delete_coq_container token) coqs
 
 
 (*****************************************************************************
@@ -1590,18 +1605,18 @@ let main() =
   if !do_containers then
     begin
       print_endline "\n\nCHECK MISSING AND SUPERFLUOUS CONTAINERS\n";
-      let not_needed_nix_versions = check_nix_containers (List.map fst coqs) in
+      let not_needed_coq_versions = check_coq_containers (List.map fst coqs) in
       let not_needed_ci_versions =
         check_coq_emacs_containers coqs emacses conts in
       if !do_delete_containers then
         begin
-          if not_needed_nix_versions <> [] || not_needed_ci_versions <> []
+          if not_needed_coq_versions <> [] || not_needed_ci_versions <> []
           then
             begin
               print_endline"\n\nDELETE SUPERFLUOUS CONTAINERS\n";
               let token = get_personal_access_token() in
               delete_coq_emacs_containers token not_needed_ci_versions;
-              delete_nix_containers token not_needed_nix_versions;
+              delete_coq_containers token not_needed_coq_versions;
             end
           else
             print_endline"\n\nno superfluous container to delete\n";

Reply via email to