Skip to content
Snippets Groups Projects
Commit 0671f49c authored by Iñigo Moreno i Caireta's avatar Iñigo Moreno i Caireta
Browse files

Squashed: "Improve CI template organization"

parent d2d14cc9
Branches
No related tags found
No related merge requests found
Showing
with 351 additions and 403 deletions
image: tecnalia-docker-dev.artifact.tecnalia.com/docker:git include:
- project: tecnalia_robotics-public/gitlab_templates
variables: file: ci-templates/auto-rules/kinetic-default.yml
TMPDIR: /builds/${CI_PROJECT_NAMESPACE} \ No newline at end of file
GIT_LFS_SKIP_SMUDGE: 1 # Avoid fetching the files from LFS when doing git fetch
services:
- name: tecnalia-docker-dev.artifact.tecnalia.com/docker:dind
alias: docker
stages:
- build
- postcheck
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
before_script:
- apk add --update bash coreutils tar wget
- docker login tecnalia-docker-dev.artifact.tecnalia.com -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
.industrial_ci:
stage: build
before_script:
- apk add --update bash coreutils tar
- git clone --quiet --depth 1 https://github.com/ros-industrial/industrial_ci.git .ci_config
- docker login ${ARTIFACT_DOCKER_URL} -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
- docker login tecnalia-docker-dev.artifact.tecnalia.com -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
script: .ci_config/gitlab.sh
variables:
ADDITIONAL_DEBS: curl
PARALLEL_BUILDS: 2 # keep this for now, since there seems to be memory limit issues in the ci VM
AFTER_SETUP_TARGET_WORKSPACE: rosenv && bash <(curl -Ls https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/ci_run_entry_points.sh) $$current_ws
CMAKE_ARGS: -DCMAKE_CXX_FLAGS=-Wno-ignored-attributes -Wno-int-in-bool-context
tags:
- docker
industrial_ci_kinetic:
extends: .industrial_ci
variables:
ROS_DISTRO: kinetic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
rules:
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_REF_NAME =~ /^melodic-.*/
when: never
- if: $CI_COMMIT_REF_NAME =~ /^noetic-.*/
when: never
- when: always
industrial_ci_melodic:
extends: .industrial_ci
variables:
ROS_DISTRO: melodic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
rules:
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_REF_NAME =~ /^melodic-.*/
industrial_ci_noetic:
extends: .industrial_ci
variables:
ROS_DISTRO: noetic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
rules:
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_REF_NAME =~ /^noetic-.*/
industrial_ci_kinetic_deploy:
extends: .industrial_ci
variables:
ROS_DISTRO: kinetic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
AFTER_SCRIPT: "wget -q -O - https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/pre-deploy-cleanup.bash | bash"
DOCKER_COMMIT: industrial_ci_image
script:
- .ci_config/gitlab.sh
- cd $(mktemp -d)
- wget https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/-/archive/master/gitlab_templates-master.zip
- unzip gitlab_templates-master.zip && cd gitlab_templates-master/deploy
- cd base
- chmod a+x ros_entrypoint.bash
- docker build -t ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} .
- docker push ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}
- cd ..
- cd dev
- docker build --build-arg APPLICATION_IMAGE=${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} -t ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}-dev .
- docker push ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}-dev
- cd ..
rules:
- if: $CI_COMMIT_TAG
clang_format:
stage: postcheck
before_script:
- apk add --update bash coreutils tar wget
- git clone --quiet --depth 1 https://github.com/ros-industrial/industrial_ci.git .ci_config -b legacy
- wget https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/clang-format -O .clang-format
script: .ci_config/gitlab.sh
variables:
ROS_DISTRO: kinetic
CLANG_FORMAT_CHECK: file
CLANG_FORMAT_VERSION: "3.8"
when: always
tags:
- docker
##########################################################
## Simple check for basic Python syntax errors; this is much less thorough than
## other options like pylint, but much faster and less strict
##########################################################
python_syntax:
before_script:
- apk add --update python2
stage: build
script: python -m compileall -q .
when: always
tags:
- docker
##########################################################
## Check for errors in bash/sh scripts
## Uses https://github.com/koalaman/shellcheck
##########################################################
bash_syntax:
before_script:
- apk add --update shellcheck
stage: postcheck
script:
- RET=0
- find . -type f -name '*.sh' -exec shellcheck -s sh {} + || RET=1
- find . -type f -name '*.bash' -exec shellcheck -s bash {} + || RET=1
- exit $RET
when: always
tags:
- docker
##########################################################
## Check for errors in markdown files
## Uses https://github.com/cytopia/awesome-ci
## Disables the line length rule with --custom="-r ..."
## See other rules that can be configured in
## https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
##########################################################
markdown_syntax:
stage: postcheck
script: docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci syntax-markdown --path=/ac --extension=md --ignore=.ci_config --custom="-r ~MD013,~MD014"
when: always
tags:
- docker
##########################################################
## Check for various syntax issues in files; currently
## trailing white spaces
## utf8 formatting
## Uses https://github.com/cytopia/awesome-ci
##########################################################
file_syntax:
stage: postcheck
script:
- RET=0
- docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci file-trailing-space --path=/ac --extension=py,txt,cpp,h,md,sh,bash,xml,launch --ignore=.ci_config || RET=1
- docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci file-utf8 --path=/ac --extension=py,txt,cpp,h,md,sh,bash,xml,launch --ignore=.ci_config || RET=1
- exit $RET
when: always
tags:
- docker
##########################################################
## Check for errors in Asciidoctor files
## Could not find a proper linter for Asciidoctor format,
## so this is a custom-made "dirty" script
##########################################################
adoc_syntax:
stage: postcheck
image: tecnalia-docker-dev.artifact.tecnalia.com/alpine
before_script:
- apk add --update curl asciidoctor bash
script:
- curl -Ls https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/asciidoctor_syntax_check.bash | bash -s -- .
tags:
- docker
when: always
image: tecnalia-docker-dev.artifact.tecnalia.com/docker:git include:
- project: tecnalia_robotics-public/gitlab_templates
variables: file: ci-templates/auto-rules/with-rosinstall/kinetic-default.yml
TMPDIR: /builds/${CI_PROJECT_NAMESPACE} \ No newline at end of file
GIT_LFS_SKIP_SMUDGE: 1 # Avoid fetching the files from LFS when doing git fetch
services:
- name: tecnalia-docker-dev.artifact.tecnalia.com/docker:dind
alias: docker
stages:
- build
- postcheck
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
before_script:
- apk add --update bash coreutils tar wget
- docker login tecnalia-docker-dev.artifact.tecnalia.com -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
.industrial_ci:
stage: build
before_script:
- apk add --update bash coreutils tar
- git clone --quiet --depth 1 https://github.com/ros-industrial/industrial_ci.git .ci_config
- docker login ${ARTIFACT_DOCKER_URL} -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
- docker login tecnalia-docker-dev.artifact.tecnalia.com -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
script: .ci_config/gitlab.sh
variables:
ADDITIONAL_DEBS: curl
PARALLEL_BUILDS: 2 # keep this for now, since there seems to be memory limit issues in the ci VM
UPSTREAM_WORKSPACE: .rosinstall
AFTER_SETUP_UPSTREAM_WORKSPACE: "rosenv && bash <(curl -Ls https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/ci_run_entry_points.sh) $$current_ws"
AFTER_SETUP_TARGET_WORKSPACE: "rosenv && bash <(curl -Ls https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/ci_run_entry_points.sh) $$current_ws"
CMAKE_ARGS: '-DCMAKE_CXX_FLAGS=-Wno-ignored-attributes -Wno-int-in-bool-context'
tags:
- docker
industrial_ci_kinetic:
extends: .industrial_ci
variables:
ROS_DISTRO: kinetic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
rules:
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_REF_NAME =~ /^melodic-.*/
when: never
- if: $CI_COMMIT_REF_NAME =~ /^noetic-.*/
when: never
- when: always
industrial_ci_melodic:
extends: .industrial_ci
variables:
ROS_DISTRO: melodic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
rules:
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_REF_NAME =~ /^melodic-.*/
industrial_ci_noetic:
extends: .industrial_ci
variables:
ROS_DISTRO: noetic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
rules:
- if: $CI_COMMIT_TAG
when: never
- if: $CI_COMMIT_REF_NAME =~ /^noetic-.*/
industrial_ci_kinetic_deploy:
extends: .industrial_ci
variables:
ROS_DISTRO: kinetic
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
AFTER_SCRIPT: "wget -q -O - https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/pre-deploy-cleanup.bash | bash"
DOCKER_COMMIT: industrial_ci_image
script:
- .ci_config/gitlab.sh
- cd $(mktemp -d)
- wget https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/-/archive/master/gitlab_templates-master.zip
- unzip gitlab_templates-master.zip && cd gitlab_templates-master/deploy
- cd base
- chmod a+x ros_entrypoint.bash
- docker build -t ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} .
- docker push ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}
- cd ..
- cd dev
- docker build --build-arg APPLICATION_IMAGE=${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} -t ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}-dev .
- docker push ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}-dev
- cd ..
rules:
- if: $CI_COMMIT_TAG
clang_format:
stage: postcheck
before_script:
- apk add --update bash coreutils tar wget
- git clone --quiet --depth 1 https://github.com/ros-industrial/industrial_ci.git .ci_config -b legacy
- wget https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/clang-format -O .clang-format
script: .ci_config/gitlab.sh
variables:
ROS_DISTRO: kinetic
CLANG_FORMAT_CHECK: file
CLANG_FORMAT_VERSION: "3.8"
when: always
tags:
- docker
##########################################################
## Simple check for basic Python syntax errors; this is much less thorough than
## other options like pylint, but much faster and less strict
##########################################################
python_syntax:
before_script:
- apk add --update python2
stage: build
script: python -m compileall -q .
when: always
tags:
- docker
##########################################################
## Check for errors in bash/sh scripts
## Uses https://github.com/koalaman/shellcheck
##########################################################
bash_syntax:
before_script:
- apk add --update shellcheck
stage: postcheck
script:
- RET=0
- find . -type f -name '*.sh' -exec shellcheck -s sh {} + || RET=1
- find . -type f -name '*.bash' -exec shellcheck -s bash {} + || RET=1
- exit $RET
when: always
tags:
- docker
##########################################################
## Check for errors in markdown files
## Uses https://github.com/cytopia/awesome-ci
## Disables the line length rule with --custom="-r ..."
## See other rules that can be configured in
## https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
##########################################################
markdown_syntax:
stage: postcheck
script: docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci syntax-markdown --path=/ac --extension=md --ignore=.ci_config --custom="-r ~MD013,~MD014"
when: always
tags:
- docker
##########################################################
## Check for various syntax issues in files; currently
## trailing white spaces
## utf8 formatting
## Uses https://github.com/cytopia/awesome-ci
##########################################################
file_syntax:
stage: postcheck
script:
- RET=0
- docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci file-trailing-space --path=/ac --extension=py,txt,cpp,h,md,sh,bash,xml,launch --ignore=.ci_config || RET=1
- docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci file-utf8 --path=/ac --extension=py,txt,cpp,h,md,sh,bash,xml,launch --ignore=.ci_config || RET=1
- exit $RET
when: always
tags:
- docker
##########################################################
## Check for errors in Asciidoctor files
## Could not find a proper linter for Asciidoctor format,
## so this is a custom-made "dirty" script
##########################################################
adoc_syntax:
stage: postcheck
image: tecnalia-docker-dev.artifact.tecnalia.com/alpine
before_script:
- apk add --update curl asciidoctor bash
script:
- curl -Ls https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/asciidoctor_syntax_check.bash | bash -s -- .
tags:
- docker
when: always
= GitLab Templates = GitLab Templates
:toc:
This repository contains miscellaneous resources that need to be accessible without authentication. This repository contains miscellaneous resources that need to be accessible without authentication.
== GitLab CI templates
Two templates with default CI pipeline configurations are provided, for any repo to make use of: include::ci-templates/README.adoc[leveloffset=+1]
- `.gitlab-industrial-ci-kinetic-no-rosinstall.yml`
- `.gitlab-industrial-ci-kinetic-with-rosinstall.yml`
Both define basically the same pipeline, consisting of the following stages and jobs:
- Stage: `precheck`
* Check python syntax
- Stage: `build`
* Run `industrial_ci`
** Uses `flexbotics-base-devel` as a starting image
** Runs link:scripts/ci_run_entry_points.sh[] in the `BEFORE_SCRIPT` stage, which in turn finds and runs every `ci_entry_script.bash` script found in the source tree (target repo + repos from `.rosinstall`)
* Only when tags are pushed:
** Run some cleanup in the `industrial_ci` context (e.g. delete sources)
** Commit image used by `industrial_ci`
** Build deployment image on top of it and push it to our registry
- Stage: `postcheck` (jobs in this stage are allowed to fail)
* Check `bash`/`sh` script syntax
* Check Markdown syntax
* Check files have no trailing whitespace and are UTF-8 encoded
It is important to note that both images set the variable `GIT_LFS_SKIP_SMUDGE`, which means that when the repositories are cloned/fetched, the files hosted using Git LFS will not be downloaded. An example on how to explicitely fetch the files from LFS can be found in the https://git.code.tecnalia.com/tecnalia_robotics/common_config/blob/e93dbe6379d94e6a895a33c59bf17ccab26eacf9/.gitlab-ci.yml#L132[common_config repository].
== Custom `rosdep` definitions == Custom `rosdep` definitions
...@@ -37,5 +15,5 @@ Custom `rosdep` definitions for the packages hosted in our internal debian repos ...@@ -37,5 +15,5 @@ Custom `rosdep` definitions for the packages hosted in our internal debian repos
Resources required for building the deployment docker images are also hosted in this repository. Resources required for building the deployment docker images are also hosted in this repository.
This basically boils down to: This basically boils down to:
- link:scripts/pre-deploy-cleanup.bash[] is run in the `industrial_ci` container before commiting to an image - link:scripts/pre-deploy-cleanup.bash[] is run in the `.industrial_ci_deploy` template before commiting to an image
- link:deploy/Dockerfile[] is used to perform some additional cleanup and install link:deploy/ros_entrypoint.bash[] as entrypoint script on top of the `industrial_ci` image - link:deploy/Dockerfile[] is used to perform some additional cleanup and install link:deploy/ros_entrypoint.bash[] as entrypoint script on top of the `industrial_ci` image
= GitLab CI templates
Templates for GitLab Continuous Integration are provided in the folder link:ci-templates[]. These can be included from any repo by using `include:project`:
```yml
include::examples/simple_include.yml[]
```
== Core Pipeline
The Core pipeline, defined in link:ci-templates/core.yml[], has the following structure:
- Stage: `build`
* Check python syntax
* `.industrial_ci` template (see https://github.com/ros-industrial/industrial_ci[the industrial_ci repo]), which can be used to define jobs that build `ROS` packages
** Needs the `ROS_DISTRO` variable to be defined
** If the package has `.rosinstall` dependencies, they can be installed using the variable `UPSTREAM_WORKSPACE`
** Uses `flexbotics-base-devel:${ROS_DISTRO}` as a starting image
** Runs link:scripts/ci_run_entry_points.sh[] in the `AFTER_SETUP_TARGET_WORKSPACE` stage, which in turn finds and runs every `ci_entry_script.bash` script found in the target repo.
* `.industrial_ci_deploy` template, which:
** Runs `industrial_ci` by extending `.industrial_ci`
** Runs some cleanup in the `industrial_ci` context (e.g. delete sources)
** Commits image used by `industrial_ci`
** Builds deployment image on top of it and push it to our registry
- Stage: `.post`
* Check `bash`/`sh` script syntax
* Check Markdown and AsciiDoc syntax
* Check files have no trailing whitespace and are `UTF-8` encoded
* Check that `C++` files follow this link:clang-format[]
It is important to note that both templates set the variable `GIT_LFS_SKIP_SMUDGE`, which means that when the repositories are cloned/fetched, the files hosted using Git LFS will not be downloaded. An example on how to explicitely fetch the files from LFS can be found in the https://git.code.tecnalia.com/tecnalia_robotics/common_config/blob/e93dbe6379d94e6a895a33c59bf17ccab26eacf9/.gitlab-ci.yml#L132[common_config repository].
== Manual Jobs
Using the templates defined by the core pipeline, one can easily define jobs to build the packages in the repo.
```yml
include::examples/manual_job.yml[]
```
More examples can be found in link:ci-templates/examples[].
== Auto Rules
In the link:ci-templates/auto-rules[] folder, automatic pipelines are defined that will try to detect the ROS distro from the branch name and create jobs.
For example, if the branch starts with `noetic-` it will build for noetic.
If the branch doesn't start with any ROS distro, it will build the default distro, which can be specified with the variable `DEFAULT_DISTRO`.
For convenience, some templates are provided that already set this variable.
If your repo needs to uses `.rosinstall`, you can use the templates in the link:ci-templates/auto-rules/with-rosinstall[] folder.
The auto rules also allow for using variables to explicitely activate each job:
```yml
include::examples/build_vars.yml[]
```
include : ci-templates/auto-rules/no-default.yml
variables:
DEFAULT_DISTRO: kinetic
\ No newline at end of file
include : ci-templates/auto-rules/no-default.yml
variables:
DEFAULT_DISTRO: melodic
\ No newline at end of file
include : ci-templates/core.yml
workflow:
rules:
- if: $CI_COMMIT_BRANCH && $CI_COMMIT_REF_NAME =~ /^kinetic-.*/
variables:
DEFAULT_DISTRO: "kinetic"
- if: $CI_COMMIT_BRANCH && $CI_COMMIT_REF_NAME =~ /^melodic-.*/
variables:
DEFAULT_DISTRO: "melodic"
- if: $CI_COMMIT_BRANCH && $CI_COMMIT_REF_NAME =~ /^noetic-.*/
variables:
DEFAULT_DISTRO: "noetic"
- if: $CI_COMMIT_TAG && $CI_COMMIT_REF_NAME =~ /^kinetic-.*/
variables:
DEFAULT_DISTRO: "kinetic"
DEPLOY: "true"
- if: $CI_COMMIT_TAG && $CI_COMMIT_REF_NAME =~ /^melodic-.*/
variables:
DEFAULT_DISTRO: "melodic"
DEPLOY: "true"
- if: $CI_COMMIT_TAG && $CI_COMMIT_REF_NAME =~ /^noetic-.*/
variables:
DEFAULT_DISTRO: "noetic"
DEPLOY: "true"
- if: $CI_COMMIT_TAG
variables:
DEPLOY: "true"
- if: $CI_COMMIT_BRANCH
industrial_ci_kinetic:
extends: .industrial_ci
variables:
ROS_DISTRO: kinetic
rules:
- if: $DEPLOY
when: never
- if: $DEFAULT_DISTRO == "kinetic"
- if: $BUILD_KINETIC
industrial_ci_melodic:
extends: .industrial_ci
variables:
ROS_DISTRO: melodic
rules:
- if: $DEPLOY
when: never
- if: $DEFAULT_DISTRO == "melodic"
- if: $BUILD_MELODIC
industrial_ci_noetic:
extends: .industrial_ci
variables:
ROS_DISTRO: noetic
rules:
- if: $DEPLOY
when: never
- if: $DEFAULT_DISTRO == "noetic"
- if: $BUILD_NOETIC
industrial_kinetic_deploy:
extends:
- industrial_ci_kinetic
- .industrial_ci_deploy
rules:
- if: $DEPLOY && $DEFAULT_DISTRO == "kinetic"
- if: $DEPLOY && $BUILD_KINETIC
industrial_melodic_deploy:
extends:
- industrial_ci_melodic
- .industrial_ci_deploy
rules:
- if: $DEPLOY && $DEFAULT_DISTRO == "melodic"
- if: $DEPLOY && $BUILD_MELODIC
industrial_noetic_deploy:
extends:
- industrial_ci_noetic
- .industrial_ci_deploy
rules:
- if: $DEPLOY && $DEFAULT_DISTRO == "noetic"
- if: $DEPLOY && $BUILD_NOETIC
include : ci-templates/auto-rules/no-default.yml
variables:
DEFAULT_DISTRO: noetic
\ No newline at end of file
include : ci-templates/auto-rules/with-rosinstall/no-default.yml
variables:
DEFAULT_DISTRO: kinetic
\ No newline at end of file
include : ci-templates/auto-rules/with-rosinstall/no-default.yml
variables:
DEFAULT_DISTRO: melodic
\ No newline at end of file
include : ci-templates/auto-rules/no-default.yml
.industrial_ci:
variables:
UPSTREAM_WORKSPACE: .rosinstall
\ No newline at end of file
include : ci-templates/auto-rules/with-rosinstall/no-default.yml
variables:
DEFAULT_DISTRO: noetic
\ No newline at end of file
image: tecnalia-docker-dev.artifact.tecnalia.com/docker:git
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
variables:
TMPDIR: /builds/${CI_PROJECT_NAMESPACE}
GIT_LFS_SKIP_SMUDGE: 1 # Avoid fetching the files from LFS when doing git fetch
services:
- name: tecnalia-docker-dev.artifact.tecnalia.com/docker:dind
alias: docker
stages:
- build
before_script:
- apk add --update bash coreutils tar wget
- docker login tecnalia-docker-dev.artifact.tecnalia.com -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
include :
- ci-templates/syntax-check.yml
- ci-templates/industrial-ci-templates.yml
default:
tags:
- docker
\ No newline at end of file
include:
- project: tecnalia_robotics-public/gitlab_templates
file: ci-templates/auto-rules/no-default.yml
variables:
BUILD_KINETIC: 1
BUILD_MELODIC: 1
BUILD_NOETIC: 1
include:
- project: tecnalia_robotics-public/gitlab_templates
file: ci-templates/core.yml
industrial_ci_kinetic:
extends: .industrial-ci
variables:
ROS_DISTRO: kinetic
UPSTREAM_WORKSPACE: .rosinstall
\ No newline at end of file
include:
- project: tecnalia_robotics-public/gitlab_templates
file: ci-templates/core.yml
\ No newline at end of file
.industrial_ci:
stage: build
before_script:
- apk add --update bash coreutils tar
- git clone --quiet --depth 1 https://github.com/ros-industrial/industrial_ci.git .ci_config
- docker login ${ARTIFACT_DOCKER_URL} -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
- docker login tecnalia-docker-dev.artifact.tecnalia.com -u ${ARTIFACT_CI_USER} -p ${ARTIFACT_CI_TOKEN}
script: .ci_config/gitlab.sh
variables:
DOCKER_IMAGE: "${ARTIFACT_DOCKER_URL}/flexbotics-base-devel:${ROS_DISTRO}"
ADDITIONAL_DEBS: curl
PARALLEL_BUILDS: 2 # keep this for now, since there seems to be memory limit issues in the ci VM
AFTER_SETUP_TARGET_WORKSPACE: "rosenv && bash <(curl -Ls https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/ci_run_entry_points.sh) $$current_ws"
CMAKE_ARGS: -DCMAKE_CXX_FLAGS=-Wno-ignored-attributes -Wno-int-in-bool-context
.industrial_ci_deploy:
extends: .industrial_ci
variables:
AFTER_SCRIPT: "wget -q -O - https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/pre-deploy-cleanup.bash | bash"
DOCKER_COMMIT: industrial_ci_image
script:
- .ci_config/gitlab.sh
- cd $(mktemp -d)
- wget https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/-/archive/master/gitlab_templates-master.zip
- unzip gitlab_templates-master.zip && cd gitlab_templates-master/deploy
- cd base
- chmod a+x ros_entrypoint.bash
- docker build -t ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} .
- docker push ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}
- cd ..
- cd dev
- docker build --build-arg APPLICATION_IMAGE=${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} -t ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}-dev .
- docker push ${ARTIFACT_DOCKER_URL}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME}-dev
- cd ..
rules:
- if: $DEPLOY
##########################################################
## Check formating of C and C++ files using clang-format
##########################################################
clang_format:
stage: .post
before_script:
- apk add --update bash coreutils tar wget
- git clone --quiet --depth 1 https://github.com/ros-industrial/industrial_ci.git .ci_config -b legacy
- wget https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/clang-format -O .clang-format
script: .ci_config/gitlab.sh
variables:
ROS_DISTRO: kinetic
CLANG_FORMAT_CHECK: file
CLANG_FORMAT_VERSION: "3.8"
when: always
##########################################################
## Simple check for basic Python syntax errors; this is much less thorough than
## other options like pylint, but much faster and less strict
##########################################################
python_syntax:
before_script:
- apk add --update python2
stage: build
script: python -m compileall -q .
when: always
##########################################################
## Check for errors in bash/sh scripts
## Uses https://github.com/koalaman/shellcheck
##########################################################
bash_syntax:
before_script:
- apk add --update shellcheck
stage: .post
script:
- RET=0
- find . -type f -name '*.sh' -exec shellcheck -s sh {} + || RET=1
- find . -type f -name '*.bash' -exec shellcheck -s bash {} + || RET=1
- exit $RET
when: always
##########################################################
## Check for errors in markdown files
## Uses https://github.com/cytopia/awesome-ci
## Disables the line length rule with --custom="-r ..."
## See other rules that can be configured in
## https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
##########################################################
markdown_syntax:
stage: .post
script: docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci syntax-markdown --path=/ac --extension=md --ignore=.ci_config --custom="-r ~MD013,~MD014"
when: always
##########################################################
## Check for various syntax issues in files; currently
## trailing white spaces
## utf8 formatting
## Uses https://github.com/cytopia/awesome-ci
##########################################################
file_syntax:
stage: .post
script:
- RET=0
- docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci file-trailing-space --path=/ac --extension=py,txt,cpp,h,md,sh,bash,xml,launch --ignore=.ci_config || RET=1
- docker run -v ${PWD}:/ac tecnalia-docker-dev.artifact.tecnalia.com/cytopia/awesome-ci file-utf8 --path=/ac --extension=py,txt,cpp,h,md,sh,bash,xml,launch --ignore=.ci_config || RET=1
- exit $RET
when: always
##########################################################
## Check for errors in Asciidoctor files
## Could not find a proper linter for Asciidoctor format,
## so this is a custom-made "dirty" script
##########################################################
adoc_syntax:
stage: .post
image: tecnalia-docker-dev.artifact.tecnalia.com/alpine
before_script:
- apk add --update curl asciidoctor bash
script:
- curl -Ls https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/scripts/asciidoctor_syntax_check.bash | bash -s -- .
when: always
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment