feat(ci_rules): add exists and changes for rules

now defined jobs check for existance of file and for changes
to launch a job

!41 #32
This commit is contained in:
2023-06-02 15:09:31 +09:30
parent 862176f9dc
commit 04e7e928e0
15 changed files with 455 additions and 224 deletions

View File

@ -114,11 +114,8 @@ PyLint:
gilab-ci.yml Lint (python 3.11): gilab-ci.yml Lint (python 3.11):
variables:
YAML_LINT_PATH: ".gitlab-ci* ./**/*gitlab-ci*"
YAML_LINT_EXTRA_ARGS: "{ extends: lint/.yamllint.yaml, ignore: [website-template/*] }"
extends: extends:
- .yaml_lint_defaults - .Gitlab_CI.Lint.YAML
image: python:3.11-slim image: python:3.11-slim

View File

@ -25,15 +25,20 @@ include:
rules: rules:
- if: '$NFC_AUTO_JOBS == "false"' - if: '$NFC_AUTO_JOBS == "false"'
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "schedule" && $PIPELINE_RUN_SCHEDULE == "true"' - if: '$CI_PIPELINE_SOURCE == "schedule" && $PIPELINE_RUN_SCHEDULE == "true"'
exists: exists:
- ".nfc_automation.yaml" - ".nfc_automation.yaml"
when: always when: always
- if: '$CI_PIPELINE_SOURCE == "pipeline" && $PIPELINE_RUN_TRIGGER == "true"' - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PIPELINE_RUN_TRIGGER == "true"'
exists: exists:
- ".nfc_automation.yaml" - ".nfc_automation.yaml"
when: always when: always
- if: "$CI_COMMIT_BRANCH == 'development'" # on push to dev run to chek for update
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- ".nfc_automation.yaml" - ".nfc_automation.yaml"
when: always when: always
@ -58,6 +63,13 @@ include:
rules: rules:
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: never when: never
- if: '$CI_COMMIT_BRANCH == "development" && $CI_PIPELINE_SOURCE == "push"'
- if: # condition_master_or_dev_push
(
$CI_COMMIT_BRANCH == "master" ||
$CI_COMMIT_BRANCH == "development"
)&&
$CI_PIPELINE_SOURCE == "push"
when: on_success when: on_success
- when: never - when: never

View File

@ -46,22 +46,15 @@
rules: rules:
- if: '$JOB_STOP_CONVENTIONAL_COMMITS' - if: '$JOB_STOP_CONVENTIONAL_COMMITS'
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never - if: # condition_any_branch_push
- if: '$CI_COMMIT_TAG' $CI_COMMIT_BRANCH != null &&
when: never $CI_COMMIT_TAG == null &&
- if: "$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'" $CI_PIPELINE_SOURCE == "push"
when: never
- if: '$CI_COMMIT_BRANCH == "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- .cz.yaml
when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists: exists:
- .cz.yaml - .cz.yaml
when: always when: always
- when: never - when: never

View File

@ -96,24 +96,35 @@ variables:
fi fi
rules: rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: $CI_COMMIT_TAG
exists:
- dockerfile
- dockerfile.j2
when: on_success
- if: '$CI_COMMIT_BRANCH == "development" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- dockerfile
- dockerfile.j2
when: on_success
- if: '$CI_COMMIT_BRANCH != "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- dockerfile
- dockerfile.j2
when: always
- when: never
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{dockerfile, dockerfile.j2}'
when: always
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{dockerfile, dockerfile.j2}'
changes:
paths:
- '{dockerfile, dockerfile.j2, includes**/**}'
compare_to: 'master'
when: always
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{dockerfile, dockerfile.j2}'
changes:
paths:
- '{dockerfile, dockerfile.j2, includes**/**}'
compare_to: 'devlopment'
when: always
- when: never

View File

@ -94,24 +94,31 @@
name: DockerHub name: DockerHub
url: $DOCKER_IMAGE_PUBLISH_URL url: $DOCKER_IMAGE_PUBLISH_URL
rules: rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never - if: # condition_git_tag
- if: $CI_COMMIT_TAG $CI_COMMIT_TAG != null &&
$CI_COMMIT_BRANCH == null
exists: exists:
- dockerfile - '{dockerfile, dockerfile.j2}'
- dockerfile.j2
when: on_success when: on_success
- if: '$CI_COMMIT_BRANCH == "development" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- dockerfile - '{dockerfile, dockerfile.j2}'
- dockerfile.j2 when: always
when: on_success
- if: '$CI_COMMIT_BRANCH != "master" && - if: # condition_dev_branch_push
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' $CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- dockerfile - '{dockerfile, dockerfile.j2}'
- dockerfile.j2 changes:
paths:
- '{dockerfile, dockerfile.j2, includes**/**}'
compare_to: 'master'
allow_failure: true allow_failure: true
when: manual when: manual
- when: never - when: never

View File

@ -16,6 +16,7 @@ about: https://gitlab.com/nofusscomputing/projects/gitlab-ci
- other sub folders are for `` which **DO NOT** automagically create jobs, but are pure definitions only. - other sub folders are for `` which **DO NOT** automagically create jobs, but are pure definitions only.
- notate how each of the stages run and under what circumstance. *i.e. gitlab-ci.yml rules.exist/rules.changes*
## CI Stages ## CI Stages

View File

@ -17,12 +17,16 @@
rules: rules:
- if: '$JOB_STOP_GIT_PUSH_MIRROR' - if: '$JOB_STOP_GIT_PUSH_MIRROR'
when: never when: never
- if: '$CI_COMMIT_TAG && $GIT_SYNC_URL != null'
when: always
- if: '$CI_COMMIT_BRANCH == "master" && $GIT_SYNC_URL != null &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
- if: '$CI_COMMIT_BRANCH == "development" && $GIT_SYNC_URL != null &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
when: always
- when: never
- if: $GIT_SYNC_URL == null
when: never
- if: # condition_master_or_dev_push
(
$CI_COMMIT_BRANCH == "master" ||
$CI_COMMIT_BRANCH == "development"
) &&
$CI_PIPELINE_SOURCE == "push"
when: always
- when: never

View File

@ -46,20 +46,22 @@
rules: rules:
- if: '$JOB_STOP_GITLAB_RELEASE' - if: '$JOB_STOP_GITLAB_RELEASE'
when: never when: never
- if: '$CI_COMMIT_TAG'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: "$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'" - if: "$CI_COMMIT_AUTHOR =='nfc_bot <helpdesk@nofusscomputing.com>'"
when: never when: never
- if: '$CI_COMMIT_BRANCH == "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - if: # condition_master_branch_push
when: on_success $CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
allow_failure: false allow_failure: false
- if: '$CI_COMMIT_BRANCH == "development" && when: on_success
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
when: manual when: manual
allow_failure: true allow_failure: true
# for testing # for testing
# - if: '$CI_COMMIT_BRANCH != "master"' # - if: '$CI_COMMIT_BRANCH != "master"'
# when: always # when: always
@ -100,12 +102,19 @@ commit footer refs:
rules: rules:
- if: '$JOB_STOP_CONVENTIONAL_COMMITS' - if: '$JOB_STOP_CONVENTIONAL_COMMITS'
when: never when: never
- if: '$CI_COMMIT_BRANCH == "development" || $CI_COMMIT_BRANCH == "master"'
- if: $CHANGELOG_FOOTER_REFERENCES == "False"
when: never when: never
- if: '$CI_COMMIT_BRANCH && $CHANGELOG_FOOTER_REFERENCES != "False" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' # - if: '$CI_COMMIT_BRANCH == "development" || $CI_COMMIT_BRANCH == "master"'
# when: never
- if: # condition_any_branch_push
$CI_COMMIT_BRANCH != null &&
$CI_COMMIT_TAG == null &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- .cz.yaml - .cz.yaml
when: always when: always
- when: never
- when: never

View File

@ -33,23 +33,38 @@
junit: junit:
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/*.junit.xml" - "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/*.junit.xml"
rules: rules:
- if: '$JOB_STOP_ANSIBLE_LINT' - if: '$JOB_STOP_ANSIBLE_LINT'
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: '$CI_COMMIT_BRANCH == "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- 'tasks/main.yaml'
when: always
- if: '$CI_COMMIT_TAG'
exists:
- 'tasks/main.yaml'
when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- 'tasks/main.yaml'
when: always
- when: never
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{defaults/**,handlers/**,meta/**,tasks/**}/*.yaml'
when: always
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{defaults/**,handlers/**,meta/**,tasks/**}/*.yaml'
changes:
paths:
- '{defaults/**,handlers/**,meta/**,tasks/**}/*.yaml'
compare_to: 'master'
when: always
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{defaults/**,handlers/**,meta/**,tasks/**}/*.yaml'
changes:
paths:
- '{defaults/**,handlers/**,meta/**,tasks/**}/*.yaml'
compare_to: 'development'
when: always
- when: never

View File

@ -29,11 +29,18 @@
junit: junit:
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/lint_markdown/*.junit.xml" - "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/lint_markdown/*.junit.xml"
rules: rules:
- if: '$CI_COMMIT_BRANCH && - if: '$JOB_STOP_LINT_MARKDOWN'
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' when: never
- if: # condition_any_branch_push
$CI_COMMIT_BRANCH != null &&
$CI_COMMIT_TAG == null &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- "**.md" # - "**.md"
- "**/**.md" # - "**/**.md"
- '{!docs/**,!pages/**,!gitlab-ci/**, !website-template/**, **}/*.md'
when: always
- when: never - when: never
@ -43,17 +50,38 @@
MD_LINT_CONFIG_PATH: "$CI_PROJECT_DIR/website-template" MD_LINT_CONFIG_PATH: "$CI_PROJECT_DIR/website-template"
extends: .Lint_Markdown extends: .Lint_Markdown
rules: rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$JOB_STOP_LINT_MARKDOWN_DOCS'
when: never when: never
- if: '$CI_COMMIT_TAG'
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- "docs/index.md" - '{docs/**,pages/**}/*.md'
- "pages/index.md"
when: always when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- "docs/index.md" - '{docs/**,pages/**}/*.md'
- "pages/index.md" changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'master'
when: always when: always
- when: never
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md' # works
changes:
paths:
#- '{docs/*,pages/*}*.md'
- '{docs/**,pages/**}/*.md'
compare_to: 'development'
when: always
- when: never

View File

@ -1,49 +1,108 @@
.yaml_lint_defaults: .yaml_lint_defaults:
variables: variables:
YAML_LINT_PATH: "." YAML_LINT_PATH: "."
YAML_LINT_EXTRA_ARGS: "{ extends: $ROOT_DIR/lint/.yamllint.yaml, ignore: [gitlab-ci/*] }" YAML_LINT_EXTRA_ARGS: "{ extends: $ROOT_DIR/lint/.yamllint.yaml, ignore: [gitlab-ci/*, website-template/*] }"
stage: validation stage: validation
before_script: before_script:
- if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi - if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi
- echo "[DEBUG] ROOT_DIR[$ROOT_DIR]" - echo "[DEBUG] ROOT_DIR[$ROOT_DIR]"
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME" - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests" - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests"
- export PYTHON_VERSION=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'` - export PYTHON_VERSION=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'`
- apt update - apt update
- apt install --no-install-recommends -y git - apt install --no-install-recommends -y git
- python3 -m venv env - python3 -m venv env
- . env/bin/activate - . env/bin/activate
- pip install --upgrade pip - pip install --upgrade pip
- pip install -r $ROOT_DIR/lint/requirements.txt - pip install -r $ROOT_DIR/lint/requirements.txt
- mkdir $PYTHON_VERSION - mkdir $PYTHON_VERSION
script: script:
- echo "[DEBUG] YAML_LINT_PATH[$YAML_LINT_PATH]" - echo "[DEBUG] YAML_LINT_PATH[$YAML_LINT_PATH]"
- echo "[DEBUG] YAML_LINT_CONFIG[$YAML_LINT_CONFIG]" - echo "[DEBUG] YAML_LINT_CONFIG[$YAML_LINT_CONFIG]"
- yamllint $YAML_LINT_PATH -f parsable -d "$(echo $YAML_LINT_EXTRA_ARGS)" > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/$PYTHON_VERSION-yaml-lint.log" 1>&1 || YAML_LINT=$? - yamllint $YAML_LINT_PATH -f parsable -d "$(echo $YAML_LINT_EXTRA_ARGS)" > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/$PYTHON_VERSION-yaml-lint.log" 1>&1 || YAML_LINT=$?
- cat "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/$PYTHON_VERSION-yaml-lint.log" | ansible-lint-to-junit-xml > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/$PYTHON_VERSION-yaml-lint.junit.xml" - cat "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/$PYTHON_VERSION-yaml-lint.log" | ansible-lint-to-junit-xml > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/$PYTHON_VERSION-yaml-lint.junit.xml"
- if [ $YAML_LINT > 0 ]; then echo "YAML lint failed with $YAML_LINT"; exit $YAML_LINT; fi - if [ $YAML_LINT > 0 ]; then echo "YAML lint failed with $YAML_LINT"; exit $YAML_LINT; fi
after_script: after_script:
- echo deactivate - echo deactivate
artifacts: artifacts:
expire_in: 3 days expire_in: 3 days
when: always when: always
paths:
- "artifacts/*"
reports:
junit:
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/*.junit.xml"
rules:
- if: '$JOB_STOP_YAML_LINT'
when: never
- if: '$CI_COMMIT_BRANCH == "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- '{!gitlab-ci/**/*, !website-template/**/*, !.gitlab-ci, !*gitlab-ci*, **/*, **}.{yml, yaml}'
# - ".gitlab-ci*"
# - "**/*gitlab-ci*"
changes:
paths: paths:
- "artifacts/*" - '{!gitlab-ci/**/*, !website-template/**/*, !.gitlab-ci, !*gitlab-ci*, **/*, **}.{yml, yaml}'
reports: compare_to: 'master'
junit: when: always
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/*.junit.xml"
rules: - when: never
- if: '$JOB_STOP_YAML_LINT'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"' .Gitlab_CI.Lint.YAML:
when: never variables:
- if: '$CI_COMMIT_TAG' YAML_LINT_PATH: ".gitlab-ci* ./**/*gitlab-ci*"
when: always YAML_LINT_EXTRA_ARGS: "{ extends: lint/.yamllint.yaml, ignore: [gitlab-ci/*, website-template/*] }"
- if: '$CI_COMMIT_BRANCH == "master" && extends:
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - .yaml_lint_defaults
when: always rules:
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - if: # condition_master_branch_push
when: always $CI_COMMIT_BRANCH == "master" &&
- when: never $CI_PIPELINE_SOURCE == "push"
exists:
#- '{!gitlab-ci/**, !website-template/**, **}/*gitlab-ci*'
- '{*, **/}*gitlab-ci*'
# - ".gitlab-ci*"
# - "**/*gitlab-ci*"
when: always
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
#- '{!gitlab-ci/**, !website-template/**, **}/*gitlab-ci*'
- '{*, **/}*gitlab-ci*'
changes:
paths:
#- '{!gitlab-ci/**, !website-template/**, **}/*gitlab-ci*'
- '{*, **/}*gitlab-ci*'
compare_to: 'master'
when: always
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
#- '{!gitlab-ci/**, !website-template/**, **}/*gitlab-ci*yml'
#- '{*, a}/*gitlab-ci*yml' # worked
#- '{!website-template/**, *, **, **/**}gitlab-ci*'
#- '{*, **, **/**, !website-template/**}/*gitlab-c*' worked
- '{*, **/}*gitlab-ci*'
changes:
paths:
- '{*, **/}*gitlab-ci*'
# - ".gitlab-ci*"
# - "**/*gitlab-ci*"
compare_to: 'development'
when: always
- when: never

View File

@ -23,21 +23,18 @@
paths: paths:
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME" - "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
rules: rules:
- if: '$JOB_STOP_MKDOCS_BUILD' - if: '$JOB_STOP_MKDOCS_BUILD'
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never - if: # condition_any_branch_push
- if: $CI_COMMIT_TAG $CI_COMMIT_BRANCH != null &&
$CI_COMMIT_TAG == null &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- "mkdocs.yaml" - 'mkdocs.{yaml,yml}'
- "mkdocs.yml"
when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- "mkdocs.yaml"
- "mkdocs.yml"
when: always when: always
- when: never - when: never
@ -48,15 +45,36 @@
rules: rules:
- if: '$JOB_STOP_MKDOCS_BUILD' - if: '$JOB_STOP_MKDOCS_BUILD'
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never - if: # condition_master_branch_push
- if: $CI_COMMIT_TAG $CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- "docs/index.md" - '{docs/**,pages/**}/*.md'
when: always when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- "docs/index.md" - '{docs/**,pages/**}/*.md'
changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'master'
when: always when: always
- when: never
- if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{docs/**,pages/**}/*.md'
changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'development'
when: always
- when: never

View File

@ -5,49 +5,81 @@
}" > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/badge_pylint.json" }" > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME/badge_pylint.json"
.PyLint: .PyLint:
variables: variables:
PYLINT_PATH: "/*/python-module/*/*.py" PYLINT_PATH: "/*/python-module/*/*.py"
PYLINT_RC_PATH: "/python/.pylintrc" PYLINT_RC_PATH: "/python/.pylintrc"
stage: validation stage: validation
before_script: before_script:
- if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi - if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi
- echo "[DEBUG] ROOT_DIR[$ROOT_DIR]" - echo "[DEBUG] ROOT_DIR[$ROOT_DIR]"
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME" - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
- mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests" - mkdir -p "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests"
- export PYTHON_VERSION=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'` - export PYTHON_VERSION=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'`
- apt update - apt update
- apt install --no-install-recommends -y git - apt install --no-install-recommends -y git
- python3 -m venv env - python3 -m venv env
- . env/bin/activate - . env/bin/activate
- pip install --upgrade pip - pip install --upgrade pip
- pip install -r $ROOT_DIR/python/requirements.txt - pip install -r $ROOT_DIR/python/requirements.txt
- mkdir $PYTHON_VERSION - mkdir $PYTHON_VERSION
script: script:
- PYLINT_PATH=$ROOT_DIR$PYLINT_PATH - PYLINT_PATH=$ROOT_DIR$PYLINT_PATH
- echo "[DEBUG] PYLINT_PATH[$PYLINT_PATH]" - echo "[DEBUG] PYLINT_PATH[$PYLINT_PATH]"
- PYLINT_RC_PATH=$ROOT_DIR$PYLINT_RC_PATH - PYLINT_RC_PATH=$ROOT_DIR$PYLINT_RC_PATH
- echo "[DEBUG] PYLINT_RC_PATH[$PYLINT_RC_PATH]" - echo "[DEBUG] PYLINT_RC_PATH[$PYLINT_RC_PATH]"
- python3 -m pylint --rcfile $PYLINT_RC_PATH --exit-zero --output-format=pylint_gitlab.GitlabCodeClimateReporter $PYLINT_PATH > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/gl-code-quality-report.json" - python3 -m pylint --rcfile $PYLINT_RC_PATH --exit-zero --output-format=pylint_gitlab.GitlabCodeClimateReporter $PYLINT_PATH > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/gl-code-quality-report.json"
- python3 -m pylint --rcfile $PYLINT_RC_PATH --exit-zero --output-format=pylint_gitlab.GitlabPagesHtmlReporter $PYLINT_PATH > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/gl-code-quality-report.html" - python3 -m pylint --rcfile $PYLINT_RC_PATH --exit-zero --output-format=pylint_gitlab.GitlabPagesHtmlReporter $PYLINT_PATH > "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/gl-code-quality-report.html"
- PyPIScore=$(python3 -m pylint --rcfile $PYLINT_RC_PATH --exit-zero $PYLINT_PATH | sed -n 's/^Your code has been rated at \([-0-9./]*\).*/\1/p') - PyPIScore=$(python3 -m pylint --rcfile $PYLINT_RC_PATH --exit-zero $PYLINT_PATH | sed -n 's/^Your code has been rated at \([-0-9./]*\).*/\1/p')
- *pylint_badge - *pylint_badge
after_script:
- echo deactivate
artifacts:
expire_in: 1 days
when: always
paths:
- "artifacts/*"
reports:
codequality: "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/gl-code-quality-report.json"
rules:
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
#- '{**/,*,!gitlab-ci/**,!website-template/**}*.py'
- '{**/,*}*.py'
when: always
after_script: - if: # condition_development_branch_push
- echo deactivate $CI_COMMIT_BRANCH == "development" &&
artifacts: $CI_PIPELINE_SOURCE == "push"
expire_in: 1 days exists:
when: always #- '{**/,*,!gitlab-ci/**,!website-template/**}*.py'
- '{**/,*}*.py'
changes:
paths: paths:
- "artifacts/*" #- '{**/,*,!gitlab-ci/**,!website-template/**}*.py'
reports: - '{**/,*}*.py'
codequality: "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/gl-code-quality-report.json" compare_to: 'master'
rules: when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - if: # condition_not_master_or_dev_push
when: always $CI_COMMIT_BRANCH != "master" &&
- when: never $CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
#- '{**/,*,!gitlab-ci/**,!website-template/**}*.py'
- '{**/,*}*.py'
changes:
paths:
#- '{**/,*,!gitlab-ci/**,!website-template/**}*.py'
- '{**/,*}*.py'
compare_to: 'development'
when: always
- when: never

View File

@ -30,10 +30,47 @@ Docker Container:
extends: .build_docker_container extends: .build_docker_container
Docker Hub: Docker.Hub.Branch.Publish:
extends: .publish-docker-hub extends: .publish-docker-hub
needs: [ "Docker Container" ] needs: [ "Docker Container" ]
rules: # rules manually synced from docker/publish.gitlab-ci.yaml removing git tag
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{dockerfile, dockerfile.j2}'
when: always
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- '{dockerfile, dockerfile.j2}'
changes:
paths:
- '{dockerfile, dockerfile.j2, includes**/**}'
compare_to: 'master'
allow_failure: true
when: manual
- when: never
Docker.Hub.Tag.Publish:
extends: .publish-docker-hub
rules: # rules manually synced from docker/publish.gitlab-ci.yaml only keeping git tag
- if: # condition_git_tag
$CI_COMMIT_TAG != null &&
$CI_COMMIT_BRANCH == null
exists:
- '{dockerfile, dockerfile.j2}'
when: always
- when: never
Gitlab Release: Gitlab Release:
extends: extends:

View File

@ -15,7 +15,7 @@ Documentation.Build:
extends: .MKDocs_Build_Docs extends: .MKDocs_Build_Docs
needs: [ 'Documentation.Lint' ] needs: [ 'Documentation.Lint' ]
# this name must always be called 'pages' so that gitlab pages work
pages: pages:
stage: deploy stage: deploy
variables: variables:
@ -32,21 +32,29 @@ pages:
rules: rules:
- if: '$JOB_STOP_GITLAB_PAGES' - if: '$JOB_STOP_GITLAB_PAGES'
when: never when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never - if: # condition_dev_branch_push
- if: $CI_COMMIT_TAG $CI_COMMIT_BRANCH == "development" &&
when: never $CI_PIPELINE_SOURCE == "push"
- if: '$CI_COMMIT_BRANCH == "development" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists: exists:
- "mkdocs.yaml" - '{docs/**,pages/**}/*.md'
- "mkdocs.yml" changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'master'
when: always when: always
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")' - if: # condition_not_master_or_dev_push
$CI_COMMIT_BRANCH != "master" &&
$CI_COMMIT_BRANCH != "development" &&
$CI_PIPELINE_SOURCE == "push"
exists: exists:
- "mkdocs.yaml" - '{docs/**,pages/**}/*.md'
- "mkdocs.yml" changes:
when: manual paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'development'
allow_failure: true allow_failure: true
- when: never when: manual
- when: never