stages: - check - test - automated_test default: image: python:3.11 tags: - docker before_script: - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY_GITLAB" | tr -d '\r' | ssh-add - # Our self-hosted runners have persistent home directories, so here we store # the known_hosts file in the temporary project dir and tell git to use a ssh # command that uses this hosts file during operations - export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=$CI_PROJECT_DIR/.ssh/known_hosts" - mkdir -p $CI_PROJECT_DIR/.ssh - chmod 700 $CI_PROJECT_DIR/.ssh - ssh-keyscan -p 10022 git.xfel.eu > $CI_PROJECT_DIR/.ssh/known_hosts - ls $CI_PROJECT_DIR/.ssh - echo $GIT_SSH_COMMAND - python3 -m venv .venv - source .venv/bin/activate - python3 -m pip install --upgrade pip setuptools wheel checks: stage: check only: [merge_requests] allow_failure: true script: - export PATH=/home/gitlab-runner/.local/bin:$PATH # We'd like to run the pre-commit hooks only on files that are being # modified by this merge request, however # `CI_MERGE_REQUEST_TARGET_BRANCH_SHA` is a 'premium' feature according to # GitLab... so this is a workaround for extracting the hash - export CI_MERGE_REQUEST_TARGET_BRANCH_SHA=$(git ls-remote origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME | cut -d$'\t' -f1) - export FILES=$(git diff $CI_COMMIT_SHA $CI_MERGE_REQUEST_TARGET_BRANCH_SHA --name-only | tr '\n' ' ') - python3 -m pip install pre-commit - echo "Running pre-commit on diff from $CI_COMMIT_SHA to $CI_MERGE_REQUEST_TARGET_BRANCH_SHA ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME)" # Pass list of modified files to pre-commit so that it only checks them - echo $FILES | xargs pre-commit run --color=always --files pytest: stage: test only: [merge_requests] script: - export LANG=C # Hopefully detect anything relying on locale - python3 -m pip install ".[test]" - python3 -m pytest --color yes --verbose --cov=cal_tools --cov=xfel_calibrate # Nope... https://docs.gitlab.com/12.10/ee/user/project/merge_requests/test_coverage_visualization.html#enabling-the-feature # - coverage xml # artifacts: # reports: # cobertura: coverage.xml automated_test: variables: OUTPUT: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME DETECTORS: all CALIBRATION: all PYENV_VERSION: "3.8" CAL_CAL_TOOLS_CALCAT: "{base-api-url='http://exflcalproxy:8080/api', use-oauth2=false}" stage: automated_test only: [merge_requests] when: manual allow_failure: false tags: - integration script: - export LANG=C # Hopefully detect anything relying on locale - python3 -m pip install ".[test]" - echo "Running automated test. This can take sometime to finish depending on the test data." - echo "Given variables are REFERENCE=$REFERENCE, OUTPUT=$OUTPUT, DETECTORS=$DETECTORS, CALIBRATION=$CALIBRATION" - python3 -m pytest -x ./tests/test_reference_runs --color yes --verbose --release-test --reference-folder /gpfs/exfel/d/cal_tst/reference_folder --out-folder /gpfs/exfel/data/scratch/xcaltst/test/$OUTPUT --detectors $DETECTORS --calibration $CALIBRATION timeout: 24 hours resource_group: automated_test cython-editable-install-test: stage: test only: [merge_requests] script: - python3 -m pip install -e ".[test]" - python3 -m pytest --color yes --verbose ./tests/test_cythonalgs.py