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):
variables:
YAML_LINT_PATH: ".gitlab-ci* ./**/*gitlab-ci*"
YAML_LINT_EXTRA_ARGS: "{ extends: lint/.yamllint.yaml, ignore: [website-template/*] }"
extends:
- .yaml_lint_defaults
- .Gitlab_CI.Lint.YAML
image: python:3.11-slim

View File

@ -25,15 +25,20 @@ include:
rules:
- if: '$NFC_AUTO_JOBS == "false"'
when: never
- if: '$CI_PIPELINE_SOURCE == "schedule" && $PIPELINE_RUN_SCHEDULE == "true"'
exists:
- ".nfc_automation.yaml"
when: always
- if: '$CI_PIPELINE_SOURCE == "pipeline" && $PIPELINE_RUN_TRIGGER == "true"'
exists:
- ".nfc_automation.yaml"
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:
- ".nfc_automation.yaml"
when: always
@ -58,6 +63,13 @@ include:
rules:
- if: $CI_COMMIT_TAG
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: never

View File

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

View File

@ -96,24 +96,35 @@ variables:
fi
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
url: $DOCKER_IMAGE_PUBLISH_URL
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: $CI_COMMIT_TAG
- if: # condition_git_tag
$CI_COMMIT_TAG != null &&
$CI_COMMIT_BRANCH == null
exists:
- dockerfile
- dockerfile.j2
- '{dockerfile, dockerfile.j2}'
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:
- dockerfile
- dockerfile.j2
when: on_success
- if: '$CI_COMMIT_BRANCH != "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
- '{dockerfile, dockerfile.j2}'
when: always
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- dockerfile
- dockerfile.j2
- '{dockerfile, dockerfile.j2}'
changes:
paths:
- '{dockerfile, dockerfile.j2, includes**/**}'
compare_to: 'master'
allow_failure: true
when: manual
- 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.
- notate how each of the stages run and under what circumstance. *i.e. gitlab-ci.yml rules.exist/rules.changes*
## CI Stages

View File

@ -17,12 +17,16 @@
rules:
- if: '$JOB_STOP_GIT_PUSH_MIRROR'
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:
- if: '$JOB_STOP_GITLAB_RELEASE'
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>'"
when: never
- if: '$CI_COMMIT_BRANCH == "master" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
when: on_success
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
allow_failure: false
- if: '$CI_COMMIT_BRANCH == "development" &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
when: on_success
- if: # condition_dev_branch_push
$CI_COMMIT_BRANCH == "development" &&
$CI_PIPELINE_SOURCE == "push"
when: manual
allow_failure: true
# for testing
# - if: '$CI_COMMIT_BRANCH != "master"'
# when: always
@ -100,12 +102,19 @@ commit footer refs:
rules:
- if: '$JOB_STOP_CONVENTIONAL_COMMITS'
when: never
- if: '$CI_COMMIT_BRANCH == "development" || $CI_COMMIT_BRANCH == "master"'
- if: $CHANGELOG_FOOTER_REFERENCES == "False"
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:
- .cz.yaml
when: always
- when: never
- when: never

View File

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

View File

@ -2,7 +2,7 @@
.yaml_lint_defaults:
variables:
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
before_script:
- if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi
@ -36,14 +36,73 @@
rules:
- if: '$JOB_STOP_YAML_LINT'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: '$CI_COMMIT_TAG'
when: always
- 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:
- '{!gitlab-ci/**/*, !website-template/**/*, !.gitlab-ci, !*gitlab-ci*, **/*, **}.{yml, yaml}'
compare_to: 'master'
when: always
- when: never
.Gitlab_CI.Lint.YAML:
variables:
YAML_LINT_PATH: ".gitlab-ci* ./**/*gitlab-ci*"
YAML_LINT_EXTRA_ARGS: "{ extends: lint/.yamllint.yaml, ignore: [gitlab-ci/*, website-template/*] }"
extends:
- .yaml_lint_defaults
rules:
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$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:
- "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/$CI_JOB_NAME"
rules:
- if: '$JOB_STOP_MKDOCS_BUILD'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: $CI_COMMIT_TAG
- if: # condition_any_branch_push
$CI_COMMIT_BRANCH != null &&
$CI_COMMIT_TAG == null &&
$CI_PIPELINE_SOURCE == "push"
exists:
- "mkdocs.yaml"
- "mkdocs.yml"
when: always
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
exists:
- "mkdocs.yaml"
- "mkdocs.yml"
- 'mkdocs.{yaml,yml}'
when: always
- when: never
@ -48,15 +45,36 @@
rules:
- if: '$JOB_STOP_MKDOCS_BUILD'
when: never
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: $CI_COMMIT_TAG
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
- "docs/index.md"
- '{docs/**,pages/**}/*.md'
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:
- "docs/index.md"
- '{docs/**,pages/**}/*.md'
changes:
paths:
- '{docs/**,pages/**}/*.md'
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:
- '{docs/**,pages/**}/*.md'
changes:
paths:
- '{docs/**,pages/**}/*.md'
compare_to: 'development'
when: always
- when: never

View File

@ -35,7 +35,6 @@
- *pylint_badge
after_script:
- echo deactivate
artifacts:
@ -46,8 +45,41 @@
reports:
codequality: "$CI_PROJECT_DIR/artifacts/$CI_JOB_STAGE/tests/gl-code-quality-report.json"
rules:
- if: '$CI_COMMIT_BRANCH &&
( $CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "pipeline")'
- if: # condition_master_branch_push
$CI_COMMIT_BRANCH == "master" &&
$CI_PIPELINE_SOURCE == "push"
exists:
#- '{**/,*,!gitlab-ci/**,!website-template/**}*.py'
- '{**/,*}*.py'
when: always
- if: # condition_development_branch_push
$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: '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/**}*.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
Docker Hub:
Docker.Hub.Branch.Publish:
extends: .publish-docker-hub
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:
extends:

View File

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