浏览代码

[azure-pipelines] initial config

Andy Li 6 年之前
父节点
当前提交
1badd8f7cd

+ 53 - 0
azure-pipelines.yml

@@ -0,0 +1,53 @@
+variables:
+  - group: variables-haxe
+
+stages:
+  - stage: StageTest
+    jobs:
+      - template: other/azure-pipelines/build-linux.yml
+        parameters:
+          name: Linux64_CMake
+          buildSystem: cmake
+      - template: other/azure-pipelines/build-linux.yml
+        parameters:
+          name: Linux32_CMake
+          arch: i386
+          buildSystem: cmake
+
+      - template: other/azure-pipelines/build-linux.yml
+        parameters:
+          name: Linux64_Make
+          buildSystem: make
+      - template: other/azure-pipelines/build-linux.yml
+        parameters:
+          name: Linux32_Make
+          arch: i386
+          buildSystem: make
+
+      - template: other/azure-pipelines/build-mac.yml
+        parameters:
+          name: Mac_CMake
+          buildSystem: cmake
+      - template: other/azure-pipelines/build-mac.yml
+        parameters:
+          name: Mac_Make
+          buildSystem: make
+
+      - template: other/azure-pipelines/build-windows.yml
+        parameters:
+          name: Windows64_CMake
+          vmImage: 'vs2015-win2012r2'
+          buildSystem: cmake
+          cmakeGenerator: 'Visual Studio 14 2015 Win64'
+      - template: other/azure-pipelines/build-windows.yml
+        parameters:
+          name: Windows32_CMake
+          vmImage: 'vs2015-win2012r2'
+          buildSystem: cmake
+          cmakeGenerator: 'Visual Studio 14 2015'
+
+      - template: other/azure-pipelines/build-windows.yml
+        parameters:
+          name: Windows_VS
+          vmImage: 'vs2015-win2012r2'
+          buildSystem: vs

+ 115 - 0
other/azure-pipelines/build-linux.yml

@@ -0,0 +1,115 @@
+parameters:
+  name: 'BuildLinux'
+  vmImage: 'ubuntu-16.04'
+  container: 'debian:stretch'
+  arch: '' # set it to i386 fof 32-bit build
+  buildSystem: 'cmake' # either 'cmake' or 'make'
+  cmakeConfig: 'RelWithDebInfo'
+
+jobs:
+  - job: ${{ parameters.name }}
+    pool:
+      vmImage: ${{ parameters.vmImage }}
+    container:
+      image: ${{ parameters.container }}
+      options: --name ci-container -v /usr/bin/docker:/tmp/docker:ro
+    variables:
+      DEBIAN_FRONTEND: noninteractive
+      ${{ if eq(parameters.arch, '') }}:
+        CMAKE_TOOLCHAIN: ''
+        ARCH: 64
+      ${{ if eq(parameters.arch, 'i386') }}:
+        CMAKE_TOOLCHAIN: -DCMAKE_TOOLCHAIN_FILE=other/cmake/linux32.toolchain.cmake
+        ARCH: 32
+    steps:
+      - script: |
+          /tmp/docker exec -t -u 0 ci-container \
+          sh -c "apt-get update && apt-get -o Dpkg::Options::="--force-confold" -y install sudo"
+        displayName: Setup sudo
+      - ${{ if eq(parameters.arch, '') }}:
+        - script: |
+            set -ex
+            sudo apt-get update -qqy
+            sudo apt-get install -qqy \
+              cmake \
+              make \
+              gcc \
+              libz-dev \
+              zlib1g-dev \
+              libpng-dev \
+              libsdl2-dev \
+              libvorbis-dev \
+              libalut-dev \
+              libmbedtls-dev \
+              libturbojpeg0-dev \
+              libuv1-dev \
+              libopenal-dev \
+              neko \
+              curl \
+              ca-certificates
+          displayName: Install dependencies
+      - ${{ if not(eq(parameters.arch, '')) }}:
+        - script: |
+            set -ex
+            sudo dpkg --add-architecture ${{ parameters.arch }}
+            sudo apt-get update -qqy
+            sudo apt-get install -qqy \
+              cmake \
+              make \
+              gcc-multilib \
+              libz-dev:${{ parameters.arch }} \
+              zlib1g-dev:${{ parameters.arch }} \
+              libpng-dev:${{ parameters.arch }} \
+              libsdl2-dev:${{ parameters.arch }} \
+              libvorbis-dev:${{ parameters.arch }} \
+              libalut-dev:${{ parameters.arch }} \
+              libmbedtls-dev:${{ parameters.arch }} \
+              libturbojpeg0-dev:i386 \
+              libuv1-dev:${{ parameters.arch }} \
+              libopenal-dev:${{ parameters.arch }} \
+              neko \
+              curl \
+              ca-certificates
+          displayName: Install dependencies
+      - template: install-haxe-snapshot.yml
+        parameters:
+          platform: linux64
+      - script: |
+          set -ex
+          haxelib setup ~/haxelib
+          haxelib install hashlink
+          haxelib list
+        displayName: Install hashlink haxelib
+      - ${{ if eq(parameters.buildSystem, 'cmake') }}:
+        - script: cmake . -DCMAKE_BUILD_TYPE=${{ parameters.cmakeConfig }} $(CMAKE_TOOLCHAIN)
+          displayName: CMake
+        - script: make
+          displayName: Build
+        - script: |
+            set -ex
+            ldd -v ./bin/hl
+          displayName: Check runtime dependencies
+        - script: ctest --verbose
+          displayName: Test
+        - script: make package
+          displayName: Package
+        - task: PublishPipelineArtifact@0
+          inputs:
+            artifactName: ${{ parameters.name }}Binaries
+            targetPath: bin/hashlink-1.10.0-Linux.tar.gz
+      - ${{ if eq(parameters.buildSystem, 'make') }}:
+        - script: make
+          displayName: Build
+        - script: |
+            set -ex
+            sudo make install
+            sudo ldconfig
+          displayName: Install
+        - script: |
+            set -ex
+            haxe -hl hello.hl -cp other/tests -main HelloWorld -D interp
+            ./hl hello.hl
+            haxe -hl src/_main.c -cp other/tests -main HelloWorld
+            make hlc
+            ./hlc
+          displayName: Test

+ 56 - 0
other/azure-pipelines/build-mac.yml

@@ -0,0 +1,56 @@
+parameters:
+  name: 'BuildMac'
+  vmImage: 'macOS-10.13'
+  buildSystem: 'cmake' # either 'cmake' or 'make'
+  cmakeConfig: 'RelWithDebInfo'
+
+jobs:
+  - job: ${{ parameters.name }}
+    pool:
+      vmImage: ${{ parameters.vmImage }}
+    steps:
+      - script: |
+          set -ex
+          brew update
+          brew install neko
+          brew bundle
+        displayName: Install dependencies
+      - template: install-haxe-snapshot.yml
+        parameters:
+          platform: mac
+      - script: |
+          set -ex
+          haxelib setup ~/haxelib
+          haxelib install hashlink
+          haxelib list
+        displayName: Install hashlink haxelib
+      - ${{ if eq(parameters.buildSystem, 'cmake') }}:
+        - script: cmake . -DCMAKE_BUILD_TYPE=${{ parameters.cmakeConfig }}
+          displayName: CMake
+        - script: make
+          displayName: Build
+        - script: |
+            set -ex
+            otool -L ./bin/hl
+          displayName: Check runtime dependencies
+        - script: ctest --verbose
+          displayName: Test
+        - script: make package
+          displayName: Package
+        - task: PublishPipelineArtifact@0
+          inputs:
+            artifactName: ${{ parameters.name }}Binaries
+            targetPath: bin/hashlink-1.10.0-Darwin.tar.gz
+      - ${{ if eq(parameters.buildSystem, 'make') }}:
+        - script: make
+          displayName: Build
+        - script: sudo make install
+          displayName: Install
+        - script: |
+            set -ex
+            haxe -hl hello.hl -cp other/tests -main HelloWorld -D interp
+            ./hl hello.hl
+            haxe -hl src/_main.c -cp other/tests -main HelloWorld
+            make hlc
+            ./hlc
+          displayName: Test

+ 71 - 0
other/azure-pipelines/build-windows.yml

@@ -0,0 +1,71 @@
+parameters:
+  name: 'BuildWindows'
+  vmImage: ''
+  buildSystem: 'cmake' # either 'cmake' or 'vs'
+  cmakeGenerator: ''
+  cmakeConfig: 'RelWithDebInfo'
+
+jobs:
+  - job: ${{ parameters.name }}
+    pool:
+      vmImage: ${{ parameters.vmImage }}
+    variables:
+      ${{ if endsWith(parameters.cmakeGenerator, 'Win64') }}:
+        ARCH: 64
+      ${{ if not(endsWith(parameters.cmakeGenerator, 'Win64')) }}:
+        ARCH: 32
+    steps:
+      - ${{ if eq(parameters.vmImage, 'vs2015-win2012r2') }}:
+        - powershell: |
+            Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+            Write-Host "##vso[task.prependpath]C:\ProgramData\chocolatey\bin"
+          displayName: Install Chocolatey
+      - powershell: |
+          Invoke-WebRequest https://www.libsdl.org/release/SDL2-devel-2.0.5-VC.zip -OutFile SDL.zip
+          Expand-Archive SDL.zip -DestinationPath .
+          Move-Item SDL2-* include/sdl
+          Remove-Item SDL.zip
+        displayName: Install sdl
+      - powershell: |
+          Invoke-WebRequest http://openal-soft.org/openal-binaries/openal-soft-1.17.2-bin.zip -OutFile openal.zip
+          Expand-Archive openal.zip -DestinationPath .
+          Move-Item openal-* include/openal
+          Remove-Item openal.zip
+        displayName: Install openal
+      - powershell: |
+          Invoke-WebRequest https://ffmpeg.zeranoe.com/builds/win$(ARCH)/dev/ffmpeg-3.4.2-win$(ARCH)-dev.zip -OutFile ffmpeg.zip
+          Expand-Archive ffmpeg.zip -DestinationPath .
+          Move-Item ffmpeg-* include/ffmpeg
+          Remove-Item ffmpeg.zip
+        displayName: Install ffmpeg
+      - powershell: |
+          Set-Service wuauserv -StartupType Manual
+          choco install --no-progress neko -y
+          Write-Host "##vso[task.setvariable variable=NEKOPATH]C:/ProgramData/chocolatey/lib/neko"
+        displayName: 'Install Neko'
+      - template: install-haxe-snapshot.yml
+        parameters:
+          platform: windows
+      - script: |
+          set -ex
+          haxelib setup ~/haxelib
+          haxelib install hashlink
+          haxelib list
+        displayName: Install hashlink haxelib
+      - ${{ if eq(parameters.buildSystem, 'cmake') }}:
+        - script: cmake . -G "${{ parameters.cmakeGenerator }}"
+          displayName: CMake
+        - script: cmake --build . --config ${{ parameters.cmakeConfig }}
+          displayName: Build
+        - script: ctest --verbose --build-config ${{ parameters.cmakeConfig }}
+          displayName: Test
+        - script: cmake --build . --config ${{ parameters.cmakeConfig }} --target PACKAGE
+          displayName: Package binaries
+        - task: PublishPipelineArtifact@0
+          inputs:
+            artifactName: ${{ parameters.name }}Binaries
+            targetPath: bin/hashlink-1.10.0-win$(ARCH).zip
+      - ${{ if eq(parameters.buildSystem, 'vs') }}:
+        - task: MSBuild@1
+          inputs:
+            solution: hl.sln

+ 31 - 0
other/azure-pipelines/install-haxe-snapshot.yml

@@ -0,0 +1,31 @@
+parameters:
+  platform: '' # can be linux64, mac, windows, or windows64
+
+steps:
+  - ${{ if startsWith(parameters.platform, 'windows') }}:
+    - powershell: |
+        Invoke-WebRequest https://build.haxe.org/builds/haxe/${{parameters.platform}}/haxe_latest.zip -OutFile $(Agent.TempDirectory)/haxe_latest.zip
+        Expand-Archive $(Agent.TempDirectory)/haxe_latest.zip -DestinationPath $(Agent.TempDirectory)
+        Remove-Item $(Agent.TempDirectory)/haxe_latest.zip
+        $HAXEPATH = Get-Item $(Agent.TempDirectory)/haxe_*
+        $HAXE_STD_PATH = "$HAXEPATH\std"
+        Write-Host "##vso[task.prependpath]$HAXEPATH"
+        Write-Host "##vso[task.setvariable variable=HAXE_STD_PATH]$HAXE_STD_PATH"
+      displayName: Install Haxe using snapshot from S3
+  - ${{ if not(startsWith(parameters.platform, 'windows')) }}:
+    - bash: |
+        set -ex
+        DOWNLOADDIR=$(Agent.TempDirectory)
+        curl -sSL https://build.haxe.org/builds/haxe/${{parameters.platform}}/haxe_latest.tar.gz -o $(Agent.TempDirectory)/haxe_latest.tar.gz
+        tar -xf $(Agent.TempDirectory)/haxe_latest.tar.gz -C $(Agent.TempDirectory)
+        rm $(Agent.TempDirectory)/haxe_latest.tar.gz
+        HAXEPATH=`echo $(Agent.TempDirectory)/haxe_*`
+        sudo mkdir -p /usr/local/bin
+        sudo mkdir -p /usr/local/share/haxe
+        sudo ln -s $HAXEPATH/{haxe,haxelib}  /usr/local/bin/
+        sudo ln -s $HAXEPATH/std             /usr/local/share/haxe/std
+        set +x
+        echo "##vso[task.setvariable variable=HAXE_STD_PATH]/usr/local/share/haxe/std"
+      displayName: Install Haxe using snapshot from S3
+  - script: haxe -version
+    displayName: Print Haxe version