summaryrefslogtreecommitdiffstats
path: root/.github
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-07-29 16:32:21 +0200
committerBram Moolenaar <Bram@vim.org>2020-07-29 16:32:21 +0200
commitf9a343f8bda8fbe17ff045bef7342ffd6179e2f5 (patch)
treeed40764cd0f831132af942ef4a2f8c30d563cec5 /.github
parentb61ef01cce2afd70fbfa2805336a26643109dfb7 (diff)
patch 8.2.1317: MS-Windows tests on AppVeyor are slowv8.2.1317
Problem: MS-Windows tests on AppVeyor are slow. Solution: Use GitHub Actions. (Ken Takata, closes #6569)
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/ci-windows.yaml208
1 files changed, 208 insertions, 0 deletions
diff --git a/.github/workflows/ci-windows.yaml b/.github/workflows/ci-windows.yaml
new file mode 100644
index 0000000000..1fca08ea57
--- /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
+ )