Skip to content
Snippets Groups Projects
.gitlab-ci.yml 7.54 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
Mark's avatar
Mark committed
stages:
Mart van Santen's avatar
Mart van Santen committed
  #- build
  - build-test-images
  # TODO: Re-enable after fixing #82
  # - lint
  #- application-test
  - integration-test
Mark's avatar
Mark committed

#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+\%)$/'
login:
  stage: build
  needs: []
  extends: .kaniko_build
  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:
Mart van Santen's avatar
Mart van Santen committed
    - ls -l ${CI_PROJECT_DIR}/${KANIKO_CONTEXT:-.}/Dockerfile 
  only:
    changes:
      - login/**/*
      - .gitlab-ci.yml


# A Fake SSO app to test the behaviour
Mart van Santen's avatar
Mart van Santen committed
sso_testapp:
  stage: build-test-images
  variables:
Mart van Santen's avatar
Mart van Santen committed
    KANIKO_CONTEXT: "test/sso_testapp/"
    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
  extends: .kaniko_build
  only:
    changes:
Mart van Santen's avatar
Mart van Santen committed
      - test/sso_testapp/**/*
      - .gitlab-ci.yml
# Webbrowser tests
Mart van Santen's avatar
Mart van Santen committed
behave:
  stage: build-test-images
  variables:
Mart van Santen's avatar
Mart van Santen committed
    KANIKO_CONTEXT: "test/behave"
    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
  extends: .kaniko_build
  only:
    changes:
Mart van Santen's avatar
Mart van Santen committed
      - test/behave/**/*
      - .gitlab-ci.yml
#pylint:
#  stage: build-test-images
#  variables:
#    KANIKO_CONTEXT: "test/lint/pylint"
#    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
#  extends: .kaniko_build
#  only:
#    changes:
#      - test/lint/pylint/Dockerfile
#      - test/lint/pylint/requirements.txt
#      - .gitlab-ci.yml
postgres:
  stage: build
  needs: []
  variables:
    KANIKO_CONTEXT: "postgres"
    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
  extends: .kaniko_build

kratos:
  stage: build
  needs: []
  variables:
    KANIKO_CONTEXT: "kratos"
    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
  extends: .kaniko_build
Mart van Santen's avatar
Mart van Santen committed
#  only:
#    changes:
#      - kratos/**/*
Mart van Santen's avatar
Mart van Santen committed
hydra:
  stage: build
  needs: []
  variables:
    KANIKO_CONTEXT: "hydra"
    KANIKO_BUILD_IMAGENAME: $CI_JOB_NAME
  extends: .kaniko_build


# TODO: This integration testing is the old test. This need to be modified
#       and will happen in the issue which is about integration the login 
#       image & testing that
Mark's avatar
Mark committed
behave-integration:
  stage: integration-test
  services:
    - name: ${CI_REGISTRY_IMAGE}/postgres:${CI_COMMIT_REF_NAME}
Mark's avatar
Mark committed
      alias: postgres
Mart van Santen's avatar
Mart van Santen committed
    - name: ${CI_REGISTRY_IMAGE}/kratos:${CI_COMMIT_REF_NAME}
      alias: kratos
      command:
        - migrate
        - sql
        - -e
        - -y
    - name: ${CI_REGISTRY_IMAGE}/kratos:${CI_COMMIT_REF_NAME}
      alias: kratos
      command:
        - serve
        - --config
        - /etc/config/kratos.yaml
Mart van Santen's avatar
Mart van Santen committed
    - name: ${CI_REGISTRY_IMAGE}/hydra:${CI_COMMIT_REF_NAME}
      alias: hydra
Mark's avatar
Mark committed
      command:
Mart van Santen's avatar
Mart van Santen committed
        - migrate
        - sql
Mart van Santen's avatar
Mart van Santen committed
        - -e
        - -y
Mart van Santen's avatar
Mart van Santen committed
    - name: ${CI_REGISTRY_IMAGE}/hydra:${CI_COMMIT_REF_NAME}
      alias: hydra
      command:
        - hydra
        - all
        - --dangerous-force-http
        - --dangerous-allow-insecure-redirect-urls
        - http://oidc:5000/login
    - name: ${CI_REGISTRY_IMAGE}/login:${CI_COMMIT_REF_NAME}
Mart van Santen's avatar
Mart van Santen committed
      alias: oidc
Mart van Santen's avatar
Mart van Santen committed
    - name: ${CI_REGISTRY_IMAGE}/test/sso_testapp:${CI_COMMIT_REF_NAME}
      alias: ssoapp
Mark's avatar
Mark committed
  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
Mart van Santen's avatar
Mart van Santen committed
    # For login panel
    FLASK_RUN_HOST: "0.0.0.0"
    FLASK_RUN_PORT: "5000"
    HYDRA_ADMIN_URL: "http://hydra:4445"
    KRATOS_PUBLIC_URL: "http://kratos:4433"
    KRATOS_ADMIN_URL: "http://kratos:4434"
    PUBLIC_URL: "http://localhost:5000/"
Mart van Santen's avatar
Mart van Santen committed
    DATABASE_URL: "postgres://postgres:postgres@postgres/postgres"
    # For hydra & kratos
    # For hydra
    URLS_SELF_ISSUER: http://localhost/
    URLS_CONSENT: http://oidc:5000/login
    URLS_LOGIN: http://oidc:5000/consent
    # For postgres image
Mart van Santen's avatar
Mart van Santen committed
    POSTGRES_PASSWORD: postgres
    POSTGRES_USER: postgres
    POSTGRES_DB: postgres
    # General flask
    DEBUG: "true"
    FLASK_ENV: "development"
    # Others and old
Mark's avatar
Mark committed
    BASE_URL: "http://hydra:4444/"
Mark's avatar
Mark committed
    HYDRA_ADMIN_URL: "http://hydra:4445"
Mark's avatar
Mark committed
    ACCESS_TOKEN_URL: "http://hydra:4444/oauth2/token"
    AUTHORIZE_URL: "http://hydra:4444/oauth2/auth"
    USERINFO_URL: "http://hydra:4444/userinfo"
    GRAPHQL_URL: "http://backend:5000/graphql"
Mark's avatar
Mark committed
    GIT_SUBMODULE_STRATEGY: "recursive"
    TESTUSER_USERNAME: "testuser"
Mark's avatar
Mark committed
    TESTUSER_USERNAME2: "testuser2"
Mark's avatar
Mark committed
    TESTUSER_PASSWORD: "password"
    TESTUSER_EMAIL: "testuser@example.net"
Mark's avatar
Mark committed
    TESTUSER_EMAIL2: "testuser2@example.net"
Mark's avatar
Mark committed
    ROLE: "admin"
Mark's avatar
Mark committed
    SECRETS_SYSTEM: "youReallyNeedToChangeThis"
Mark's avatar
Mark committed
    DATABASE_USER: postgres
Mart van Santen's avatar
Mart van Santen committed
    DATABASE_PASSWORD: postgres
Mark's avatar
Mark committed
    DATABASE_NAME: postgres
Mark's avatar
Mark committed
    OAUTHLIB_INSECURE_TRANSPORT: "true"
    KEY: "testapp"
    SECRET: "secret"
Mart van Santen's avatar
Mart van Santen committed
  image: ${CI_REGISTRY_IMAGE}/test/behave:${CI_COMMIT_REF_NAME}
Mark's avatar
Mark committed
  script:
    - curl http://kratos:4433/health/alive
    - curl http://oidc:5000/whoami
    # Create user and application objects
    #- /bin/bash user-panel/backend/utils/create-user.bash ${TESTUSER_USERNAME} ${TESTUSER_PASSWORD} ${TESTUSER_EMAIL} backend:5000
    #- /bin/bash user-panel/backend/utils/create-user.bash ${TESTUSER_USERNAME2} ${TESTUSER_PASSWORD} ${TESTUSER_EMAIL2} backend:5000
    #- /bin/bash user-panel/backend/utils/create-application.bash ${KEY} "Application used for testing" backend:5000
    #- /bin/bash user-panel/backend/utils/create-role.bash ${ROLE} backend:5000
    #- /bin/bash user-panel/backend/utils/grant-access.bash ${TESTUSER_USERNAME} ${KEY} backend:5000
    #- /bin/bash user-panel/backend/utils/assign-role.bash ${TESTUSER_USERNAME} ${ROLE} backend:5000
    # Wait for 60s for hydra to become available. Then create the oauth2 client object
    #- while [[ $HYDRAADMINSTATUS -ne "200" &&  60 -ge $TIMER ]]; do HYDRAADMINSTATUS=`curl http://hydra:4445/health/ready -o /dev/null -w "%{http_code}"` || TIMER=$TIMER+5 && sleep 5 ; done
    #- /bin/bash test/create-hydra-client.bash ${KEY} ${SECRET} http://hydra:4445 http://oidc:5000/callback http://oidc:5000/ http://oidc:5000/logout
    #- cd test/integration_tests/test/behave/
    #- TIMER=0
    #- while [[ $HYDRASTATUS -ne "200" &&  60 -ge $TIMER ]]; do HYDRASTATUS=`curl http://hydra:4444/health/ready -o /dev/null -w "%{http_code}"` || TIMER=$TIMER+5 && sleep 5 ; done
    #- >
    #    python3 -m behave
    #    -D headless=True
    #    -D url=http://oidc:5000
    #    -D username=${TESTUSER_USERNAME}
    #    -D username2=${TESTUSER_USERNAME2}
    #    -D password=${TESTUSER_PASSWORD}
    #    -D email=${TESTUSER_EMAIL}
    #    -D role=${ROLE}
Mark's avatar
Mark committed
  artifacts:
    paths:
Mark's avatar
Mark committed
      - test/integration_tests/test/behave/screenshots/
Mark's avatar
Mark committed
    expire_in: 1 month
    when: on_failure
# TODO: Fix https://open.greenhost.net/stackspin/single-sign-on/-/issues/82
#
# pylint-lint:
#   stage: lint
#   variables:
#     GIT_AUTHOR_NAME: "RUNNER"
#     GIT_AUTHOR_EMAIL: "runner@greenhost.net"
#     PYLINT_PLUGINS: "pylint_flask pylint_flask_sqlalchemy"
#   image: ${CI_REGISTRY_IMAGE}/pylint:${CI_COMMIT_REF_NAME}
#   script:
#     - echo "Reverting back to main to squash commits"
#     - git reset --soft main