Skip to content
This repository has been archived by the owner on Oct 11, 2024. It is now read-only.

Commit

Permalink
Add Gitlab CI (#1)
Browse files Browse the repository at this point in the history
  • Loading branch information
BrianSipos authored Sep 18, 2023
1 parent 6c5c8a8 commit 30707d2
Showing 1 changed file with 189 additions and 0 deletions.
189 changes: 189 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
##
## Copyright (c) 2023 The Johns Hopkins University Applied Physics
## Laboratory LLC.
##
## This file is part of the Asynchronous Network Managment System (ANMS).
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
## http://www.apache.org/licenses/LICENSE-2.0
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
## This work was performed for the Jet Propulsion Laboratory, California
## Institute of Technology, sponsored by the United States Government under
## the prime contract 80NM0018D0004 between the Caltech and NASA under
## subcontract 1658085.
##
default:
# All jobs run within a target-like environment
image: docker-remote.artifactory.jhuapl.edu/ubuntu:20.04

include:
# Run pipeline only on branches, not MRs
- template: 'Workflows/Branch-Pipelines.gitlab-ci.yml'
# auto-static-analysis
- template: Security/SAST.gitlab-ci.yml
- template: Code-Quality.gitlab-ci.yml

variables:
GIT_SUBMODULE_STRATEGY: recursive
DOCKER_BUILDKIT: 1
DEBIAN_FRONTEND: "noninteractive"
# for Python/PIP
PIP_CERT: /etc/ssl/certs/ca-certificates.crt
PIP_DEFAULT_TIMEOUT: "300"
# for Ruby/bolt
SSL_CERT_FILE: /etc/ssl/certs/ca-certificates.crt
# Project-spcific environment
XDG_CACHE_HOME: "$CI_PROJECT_DIR/.cache"
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"


stages:
- build
- test
- deploy

cache:
paths:
- .cache/pip

.prep-repos: &prep-repos |
# Use local repo mirrors
sed -i s#http://archive.ubuntu.com/ubuntu/#http://artifactory.jhuapl.edu/artifactory/ubuntu-main-remote/# /etc/apt/sources.list
sed -i s#http://security.ubuntu.com/ubuntu/#http://artifactory.jhuapl.edu/artifactory/ubuntu-security-remote/# /etc/apt/sources.list

.prep-install-ca: &prep-install-ca |
apt-get update && apt-get install -y ca-certificates curl
mkdir -p /usr/local/share/ca-certificates
curl -svL http://apllinuxdepot.jhuapl.edu/linux/APL-root-cert/JHUAPL-MS-Root-CA-05-21-2038-B64-text.cer -o /usr/local/share/ca-certificates/JHUAPL-MS-Root-CA-05-21-2038-B64-text.crt
update-ca-certificates

.prep-install-pip: &prep-install-pip |
apt-get update && apt-get install -y git python3 python3-venv python3-pip python3-wheel
pip3 config --global set global.index-url https://artifactory.jhuapl.edu/artifactory/api/pypi/python-remote/simple
pip3 install pip-tools
.prep-wheel-ace: &prep-wheel-ace |
pip3 wheel git+https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.jhuapl.edu/dtn/ace.git -w ./wheels --no-deps
git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.jhuapl.edu/dtn/adms.git tests/adms

build:
stage: build
needs: []
before_script:
- *prep-repos
- *prep-install-ca
- *prep-install-pip
- *prep-wheel-ace
script:
- pip3 install --find-links ./wheels .
- pip3 show -f anms-CAmp

unit-test:
stage: test
needs:
- build
allow_failure: true
before_script:
- *prep-repos
- *prep-install-ca
- *prep-install-pip
- *prep-wheel-ace
- pip-compile --find-links ./wheels --extra test pyproject.toml
- pip3 install --find-links ./wheels -r requirements.txt
script:
- PYTHONPATH=src python3 -m pytest --verbose --junitxml=testresults.xml --cov=camp tests
- coverage xml
coverage: /TOTAL\s+\d+\s+\d+\s+(\d+(?:.\d+)?)%/
artifacts:
when: always
reports:
junit: testresults.xml
coverage_report:
coverage_format: cobertura
path: coverage.xml

pylint:
stage: test
needs:
- build
allow_failure: true
before_script:
- *prep-repos
- *prep-install-ca
- *prep-install-pip
- *prep-wheel-ace
- pip-compile --find-links ./wheels --extra pylint pyproject.toml
- pip3 install --find-links ./wheels -r requirements.txt
script:
- |
export PYTHONPATH=src
FAIL_SRC=0
pylint --output-format=junit --output=pylint-src.xml src || FAIL_SRC=$?
FAIL_TESTS=0
pylint --output-format=junit --output=pylint-tests.xml tests --max-line-length=300 --disable missing-class-docstring,missing-function-docstring,duplicate-code,unbalanced-tuple-unpacking || FAIL_TESTS=$?
if [ $FAIL_SRC -ne 0 -o $FAIL_TESTS -ne 0 ]; then exit 1; fi
artifacts:
when: always
reports:
junit: "pylint-*.xml"

flake8:
stage: test
needs:
- build
allow_failure: true
before_script:
- *prep-repos
- *prep-install-ca
- *prep-install-pip
- *prep-wheel-ace
- pip-compile --find-links ./wheels --extra flake8 pyproject.toml
- pip3 install --find-links ./wheels -r requirements.txt
script:
- |
FAIL_SRC=0
flake8 --format=junit-xml --output-file=flake8-src.xml src || FAIL_SRC=$?
FAIL_TESTS=0
flake8 --format=junit-xml --output-file=flake8-tests.xml tests --max-line-length=300 || FAIL_TESTS=$?
if [ $FAIL_SRC -ne 0 -o $FAIL_TESTS -ne 0 ]; then exit 1; fi
artifacts:
when: always
reports:
junit: "flake8-*.xml"

docs:
stage: build
needs: []
before_script:
- *prep-repos
- *prep-install-ca
- *prep-install-pip
- *prep-wheel-ace
- pip-compile --find-links ./wheels --extra docs pyproject.toml
- pip3 install --find-links ./wheels -r requirements.txt
script:
- ./build_docs.sh
- mv docs/_build/html public
artifacts:
paths:
- "public"

# Job name to use Gitlab Pages feature
pages:
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
needs:
- job: docs
artifacts: true
script:
- "true" # Just a copy from job:docs
artifacts:
paths:
- "public"

0 comments on commit 30707d2

Please sign in to comment.