contrib/heptapod-ci.yml
author Matt Harbison <matt_harbison@yahoo.com>
Sat, 19 Oct 2024 00:57:52 -0400
changeset 52026 e4961a4b4300
parent 52015 f9f41b3dcb64
child 52149 6f641ebe759e
permissions -rw-r--r--
contrib: drop python 3.7 from the Windows dependency installer script I'm tempted to drop 3.8 too, since we use 3.9 on Windows.

# Don't run pipelines on branch "merge", since we're fast-forward only.
# Gitlab sees a new branch (since e.g. `topic/stable/my-topic` becomes
# `branch/stable`), but the hash hasn't changed. There is no reason to
# re-run the CI in our case, since we haven't built up any specific automation.
# Right now it's just wasted CI and developer time.
# One can still run the pipeline manually via the web interface,
# like in the case of releases, to make *extra* sure that the actual branch
# has succeeded.
workflow:
  rules:
    - if: $CI_COMMIT_BRANCH =~ /^branch\/.*/ && $CI_PIPELINE_SOURCE != "web"
      when: never
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: never
    - if: $CI_PIPELINE_SOURCE == "push"
      when: always
    - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
      when: never
    - if: $CI_COMMIT_BRANCH
      when: always

stages:
  - tests

image: registry.heptapod.net/mercurial/ci-images/mercurial-core:$HG_CI_IMAGE_TAG

variables:
    PYTHON: python
    HG_CI_IMAGE_TAG: "v2.1"
    TEST_HGTESTS_ALLOW_NETIO: "0"
    SHOW_VERSION_OF: "$PYTHON"

.all_template: &all
  when: on_success

.runtests_template: &runtests
    <<: *all
    stage: tests
    # The runner made a clone as root.
    # We make a new clone owned by user used to run the step.
    before_script:
      - echo "python used, $PYTHON"
      - for tool in $SHOW_VERSION_OF ; do echo '#' version of $tool; $tool --version; done
      - rm -rf /tmp/mercurial-ci/  # Clean slate if not using containers
      - hg clone . /tmp/mercurial-ci/ --noupdate --config phases.publish=no
      - hg -R /tmp/mercurial-ci/ update `hg log --rev '.' --template '{node}'`
      - cd /tmp/mercurial-ci/
      - ls -1 tests/test-check-*.* > /tmp/check-tests.txt
    script:
        - echo "$RUNTEST_ARGS"
        - HGTESTS_ALLOW_NETIO="$TEST_HGTESTS_ALLOW_NETIO" "$PYTHON" tests/run-tests.py --color=always $RUNTEST_ARGS

checks:
    <<: *runtests
    variables:
        SHOW_VERSION_OF: "$PYTHON black clang-format"
        RUNTEST_ARGS: "--time --test-list /tmp/check-tests.txt"
        CI_CLEVER_CLOUD_FLAVOR: S

rust-cargo-test:
    <<: *all
    stage: tests
    script:
        - make rust-tests
        - make cargo-clippy
    variables:
        CI_CLEVER_CLOUD_FLAVOR: S

test-c: &test_c
    <<: *runtests
    variables:
        RUNTEST_ARGS: " --no-rust --blacklist /tmp/check-tests.txt"
        TEST_HGTESTS_ALLOW_NETIO: "1"

test-pure:
    <<: *runtests
    variables:
        RUNTEST_ARGS: "--pure --blacklist /tmp/check-tests.txt"

test-rust: &test_rust
    <<: *runtests
    variables:
        HGWITHRUSTEXT: cpython
        RUNTEST_ARGS: "--rust --blacklist /tmp/check-tests.txt"

test-rhg:
    <<: *runtests
    variables:
        HGWITHRUSTEXT: cpython
        RUNTEST_ARGS: "--rust --rhg --blacklist /tmp/check-tests.txt"

test-chg:
    <<: *runtests
    variables:
        RUNTEST_ARGS: "--blacklist /tmp/check-tests.txt --chg"

# note: we should probably get a full matrix for flavor × py-version, but this
# is a simple start to be able to check if we break the lowest supported
# version (and 3.12 have been giving us various troubles)
test-3.8-c:
    <<: *test_c
    when: manual  # avoid overloading the CI by default
    variables:
        PYTHON: python3.8

test-3.12-c:
    <<: *test_c
    when: manual  # avoid overloading the CI by default
    variables:
        PYTHON: python3.12

test-3.12-rust:
    <<: *test_rust
    when: manual  # avoid overloading the CI by default
    variables:
        PYTHON: python3.12

test-3.13-c:
    <<: *test_c
    when: manual  # avoid overloading the CI by default
    variables:
        PYTHON: python3.13

test-3.13-rust:
    <<: *test_rust
    when: manual  # avoid overloading the CI by default
    variables:
        PYTHON: python3.13

check-pytype:
    extends: .runtests_template
    before_script:
      - export PATH="/home/ci-runner/vendor/pyenv/pyenv-2.4.7-adf3c2bccf09cdb81febcfd15b186711a33ac7a8/shims:/home/ci-runner/vendor/pyenv/pyenv-2.4.7-adf3c2bccf09cdb81febcfd15b186711a33ac7a8/bin:$PATH"
      - echo "PATH, $PATH"
      - hg clone . /tmp/mercurial-ci/ --noupdate --config phases.publish=no
      - hg -R /tmp/mercurial-ci/ update `hg log --rev '.' --template '{node}'`
      - cd /tmp/mercurial-ci/
      - make local PYTHON=$PYTHON
      - ./contrib/setup-pytype.sh
    script:
      - echo "Entering script section"
      - sh contrib/check-pytype.sh

# `sh.exe --login` sets a couple of extra environment variables that are defined
# in the MinGW shell, but switches CWD to /home/$username.  The previous value
# is stored in OLDPWD.  Of the added variables, MSYSTEM is crucial to running
# run-tests.py- it is needed to make run-tests.py generate a `python3` script
# that satisfies the various shebang lines and delegates to `py -3`.
.window_runtests_template: &windows_runtests
    <<: *all
    when: manual  # we don't have any Windows runners anymore at the moment
    stage: tests
    before_script:
      - C:/MinGW/msys/1.0/bin/sh.exe --login -c 'cd "$OLDPWD" && ls -1 tests/test-check-*.* > C:/Temp/check-tests.txt'
      # TODO: find/install cvs, bzr, perforce, gpg, sqlite3

    script:
        - echo "Entering script section"
        - echo "python used, $Env:PYTHON"
        - Invoke-Expression "$Env:PYTHON -V"
        - Invoke-Expression "$Env:PYTHON -m black --version"
        - echo "$Env:RUNTEST_ARGS"
        - echo "$Env:TMP"
        - echo "$Env:TEMP"

        - C:/MinGW/msys/1.0/bin/sh.exe --login -c 'cd "$OLDPWD" && HGTESTS_ALLOW_NETIO="$TEST_HGTESTS_ALLOW_NETIO" $PYTHON tests/run-tests.py --color=always $RUNTEST_ARGS'

windows:
    <<: *windows_runtests
    tags:
      - windows
    variables:
        RUNTEST_ARGS: "--blacklist C:/Temp/check-tests.txt"
        PYTHON: py -3

windows-pyox:
    <<: *windows_runtests
    tags:
      - windows
    variables:
        RUNTEST_ARGS: "--blacklist C:/Temp/check-tests.txt --pyoxidized"
        PYTHON: py -3

macos:
    <<: *test_c
    when: manual  # avoid overloading the CI by default
    tags:
      - macos