variables:
  GIT_STRATEGY: "clone"
  BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/
  INSTALL_PREFIX: "/opt/tsg/stellar"
  INSTALL_DEPENDENCY_LIBRARY: mrzcpd-corei7 framework_env libfieldstat4-devel
  TESTING_VERSION_BUILD: 0
  BUILD_IMAGE_ROCKYLINUX: "git.mesalab.cn:7443/mesa_platform/build-env:rocky8-for-stellar"

stages:
- cppcheck
- build
- test
- upload

.everything_before_script: &everything_before_script
  - mkdir -p $BUILD_PADDING_PREFIX/$CI_PROJECT_NAMESPACE/
  - ln -s $CI_PROJECT_DIR $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH
  - cd $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH
  - yum makecache --disablerepo="*" --enablerepo="framework,platform"
  - yum install -y $INSTALL_DEPENDENCY_LIBRARY
  - source /etc/profile.d/mrzcpd.sh
  - source /etc/profile.d/framework.sh
  - chmod +x ./ci/travis.sh

###############################################################################
# cppcheck
###############################################################################
.cppcheck_script:
  variables:
    BUILD_TYPE: Debug
  stage: cppcheck
  script:
    - mkdir build; cd build; cmake3 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
    - >
      cppcheck --project=compile_commands.json
      --enable=all
      --std=c++11
      --error-exitcode=1
      --suppress=unusedFunction
      --suppress=missingInclude
      --suppress=uselessAssignmentPtrArg
      --suppress=unmatchedSuppression
      --suppress=variableScope
      --suppress=unreadVariable
      --suppress=cstyleCast
      --suppress=memleakOnRealloc
      --suppress=constParameter
      --suppress=uselessAssignmentArg
      --suppress=uninitvar
      --suppress=unusedStructMember
      --suppress=funcArgOrderDifferent
      --suppress=unreachableCode
      --suppress=internalAstError
      --suppress=integerOverflow
  tags:
    - share

run_cppcheck_for_rockylinux:
  extends: .cppcheck_script
  image: $BUILD_IMAGE_ROCKYLINUX
  
###############################################################################
# build
###############################################################################  
.build_by_travis_for_rockylinux:
  image: $BUILD_IMAGE_ROCKYLINUX
  before_script: *everything_before_script
  script:
  - ./ci/travis.sh
  tags:
  - share

branch_build_debug_for_rockylinux:
  stage: build
  extends: .build_by_travis_for_rockylinux
  variables:
    BUILD_TYPE: Debug
  except:
    - /^develop-.*$/i
    - /^release-.*$/i
    - tags

branch_build_release_for_rockylinux:
  stage: build
  variables:
    BUILD_TYPE: RelWithDebInfo
  extends: .build_by_travis_for_rockylinux
  except:
    - /^develop-.*$/i
    - /^release-.*$/i
    - tags

develop_build_debug_for_rockylinux:
  stage: build
  extends: .build_by_travis_for_rockylinux
  variables:
    TESTING_VERSION_BUILD: 1
    BUILD_TYPE: Debug
    #ASAN_OPTION: ADDRESS
  only:
    - /^develop-.*$/i
    - /^release-.*$/i

develop_build_release_for_rockylinux:
  stage: build
  extends: .build_by_travis_for_rockylinux
  variables:
    TESTING_VERSION_BUILD: 1
    BUILD_TYPE: RelWithDebInfo
    #ASAN_OPTION: ADDRESS
  only:
    - /^develop-.*$/i
    - /^release-.*$/i

release_build_debug_for_rockylinux:
  stage: build
  variables:
    BUILD_TYPE: Debug
  extends: .build_by_travis_for_rockylinux
  only:
    - tags

release_build_release_for_rockylinux:
  stage: build
  variables:
    BUILD_TYPE: RelWithDebInfo
  extends: .build_by_travis_for_rockylinux
  artifacts:
    name: "stellar-install-$CI_COMMIT_REF_NAME-release"
    paths:
      - build/infra/*.rpm
  only:
    - tags

###############################################################################
# test
###############################################################################
test_in_rockylinux:
  stage: test
  image: $BUILD_IMAGE_ROCKYLINUX
  extends: .build_by_travis_for_rockylinux
  variables:
    BUILD_TYPE: Debug  
    ASAN_OPTION: ADDRESS
  allow_failure: false
  script:
    - ./ci/travis.sh
    - cd build; ctest -V
  dependencies:
    - branch_build_release_for_rockylinux
    - develop_build_release_for_rockylinux
    - release_build_release_for_rockylinux
  tags:
    - share    

###############################################################################
# upload 
###############################################################################
.define_before_upload_rockylinux:
  stage: upload
  image: $BUILD_IMAGE_ROCKYLINUX
  before_script:
    - pwd; ls -l ; cd build ; ls -l
    - cp /root/rpm_upload_tools.py ./
  variables:
    PULP3_REPO_NAME: stellar-stable-x86_64.el8
    PULP3_DIST_NAME: stellar-stable-x86_64.el8
  only:
    - tags
  tags:
    - share

rpm_upload_for_rockylinux:
  extends: .define_before_upload_rockylinux
  dependencies:
    - release_build_release_for_rockylinux
  script:
    - python3 rpm_upload_tools.py $PULP3_REPO_NAME $PULP3_DIST_NAME *.rpm