trigger: branches: include: - '*' pr: branches: include: - '*' variables: - name: skipci value: false jobs: - job: packages timeoutInMinutes: 90 # default `60` led to lots of cancelled jobs; use 0 for unlimited (may be undesirable) strategy: matrix: Linux_amd64: vmImage: 'ubuntu-18.04' CPU: amd64 # regularly breaks, refs bug #17325 Linux_i386: # on 'ubuntu-16.04' (not supported anymore anyways) it errored with: # g++-multilib : Depends: gcc-multilib (>= 4:5.3.1-1ubuntu1) but it is not going to be installed vmImage: 'ubuntu-18.04' CPU: i386 OSX_amd64: vmImage: 'macOS-10.15' CPU: amd64 OSX_amd64_cpp: vmImage: 'macOS-10.15' CPU: amd64 NIM_COMPILE_TO_CPP: true Windows_amd64_batch0_3: vmImage: 'windows-2019' CPU: amd64 # see also: `NIM_TEST_PACKAGES` NIM_TESTAMENT_BATCH: "0_3" Windows_amd64_batch1_3: vmImage: 'windows-2019' CPU: amd64 NIM_TESTAMENT_BATCH: "1_3" Windows_amd64_batch2_3: vmImage: 'windows-2019' CPU: amd64 NIM_TESTAMENT_BATCH: "2_3" pool: vmImage: $(vmImage) workspace: clean: all steps: - bash: git config --global core.autocrlf false displayName: 'Disable auto conversion to CRLF by git (Windows-only)' condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT')) - checkout: self fetchDepth: 2 # see D20210329T004830 - bash: | set -e . ci/funs.sh if nimIsCiSkip; then echo '##vso[task.setvariable variable=skipci]true' fi displayName: 'Check whether to skip CI' - task: NodeTool@0 inputs: versionSpec: '16.x' displayName: 'Install node.js 16.x' condition: and(succeeded(), eq(variables['skipci'], 'false')) - bash: | set -e . ci/funs.sh echo_run sudo apt-fast update -qq DEBIAN_FRONTEND='noninteractive' \ echo_run sudo apt-fast install --no-install-recommends -yq \ libcurl4-openssl-dev libgc-dev libsdl1.2-dev libsfml-dev valgrind libc6-dbg displayName: 'Install dependencies (amd64 Linux)' condition: and(succeeded(), eq(variables['skipci'], 'false'), eq(variables['Agent.OS'], 'Linux'), eq(variables['CPU'], 'amd64')) - bash: | set -e . ci/funs.sh echo_run sudo dpkg --add-architecture i386 # Downgrade llvm: # - llvm has to be downgraded to have 32bit version installed for sfml. cat << EOF | sudo tee /etc/apt/preferences.d/pin-to-rel Package: libllvm6.0 Pin: origin "azure.archive.ubuntu.com" Pin-Priority: 1001 EOF # echo_run sudo apt-fast update -qq echo_run sudo apt-fast update -qq || echo "failed, see bug #17343" # `:i386` (e.g. in `libffi-dev:i386`) is needed otherwise you may get: # `could not load: libffi.so` during dynamic loading. DEBIAN_FRONTEND='noninteractive' \ echo_run sudo apt-fast install --no-install-recommends --allow-downgrades -yq \ g++-multilib gcc-multilib libcurl4-openssl-dev:i386 libgc-dev:i386 \ libsdl1.2-dev:i386 libsfml-dev:i386 libglib2.0-dev:i386 libffi-dev:i386 cat << EOF > bin/gcc #!/bin/bash exec $(which gcc) -m32 "\$@" EOF cat << EOF > bin/g++ #!/bin/bash exec $(which g++) -m32 "\$@" EOF echo_run chmod 755 bin/gcc echo_run chmod 755 bin/g++ displayName: 'Install dependencies (i386 Linux)' condition: and(succeeded(), eq(variables['skipci'], 'false'), eq(variables['Agent.OS'], 'Linux'), eq(variables['CPU'], 'i386')) - bash: brew install boehmgc make sfml displayName: 'Install dependencies (OSX)' condition: and(succeeded(), eq(variables['skipci'], 'false'), eq(variables['Agent.OS'], 'Darwin')) - bash: | set -e . ci/funs.sh nimInternalInstallDepsWindows echo_run echo '##vso[task.prependpath]$(System.DefaultWorkingDirectory)/dist/mingw64/bin' displayName: 'Install dependencies (Windows)' condition: and(succeeded(), eq(variables['skipci'], 'false'), eq(variables['Agent.OS'], 'Windows_NT')) - bash: echo '##vso[task.prependpath]$(System.DefaultWorkingDirectory)/bin' condition: and(succeeded(), eq(variables['skipci'], 'false')) displayName: 'Add build binaries to PATH' - bash: . ci/funs.sh && nimCiSystemInfo condition: and(succeeded(), eq(variables['skipci'], 'false')) displayName: 'System information' - bash: . ci/funs.sh && nimBuildCsourcesIfNeeded CC=gcc ucpu=$(CPU) condition: and(succeeded(), eq(variables['skipci'], 'false')) displayName: 'Build csourcesAny' # this could be revived if performance justifies it (needs a few updates) # - task: Cache@2 # inputs: # key: 'csourcesAny | "$(Agent.OS)" | $(CPU) | $(csources_version)' # path: $(nim_csources) # condition: and(succeeded(), eq(variables['skipci'], 'false')) # displayName: 'Restore built csourcesAny' - bash: . ci/funs.sh && nimInternalBuildKochAndRunCI # would could also show on failure: echo '##vso[task.complete result=Failed]' condition: and(succeeded(), eq(variables['skipci'], 'false')) displayName: 'koch, Run CI' env: SYSTEM_ACCESSTOKEN: $(System.AccessToken)