Raymond Toy pushed to branch issue-478-run-analyzer-link-chcker-on-schedule at cmucl / cmucl

Commits:

1 changed file:

Changes:

  • .gitlab-ci.yml
    ... ... @@ -21,6 +21,8 @@ workflow:
    21 21
         - if: $CI_COMMIT_BRANCH
    
    22 22
         - if: $CI_COMMIT_TAG
    
    23 23
     
    
    24
    +# Default install configuration to download the cmucl tarballs to use
    
    25
    +# for building.
    
    24 26
     .install_template: &install_configuration
    
    25 27
       stage: install
    
    26 28
       artifacts:
    
    ... ... @@ -29,12 +31,20 @@ workflow:
    29 31
       script:
    
    30 32
         - echo PATH = $PATH
    
    31 33
         - ls -F /usr/local/bin
    
    34
    +    # Make sure gitlab-runner is available because it's needed by the
    
    35
    +    # VM to upload artifacts.
    
    32 36
         - type -all gitlab-runner
    
    37
    +    # Download binaries.  (Do we really need the extras tarball?)
    
    33 38
         - $CURL -o cmucl-$version-$osname.tar.$tar_ext $download_url/cmucl-$version-$osname.tar.$tar_ext
    
    34 39
         - $CURL -o cmucl-$version-$osname.extra.tar.$tar_ext $download_url/cmucl-$version-$osname.extra.tar.$tar_ext
    
    35 40
         - mkdir snapshot
    
    36 41
         - (cd snapshot; tar xf ../cmucl-$version-$osname.tar.$tar_ext; tar xf ../cmucl-$version-$osname.extra.tar.$tar_ext)
    
    37 42
     
    
    43
    +# Default build configuration to be added to each build stage for each
    
    44
    +# OS.  This assumes we don't need anything special between OSes, and
    
    45
    +# the option '-C ""' is good enough.  We also override the default
    
    46
    +# build dirs by using the -b option so that we know where the results
    
    47
    +# are, independent of OS.
    
    38 48
     .build_template: &build_configuration
    
    39 49
       stage: build
    
    40 50
       artifacts:
    
    ... ... @@ -44,14 +54,30 @@ workflow:
    44 54
           - build-3/*.log
    
    45 55
           - build-4/
    
    46 56
           - cmucl*
    
    57
    +      # Needed by Linux analyzer stage
    
    47 58
           - src/lisp/cmucl-version.h
    
    59
    +      # Save this so we can see the generated errno
    
    48 60
           - src/code/errno.lisp
    
    49 61
       script:
    
    62
    +    # Do cross compile first
    
    63
    +    #- bin/create-target.sh xtarget x86_linux_clang
    
    64
    +    #- bin/create-target.sh xcross x86_linux_clang
    
    65
    +    #- bin/cross-build-world.sh -crl -B boot-2020-04-1 xtarget xcross src/tools/cross-scripts/cross-x86-x86.lisp snapshot/bin/lisp
    
    66
    +    # Regular build using the cross-compiled result or snapshot.  The
    
    67
    +    # analyzer job requires gcc, so make sure we build with gcc here
    
    68
    +    # instead of clang.
    
    69
    +    #
    
    70
    +    # Set CONFIG in appropriately each build.
    
    50 71
         - bin/build.sh $bootstrap -b build -R -C $CONFIG -o snapshot/bin/lisp
    
    72
    +    # When the result of `git describe` cannot be used as a version
    
    73
    +    # string, an alternative can be provided with the -V flag
    
    74
    +    # The following stages need this to run tests and such.
    
    51 75
         - sh -x bin/git-version.sh
    
    52 76
         - bin/make-dist.sh -I dist build-4
    
    77
    +    # Also make some tarballs so it's easy to download the artifacts.
    
    53 78
         - bin/make-dist.sh -S build-4
    
    54 79
     
    
    80
    +# Default configuration for running the ansi-tests.
    
    55 81
     .ansi_test_template: &ansi_test_configuration
    
    56 82
       stage: ansi-test
    
    57 83
       artifacts:
    
    ... ... @@ -61,6 +87,7 @@ workflow:
    61 87
         - bin/run-ansi-tests.sh -l dist/bin/lisp
    
    62 88
         - cp ../ansi-test/test.out ansi-test.out
    
    63 89
     
    
    90
    +# Default configuration for running unit tests.
    
    64 91
     .unit_test_template: &unit_test_configuration
    
    65 92
       stage: test
    
    66 93
       artifacts:
    
    ... ... @@ -70,13 +97,19 @@ workflow:
    70 97
         - echo LANG = $LANG
    
    71 98
         - bin/run-unit-tests.sh -l dist/bin/lisp 2>&1 | tee test.log
    
    72 99
     
    
    100
    +# Default configuration to test creation of lisp executable and
    
    101
    +# testing the exectuable works.
    
    73 102
     .exec_test_template: &exec_test_configuration
    
    74 103
       stage: test
    
    75 104
       script:
    
    105
    +    # Create an executable and test it by printing the version.
    
    76 106
         - dist/bin/lisp -eval '(save-lisp "saved-lisp-executable" :executable t)'
    
    77 107
         - ./saved-lisp-executable --version
    
    108
    +    # Run the unit tests with the executable, just to make sure the
    
    109
    +    # executable works as expected.
    
    78 110
         - bin/run-unit-tests.sh -l ./saved-lisp-executable
    
    79 111
     
    
    112
    +# Default configuration for running the benchmarks.
    
    80 113
     .benchmark_template: &benchmark_configuration
    
    81 114
       stage: benchmark
    
    82 115
       artifacts:
    
    ... ... @@ -88,7 +121,7 @@ workflow:
    88 121
         - CMUCL=../../snapshot/bin/lisp ./run-cmucl.sh
    
    89 122
         - CMUCL=../../dist/bin/lisp ./run-cmucl.sh
    
    90 123
         - ../../snapshot/bin/lisp -load report
    
    91
    -
    
    124
    +    
    
    92 125
     stages:
    
    93 126
       - install
    
    94 127
       - build
    
    ... ... @@ -117,6 +150,8 @@ linux:build:
    117 150
         - job: linux:install
    
    118 151
           artifacts: true
    
    119 152
       variables:
    
    153
    +    # Fedora 41 must build with gcc because the clang build fails some
    
    154
    +    # ansi-tests.  See [#469].
    
    120 155
         CONFIG: "x86_linux"
    
    121 156
     
    
    122 157
     linux:cross-build:
    
    ... ... @@ -129,11 +164,20 @@ linux:cross-build:
    129 164
           - linux-2/*.log
    
    130 165
           - linux-3/*.log
    
    131 166
           - linux-4/*.log
    
    167
    +      # The lisp directory is needed for the static analyzer job.
    
    132 168
           - linux-4/lisp
    
    133 169
       variables:
    
    170
    +    # This must match the config used for the linux build!
    
    134 171
         CONFIG: "x86_linux"
    
    172
    +
    
    135 173
       needs:
    
    174
    +
    
    175
    +    # Normally need the linux:install stage to get the compiler to
    
    176
    +    # use.  But for #337, we need the normal build from linux:build to
    
    177
    +    # do the cross-compile.  Once the snapshot is made, we can use
    
    178
    +    # linux:install instead.
    
    136 179
         - job: linux:build
    
    180
    +    #- job: linux:install
    
    137 181
           artifacts: true
    
    138 182
       script:
    
    139 183
         - bin/create-target.sh xtarget $CONFIG
    
    ... ... @@ -147,6 +191,7 @@ linux:test:
    147 191
       tags:
    
    148 192
         - linux
    
    149 193
       needs:
    
    194
    +    # Needs artifacts from build (dist/)
    
    150 195
         - job: linux:build
    
    151 196
           artifacts: true
    
    152 197
     
    
    ... ... @@ -167,6 +212,7 @@ linux:cross-test:
    167 212
           - ansi-test/test.out
    
    168 213
           - cross-test.log
    
    169 214
       needs:
    
    215
    +    # Needs artifacts from build (dist/)
    
    170 216
         - job: linux:cross-build
    
    171 217
           artifacts: true
    
    172 218
       script:
    
    ... ... @@ -177,14 +223,16 @@ linux:ansi-test:
    177 223
       tags:
    
    178 224
         - linux
    
    179 225
       needs:
    
    226
    +    # Needs artifacts from build (dist/)
    
    180 227
         - job: linux:build
    
    181 228
           artifacts: true
    
    182
    -
    
    229
    +    
    
    183 230
     linux:benchmark:
    
    184 231
       <<: *benchmark_configuration
    
    185 232
       tags:
    
    186 233
         - linux
    
    187 234
       needs:
    
    235
    +    # Needs artifacts from install (snapshot/) and build (dist/)
    
    188 236
         - job: linux:install
    
    189 237
           artifacts: true
    
    190 238
         - job: linux:build
    
    ... ... @@ -213,6 +261,7 @@ osx:test:
    213 261
       tags:
    
    214 262
         - macos-virtualbox
    
    215 263
       needs:
    
    264
    +    # Needs artifacts from build (dist/)
    
    216 265
         - job: osx:build
    
    217 266
           artifacts: true
    
    218 267
     
    
    ... ... @@ -223,23 +272,51 @@ osx:exec-test:
    223 272
       needs:
    
    224 273
         - job: osx:build
    
    225 274
           artifacts: true
    
    226
    -
    
    275
    +  
    
    227 276
     osx:ansi-test:
    
    228 277
       <<: *ansi_test_configuration
    
    229 278
       tags:
    
    230 279
         - macos-virtualbox
    
    231 280
       needs:
    
    281
    +    # Needs artifacts from build (dist/)
    
    232 282
         - job: osx:build
    
    233 283
           artifacts: true
    
    234
    -
    
    284
    +  
    
    235 285
     osx:benchmark:
    
    236 286
       <<: *benchmark_configuration
    
    237 287
       tags:
    
    238 288
         - macos-virtualbox
    
    239 289
       needs:
    
    290
    +    # Needs artifacts from install (snapshot/) and build (dist/)
    
    240 291
         - job: osx:install
    
    241 292
           artifacts: true
    
    242
    -    - job: osx:build
    
    293
    +    - job:  osx:build
    
    294
    +
    
    295
    +# Optional job that runs the static analyzer.  It needs the files from
    
    296
    +# the linux-4 directory built in the linux:build job.
    
    297
    +linux:static-analyzer:
    
    298
    +  stage: analyze
    
    299
    +      
    
    300
    +  tags:
    
    301
    +    - linux
    
    302
    +  artifacts:
    
    303
    +    when: always
    
    304
    +    paths:
    
    305
    +      - analyzer.log
    
    306
    +  needs:
    
    307
    +    - job: linux:build
    
    308
    +      artifacts: true
    
    309
    +  rules:
    
    310
    +    - if: $CI_PIPELINE_SOURCE == "schedule"
    
    311
    +    - when: manual
    
    312
    +      allow_failure: true
    
    313
    +  script:
    
    314
    +    # Analysis can generate huge amounts of output.  For now just save
    
    315
    +    # the results to the log file instead of also having it go to the
    
    316
    +    # console.  If someday there's less or no output, we can consider
    
    317
    +    # having the logs go to the console too.
    
    318
    +    - make -C build-4/lisp clean
    
    319
    +    - make -C build-4/lisp ANALYZER=-fanalyzer > analyzer.log 2>&1
    
    243 320
     
    
    244 321
     #### OpenSUSE jobs ####
    
    245 322
     ubuntu:install:
    
    ... ... @@ -258,6 +335,9 @@ ubuntu:build:
    258 335
         - job: ubuntu:install
    
    259 336
           artifacts: true
    
    260 337
       variables:
    
    338
    +    # Build with gcc on Ubuntu 25.10.  It produces a lisp than passes
    
    339
    +    # the ansi-tests.  Clang seems to fail the ansi-tests WRITE.1,
    
    340
    +    # PRINT.1, and friends when cr_pow is used.
    
    261 341
         CONFIG: "x86_linux"
    
    262 342
     
    
    263 343
     ubuntu:test:
    
    ... ... @@ -265,6 +345,7 @@ ubuntu:test:
    265 345
       tags:
    
    266 346
         - ubuntu
    
    267 347
       needs:
    
    348
    +    # Needs artifacts from build (dist/)
    
    268 349
         - job: ubuntu:build
    
    269 350
           artifacts: true
    
    270 351
     
    
    ... ... @@ -273,39 +354,34 @@ ubuntu:ansi-test:
    273 354
       tags:
    
    274 355
         - ubuntu
    
    275 356
       needs:
    
    357
    +    # Needs artifacts from build (dist/)
    
    276 358
         - job: ubuntu:build
    
    277 359
           artifacts: true
    
    278 360
     
    
    279
    -linux:static-analyzer:
    
    280
    -  stage: analyze
    
    281
    -  tags:
    
    282
    -    - linux
    
    283
    -  artifacts:
    
    284
    -    when: always
    
    285
    -    paths:
    
    286
    -      - analyzer.log
    
    287
    -  needs:
    
    288
    -    - job: linux:build
    
    289
    -      artifacts: true
    
    290
    -  rules:
    
    291
    -    - if: $CI_PIPELINE_SOURCE == "schedule"
    
    292
    -    - when: manual
    
    293
    -      allow_failure: true
    
    294
    -  script:
    
    295
    -    - make -C build-4/lisp clean
    
    296
    -    - make -C build-4/lisp ANALYZER=-fanalyzer > analyzer.log 2>&1
    
    297
    -
    
    361
    +# Optional job that runs the markdown link checker.  This is optional
    
    362
    +# because it's very slow, of course; you have to run it manually.
    
    363
    +#
    
    364
    +# From https://github.com/tcort/markdown-link-check
    
    365
    +# Checks links on the wiki pages whenever any wiki markdown pages change. 
    
    298 366
     markdown-link-check:
    
    299 367
       stage: markdown-link-check
    
    368
    +
    
    369
    +  # Only the linux runner has markdown-link-check installed
    
    300 370
       tags:
    
    301 371
         - linux
    
    372
    +  # It's ok if this fails; we don't want to declare the entire
    
    373
    +  # pipeline as having failed.
    
    302 374
       allow_failure: true
    
    303 375
       rules:
    
    304 376
         - if: $CI_PIPELINE_SOURCE == "schedule"
    
    305 377
         - when: manual
    
    306 378
           allow_failure: true
    
    307 379
       script:
    
    380
    +    # Check links in the main repo
    
    308 381
         - find . -name \*.md -print0 | xargs -0 -n1 markdown-link-check
    
    382
    +    # Clone the wiki pages and check the links there.  Lots of
    
    383
    +    # failures here because of
    
    384
    +    # https://gitlab.com/gitlab-org/gitlab/-/issues/17845.
    
    309 385
         - git clone https://gitlab.common-lisp.net/cmucl/cmucl.wiki.git
    
    310 386
         - find cmucl.wiki -name \*.md -print0 | xargs -0 -n1 markdown-link-check
    
    311 387