diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 359c58968b128ab6a8e042c920da771253235b4e..391afe1b0cce65bd4d29734d34e8fae853075e2e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,14 +2,6 @@ variables: SECURE_ANALYZERS_PREFIX: registry.gitlab.com/gitlab-org/security-products/analyzers DOCKER_IMAGE_SHA: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}" -workflow: - rules: - - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - - if: '$CI_PIPELINE_SOURCE == "schedule"' - - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH != "develop" && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' - when: never - - if: '$CI_COMMIT_BRANCH' - stages: - .pre - build @@ -19,15 +11,22 @@ stages: - deploy - .post +workflow: + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + when: never + - when: always + default: before_script: - git config --global url."https://$GO_MODULES_USER:$GO_MODULES_ACCESS_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de" include: - - local: '/build/ci/.code-quality-ci.yml' - - local: '/build/ci/.security-and-compliance-ci.yml' - - local: '/build/ci/.build-container.yml' - - local: '/build/ci/.test.yml' - - local: '/build/ci/.containerlab-ci.yml' - - local: '/build/ci/.uml-autogen-ci.yml' - - local: '/build/ci/.deploy-k8s.yml' + - local: '/.gitlab/ci/.build-container.yml' + - local: '/.gitlab/ci/.code-quality-ci.yml' + - local: '/.gitlab/ci/.security-and-compliance-ci.yml' + - local: '/.gitlab/ci/.test.yml' + - local: '/.gitlab/ci/.containerlab-ci.yml' + - local: '/.gitlab/ci/.integration-test.yml' + - local: '/.gitlab/ci/.uml-autogen-ci.yml' + - local: '/.gitlab/ci/.deploy-k8s.yml' diff --git a/build/ci/.build-container.yml b/.gitlab/ci/.build-container.yml similarity index 61% rename from build/ci/.build-container.yml rename to .gitlab/ci/.build-container.yml index 4631379e13ce426f68e53e45a0cbededb75f6d37..85c948fd1dbcc61b041e6320ab11864be283a4ff 100644 --- a/build/ci/.build-container.yml +++ b/.gitlab/ci/.build-container.yml @@ -7,32 +7,23 @@ build-docker: stage: build allow_failure: false needs: [] + variables: + TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_BRANCH tags: - shell-builder rules: - - if: $CI_COMMIT_BRANCH == "develop" && $CI_NIGHTLY == null - variables: - TAG: $CI_REGISTRY_IMAGE:develop - BUILDARGS: -race - - if: $CI_NIGHTLY == "develop" - variables: - TAG: $CI_REGISTRY_IMAGE:nightly-develop - BUILDARGS: -race - - if: $CI_NIGHTLY == "mainline" - variables: - TAG: $CI_REGISTRY_IMAGE:nightly - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - variables: - TAG: $CI_REGISTRY_IMAGE:merge-request - BUILDARGS: -race - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_NIGHTLY == null + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH variables: TAG: $CI_REGISTRY_IMAGE:latest - - if: '$CI_COMMIT_BRANCH' + - if: $CI_COMMIT_BRANCH == "develop" variables: - TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_BRANCH - + TAG: $CI_REGISTRY_IMAGE:develop + BUILDARGS: -race + - when: always + - variables: + TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME + script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build --build-arg GITLAB_USER=$GO_MODULES_USER --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN --build-arg BUILDARGS=$BUILDARGS -t $DOCKER_IMAGE_SHA . diff --git a/.gitlab/ci/.code-quality-ci.yml b/.gitlab/ci/.code-quality-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..3236cb127f9c0073307f045f41f6313297622e88 --- /dev/null +++ b/.gitlab/ci/.code-quality-ci.yml @@ -0,0 +1,11 @@ +code-quality: + image: golangci/golangci-lint:latest-alpine + stage: test + script: + # writes golangci-lint output to gl-code-quality-report.json + - golangci-lint run --config .gitlab/ci/.golangci-config/.golangci.yml --out-format code-climate | tee gl-code-quality-report.json + artifacts: + reports: + codequality: gl-code-quality-report.json + paths: + - gl-code-quality-report.json diff --git a/build/ci/.containerlab-ci.yml b/.gitlab/ci/.containerlab-ci.yml similarity index 63% rename from build/ci/.containerlab-ci.yml rename to .gitlab/ci/.containerlab-ci.yml index db038c76a60d1f4f5d396f551dd30df08c95aabf..0c2c18c7bee3cc486eabf75020c92293876ebe70 100644 --- a/build/ci/.containerlab-ci.yml +++ b/.gitlab/ci/.containerlab-ci.yml @@ -11,7 +11,7 @@ variables: - shell before_script: - cd ${CLAB_DIR} - - export PATH="${PATH}:${CI_PROJECT_DIR}/build/ci/scripts" + - export PATH="${PATH}:${CI_PROJECT_DIR}/.gitlab/ci/scripts" - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY - echo ${GOSDN_CONTAINER_IMAGE} - docker pull ${GOSDN_CONTAINER_IMAGE} @@ -21,7 +21,7 @@ variables: image: alpine:latest stage: build before_script: - - export PATH="${PATH}:${CI_PROJECT_DIR}/build/ci/scripts" + - export PATH="${PATH}:${CI_PROJECT_DIR}/.gitlab/ci/scripts" - firstOctet=$(generate_octet.sh $CI_COMMIT_SHA) - secondOctet=$(generate_octet.sh $CI_PIPELINE_ID) - export CLAB_MGMT_SUBNET="172.$firstOctet.$secondOctet.0/24" @@ -43,10 +43,6 @@ containerlab:template:integration: extends: .containerlab_template variables: CLAB_TEMPLATE: "${CI_PROJECT_DIR}/test/containerlab/int01.clab.tmpl.yml" - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop') - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_NIGHTLY containerlab:deploy:integration: @@ -64,16 +60,13 @@ containerlab:deploy:integration: artifacts: reports: dotenv: ${CI_PROJECT_DIR}/build.env - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop') - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_NIGHTLY containerlab:destroy: stage: .post tags: - shell + needs: ["containerlab:deploy:integration", "integration-test:nucleus", "integration-test:api", "containerlab:template:integration"] before_script: - cd ${CLAB_DIR} script: @@ -81,36 +74,30 @@ containerlab:destroy: - docker volume rm -f ${CLAB_NAME}-volume - docker image rm -f ${GOSDN_CONTAINER_IMAGE} allow_failure: true - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop') - when: always - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - when: always - - if: $CI_NIGHTLY - when: always + when: always -containerlab:template:develop: - extends: .containerlab_template - variables: - CLAB_NAME: "dev" - CLAB_TEMPLATE: "${CI_PROJECT_DIR}/test/containerlab/dev.clab.tmpl.yml" - GOSDN_CONTAINER_IMAGE: "$CI_REGISTRY_IMAGE:develop" - rules: - - if: $CI_COMMIT_BRANCH == 'develop' && $CI_NIGHTLY == null - - -containerlab:deploy:develop: - extends: - - .containerlab_deploy - needs: ["containerlab:template:develop", "build-docker"] - variables: - CLAB_NAME: "dev" - GOSDN_CONTAINER_IMAGE: "$CI_REGISTRY_IMAGE:develop" - script: - - sudo containerlab deploy --topo ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml --reconfigure - rules: - - if: $CI_COMMIT_BRANCH == 'develop' && $CI_NIGHTLY == null +#containerlab:template:develop: +# extends: .containerlab_template +# variables: +# CLAB_NAME: "dev" +# CLAB_TEMPLATE: "${CI_PROJECT_DIR}/test/containerlab/dev.clab.tmpl.yml" +# GOSDN_CONTAINER_IMAGE: "$CI_REGISTRY_IMAGE:develop" +# rules: +# - if: $CI_COMMIT_BRANCH == 'develop' && $CI_NIGHTLY == null +# +# +#containerlab:deploy:develop: +# extends: +# - .containerlab_deploy +# needs: ["containerlab:template:develop", "build-docker"] +# variables: +# CLAB_NAME: "dev" +# GOSDN_CONTAINER_IMAGE: "$CI_REGISTRY_IMAGE:develop" +# script: +# - sudo containerlab deploy --topo ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml --reconfigure +# rules: +# - if: $CI_COMMIT_BRANCH == 'develop' && $CI_NIGHTLY == null containerlab:clean: diff --git a/build/ci/.deploy-k8s.yml b/.gitlab/ci/.deploy-k8s.yml similarity index 100% rename from build/ci/.deploy-k8s.yml rename to .gitlab/ci/.deploy-k8s.yml diff --git a/build/ci/.golangci-config/.golangci.yml b/.gitlab/ci/.golangci-config/.golangci.yml similarity index 89% rename from build/ci/.golangci-config/.golangci.yml rename to .gitlab/ci/.golangci-config/.golangci.yml index e9ea64defdbb908d5d1892ff7f8351aaa6cc7a6a..1a2b9183717c0c1a95b8782e15a5189ee2059c10 100644 --- a/build/ci/.golangci-config/.golangci.yml +++ b/.gitlab/ci/.golangci-config/.golangci.yml @@ -27,13 +27,9 @@ linters: enable: - gofmt - goimports + - revive - gocyclo - govet - - unused - - staticcheck - - typecheck - - revive - - whitespace issues: exclude-use-default: false max-issues-per-linter: 0 diff --git a/build/ci/.golangci-config/.runlint.sh b/.gitlab/ci/.golangci-config/.runlint.sh similarity index 100% rename from build/ci/.golangci-config/.runlint.sh rename to .gitlab/ci/.golangci-config/.runlint.sh diff --git a/.gitlab/ci/.integration-test.yml b/.gitlab/ci/.integration-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..49ce918e3f88db7fff8fccbdd156c9f8f828d817 --- /dev/null +++ b/.gitlab/ci/.integration-test.yml @@ -0,0 +1,31 @@ +.integration-test: &integration-test + image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} + stage: integration-test + needs: + - job: "containerlab:deploy:integration" + variables: + GOSDN_LOG: "nolog" + GOSDN_TEST_API_ENDPOINT: "141.100.70.178:${GOSDN_GRPC_PORT}" + GOSDN_TEST_ENDPOINT: "141.100.70.178:${CEOS1_PORT}" + GOSDN_TEST_USER: "admin" + GOSDN_TEST_PASSWORD: "admin" + + +integration-test:nucleus: + <<: *integration-test + script: + - ${CI_PROJECT_DIR}/.gitlab/ci/scripts/wait-for-it.sh ${GOSDN_TEST_ENDPOINT} -s -t 180 -- echo "CEOS is up" + - sleep 30 + - cd ./test/integration + - go test -race -v -run TestGnmi_SetIntegration + - go test -race -v -run TestGnmi_GetIntegration + - go test -race -v -run TestGnmi_SubscribeIntegration + - go test -race -v -run TestGnmi_CapabilitiesIntegration + +integration-test:api: + <<: *integration-test + variables: + K8S_OP: "getenv" + script: + - cd ./api + - go test -race -v -run TestApiIntegration diff --git a/build/ci/.security-and-compliance-ci.yml b/.gitlab/ci/.security-and-compliance-ci.yml similarity index 100% rename from build/ci/.security-and-compliance-ci.yml rename to .gitlab/ci/.security-and-compliance-ci.yml diff --git a/.gitlab/ci/.test.yml b/.gitlab/ci/.test.yml new file mode 100644 index 0000000000000000000000000000000000000000..b8cbe03a7fd44af3bc9ba4513e1e99c7c37416ac --- /dev/null +++ b/.gitlab/ci/.test.yml @@ -0,0 +1,19 @@ +.test: &test + image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} + stage: test + variables: + GOSDN_LOG: "nolog" + GOSDN_CHANGE_TIMEOUT: "100ms" + +unit-test: + script: + - go test -short -race $(go list ./... | grep -v /forks/ | grep -v /mocks ) -v -coverprofile=coverage.out + after_script: + - go tool cover -func=coverage.out + <<: *test + +controller-test: + image: golang:1.16 + script: + - go test -race -v -run TestRun + <<: *test diff --git a/build/ci/.uml-autogen-ci.yml b/.gitlab/ci/.uml-autogen-ci.yml similarity index 100% rename from build/ci/.uml-autogen-ci.yml rename to .gitlab/ci/.uml-autogen-ci.yml diff --git a/build/ci/scripts/docker_host_port b/.gitlab/ci/scripts/docker_host_port similarity index 100% rename from build/ci/scripts/docker_host_port rename to .gitlab/ci/scripts/docker_host_port diff --git a/build/ci/scripts/generate_octet.sh b/.gitlab/ci/scripts/generate_octet.sh similarity index 93% rename from build/ci/scripts/generate_octet.sh rename to .gitlab/ci/scripts/generate_octet.sh index 6cad5addc30badad963ee2e9d6dfe4f96fdc6aad..9d5dce7312a7ab516bd01d208ac961d5e23fe955 100755 --- a/build/ci/scripts/generate_octet.sh +++ b/.gitlab/ci/scripts/generate_octet.sh @@ -10,4 +10,4 @@ decimal_value=${decimal_value/-/} octet=$(((decimal_value % 255))) -echo -n $octet \ No newline at end of file +echo -n $octet diff --git a/build/ci/scripts/wait-for-it.sh b/.gitlab/ci/scripts/wait-for-it.sh similarity index 100% rename from build/ci/scripts/wait-for-it.sh rename to .gitlab/ci/scripts/wait-for-it.sh diff --git a/build/ci/.code-quality-ci.yml b/build/ci/.code-quality-ci.yml deleted file mode 100644 index 3e5c205d954965a11da9e0961b1fc6aad8639c14..0000000000000000000000000000000000000000 --- a/build/ci/.code-quality-ci.yml +++ /dev/null @@ -1,15 +0,0 @@ -code-quality: - image: golangci/golangci-lint:v1.42-alpine - stage: test - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_COMMIT_BRANCH == "develop" - script: - # writes golangci-lint output to gl-code-quality-report.json - - golangci-lint run --config build/ci/.golangci-config/.golangci.yml --out-format code-climate | tee gl-code-quality-report.json - artifacts: - reports: - codequality: gl-code-quality-report.json - paths: - - gl-code-quality-report.json diff --git a/build/ci/.test.yml b/build/ci/.test.yml deleted file mode 100644 index 9531c7717b98bc8d4da7f7aa748247827ce54c53..0000000000000000000000000000000000000000 --- a/build/ci/.test.yml +++ /dev/null @@ -1,61 +0,0 @@ -.integration-test: &integration-test - image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} - stage: integration-test - needs: - - job: "containerlab:deploy:integration" - variables: - GOSDN_LOG: "nolog" - GOSDN_TEST_API_ENDPOINT: "141.100.70.178:${GOSDN_GRPC_PORT}" - GOSDN_TEST_ENDPOINT: "141.100.70.178:${CEOS1_PORT}" - GOSDN_TEST_USER: "admin" - GOSDN_TEST_PASSWORD: "admin" - rules: - - if: $CI_NIGHTLY - - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH - - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH - allow_failure: true - -integration-test:nucleus: - <<: *integration-test - script: - - ${CI_PROJECT_DIR}/build/ci/scripts/wait-for-it.sh ${GOSDN_TEST_ENDPOINT} -s -t 180 -- echo "CEOS is up" - - cd ./test/integration - - go test -race -v -run TestGnmi_SetIntegration - - go test -race -v -run TestGnmi_GetIntegration - - go test -race -v -run TestGnmi_SubscribeIntegration - - go test -race -v -run TestGnmi_CapabilitiesIntegration - -integration-test:api: - <<: *integration-test - variables: - K8S_OP: "getenv" - script: - - cd ./api - - go test -race -v -run TestApiIntegration - -.test: &test - image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} - stage: test - allow_failure: true - variables: - GOSDN_LOG: "nolog" - GOSDN_CHANGE_TIMEOUT: "100ms" - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH - - if: $CI_NIGHTLY - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH - allow_failure: true - -unit-test: - script: - - go test -short -race $(go list ./... | grep -v /forks/ | grep -v /mocks ) -v -coverprofile=coverage.out - after_script: - - go tool cover -func=coverage.out - <<: *test - -controller-test: - image: golang:1.16 - script: - - go test -race -v -run TestRun - <<: *test diff --git a/build/ci/scripts/generate_octet.bash b/build/ci/scripts/generate_octet.bash deleted file mode 100755 index 8becfc98b0c47025b445f7216ee935d37b2e4c88..0000000000000000000000000000000000000000 --- a/build/ci/scripts/generate_octet.bash +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -input=$1 -#trailing_backspace=$2 - -hashed_value=$(echo $input | sha256sum | awk '{print $1}' ) - -decimal_value=$((16#$hashed_value)) -decimal_value=${decimal_value/-/} - -octet=$(((decimal_value % 255))) - -echo -n $octet \ No newline at end of file