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

Commits:

1 changed file:

Changes:

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