version: 1.4.1-{branch}-ci-{build}

branches:
  only:
  - master
  - /v\d*\.\d*\.\d*/

# do not build feature branches with open pull requests
skip_branch_with_pr: true

#shallow clone does not work when submodules are involved!
#shallow_clone: true

matrix:
  fast_finish: true # set this flag to immediately finish build once one of the jobs fails.

environment:
  COIN_VERSION: 4.0.2
  GH_AUTH_TOKEN:
    secure: 850frgRGZcc4Cljd2P7Ej68no4/kkl4EMB+DjnX725wcKBRJuFk/kGRdJGyKXd2u
  matrix:
#    - APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu1804
#      CMAKE_GENERATOR: 'Unix Makefiles'
#      CMAKE_PLATFORM: x86
#      CMAKE_ARCH_FLAGS: -m32
#      COMPILER_ID: gcc

    - APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu1804
      CMAKE_GENERATOR: 'Unix Makefiles'
      CMAKE_PLATFORM: x64
      CMAKE_ARCH_FLAGS: -m64
      COMPILER_ID: gcc

    - APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2004
      CMAKE_GENERATOR: 'Unix Makefiles'
      CMAKE_PLATFORM: x64
      CMAKE_ARCH_FLAGS: -m64
      COMPILER_ID: gcc

    - APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2204
      CMAKE_GENERATOR: 'Unix Makefiles'
      CMAKE_PLATFORM: x64
      CMAKE_ARCH_FLAGS: -m64
      COMPILER_ID: gcc

install:
  - sh: |
      sudo apt-get -y update
      sudo apt-get -y install freeglut3-dev libx11-dev libmotif-dev libxpm-dev libxmu-dev
      sudo apt-get -y install doxygen jq
      cd $APPVEYOR_BUILD_FOLDER
  - git submodule update --init --recursive

# Assumes that we use the vx.y.z tagging scheme (e.g. v1.3.0)
before_build:
  - sh: |
      if [ -n "${APPVEYOR_REPO_TAG_NAME}" ]; then export CI_REPO_VERSION=${APPVEYOR_REPO_TAG_NAME:1}; else export CI_REPO_VERSION=latest; fi
      BUILD_SOURCE_ARCHIVE=$APPVEYOR_PROJECT_NAME-$CI_REPO_VERSION-src.tar.gz
      if [ ! -d "$APPVEYOR_BUILD_FOLDER/../$APPVEYOR_PROJECT_NAME" ]; then cp -r $APPVEYOR_BUILD_FOLDER $APPVEYOR_BUILD_FOLDER/../$APPVEYOR_PROJECT_NAME; fi
      cd $APPVEYOR_BUILD_FOLDER/..
      tar czf $BUILD_SOURCE_ARCHIVE --exclude .git $APPVEYOR_PROJECT_NAME
      mv $BUILD_SOURCE_ARCHIVE $APPVEYOR_BUILD_FOLDER
      cd $APPVEYOR_BUILD_FOLDER
      md5sum -b $BUILD_SOURCE_ARCHIVE > $BUILD_SOURCE_ARCHIVE.md5
      sha256sum -b $BUILD_SOURCE_ARCHIVE > $BUILD_SOURCE_ARCHIVE.sha256
      mkdir $APPVEYOR_BUILD_FOLDER/downloads
      export COMPILER_ID=$APPVEYOR_BUILD_WORKER_IMAGE-$COMPILER_ID`$COMPILER_ID -dumpversion | tr '.' '\n'`
      ###############
      if [ -n "${APPVEYOR_REPO_TAG_NAME}" ]; then export COIN_REPO_VERSION=$COIN_VERSION; else export COIN_REPO_VERSION=latest; fi
      if [ -n "${APPVEYOR_REPO_TAG_NAME}" ]; then export COIN_REPO_TAG_NAME=v$COIN_VERSION; else export COIN_REPO_TAG_NAME=CI-builds; fi
      DOWNLOAD_FILE_COIN=coin-$COIN_REPO_VERSION-$COMPILER_ID-$CMAKE_PLATFORM.tar.gz
      RELEASE_ID=`curl -s -H "Authorization: token $GH_AUTH_TOKEN" https://api.github.com/repos/coin3d/coin/releases | jq -r --arg COIN_REPO_TAG_NAME "$COIN_REPO_TAG_NAME" '.[] | select(.tag_name==$COIN_REPO_TAG_NAME) | .id'`
      ASSET_ID=`curl -s -H "Authorization: token $GH_AUTH_TOKEN" https://api.github.com/repos/coin3d/coin/releases/$RELEASE_ID | jq -r --arg DOWNLOAD_FILE_COIN "$DOWNLOAD_FILE_COIN" '.assets[] | select(.name==$DOWNLOAD_FILE_COIN) | .id'`
      export DOWNLOAD_ADDRESS_COIN=https://api.github.com/repos/coin3d/coin/releases/assets/$ASSET_ID
      echo download file $DOWNLOAD_FILE_COIN from address $DOWNLOAD_ADDRESS_COIN
      curl -s -S -L -H "Authorization: token $GH_AUTH_TOKEN" -H "Accept: application/octet-stream" -o $DOWNLOAD_FILE_COIN $DOWNLOAD_ADDRESS_COIN
      tar xzf $DOWNLOAD_FILE_COIN -C $APPVEYOR_BUILD_FOLDER/downloads
      ###############
      export CFLAGS=$CMAKE_ARCH_FLAGS
      export CXXFLAGS=$CMAKE_ARCH_FLAGS
      cmake -H. -Bbuild_debug   -G "$CMAKE_GENERATOR" -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_POSITION_INDEPENDENT_CODE=true -DCMAKE_INSTALL_PREFIX=$APPVEYOR_BUILD_FOLDER/Coin3D -DCMAKE_PREFIX_PATH=$APPVEYOR_BUILD_FOLDER/downloads/Coin3D
      cmake -H. -Bbuild_release -G "$CMAKE_GENERATOR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=true -DCMAKE_INSTALL_PREFIX=$APPVEYOR_BUILD_FOLDER/Coin3D -DCMAKE_PREFIX_PATH=$APPVEYOR_BUILD_FOLDER/downloads/Coin3D

build_script:
  - sh: |
      BUILD_TOOL_OPTIONS=-j4
      cmake --build build_debug   --target install --config Debug   -- $BUILD_TOOL_OPTIONS
      cmake --build build_release --target install --config Release -- $BUILD_TOOL_OPTIONS

after_build:
  - sh: |
      cd $APPVEYOR_BUILD_FOLDER
      if [ -n "${APPVEYOR_REPO_TAG_NAME}" ]; then export CI_REPO_VERSION=${APPVEYOR_REPO_TAG_NAME:1}; else export CI_REPO_VERSION=latest; fi
      BUILD_ARCHIVE=$APPVEYOR_PROJECT_NAME-$CI_REPO_VERSION-$COMPILER_ID-$CMAKE_PLATFORM.tar.gz
      tar czf $BUILD_ARCHIVE Coin3D/*
      md5sum -b $BUILD_ARCHIVE > $BUILD_ARCHIVE.md5
      sha256sum -b $BUILD_ARCHIVE > $BUILD_ARCHIVE.sha256
      appveyor DownloadFile https://ci.appveyor.com/api/buildjobs/$APPVEYOR_JOB_ID/log -FileName $APPVEYOR_PROJECT_NAME-$CI_REPO_VERSION-$COMPILER_ID-$CMAKE_PLATFORM.log

artifacts:
  - path: $(APPVEYOR_PROJECT_NAME)*.zip
    name: CIArchives
  - path: $(APPVEYOR_PROJECT_NAME)*.tar.gz
    name: CIArchivesTGZ
  - path: $(APPVEYOR_PROJECT_NAME)*.log
    name: logs
  - path: $(APPVEYOR_PROJECT_NAME)*.md5
    name: CImd5
  - path: $(APPVEYOR_PROJECT_NAME)*.sha256
    name: CIsha256

test_script:
  - sh: |
      cd build_release
      ctest -C Release -VV

notifications:
  - provider: Email
    to:
      - '{{commitAuthorEmail}}'
      - coin-support@coin3d.org
    on_build_success: false
    on_build_failure: true
    on_build_status_changed: true

deploy:
  # Deploy to GitHub Releases
  - provider: GitHub
    auth_token:
      secure: 850frgRGZcc4Cljd2P7Ej68no4/kkl4EMB+DjnX725wcKBRJuFk/kGRdJGyKXd2u # your encrypted token from GitHub
    artifact: CIArchives, CIArchivesTGZ, CImd5, CIsha256, logs
    tag: 'CI builds'
    description: 'Results of CI builds for various platforms'
    draft: false
    prerelease: true
    force_update: true
    on:
      APPVEYOR_REPO_TAG: false      # deploy on untagged builds only
#      branch: master                # release from master branch only

  # Deploy to GitHub Releases
  - provider: GitHub
    auth_token:
      secure: 850frgRGZcc4Cljd2P7Ej68no4/kkl4EMB+DjnX725wcKBRJuFk/kGRdJGyKXd2u # your encrypted token from GitHub
    artifact: CIArchives, CIArchivesTGZ, CImd5, CIsha256
    tag: $(APPVEYOR_REPO_TAG_NAME)
    description: 'Release build'
    draft: true
    prerelease: true
    force_update: true
    on:
      APPVEYOR_REPO_TAG: true       # deploy on tag push only
