diff .github/workflows/ci-windows.yaml @ 21534:69a59cc69519 v8.2.1317

patch 8.2.1317: MS-Windows tests on AppVeyor are slow Commit: https://github.com/vim/vim/commit/f9a343f8bda8fbe17ff045bef7342ffd6179e2f5 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jul 29 16:32:21 2020 +0200 patch 8.2.1317: MS-Windows tests on AppVeyor are slow Problem: MS-Windows tests on AppVeyor are slow. Solution: Use GitHub Actions. (Ken Takata, closes https://github.com/vim/vim/issues/6569)
author Bram Moolenaar <Bram@vim.org>
date Wed, 29 Jul 2020 16:45:04 +0200
parents
children 6e13105b5d07
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/.github/workflows/ci-windows.yaml
@@ -0,0 +1,208 @@
+name: CI with MSVC and MinGW-w64
+
+on:
+  push:
+  pull_request:
+
+env:
+  VCVARSALL: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
+
+  # Interfaces
+  # Lua
+  LUA_VER: 54
+  LUA_VER_DOT: '5.4'
+  LUA_RELEASE: 5.4.0
+  LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip
+  LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip
+  LUA_DIR: D:\Lua
+  # Python 2
+  PYTHON_VER: 27
+  PYTHON_VER_DOT: '2.7'
+  # Python 3
+  PYTHON3_VER: 38
+  PYTHON3_VER_DOT: '3.8'
+
+  # Other dependencies
+  # winpty
+  WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
+
+  # Escape sequences
+  COL_RED: "\x1b[31m"
+  COL_GREEN: "\x1b[32m"
+  COL_YELLOW: "\x1b[33m"
+  COL_RESET: "\x1b[m"
+
+jobs:
+  build:
+    runs-on: windows-latest
+
+    strategy:
+      matrix:
+        toolchain: [msvc, mingw]
+        arch: [x64, x86]
+        features: [HUGE, NORMAL]
+        include:
+          - arch: x64
+            vcarch: amd64
+            warch: x64
+            bits: 64
+            msystem: MINGW64
+            cygreg: registry
+            pyreg: ""
+          - arch: x86
+            vcarch: x86
+            warch: ia32
+            bits: 32
+            msystem: MINGW32
+            cygreg: registry32
+            pyreg: "-32"
+        exclude:
+          - toolchain: msvc
+            arch: x64
+            features: NORMAL
+          - toolchain: mingw
+            arch: x86
+            features: NORMAL
+
+    steps:
+    - name: Initalize
+      id: init
+      shell: bash
+      run: |
+        git config --global core.autocrlf input
+        python_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON_VER_DOT}/InstallPath/@")
+        python3_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}${{ matrix.pyreg }}/InstallPath/@")
+        echo "::set-env name=PYTHON_DIR::$python_dir"
+        echo "::set-env name=PYTHON3_DIR::$python3_dir"
+
+    - uses: msys2/setup-msys2@v2
+      if: matrix.toolchain == 'mingw'
+      with:
+        msystem: ${{ matrix.msystem }}
+        release: false
+
+    - uses: actions/checkout@v2
+
+    - name: Create a list of download URLs
+      shell: cmd
+      run: |
+        type NUL > urls.txt
+        echo %LUA_RELEASE%>> urls.txt
+        echo %WINPTY_URL%>> urls.txt
+
+    - name: Cache downloaded files
+      uses: actions/cache@v2
+      with:
+        path: downloads
+        key: ${{ runner.os }}-${{ matrix.bits }}-${{ hashFiles('urls.txt') }}
+
+    - name: Download dependencies
+      shell: cmd
+      run: |
+        path C:\Program Files\7-Zip;%path%
+        if not exist downloads mkdir downloads
+
+        echo %COL_GREEN%Download Lua%COL_RESET%
+        call :downloadfile %LUA${{ matrix.bits }}_URL% downloads\lua.zip
+        7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
+
+        echo %COL_GREEN%Download winpty%COL_RESET%
+        call :downloadfile %WINPTY_URL% downloads\winpty.zip
+        7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1
+        copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty.dll        src\winpty${{ matrix.bits }}.dll
+        copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty-agent.exe  src\
+
+        goto :eof
+
+        :downloadfile
+        :: call :downloadfile <URL> <localfile>
+        if not exist %2 (
+          curl -f -L %1 -o %2
+        )
+        if ERRORLEVEL 1 (
+          rem Retry once.
+          curl -f -L %1 -o %2 || exit 1
+        )
+        goto :eof
+
+    - name: Build (MSVC)
+      if: matrix.toolchain == 'msvc'
+      shell: cmd
+      run: |
+        call "%VCVARSALL%" ${{ matrix.vcarch }}
+        cd src
+        :: Filter out the progress bar from the build log
+        sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak
+        if "${{ matrix.features }}"=="HUGE" (
+          nmake -nologo -f Make_mvc2.mak ^
+            FEATURES=${{ matrix.features }} ^
+            GUI=yes IME=yes ICONV=yes VIMDLL=yes ^
+            DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
+            DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
+            DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR%
+        ) else (
+          nmake -nologo -f Make_mvc2.mak ^
+            FEATURES=${{ matrix.features }} ^
+            GUI=yes IME=yes ICONV=yes VIMDLL=yes
+        )
+        if not exist vim${{ matrix.bits }}.dll (
+          echo %COL_RED%Build failure.%COL_RESET%
+          exit 1
+        )
+
+    - name: Build (MinGW)
+      if: matrix.toolchain == 'mingw'
+      shell: msys2 {0}
+      run: |
+        cd src
+        if [ "${{ matrix.features }}" = "HUGE" ]; then
+          mingw32-make -f Make_ming.mak -j2 \
+            FEATURES=${{ matrix.features }} \
+            GUI=yes IME=yes ICONV=yes VIMDLL=yes \
+            DYNAMIC_LUA=yes LUA=${LUA_DIR} \
+            DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
+            DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
+            STATIC_STDCPLUS=yes
+        else
+          mingw32-make -f Make_ming.mak -j2 \
+            FEATURES=${{ matrix.features }} \
+            GUI=yes IME=yes ICONV=yes VIMDLL=yes \
+            STATIC_STDCPLUS=yes
+        fi
+
+#    - name: Prepare Artifact
+#      shell: cmd
+#      run: |
+#        mkdir artifacts
+#        copy src\*vim.exe artifacts
+#        copy src\vim*.dll artifacts
+#
+#    - name: Upload Artifact
+#      uses: actions/upload-artifact@v1
+#      with:
+#        name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
+#        path: ./artifacts
+
+    - name: Test
+      shell: cmd
+      timeout-minutes: 20
+      run: |
+        PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR%
+        call "%VCVARSALL%" ${{ matrix.vcarch }}
+        cd src
+        echo.
+        echo %COL_GREEN%vim version:%COL_RESET%
+        .\vim --version || exit 1
+        cd testdir
+        echo %COL_GREEN%Test gvim:%COL_RESET%
+        nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1
+        nmake -nologo -f Make_dos.mak clean
+        echo %COL_GREEN%Test vim:%COL_RESET%
+        if "${{ matrix.toolchain }}-${{ matrix.arch }}"=="msvc-x64" (
+          rem This test may hang up unless it is executed in a separate console.
+          start /wait cmd /c "nmake -nologo -f Make_dos.mak VIMPROG=..\vim > nul"
+          if exist messages type messages
+          nmake -nologo -f Make_dos.mak report || exit 1
+        ) else (
+          nmake -nologo -f Make_dos.mak VIMPROG=..\vim || exit 1
+        )