|
|
# 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:
|
|
|
- build
|
|
|
- checks
|
|
|
- tests
|
|
|
- platform-compat
|
|
|
- py-version-compat
|
|
|
|
|
|
|
|
|
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
|
|
|
needs: []
|
|
|
|
|
|
.build-wheel: &wheel
|
|
|
image: "registry.heptapod.net/mercurial/ci-images/core-wheel-x86_64-c:v3.0"
|
|
|
<<: *all
|
|
|
stage: build
|
|
|
variables:
|
|
|
WHEEL_TYPE: ""
|
|
|
FLAVOR: ""
|
|
|
MERCURIAL_SETUP_FORCE_TRANSLATIONS: "1"
|
|
|
CI_CLEVER_CLOUD_FLAVOR: "XS"
|
|
|
before_script:
|
|
|
- echo $WHEEL_TYPE
|
|
|
- test -n "$WHEEL_TYPE"
|
|
|
- echo $FLAVOR
|
|
|
- mkdir -p wheels/$WHEEL_TYPE/$BUILD_PY_ID
|
|
|
script:
|
|
|
- /opt/python/$BUILD_PY_ID/bin/python setup.py bdist_wheel --dist-dir tmp-wheelhouse
|
|
|
- auditwheel repair tmp-wheelhouse/*.whl -w wheels/$WHEEL_TYPE/$BUILD_PY_ID
|
|
|
artifacts:
|
|
|
paths:
|
|
|
- wheels/$WHEEL_TYPE/$BUILD_PY_ID
|
|
|
expire_in: 1 week
|
|
|
|
|
|
build-c-wheel:
|
|
|
<<: *wheel
|
|
|
variables:
|
|
|
WHEEL_TYPE: "c"
|
|
|
parallel:
|
|
|
matrix:
|
|
|
- BUILD_PY_ID:
|
|
|
- cp38-cp38
|
|
|
- cp39-cp39
|
|
|
- cp310-cp310
|
|
|
- cp311-cp311
|
|
|
- cp312-cp312
|
|
|
- cp313-cp313
|
|
|
|
|
|
# TODO: We should select the wheel compatible with the python (and plateform)
|
|
|
# we use. This is necessary to build multiple wheel.
|
|
|
.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"
|
|
|
- echo "$WHEEL_TYPE"
|
|
|
- WHEEL=""
|
|
|
- if test -n "$WHEEL_TYPE"; then
|
|
|
PY_TAG=`$PYTHON -c 'import sys; v=sys.version_info; t=f"cp{v.major}{v.minor}"; print(f"{t}-{t}")'`;
|
|
|
echo "$PY_TAG";
|
|
|
test -n "PY_TAG";
|
|
|
WHEEL="`ls -1 $CI_PROJECT_DIR/wheels/$WHEEL_TYPE/$PY_TAG/*.whl`";
|
|
|
test -n "$WHEEL";
|
|
|
fi
|
|
|
- if test -n "$WHEEL"; then
|
|
|
echo installing from $WHEEL;
|
|
|
HGTESTS_ALLOW_NETIO="$TEST_HGTESTS_ALLOW_NETIO" "$PYTHON" tests/run-tests.py --hg-wheel $WHEEL --color=always $RUNTEST_ARGS;
|
|
|
else
|
|
|
echo installing from source;
|
|
|
HGTESTS_ALLOW_NETIO="$TEST_HGTESTS_ALLOW_NETIO" "$PYTHON" tests/run-tests.py --color=always $RUNTEST_ARGS;
|
|
|
fi
|
|
|
|
|
|
checks:
|
|
|
<<: *runtests
|
|
|
stage: checks
|
|
|
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: checks
|
|
|
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-c:
|
|
|
<<: *test_c
|
|
|
needs:
|
|
|
- job: build-c-wheel
|
|
|
parallel:
|
|
|
matrix:
|
|
|
- BUILD_PY_ID: "cp311-cp311"
|
|
|
|
|
|
variables:
|
|
|
WHEEL_TYPE: "c"
|
|
|
RUNTEST_ARGS: "--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
|
|
|
stage: py-version-compat
|
|
|
when: manual # avoid overloading the CI by default
|
|
|
variables:
|
|
|
PYTHON: python3.8
|
|
|
WHEEL_TYPE: "c"
|
|
|
RUNTEST_ARGS: " --blacklist /tmp/check-tests.txt"
|
|
|
TEST_HGTESTS_ALLOW_NETIO: "1"
|
|
|
needs:
|
|
|
- job: build-c-wheel
|
|
|
parallel:
|
|
|
matrix:
|
|
|
- BUILD_PY_ID: "cp38-cp38"
|
|
|
|
|
|
test-3.12-c:
|
|
|
<<: *test_c
|
|
|
stage: py-version-compat
|
|
|
when: manual # avoid overloading the CI by default
|
|
|
variables:
|
|
|
PYTHON: python3.12
|
|
|
WHEEL_TYPE: "c"
|
|
|
RUNTEST_ARGS: " --blacklist /tmp/check-tests.txt"
|
|
|
TEST_HGTESTS_ALLOW_NETIO: "1"
|
|
|
needs:
|
|
|
- job: build-c-wheel
|
|
|
parallel:
|
|
|
matrix:
|
|
|
- BUILD_PY_ID: "cp312-cp312"
|
|
|
|
|
|
test-3.12-rust:
|
|
|
<<: *test_rust
|
|
|
stage: py-version-compat
|
|
|
when: manual # avoid overloading the CI by default
|
|
|
variables:
|
|
|
PYTHON: python3.12
|
|
|
|
|
|
test-3.13-c:
|
|
|
<<: *test_c
|
|
|
stage: py-version-compat
|
|
|
when: manual # avoid overloading the CI by default
|
|
|
variables:
|
|
|
PYTHON: python3.13
|
|
|
WHEEL_TYPE: "c"
|
|
|
RUNTEST_ARGS: " --blacklist /tmp/check-tests.txt"
|
|
|
TEST_HGTESTS_ALLOW_NETIO: "1"
|
|
|
needs:
|
|
|
- job: build-c-wheel
|
|
|
parallel:
|
|
|
matrix:
|
|
|
- BUILD_PY_ID: "cp313-cp313"
|
|
|
|
|
|
test-3.13-rust:
|
|
|
<<: *test_rust
|
|
|
stage: py-version-compat
|
|
|
when: manual # avoid overloading the CI by default
|
|
|
variables:
|
|
|
PYTHON: python3.13
|
|
|
|
|
|
check-pytype:
|
|
|
<<: *test_rust
|
|
|
stage: checks
|
|
|
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: platform-compat
|
|
|
before_script:
|
|
|
- C:/hgdev/MinGW/msys/1.0/bin/sh.exe --login -c 'cd "$OLDPWD" && ls -1 tests/test-check-*.* > C:/hgdev/tmp/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"
|
|
|
- echo "$Env:RUNTEST_ARGS"
|
|
|
- echo "$Env:TMP"
|
|
|
- echo "$Env:TEMP"
|
|
|
|
|
|
- C:/hgdev/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
|
|
|
when: manual
|
|
|
tags:
|
|
|
- windows
|
|
|
variables:
|
|
|
RUNTEST_ARGS: "-j 8 --blacklist C:/hgdev/tmp/check-tests.txt"
|
|
|
PYTHON: C:/hgdev/venvs/python39-x64/Scripts/python.exe
|
|
|
|
|
|
windows-pyox:
|
|
|
<<: *windows_runtests
|
|
|
when: manual # pyoxidizer builds seem broken with --no-use-pep517
|
|
|
tags:
|
|
|
- windows
|
|
|
variables:
|
|
|
RUNTEST_ARGS: "--blacklist C:/hgdev/tmp/check-tests.txt --pyoxidized"
|
|
|
PYTHON: C:/hgdev/venvs/python39-x64/Scripts/python.exe
|
|
|
|
|
|
macos:
|
|
|
<<: *test_c
|
|
|
stage: platform-compat
|
|
|
when: manual # avoid overloading the CI by default
|
|
|
tags:
|
|
|
- macos
|
|
|
|