# Version format
version: 'git.{build}'

# Skip Github tags
skip_tags: true

# Environment variables
environment:
  NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-win.zip
  VSVARSALLPATH2017: 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat'
  VSVARSALLPATH2019: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat'

  matrix:
    # VS2017 64
    - builder: vs2017_64
      PYTHON: 'C:\\Python37-x64'
      INNO_SETUP: 'C:\\Program Files (x86)\\Inno Setup 5'
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
      BUILD_DIR: build
      RUN_TESTS: false
    # VS2019 64
    - builder: vs2019_64
      PYTHON: 'C:\\Python38-x64'
      INNO_SETUP: 'C:\\Program Files (x86)\\Inno Setup 6'
      APPVEYOR_BUILD_WORKER_IMAGE: Previous Visual Studio 2019
      BUILD_DIR: build
      RUN_TESTS: true
    # VS2017 64 (Dynamic linking)
    - builder: vs2017_64_dyn
      PYTHON: 'C:\\Python37'
      INNO_SETUP: 'C:\\Program Files (x86)\\Inno Setup 5'
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
      BUILD_DIR: build
      RUN_TESTS: false
    # Clang-cl 64 (Dynamic linking)
    - builder: clang_cl_64_dyn
      PYTHON: 'C:\\Python38'
      INNO_SETUP: 'C:\\Program Files (x86)\\Inno Setup 6'
      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
      BUILD_DIR: build
      RUN_TESTS: true

# Skip changes affecting only other CI services
skip_commits:
  files:
    - .builds/*
    - .github/*
    - .travis.yml
    - .lgtm.yml
    - snapcraft.yaml
    - '*.md'
    - travis-*
    - Vagrant*

# Init
init:
  # Build dependent custom commands
  - cmd: "%init_command%"

# Required software for building
install:
  # Download submodules
  - cmd: git submodule update --init --recursive
  # Update environment variables
  - ps: $env:RZ_VERSION = ( python sys\\version.py )
  - ps: $env:DIST_FOLDER = "rizin-$env:builder-$env:RZ_VERSION"
  - ps: $env:ARTIFACT_ZIP = "$env:DIST_FOLDER.zip"
  # Download required packages
  - cmd: if defined BUILD_DIR ( %PYTHON%\python.exe -m pip install meson ninja PyYAML)

# Build scripts
build_script:
  - appveyor AddMessage "Compiling rizin %RZ_VERSION% (%builder%)"

  - cmd: if %builder% == vs2017_64 ( set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2017%" x64 && %PYTHON%\Scripts\meson --buildtype=release --prefix="%CD%\%DIST_FOLDER%" --default-library=static -Dstatic_runtime=true -Duse_webui=true build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% )

  - cmd: if %builder% == vs2019_64 ( choco install mingw && refreshenv && set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2019%" x64 && %PYTHON%\Scripts\meson --buildtype=release --prefix="%CD%\%DIST_FOLDER%" --default-library=static -Dstatic_runtime=true -Duse_webui=true build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% )

  - cmd: if %builder% == vs2017_64_dyn ( set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2017%" x64 && %PYTHON%\Scripts\meson --buildtype=release --prefix="%CD%\%DIST_FOLDER%" -Duse_webui=true build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% )

  - cmd: if %builder% == clang_cl_64_dyn ( set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2019%" x64 && set CC=clang-cl && %PYTHON%\Scripts\meson --buildtype=release --prefix="%CD%\%DIST_FOLDER%" -Duse_webui=true build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% )

# Run tests only conditionally
for:
-
    matrix:
        only:
            - RUN_TESTS: true

    test_script:
      - set PATH=%APPVEYOR_BUILD_FOLDER%\%DIST_FOLDER%\bin;C:\Python38-x64;C:\msys64\mingw64\bin;%PATH%
      - echo %PATH%
      - where rizin
      - rizin -v
      - copy C:\Python38-x64\python.exe C:\Python38-x64\python3.exe
      - python3 -m pip install "git+https://github.com/rizinorg/rz-pipe#egg=rzpipe&subdirectory=python"
      - cd test
      - git clone -q --depth 1 https://github.com/rizinorg/rizin-testbins bins
      - cd ..
      - "%PYTHON%\\Scripts\\ninja -C build test"
      - cd test
      - rz-test -o results.json -L db
      - cd ..

    after_test:
      - git clone --depth 1 https://github.com/rizinorg/rizin-win-installer
      - set PATH=%PATH%;%INNO_SETUP%
      - iscc rizin-win-installer/rizin.iss /DRizinLocation=..\%DIST_FOLDER%\* /DIcoLocation=rizin.ico /DMyAppVersion=%RZ_VERSION%
      - move rizin-win-installer\Output\rizin.exe rizin_installer-%builder%.exe

# Artifacts
artifacts:
  # Binaries
  - path: "%ARTIFACT_ZIP%"
  # Inno Setup files
  - path: rizin_installer-%builder%.exe
  # Test results
  - path: test/results.json

# Upload builds to the CI release at GitHub
# deploy:
#   tag: Continuous-Windows
#   release: Continuous-Windows
#   description: 'Rizin Windows release'
#   provider: GitHub
#   auth_token:
#     secure: aIhLJhegEu8fMuyfhVxiEyF5+28ozTtmDmQ3UBddNou3nQlXyIWJ5dZSPnf6HqsS # encrypted token from GitHub
#   artifact: /.*\.zip/ # All generated ZIP packages for MSVC and clang-cl builds
#   draft: false
#   prerelease: true
#   force_update: true
#   on:
#     branch: master                 # release from master branch only
