Skip to content
Snippets Groups Projects
.gitlab-ci.yml 7.78 KiB
Newer Older
Varac's avatar
Varac committed
include:
Mart van Santen's avatar
Mart van Santen committed
  - remote: https://open.greenhost.net/stackspin/stackspin/raw/main/.gitlab/ci_templates/kaniko.yml
  - remote: https://open.greenhost.net/stackspin/stackspin/-/raw/main/.gitlab/ci_templates/helm_package.yml
  - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
Mark's avatar
Mark committed
stages:
Mart van Santen's avatar
Mart van Santen committed
  - build
Mart van Santen's avatar
Mart van Santen committed
  - lint
  # TODO: Re-enable after fixing #73
Mart van Santen's avatar
Mart van Santen committed
  # - application-test
  - integration-test
  - lint-helm-chart
  - package-helm-chart
  - release-helm-chart

variables:
  CHART_NAME: single-sign-on
  CHART_DIR: helmchart/single-sign-on/
Mark's avatar
Mark committed

.trigger_test_rules:
  rules:
    - changes:
        - test/lint/pylint/Dockerfile
        - test/lint/pylint/requirements.txt
        - .gitlab-ci.yml
        - login/**/*
        - login/*
        - .gitlab/ci/**/*

# Stackspin login panel
login:
  stage: build
  needs: []
  variables:
Mart van Santen's avatar
Mart van Santen committed
    KANIKO_CONTEXT: "login"
    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
Mart van Santen's avatar
Mart van Santen committed
  before_script:
    - ls -l ${CI_PROJECT_DIR}/${KANIKO_CONTEXT:-.}/Dockerfile
  extends:
    - .kaniko_build
    - .trigger_test_rules
#  TODO: We'll re-implement this test in https://open.greenhost.net/stackspin/single-sign-on/-/issues/133
#  # For full integration testing we need to build the full stack in CI/CD
#  #
#  # - mariadb     : Backend database, the Dockerfile is based on the upstream
#  #                 with a small addition to create inital databases
#  # - kratos      : Identity manager, based on the upstream. We set the DSN
#  #                 in the Dockerimage, as its different from hydra's DSN,
#  #                 however, gitlab-ci will apply the same enviroment for all
#  #                 services.
#  # - hydra       : See above, the identiy provider
#  # - login       : Our login panel
#  # - sso_testapp : A test app which implements OIDC for testing
#  # - behave      : Image to do behave testing
#  # Build our own mariadb image, which is based on upstream
#  mariadb:
#    stage: build
#    needs: []
#    variables:
#      KANIKO_CONTEXT: ".gitlab/ci/mariadb"
#      KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
#    extends:
#      - .kaniko_build
#      - .trigger_test_rules
#
#  # Build our own kratos image, which is based on upstream
#  kratos:
#    stage: build
#    needs: []
#    variables:
#      KANIKO_CONTEXT: ".gitlab/ci/kratos"
#      KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
#    extends:
#      - .kaniko_build
#      - .trigger_test_rules
#
#  # Build our own hydra image, which is based on upstream
#  hydra:
#    stage: build
#    needs: []
#    variables:
#      KANIKO_CONTEXT: ".gitlab/ci/hydra"
#      KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
#    extends:
#      - .kaniko_build
#      - .trigger_test_rules
#
#  # A Fake SSO app to test the behaviour
#  sso_testapp:
#    stage: build
#    variables:
#      KANIKO_CONTEXT: "test/sso_testapp/"
#      KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
#    extends:
#      - .kaniko_build
#      - .trigger_test_rules
#
#  # Image to test behaviour (web)
#  behave:
#    stage: build
#    variables:
#      KANIKO_CONTEXT: "test/behave"
#      KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
#    extends:
#      - .kaniko_build
#      - .trigger_test_rules
#
#  behave-integration:
#    stage: integration-test
#    services:
#      - name: ${CI_REGISTRY_IMAGE}/mariadb:${CI_COMMIT_REF_SLUG}
#        alias: mariadb
#      - name: ${CI_REGISTRY_IMAGE}/kratos:${CI_COMMIT_REF_SLUG}
#        alias: kratosmigrate
#        command:
#          - /bin/sh
#          - -c
#          - |
#            sleep 60
#            migrate sql -e -y
#      - name: ${CI_REGISTRY_IMAGE}/kratos:${CI_COMMIT_REF_SLUG}
#        alias: kratos
#        command:
#          - /bin/sh
#          - -c
#          - |
#            sleep 120
#            serve --config /etc/config/kratos.yaml
#      - name: ${CI_REGISTRY_IMAGE}/hydra:${CI_COMMIT_REF_SLUG}
#        alias: hydramigrate
#        command:
#          - /bin/sh
#          - -c
#          - |
#            sleep 60
#            migrate sql -e -y
#      - name: ${CI_REGISTRY_IMAGE}/hydra:${CI_COMMIT_REF_SLUG}
#        alias: hydra
#        command:
#          - /bin/sh
#          - -c
#          - |
#            sleep 120
#            serve all --dangerous-force-http --dangerous-allow-insecure-redirect-urls http://oidc:5000/login
#      - name: ${CI_REGISTRY_IMAGE}/login:${CI_COMMIT_REF_SLUG}
#        alias: oidc
#      - name: ${CI_REGISTRY_IMAGE}/sso_testapp:${CI_COMMIT_REF_SLUG}
#        alias: ssoapp
#    variables:
#      # Feature Flag FF_NETWORK_PER_BUILD Enables creation of a docker network per build
#      # with the docker executor of the gitlab-runner. This is required for service
#      # interconnection. Requires gitlab-runner v12.9.0
#      FF_NETWORK_PER_BUILD: 1
#      OAUTHLIB_INSECURE_TRANSPORT: "true"
#      # For hydra
#      URLS_SELF_ISSUER: http://hydra:4445/
#      URLS_CONSENT: http://oidc:5000/login
#      URLS_LOGIN: http://oidc:5000/consent
#      SECRETS_SYSTEM: RandomSecretForTesting
#      # MariaDB image needs root user password, additional credentials are
#      # created from `.gitlab/ci/mariadb/setup.sql` during initialization
#      MYSQL_ROOT_PASSWORD: stackspin
#      # For Login image
#      FLASK_RUN_HOST: "0.0.0.0"
#      FLASK_RUN_PORT: "5000"
#      PUBLIC_URL: "http://localhost:5000/"
#      HYDRA_ADMIN_URL: "http://hydra:4445"
#      KRATOS_PUBLIC_URL: "http://kratos:4433"
#      KRATOS_ADMIN_URL: "http://kratos:4434"
#      DATABASE_URL: "mysql+pymysql://stackspin:stackspin@localhost/stackspin?charset=utf8mb4"
#      APP_SETTINGS: "config.DevelopmentConfig"
#      # General flask
#      DEBUG: "true"
#      FLASK_ENV: "development"
#      # For sso test app
#      BASE_URL: "http://hydra:4444/"
#      KEY: "testapp"
#      SECRET: "secret"
#    image: ${CI_REGISTRY_IMAGE}/behave:${CI_COMMIT_REF_SLUG}
#    script:
#      # Download retry-script from main stackspin repo
#      - curl -sS https://open.greenhost.net/stackspin/stackspin/-/raw/main/.gitlab/ci_scripts/retry_cmd_until_success.sh -o retry_cmd_until_success.sh
#      - chmod +x retry_cmd_until_success.sh
#      # Try several times to connect to hydra, kratos and oidc
#      - ./retry_cmd_until_success.sh 10 10 curl -sS http://hydra:4445/health/alive
#      - ./retry_cmd_until_success.sh 10 10 curl -sS http://kratos:4433/health/alive
#      - ./retry_cmd_until_success.sh 10 10 curl -sS http://oidc:5000/status
#      # Steps to do:
#      # - create user & access roles & grant access
#      # - add client applition ID + key for testing
#      # - test login etc
#
#    artifacts:
#      paths:
#        - test/integration_tests/test/behave/screenshots/
#      expire_in: 1 month
#      when: on_failure
#    extends:
#      - .trigger_test_rules
# login_test:
#   image: python:3.8
#   stage: unittest
#   needs: []
#   variables:
#     HYDRA_ADMIN_URL: http://localhost/ignored
#     KRATOS_PUBLIC_URL: http://localhost/ignored
#     PUBLIC_URL: http://localhost/ignored
#   cache:
#     paths:
#       - "$CI_PROJECT_DIR/pip-cache"
#     key: "$CI_PROJECT_ID"
#     before_script:
#       - cd login
#       - python -V
#       - pip install -r requirements.txt
#     script:
#       - pytest -v --cov=login --cov-report=term --cov-report=xml tests
#     artifacts:
#       reports:
#         cobertura: login/coverage.xml
#     coverage: '/^TOTAL.+?(\d+\%)$/'
Mart van Santen's avatar
Mart van Santen committed
pylint:
  stage: build
  variables:
    KANIKO_CONTEXT: "test/lint/pylint"
    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
  extends:
    - .kaniko_build
    - .trigger_test_rules
pylint-lint:
  stage: lint
  variables:
    GIT_STRATEGY: clone
    GIT_DEPTH: 0
    PYLINT_PLUGINS: "pylint_flask pylint_flask_sqlalchemy"
  image: ${CI_REGISTRY_IMAGE}/pylint:${CI_COMMIT_REF_SLUG}
    # Run darker with --diff command. This will throw exit code 1 if there are
    # lint errors, but a 0 if there are only formatting recommendations
    - darker -i -L pylint --diff --revision remotes/origin/main .
  extends:
    - .trigger_test_rules