default: # Cancel any pipeline when a newer instance is started (does not seem to work # currently for the detached pipelines created from merge requests...) interruptible: true stages: - validation - release # Create YAML anchors to avoid code duplicate (note: an anchor cannot call # another anchor as it will result in an array of array) .apt_get_update: &apt_get_update - apt-get update > /dev/null .python_prep: &python_prep - apt-get install --yes python3-dev python3-pip > /dev/null - python3 -m pip --quiet install -r misc/python_requirements.txt .release_script_prep: &release_script_prep - apt-get install --yes python3-dev python3-pip git > /dev/null - git clone https://framagit.org/thombet/scripts-for-kodi-add-ons.git - python3 -m pip --quiet install -r scripts-for-kodi-add-ons/create-new-add-on-release/requirements.txt # Quality job: check no pylint violations are reported. quality: stage: validation # Do not get any artifacts from previous jobs dependencies: [] rules: # Run this job only on merge requests and only as "manual" (it would have # been better to configure this at pipeline-level with "workflow" but it # does not support "when: manual"...). - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' when: manual before_script: - *apt_get_update - *python_prep script: - find . -iname '*.py' | xargs -t python3 -m pylint --rcfile=misc/pylint-rcfile.txt | tee pylint.log artifacts: name: "quality-logs-$CI_JOB_ID" expose_as: "Quality Logs" paths: - pylint.log expire_in: 1 week when: always # Translation job: check that all the string.po files use the same strings as # the reference file translation: stage: validation # Do not get any artifacts from previous jobs dependencies: [] rules: # Run this job only on merge requests containing changes in strings.po # files and only as "manual" - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' changes: - resources/language/*/strings.po when: manual before_script: - *apt_get_update - apt-get install --yes gettext > /dev/null # We cannot use a simple "find ... -exec msgcmp {} strings.po" because it # would always return 0 as exit code script: - files=$(find . -name strings.po -not -path './resources/language/resource.language.en_gb/*') && for file in $files; do echo -e "\n\033[94mChecking translation file $file\033[0m"; msgcmp $file ./resources/language/resource.language.en_gb/strings.po || continue; done # Pre-release job: will be available in all the merge requests with release # branches in order to verify the release can be actually created. The # verification is done by running the release script in dry run mode. pre-release: stage: validation # Do not get any artifacts from previous jobs dependencies: [] rules: # Run this job only on merge requests for release branches - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^release\//' when: manual before_script: - *apt_get_update - *release_script_prep script: - python3 scripts-for-kodi-add-ons/create-new-add-on-release/create-new-add-on-release.py --dry-run # Release job: will create a new GitLab release with the latest commit on the # main branch. create-release: stage: release # Do not get any artifacts from previous jobs dependencies: [] # Run this job only for new commits on the branch "main" and only as "manual" # because it is not mandatory to release all the commits on mainline. rules: - if: '$CI_COMMIT_BRANCH == "main"' when: manual - when: never before_script: - *apt_get_update - *release_script_prep script: - python3 scripts-for-kodi-add-ons/create-new-add-on-release/create-new-add-on-release.py