CI: Split platform specific CI configurations into separated files
Commit:
https://github.com/vim/vim/commit/3b8ac8f8a4b3bab5637cf53507c7f77ebbadc51e
Author: Muraoka Taro <[email protected]>
Date: Mon May 25 15:23:47 2026 +0000
CI: Split platform specific CI configurations into separated files
- ci-linux.yml for Linux
- ci-linux_asan.yml for Linux ASan
- ci-macos.yml for macOS
- ci-windows.yml for Windows
closes: #20325
Signed-off-by: Muraoka Taro <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml
new file mode 100644
index 000000000..987fcecc8
--- /dev/null
+++ b/.github/workflows/ci-linux.yml
@@ -0,0 +1,176 @@
+name: CI for Linux
+
+on:
+ workflow_call:
+
+# Cancels all previous workflow runs for pull requests that have not completed.
+concurrency:
+ # The concurrency group contains the workflow name and the branch name for
+ # pull requests or the commit hash for any other events.
+ group: ${{ github.workflow }}-linux-${{ github.event_name == 'pull_request'
&& github.head_ref || github.sha }}
+ cancel-in-progress: true
+
+permissions:
+ contents: read # to fetch code (actions/checkout)
+
+jobs:
+ linux:
+ runs-on: ${{ matrix.architecture == 'arm64' && 'ubuntu-24.04-arm' ||
'ubuntu-24.04' }}
+
+ env:
+ CC: ${{ matrix.compiler }}
+ GCC_VER: 14
+ CLANG_VER: 22
+ TEST: test
+ SRCDIR: ./src
+ LEAK_CFLAGS: -DEXITFREE
+ LOG_DIR: ${{ github.workspace }}/logs
+ TERM: xterm
+ DISPLAY: ":99"
+ DEBIAN_FRONTEND: noninteractive
+
+ strategy:
+ fail-fast: false
+ matrix:
+ features: [tiny, normal, huge]
+ compiler: [clang, gcc]
+ extra: [[]]
+ # Only use non-native architecture when features != huge.
+ # features=huge tries to install python3-dev, which fails to install
+ # for the non-native architecture.
+ architecture: [native]
+ include:
+ - features: tiny
+ compiler: clang
+ extra: [nogui]
+ - features: tiny
+ compiler: gcc
+ extra: [nogui, syn_test_execs]
+ - features: tiny
+ compiler: gcc
+ extra: [nogui]
+ architecture: arm64
+ - features: normal
+ shadow: ./src/shadow
+ compiler: gcc
+ architecture: i386
+ - features: huge
+ coverage: true
+ - features: huge
+ compiler: clang
+ interface: dynamic
+ python3: stable-abi
+ - features: huge
+ compiler: gcc
+ coverage: true
+ interface: dynamic
+ extra: [uchar, testgui]
+ - features: huge
+ compiler: gcc
+ coverage: true
+ extra: [unittests]
+ - features: huge
+ compiler: gcc
+ coverage: true
+ extra: [unittests]
+ architecture: arm64
+ - features: normal
+ compiler: gcc
+ extra: [vimtags, proto, preproc_indent, encoding, codestyle]
+ - features: huge
+ compiler: gcc
+ extra: [no_x11_wl]
+
+ steps:
+ - name: Checkout repository from GitHub
+ uses: actions/checkout@v6
+
+ - name: Build
+ timeout-minutes: 15
+ uses: ./.github/actions/build_vim_on_linux
+ with:
+ features: ${{ matrix.features }}
+ compiler: ${{ matrix.compiler }}
+ architecture: ${{ matrix.architecture }}
+ extra: ${{ toJSON(matrix.extra) }}
+ shadow: ${{ matrix.shadow }}
+ interface: ${{ matrix.interface }}
+ lua_ver: ${{ matrix.lua_ver }}
+ python3: ${{ matrix.python3 }}
+ coverage: ${{ matrix.coverage }}
+
+ - name: Test
+ timeout-minutes: 20
+ run: make ${SHADOWOPT} ${TEST}
+
+ # Enable to debug failing tests live and ssh into the CI runners
+ # - name: Setup tmate session
+ # if: ${{ failure() }}
+ # uses: mxschmitt/action-tmate@v3
+ # with:
+ # limit-access-to-actor: true
+
+ - name: Upload failed test artifacts
+ if: ${{ !cancelled() }}
+ uses: ./.github/actions/test_artifacts
+
+ - name: Vim tags
+ if: contains(matrix.extra, 'vimtags')
+ run: |
+ # This will exit with an error code if the generated vim tags
differs from source.
+ (
+ cd runtime/doc
+ git diff --exit-code -- tags
+ make html; rm *.html tags.ref;
+ test -f errors.log && exit 3;
+ true
+ )
+
+ - name: Generate Proto files
+ if: contains(matrix.extra, 'proto')
+ run: |
+ # This will exit with an error code if the generated proto files
differ from source
+ (
+ git diff --exit-code -- src/proto/
+ true
+ )
+
+ - name: Check Source Code style
+ if: contains(matrix.extra, 'codestyle')
+ run: |
+ make -C src/testdir codestyle
+
+ - name: Check preprocessor indent
+ if: contains(matrix.extra, 'preproc_indent')
+ run: |
+ # This will exit with an error code if the files differ from source
+ (
+ "${SRCDIR}"/vim -u NONE --not-a-term -esNX +"cd runtime/tools" -S
preproc_indent.vim
+ git diff --exit-code -- src/*.[ch] src/xxd/xxd.c
+ true
+ )
+
+ - name: Check encoding of utf-8 runtime files
+ if: contains(matrix.extra, 'encoding')
+ run: |
+ # This will exit with an error code if utf-8 runtime files are not
in utf-8 encoding
+ (
+ find . -type f -name "*utf-8*.vim" -exec sh -c \
+ 'iconv -f utf-8 -t utf-8 "$1" >/dev/null 2>&1 || echo "non utf-8
encoding detected in $1"' \
+ find-sh {} \; |grep "non utf-8 encoding" && exit 3
+ true
+ )
+
+ - name: Generate gcov files
+ if: matrix.coverage
+ run: |
+ cd "${SRCDIR}"
+ find . -type f -name '*.gcno' -exec gcov -pb {} + || true
+
+ - name: Codecov
+ timeout-minutes: 20
+ if: matrix.coverage
+ uses: codecov/codecov-action@v6
+ with:
+ flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{
join(matrix.extra, '-') }}
+ token: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/ci-linux_asan.yml
b/.github/workflows/ci-linux_asan.yml
new file mode 100644
index 000000000..daa1e2593
--- /dev/null
+++ b/.github/workflows/ci-linux_asan.yml
@@ -0,0 +1,82 @@
+name: CI for Linux ASan
+
+on:
+ workflow_call:
+
+# Cancels all previous workflow runs for pull requests that have not completed.
+concurrency:
+ # The concurrency group contains the workflow name and the branch name for
+ # pull requests or the commit hash for any other events.
+ group: ${{ github.workflow }}-linux_asan-${{ github.event_name ==
'pull_request' && github.head_ref || github.sha }}
+ cancel-in-progress: true
+
+permissions:
+ contents: read # to fetch code (actions/checkout)
+
+jobs:
+ linux-asan:
+ runs-on: ubuntu-24.04
+
+ env:
+ CC: clang
+ CLANG_VER: 21
+ SRCDIR: ./src
+ LEAK_CFLAGS: -DEXITFREE
+ LOG_DIR: ${{ github.workspace }}/logs
+ TERM: xterm
+ DISPLAY: ":99"
+ DEBIAN_FRONTEND: noninteractive
+
+ strategy:
+ fail-fast: false
+ matrix:
+ testset:
+ - tinytests
+ - newtests.1
+ - newtests.2
+
+ steps:
+ - name: Checkout repository from GitHub
+ uses: actions/checkout@v6
+
+ - name: Build
+ timeout-minutes: 15
+ uses: ./.github/actions/build_vim_on_linux
+ with:
+ features: huge
+ compiler: clang
+ extra: '["asan"]'
+ # Lua5.1 is the most widely used version (since it's what LuaJIT is
+ # compatible with), so ensure it works
+ lua_ver: "5.1"
+
+ - name: Test (tinytests)
+ if: matrix.testset == 'tinytests'
+ timeout-minutes: 20
+ run: make ${TEST} NEW_TESTS_RES=
+
+ - name: Test (newtests)
+ if: startsWith(matrix.testset, 'newtests')
+ timeout-minutes: 20
+ env:
+ JOB_INDEX: ${{ strategy.job-index }}
+ JOB_TOTAL: ${{ strategy.job-total }}
+ run: |
+ set -x
+ make -C src/testdir SCRIPTS_TINY_OUT= \
+ NEW_TESTS_RES="$(python3 ci/gen_testset.py $((JOB_TOTAL-1)) | jq
-r --argjson i $((JOB_INDEX-1)) '.[$i]|join(" ")')"
+
+ - name: ASan logs
+ if: ${{ !cancelled() }}
+ run: |
+ for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}");
do
+ (
+ echo "$f"
+ asan_symbolize -l "$f"
+ ) | tee "$f".symbolized
+ false # in order to fail a job
+ done
+
+ - name: Upload failed test artifacts
+ if: ${{ !cancelled() }}
+ uses: ./.github/actions/test_artifacts
diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml
new file mode 100644
index 000000000..390f27eff
--- /dev/null
+++ b/.github/workflows/ci-macos.yml
@@ -0,0 +1,103 @@
+name: CI for macOS
+
+on:
+ workflow_call:
+
+# Cancels all previous workflow runs for pull requests that have not completed.
+concurrency:
+ # The concurrency group contains the workflow name and the branch name for
+ # pull requests or the commit hash for any other events.
+ group: ${{ github.workflow }}-macos-${{ github.event_name == 'pull_request'
&& github.head_ref || github.sha }}
+ cancel-in-progress: true
+
+permissions:
+ contents: read # to fetch code (actions/checkout)
+
+jobs:
+ macos:
+ runs-on: ${{ matrix.runner }}
+
+ env:
+ CC: clang
+ TEST: test
+ SRCDIR: ./src
+ LEAK_CFLAGS: -DEXITFREE
+ TERM: xterm
+
+ strategy:
+ fail-fast: false
+ matrix:
+ features: [tiny, normal, huge]
+ runner: [macos-15-intel, macos-26]
+
+ steps:
+ - name: Checkout repository from GitHub
+ uses: actions/checkout@v6
+
+ - name: Install packages
+ if: matrix.features == 'huge'
+ run: |
+ brew install lua libtool
+ echo "LUA_PREFIX=$(brew --prefix)" >> $GITHUB_ENV
+
+ - name: Set up environment
+ run: |
+ (
+ echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
+ case "${{ matrix.features }}" in
+ tiny)
+ echo "TEST=testtiny"
+ echo "CONFOPT=--disable-gui"
+ ;;
+ normal)
+ ;;
+ huge)
+ echo "CONFOPT=--enable-perlinterp --enable-python3interp
--enable-rubyinterp --enable-luainterp --enable-tclinterp"
+ ;;
+ esac
+ ) >> $GITHUB_ENV
+
+ - name: Configure
+ run: |
+ ./configure --with-features=${{ matrix.features }} ${CONFOPT}
--enable-fail-if-missing
+ # Append various warning flags to CFLAGS.
+ # BSD sed needs backup extension specified.
+ sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
+ # On macOS, the entity of gcc is clang.
+ sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk
+ # Suppress some warnings produced by clang 12 and later.
+ if clang --version | grep -qs 'Apple clang version
\(1[3-9]\|[2-9]\)\.'; then
+ sed -i.bak -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
+ fi
+
+ - name: Build
+ env:
+ LC_ALL: C
+ run: |
+ make -j${NPROC}
+
+ - name: Check version
+ run: |
+ "${SRCDIR}"/vim --version
+ "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S
ci/if_ver-1.vim -c quit
+ "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S
ci/if_ver-2.vim -c quit
+ if ${{ matrix.features == 'huge' }}; then
+ # Also check that optional and dynamic features are configured and
working
+ "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
+ -c "let g:required=['sound', 'perl', 'python3', 'lua', 'ruby',
'tcl']" \
+ -S ci/if_feat_check.vim -c quit
+ fi
+
+ - name: Install packages for testing
+ run: |
+ # Apple diff is broken. Use GNU diff instead. See #14032.
+ brew install diffutils
+
+ - name: Test
+ timeout-minutes: 25
+ run: |
+ make ${TEST}
+
+ - name: Upload failed test artifacts
+ if: ${{ !cancelled() }}
+ uses: ./.github/actions/test_artifacts
diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml
new file mode 100644
index 000000000..1f676b2ca
--- /dev/null
+++ b/.github/workflows/ci-windows.yml
@@ -0,0 +1,362 @@
+name: CI for Windows
+
+on:
+ workflow_call:
+
+# Cancels all previous workflow runs for pull requests that have not completed.
+concurrency:
+ # The concurrency group contains the workflow name and the branch name for
+ # pull requests or the commit hash for any other events.
+ group: ${{ github.workflow }}-windows-${{ github.event_name ==
'pull_request' && github.head_ref || github.sha }}
+ cancel-in-progress: true
+
+permissions:
+ contents: read # to fetch code (actions/checkout)
+
+jobs:
+ windows:
+ runs-on: windows-2022
+
+ env:
+ # Interfaces
+ # Lua
+ LUA_VER: 54
+ LUA_VER_DOT: "5.4"
+ LUA_RELEASE: 5.4.2
+ 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
+ # do not want \L to end up in pathdef.c and compiler complaining about
unknown escape sequences \l
+ LUA_DIR_SLASH: D:/Lua
+ # Python 2
+ PYTHON_VER: 27
+ PYTHON_VER_DOT: "2.7"
+ PYTHON_DIR: 'C:\Python27'
+ # Python 3
+ PYTHON3_VER: 313
+ PYTHON3_VER_DOT: "3.13"
+ # Other dependencies
+ # winpty
+ WINPTY_URL:
https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
+ # libsodium
+ SODIUM_VER: "1.0.20"
+ # SODIUM_MSVC_URL:
https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-msvc.zip
+ SODIUM_MSVC_URL:
https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-msvc.zip
+ SODIUM_MSVC_VER: v143
+ # SODIUM_MINGW_URL:
https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-mingw.tar.gz
+ SODIUM_MINGW_URL:
https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-mingw.tar.gz
+ SODIUM_MINGW_VER: 26
+ # Gettext-tools, iconv and libraries
+ GETTEXT32_URL:
https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-32.zip
+ GETTEXT64_URL:
https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-64.zip
+ # Escape sequences
+ COL_RED: "\x1b[31m"
+ COL_GREEN: "\x1b[32m"
+ COL_YELLOW: "\x1b[33m"
+ COL_RESET: "\x1b[m"
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch:
x64, python3: stable }
+ - { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: yes, arch:
x86, python3: stable, coverage: yes }
+ - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: yes, arch:
x86 }
+ - { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: no, arch:
x64, coverage: yes }
+ - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch:
x64, ttytype: conpty }
+ - { features: NORMAL, toolchain: msvc, VIMDLL: yes, GUI: no, arch:
x86 }
+ - { features: NORMAL, toolchain: mingw, VIMDLL: no, GUI: yes, arch:
x64 }
+ - { features: TINY, toolchain: msvc, VIMDLL: yes, GUI: yes, arch:
x64 }
+ - { features: TINY, toolchain: mingw, VIMDLL: no, GUI: no, arch:
x86 }
+
+ steps:
+ - name: Initialize
+ id: init
+ shell: bash
+ run: |
+ # Show Windows version
+ cmd /c ver
+
+ if ${{ matrix.arch == 'x64' }}; then
+ cygreg=registry
+ pyreg=
+ echo "VCARCH=amd64" >> $GITHUB_ENV
+ echo "WARCH=x64" >> $GITHUB_ENV
+ echo "BITS=64" >> $GITHUB_ENV
+ echo "MSYSTEM=MINGW64" >> $GITHUB_ENV
+ else
+ cygreg=registry32
+ pyreg=-32
+ echo "VCARCH=x86" >> $GITHUB_ENV
+ echo "WARCH=ia32" >> $GITHUB_ENV
+ echo "BITS=32" >> $GITHUB_ENV
+ echo "MSYSTEM=MINGW32" >> $GITHUB_ENV
+ fi
+
+ echo "VCVARSALL=$(vswhere -products \* -latest -property
installationPath)\VC\Auxiliary\Build\vcvarsall.bat" >> $GITHUB_ENV
+ if ${{ matrix.features != 'TINY' }}; then
+ if ${{ matrix.arch == 'x86' }}; then
+ choco install python2 --no-progress --forcex86
+ else
+ choco install python2 --no-progress
+ fi
+ fi
+ python3_dir=$(cat
"/proc/$cygreg/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}$pyreg/InstallPath/@")
+ echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV
+
+ if ${{ matrix.toolchain == 'msvc' }}; then
+ SODIUM_DIR=D:\libsodium
+ echo "SODIUM_LIB=${SODIUM_DIR}\${{ matrix.arch == 'x64' && 'x64'
|| 'Win32' }}\Release\${SODIUM_MSVC_VER}\dynamic" >> $GITHUB_ENV
+ else
+ SODIUM_DIR=D:\libsodium-win${{ matrix.arch == 'x64' && '64' ||
'32' }}
+ # do not want \L to end up in pathdef.c and compiler complaining
about unknown escape sequences \l
+ SODIUM_DIR_SLASH=D:/libsodium-win${{ matrix.arch == 'x64' && '64'
|| '32' }}
+ echo "SODIUM_LIB=${SODIUM_DIR}\bin" >> $GITHUB_ENV
+ echo "SODIUM_DIR_SLASH=${SODIUM_DIR_SLASH}" >> $GITHUB_ENV
+ fi
+ echo "SODIUM_DIR=${SODIUM_DIR}" >> $GITHUB_ENV
+ echo "GETTEXT_PATH=D:\gettext${{ matrix.arch == 'x64' && '64' ||
'32' }}" >> $GITHUB_ENV
+
+ - uses: msys2/[email protected]
+ if: matrix.toolchain == 'mingw'
+ with:
+ update: true
+ install: tar
+ pacboy: >-
+ make:p gcc:p
+ msystem: ${{ env.MSYSTEM }}
+ release: false
+
+ - name: Checkout repository from GitHub
+ uses: actions/checkout@v6
+
+ - name: Create a list of download URLs
+ shell: cmd
+ run: |
+ type NUL > urls.txt
+ echo %LUA_RELEASE%>> urls.txt
+ echo %WINPTY_URL%>> urls.txt
+ echo %SODIUM_VER%>> urls.txt
+ echo %GETTEXT32_URL%>> urls.txt
+ echo %GETTEXT64_URL%>> urls.txt
+
+ - name: Cache downloaded files
+ uses: actions/[email protected]
+ with:
+ path: downloads
+ key: ${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('urls.txt') }}
+
+ - name: Download dependencies
+ shell: cmd
+ run: |
+ path C:\Program Files -Zip;%path%
+ if not exist downloads mkdir downloads
+
+ echo %COL_GREEN%Download Lua%COL_RESET%
+ call :downloadfile %LUA${{ env.BITS }}_URL% downloads\lua.zip
+ 7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
+
+ if not "${{ matrix.ttytype }}" == "conpty" (
+ 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\%WARCH% in\winpty.dll src\winpty%BITS%.dll
+ copy /Y D:\winpty\%WARCH% in\winpty-agent.exe src\
+ )
+
+ echo %COL_GREEN%Download libsodium%COL_RESET%
+ if "${{ matrix.toolchain }}"=="msvc" (
+ call :downloadfile %SODIUM_MSVC_URL% downloads\libsodium.zip
+ 7z x -y downloads\libsodium.zip -oD:\ > nul || exit 1
+ ) else (
+ call :downloadfile %SODIUM_MINGW_URL% downloads\libsodium.tar.gz
+ 7z x -y downloads\libsodium.tar.gz -so | 7z x -si -ttar -oD:\ >
nul || exit 1
+ mklink %SODIUM_LIB%\libsodium.dll
%SODIUM_LIB%\libsodium-%SODIUM_MINGW_VER%.dll
+ )
+
+ echo %COL_GREEN%Download Gettext%COL_RESET%
+ call :downloadfile %GETTEXT${{ env.BITS }}_URL% downloads\gettext${{
env.BITS }}.zip
+ 7z e -y downloads\gettext${{ env.BITS }}.zip -oD:\gettext${{
env.BITS }} > nul || exit 1
+ copy /y D:\gettext${{ env.BITS }}\libintl-8.dll src\ || exit 1
+ copy /y D:\gettext${{ env.BITS }}\libiconv-2.dll src\ || exit 1
+
+ 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%" %VCARCH%
+ cd src
+ if "${{ matrix.VIMDLL }}"=="yes" (
+ set GUI=yes
+ ) else (
+ set GUI=${{ matrix.GUI }}
+ )
+ if "${{ matrix.python3 }}"=="stable" (
+ set PYTHON3_STABLE=yes
+ ) else (
+ set PYTHON3_STABLE=no
+ )
+ if "${{ matrix.features }}"=="HUGE" (
+ nmake -nologo -f Make_mvc.mak ^
+ FEATURES=${{ matrix.features }} ^
+ GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^
+ DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
+ DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
+ DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^
+ DYNAMIC_PYTHON3_STABLE_ABI=%PYTHON3_STABLE% ^
+ DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR% ^
+ CI_FLAGS=/we4267
+ ) else (
+ nmake -nologo -f Make_mvc.mak ^
+ FEATURES=${{ matrix.features }} ^
+ GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^
+ CI_FLAGS=/we4267
+ )
+
+ - name: Build (MinGW)
+ if: matrix.toolchain == 'mingw'
+ shell: msys2 {0}
+ run: |
+ cd src
+ if [ "${{ matrix.VIMDLL }}" = "yes" ]; then
+ GUI=yes
+ else
+ GUI=${{ matrix.GUI }}
+ fi
+ if [ "${{ matrix.python3 }}" = "stable" ]; then
+ PYTHON3_STABLE=yes
+ else
+ PYTHON3_STABLE=no
+ fi
+ if [ "${{ matrix.features }}" = "HUGE" ]; then
+ mingw32-make -f Make_ming.mak -j2 \
+ FEATURES=${{ matrix.features }} \
+ GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \
+ DYNAMIC_LUA=yes LUA=${LUA_DIR_SLASH} \
+ DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
+ DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
+ DYNAMIC_PYTHON3_STABLE_ABI=${PYTHON3_STABLE} \
+ DYNAMIC_SODIUM=yes SODIUM=${SODIUM_DIR_SLASH} \
+ STATIC_STDCPLUS=yes COVERAGE=${{ matrix.coverage }}
+ else
+ mingw32-make -f Make_ming.mak -j2 \
+ FEATURES=${{ matrix.features }} \
+ GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \
+ STATIC_STDCPLUS=yes
+ fi
+
+ - name: Check version
+ shell: cmd
+ run: |
+ PATH %LUA_DIR%;C:\msys64\%MSYSTEM% in;%PYTHON3_DIR%;%PATH%
+ if "${{ matrix.GUI }}"=="yes" (
+ start /wait src\gvim -u NONE -i NONE -c "redir > version.txt | ver
| q" || exit 1
+ type version.txt
+ echo.
+ start /wait src\gvim -u NONE -i NONE -c "redir! > version.txt | so
ci\if_ver-1.vim | q"
+ start /wait src\gvim -u NONE -i NONE -c "redir >> version.txt | so
ci\if_ver-2.vim | q"
+ type version.txt
+ del version.txt
+ ) else (
+ src im --version || exit 1
+ src im -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim
-c quit
+ src im -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim
-c quit
+ if "${{ matrix.features }}"=="HUGE" (
+ src im -u NONE -i NONE --not-a-term -esNX -V1 ^
+ -c "let g:required=['gettext', 'sodium', 'sound', 'python3',
'lua']" ^
+ -S ci/if_feat_check.vim -c quit
+ )
+ )
+
+ #- name: Prepare Artifact
+ # shell: cmd
+ # run: |
+ # mkdir artifacts
+ # copy src\*vim.exe artifacts
+ # copy src im*.dll artifacts
+ #
+ #- name: Upload Artifact
+ # uses: actions/upload-artifact@v7
+ # with:
+ # name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
+ # path: ./artifacts
+
+ # disabled because of
https://github.com/tunisiano187/Chocolatey-packages/issues/3916
+ #- name: Install packages for testing
+ # shell: bash
+ # run: |
+ # if ${{ matrix.features != 'TINY' }}; then
+ # if ${{ matrix.arch == 'x64' }}; then
+ # choco install netbeans --no-progress
+ # else
+ # exit 0
+ # fi
+ # fi
+
+ - name: Test and show the result of testing gVim
+ if: matrix.GUI == 'yes' || matrix.VIMDLL == 'yes'
+ shell: cmd
+ timeout-minutes: 15
+ run: |
+ PATH %LUA_DIR%;C:\msys64\%MSYSTEM%
in;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB%
+ call "%VCVARSALL%" %VCARCH%
+
+ echo %COL_GREEN%Test gVim:%COL_RESET%
+ cd src estdir
+ if "${{ matrix.GUI }}"=="yes" (
+ nmake -nologo -f Make_mvc.mak VIMPROG=..\gvim || exit 1
+ ) else (
+ @rem Run only tiny tests.
+ nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\gvim || exit 1
+ )
+
+ - name: Test and show the result of testing Vim
+ if: matrix.GUI == 'no' || matrix.VIMDLL == 'yes'
+ shell: cmd
+ timeout-minutes: 15
+ run: |
+ PATH %LUA_DIR%;C:\msys64\%MSYSTEM%
in;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB%
+ call "%VCVARSALL%" %VCARCH%
+
+ echo %COL_GREEN%Test Vim:%COL_RESET%
+ cd src estdir
+ nmake -nologo -f Make_mvc.mak clean
+ if "${{ matrix.GUI }}"=="no" (
+ nmake -nologo -f Make_mvc.mak VIMPROG=.. im || exit 1
+ ) else (
+ @rem Run only tiny tests.
+ nmake -nologo -f Make_mvc.mak tiny VIMPROG=.. im || exit 1
+ )
+
+ - name: Upload failed test artifacts
+ if: ${{ !cancelled() }}
+ uses: ./.github/actions/test_artifacts
+
+ - name: Generate gcov files
+ if: matrix.coverage
+ shell: msys2 {0}
+ run: |
+ cd src
+ find . -type f -name '*.gcno' -exec gcov -pb {} + || true
+
+ - name: Codecov
+ timeout-minutes: 20
+ if: matrix.coverage
+ uses: codecov/codecov-action@v6
+ with:
+ directory: src
+ flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{
matrix.features }}
+ token: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6a3e61927..c725027b8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -16,665 +16,23 @@ permissions:
contents: read # to fetch code (actions/checkout)
jobs:
- linux:
- runs-on: ${{ matrix.architecture == 'arm64' && 'ubuntu-24.04-arm' ||
'ubuntu-24.04' }}
-
- env:
- CC: ${{ matrix.compiler }}
- GCC_VER: 14
- CLANG_VER: 22
- TEST: test
- SRCDIR: ./src
- LEAK_CFLAGS: -DEXITFREE
- LOG_DIR: ${{ github.workspace }}/logs
- TERM: xterm
- DISPLAY: ":99"
- DEBIAN_FRONTEND: noninteractive
-
- strategy:
- fail-fast: false
- matrix:
- features: [tiny, normal, huge]
- compiler: [clang, gcc]
- extra: [[]]
- # Only use non-native architecture when features != huge.
- # features=huge tries to install python3-dev, which fails to install
- # for the non-native architecture.
- architecture: [native]
- include:
- - features: tiny
- compiler: clang
- extra: [nogui]
- - features: tiny
- compiler: gcc
- extra: [nogui, syn_test_execs]
- - features: tiny
- compiler: gcc
- extra: [nogui]
- architecture: arm64
- - features: normal
- shadow: ./src/shadow
- compiler: gcc
- architecture: i386
- - features: huge
- coverage: true
- - features: huge
- compiler: clang
- interface: dynamic
- python3: stable-abi
- - features: huge
- compiler: gcc
- coverage: true
- interface: dynamic
- extra: [uchar, testgui]
- - features: huge
- compiler: gcc
- coverage: true
- extra: [unittests]
- - features: huge
- compiler: gcc
- coverage: true
- extra: [unittests]
- architecture: arm64
- - features: normal
- compiler: gcc
- extra: [vimtags, proto, preproc_indent, encoding, codestyle]
- - features: huge
- compiler: gcc
- extra: [no_x11_wl]
-
- steps:
- - name: Checkout repository from GitHub
- uses: actions/checkout@v6
-
- - name: Build
- timeout-minutes: 15
- uses: ./.github/actions/build_vim_on_linux
- with:
- features: ${{ matrix.features }}
- compiler: ${{ matrix.compiler }}
- architecture: ${{ matrix.architecture }}
- extra: ${{ toJSON(matrix.extra) }}
- shadow: ${{ matrix.shadow }}
- interface: ${{ matrix.interface }}
- lua_ver: ${{ matrix.lua_ver }}
- python3: ${{ matrix.python3 }}
- coverage: ${{ matrix.coverage }}
-
- - name: Test
- timeout-minutes: 20
- run: make ${SHADOWOPT} ${TEST}
-
- # Enable to debug failing tests live and ssh into the CI runners
- # - name: Setup tmate session
- # if: ${{ failure() }}
- # uses: mxschmitt/action-tmate@v3
- # with:
- # limit-access-to-actor: true
-
- - name: Upload failed test artifacts
- if: ${{ !cancelled() }}
- uses: ./.github/actions/test_artifacts
- - name: Vim tags
- if: contains(matrix.extra, 'vimtags')
- run: |
- # This will exit with an error code if the generated vim tags
differs from source.
- (
- cd runtime/doc
- git diff --exit-code -- tags
- make html; rm *.html tags.ref;
- test -f errors.log && exit 3;
- true
- )
-
- - name: Generate Proto files
- if: contains(matrix.extra, 'proto')
- run: |
- # This will exit with an error code if the generated proto files
differ from source
- (
- git diff --exit-code -- src/proto/
- true
- )
-
- - name: Check Source Code style
- if: contains(matrix.extra, 'codestyle')
- run: |
- make -C src/testdir codestyle
-
- - name: Check preprocessor indent
- if: contains(matrix.extra, 'preproc_indent')
- run: |
- # This will exit with an error code if the files differ from source
- (
- "${SRCDIR}"/vim -u NONE --not-a-term -esNX +"cd runtime/tools" -S
preproc_indent.vim
- git diff --exit-code -- src/*.[ch] src/xxd/xxd.c
- true
- )
-
- - name: Check encoding of utf-8 runtime files
- if: contains(matrix.extra, 'encoding')
- run: |
- # This will exit with an error code if utf-8 runtime files are not
in utf-8 encoding
- (
- find . -type f -name "*utf-8*.vim" -exec sh -c \
- 'iconv -f utf-8 -t utf-8 "$1" >/dev/null 2>&1 || echo "non utf-8
encoding detected in $1"' \
- find-sh {} \; |grep "non utf-8 encoding" && exit 3
- true
- )
-
- - name: Generate gcov files
- if: matrix.coverage
- run: |
- cd "${SRCDIR}"
- find . -type f -name '*.gcno' -exec gcov -pb {} + || true
-
- - name: Codecov
- timeout-minutes: 20
- if: matrix.coverage
- uses: codecov/codecov-action@v6
- with:
- flags: linux,${{ matrix.features }}-${{ matrix.compiler }}-${{
join(matrix.extra, '-') }}
- token: ${{ secrets.CODECOV_TOKEN }}
+ linux:
+ name: Linux
+ uses: ./.github/workflows/ci-linux.yml
+ secrets: inherit
linux-asan:
- runs-on: ubuntu-24.04
-
- env:
- CC: clang
- CLANG_VER: 21
- SRCDIR: ./src
- LEAK_CFLAGS: -DEXITFREE
- LOG_DIR: ${{ github.workspace }}/logs
- TERM: xterm
- DISPLAY: ":99"
- DEBIAN_FRONTEND: noninteractive
-
- strategy:
- fail-fast: false
- matrix:
- testset:
- - tinytests
- - newtests.1
- - newtests.2
-
- steps:
- - name: Checkout repository from GitHub
- uses: actions/checkout@v6
-
- - name: Build
- timeout-minutes: 15
- uses: ./.github/actions/build_vim_on_linux
- with:
- features: huge
- compiler: clang
- extra: '["asan"]'
- # Lua5.1 is the most widely used version (since it's what LuaJIT is
- # compatible with), so ensure it works
- lua_ver: "5.1"
-
- - name: Test (tinytests)
- if: matrix.testset == 'tinytests'
- timeout-minutes: 20
- run: make ${TEST} NEW_TESTS_RES=
-
- - name: Test (newtests)
- if: startsWith(matrix.testset, 'newtests')
- timeout-minutes: 20
- env:
- JOB_INDEX: ${{ strategy.job-index }}
- JOB_TOTAL: ${{ strategy.job-total }}
- run: |
- set -x
- make -C src/testdir SCRIPTS_TINY_OUT= \
- NEW_TESTS_RES="$(python3 ci/gen_testset.py $((JOB_TOTAL-1)) | jq
-r --argjson i $((JOB_INDEX-1)) '.[$i]|join(" ")')"
-
- - name: ASan logs
- if: ${{ !cancelled() }}
- run: |
- for f in $(grep -lR '#[[:digit:]]* *0x[[:xdigit:]]*' "${LOG_DIR}");
do
- (
- echo "$f"
- asan_symbolize -l "$f"
- ) | tee "$f".symbolized
- false # in order to fail a job
- done
-
- - name: Upload failed test artifacts
- if: ${{ !cancelled() }}
- uses: ./.github/actions/test_artifacts
+ name: Linux ASan
+ uses: ./.github/workflows/ci-linux_asan.yml
+ secrets: inherit
macos:
- runs-on: ${{ matrix.runner }}
-
- env:
- CC: clang
- TEST: test
- SRCDIR: ./src
- LEAK_CFLAGS: -DEXITFREE
- TERM: xterm
-
- strategy:
- fail-fast: false
- matrix:
- features: [tiny, normal, huge]
- runner: [macos-15-intel, macos-26]
-
- steps:
- - name: Checkout repository from GitHub
- uses: actions/checkout@v6
-
- - name: Install packages
- if: matrix.features == 'huge'
- run: |
- brew install lua libtool
- echo "LUA_PREFIX=$(brew --prefix)" >> $GITHUB_ENV
-
- - name: Set up environment
- run: |
- (
- echo "NPROC=$(getconf _NPROCESSORS_ONLN)"
- case "${{ matrix.features }}" in
- tiny)
- echo "TEST=testtiny"
- echo "CONFOPT=--disable-gui"
- ;;
- normal)
- ;;
- huge)
- echo "CONFOPT=--enable-perlinterp --enable-python3interp
--enable-rubyinterp --enable-luainterp --enable-tclinterp"
- ;;
- esac
- ) >> $GITHUB_ENV
-
- - name: Configure
- run: |
- ./configure --with-features=${{ matrix.features }} ${CONFOPT}
--enable-fail-if-missing
- # Append various warning flags to CFLAGS.
- # BSD sed needs backup extension specified.
- sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk
- # On macOS, the entity of gcc is clang.
- sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk
- # Suppress some warnings produced by clang 12 and later.
- if clang --version | grep -qs 'Apple clang version
\(1[3-9]\|[2-9]\)\.'; then
- sed -i.bak -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk
- fi
-
- - name: Build
- env:
- LC_ALL: C
- run: |
- make -j${NPROC}
-
- - name: Check version
- run: |
- "${SRCDIR}"/vim --version
- "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S
ci/if_ver-1.vim -c quit
- "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S
ci/if_ver-2.vim -c quit
- if ${{ matrix.features == 'huge' }}; then
- # Also check that optional and dynamic features are configured and
working
- "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
- -c "let g:required=['sound', 'perl', 'python3', 'lua', 'ruby',
'tcl']" \
- -S ci/if_feat_check.vim -c quit
- fi
-
- - name: Install packages for testing
- run: |
- # Apple diff is broken. Use GNU diff instead. See #14032.
- brew install diffutils
-
- - name: Test
- timeout-minutes: 25
- run: |
- make ${TEST}
-
- - name: Upload failed test artifacts
- if: ${{ !cancelled() }}
- uses: ./.github/actions/test_artifacts
+ name: macOS
+ uses: ./.github/workflows/ci-macos.yml
+ secrets: inherit
windows:
- runs-on: windows-2022
-
- env:
- # Interfaces
- # Lua
- LUA_VER: 54
- LUA_VER_DOT: "5.4"
- LUA_RELEASE: 5.4.2
- 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
- # do not want \L to end up in pathdef.c and compiler complaining about
unknown escape sequences \l
- LUA_DIR_SLASH: D:/Lua
- # Python 2
- PYTHON_VER: 27
- PYTHON_VER_DOT: "2.7"
- PYTHON_DIR: 'C:\Python27'
- # Python 3
- PYTHON3_VER: 313
- PYTHON3_VER_DOT: "3.13"
- # Other dependencies
- # winpty
- WINPTY_URL:
https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip
- # libsodium
- SODIUM_VER: "1.0.20"
- # SODIUM_MSVC_URL:
https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-msvc.zip
- SODIUM_MSVC_URL:
https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-msvc.zip
- SODIUM_MSVC_VER: v143
- # SODIUM_MINGW_URL:
https://download.libsodium.org/libsodium/releases/libsodium-%SODIUM_VER%-stable-mingw.tar.gz
- SODIUM_MINGW_URL:
https://github.com/jedisct1/libsodium/releases/download/%SODIUM_VER%-RELEASE/libsodium-%SODIUM_VER%-mingw.tar.gz
- SODIUM_MINGW_VER: 26
- # Gettext-tools, iconv and libraries
- GETTEXT32_URL:
https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-32.zip
- GETTEXT64_URL:
https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-shared-64.zip
- # Escape sequences
- COL_RED: "\x1b[31m"
- COL_GREEN: "\x1b[32m"
- COL_YELLOW: "\x1b[33m"
- COL_RESET: "\x1b[m"
-
- strategy:
- fail-fast: false
- matrix:
- include:
- - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch:
x64, python3: stable }
- - { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: yes, arch:
x86, python3: stable, coverage: yes }
- - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: yes, arch:
x86 }
- - { features: HUGE, toolchain: mingw, VIMDLL: yes, GUI: no, arch:
x64, coverage: yes }
- - { features: HUGE, toolchain: msvc, VIMDLL: no, GUI: no, arch:
x64, ttytype: conpty }
- - { features: NORMAL, toolchain: msvc, VIMDLL: yes, GUI: no, arch:
x86 }
- - { features: NORMAL, toolchain: mingw, VIMDLL: no, GUI: yes, arch:
x64 }
- - { features: TINY, toolchain: msvc, VIMDLL: yes, GUI: yes, arch:
x64 }
- - { features: TINY, toolchain: mingw, VIMDLL: no, GUI: no, arch:
x86 }
-
- steps:
- - name: Initialize
- id: init
- shell: bash
- run: |
- # Show Windows version
- cmd /c ver
-
- if ${{ matrix.arch == 'x64' }}; then
- cygreg=registry
- pyreg=
- echo "VCARCH=amd64" >> $GITHUB_ENV
- echo "WARCH=x64" >> $GITHUB_ENV
- echo "BITS=64" >> $GITHUB_ENV
- echo "MSYSTEM=MINGW64" >> $GITHUB_ENV
- else
- cygreg=registry32
- pyreg=-32
- echo "VCARCH=x86" >> $GITHUB_ENV
- echo "WARCH=ia32" >> $GITHUB_ENV
- echo "BITS=32" >> $GITHUB_ENV
- echo "MSYSTEM=MINGW32" >> $GITHUB_ENV
- fi
-
- echo "VCVARSALL=$(vswhere -products \* -latest -property
installationPath)\VC\Auxiliary\Build\vcvarsall.bat" >> $GITHUB_ENV
- if ${{ matrix.features != 'TINY' }}; then
- if ${{ matrix.arch == 'x86' }}; then
- choco install python2 --no-progress --forcex86
- else
- choco install python2 --no-progress
- fi
- fi
- python3_dir=$(cat
"/proc/$cygreg/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}$pyreg/InstallPath/@")
- echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV
-
- if ${{ matrix.toolchain == 'msvc' }}; then
- SODIUM_DIR=D:\libsodium
- echo "SODIUM_LIB=${SODIUM_DIR}\${{ matrix.arch == 'x64' && 'x64'
|| 'Win32' }}\Release\${SODIUM_MSVC_VER}\dynamic" >> $GITHUB_ENV
- else
- SODIUM_DIR=D:\libsodium-win${{ matrix.arch == 'x64' && '64' ||
'32' }}
- # do not want \L to end up in pathdef.c and compiler complaining
about unknown escape sequences \l
- SODIUM_DIR_SLASH=D:/libsodium-win${{ matrix.arch == 'x64' && '64'
|| '32' }}
- echo "SODIUM_LIB=${SODIUM_DIR}\bin" >> $GITHUB_ENV
- echo "SODIUM_DIR_SLASH=${SODIUM_DIR_SLASH}" >> $GITHUB_ENV
- fi
- echo "SODIUM_DIR=${SODIUM_DIR}" >> $GITHUB_ENV
- echo "GETTEXT_PATH=D:\gettext${{ matrix.arch == 'x64' && '64' ||
'32' }}" >> $GITHUB_ENV
-
- - uses: msys2/[email protected]
- if: matrix.toolchain == 'mingw'
- with:
- update: true
- install: tar
- pacboy: >-
- make:p gcc:p
- msystem: ${{ env.MSYSTEM }}
- release: false
-
- - name: Checkout repository from GitHub
- uses: actions/checkout@v6
-
- - name: Create a list of download URLs
- shell: cmd
- run: |
- type NUL > urls.txt
- echo %LUA_RELEASE%>> urls.txt
- echo %WINPTY_URL%>> urls.txt
- echo %SODIUM_VER%>> urls.txt
- echo %GETTEXT32_URL%>> urls.txt
- echo %GETTEXT64_URL%>> urls.txt
-
- - name: Cache downloaded files
- uses: actions/[email protected]
- with:
- path: downloads
- key: ${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('urls.txt') }}
-
- - name: Download dependencies
- shell: cmd
- run: |
- path C:\Program Files -Zip;%path%
- if not exist downloads mkdir downloads
-
- echo %COL_GREEN%Download Lua%COL_RESET%
- call :downloadfile %LUA${{ env.BITS }}_URL% downloads\lua.zip
- 7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1
-
- if not "${{ matrix.ttytype }}" == "conpty" (
- 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\%WARCH% in\winpty.dll src\winpty%BITS%.dll
- copy /Y D:\winpty\%WARCH% in\winpty-agent.exe src\
- )
-
- echo %COL_GREEN%Download libsodium%COL_RESET%
- if "${{ matrix.toolchain }}"=="msvc" (
- call :downloadfile %SODIUM_MSVC_URL% downloads\libsodium.zip
- 7z x -y downloads\libsodium.zip -oD:\ > nul || exit 1
- ) else (
- call :downloadfile %SODIUM_MINGW_URL% downloads\libsodium.tar.gz
- 7z x -y downloads\libsodium.tar.gz -so | 7z x -si -ttar -oD:\ >
nul || exit 1
- mklink %SODIUM_LIB%\libsodium.dll
%SODIUM_LIB%\libsodium-%SODIUM_MINGW_VER%.dll
- )
-
- echo %COL_GREEN%Download Gettext%COL_RESET%
- call :downloadfile %GETTEXT${{ env.BITS }}_URL% downloads\gettext${{
env.BITS }}.zip
- 7z e -y downloads\gettext${{ env.BITS }}.zip -oD:\gettext${{
env.BITS }} > nul || exit 1
- copy /y D:\gettext${{ env.BITS }}\libintl-8.dll src\ || exit 1
- copy /y D:\gettext${{ env.BITS }}\libiconv-2.dll src\ || exit 1
-
- 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%" %VCARCH%
- cd src
- if "${{ matrix.VIMDLL }}"=="yes" (
- set GUI=yes
- ) else (
- set GUI=${{ matrix.GUI }}
- )
- if "${{ matrix.python3 }}"=="stable" (
- set PYTHON3_STABLE=yes
- ) else (
- set PYTHON3_STABLE=no
- )
- if "${{ matrix.features }}"=="HUGE" (
- nmake -nologo -f Make_mvc.mak ^
- FEATURES=${{ matrix.features }} ^
- GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^
- DYNAMIC_LUA=yes LUA=%LUA_DIR% ^
- DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
- DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^
- DYNAMIC_PYTHON3_STABLE_ABI=%PYTHON3_STABLE% ^
- DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR% ^
- CI_FLAGS=/we4267
- ) else (
- nmake -nologo -f Make_mvc.mak ^
- FEATURES=${{ matrix.features }} ^
- GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^
- CI_FLAGS=/we4267
- )
-
- - name: Build (MinGW)
- if: matrix.toolchain == 'mingw'
- shell: msys2 {0}
- run: |
- cd src
- if [ "${{ matrix.VIMDLL }}" = "yes" ]; then
- GUI=yes
- else
- GUI=${{ matrix.GUI }}
- fi
- if [ "${{ matrix.python3 }}" = "stable" ]; then
- PYTHON3_STABLE=yes
- else
- PYTHON3_STABLE=no
- fi
- if [ "${{ matrix.features }}" = "HUGE" ]; then
- mingw32-make -f Make_ming.mak -j2 \
- FEATURES=${{ matrix.features }} \
- GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \
- DYNAMIC_LUA=yes LUA=${LUA_DIR_SLASH} \
- DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \
- DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \
- DYNAMIC_PYTHON3_STABLE_ABI=${PYTHON3_STABLE} \
- DYNAMIC_SODIUM=yes SODIUM=${SODIUM_DIR_SLASH} \
- STATIC_STDCPLUS=yes COVERAGE=${{ matrix.coverage }}
- else
- mingw32-make -f Make_ming.mak -j2 \
- FEATURES=${{ matrix.features }} \
- GUI=$GUI IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} \
- STATIC_STDCPLUS=yes
- fi
-
- - name: Check version
- shell: cmd
- run: |
- PATH %LUA_DIR%;C:\msys64\%MSYSTEM% in;%PYTHON3_DIR%;%PATH%
- if "${{ matrix.GUI }}"=="yes" (
- start /wait src\gvim -u NONE -i NONE -c "redir > version.txt | ver
| q" || exit 1
- type version.txt
- echo.
- start /wait src\gvim -u NONE -i NONE -c "redir! > version.txt | so
ci\if_ver-1.vim | q"
- start /wait src\gvim -u NONE -i NONE -c "redir >> version.txt | so
ci\if_ver-2.vim | q"
- type version.txt
- del version.txt
- ) else (
- src im --version || exit 1
- src im -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim
-c quit
- src im -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim
-c quit
- if "${{ matrix.features }}"=="HUGE" (
- src im -u NONE -i NONE --not-a-term -esNX -V1 ^
- -c "let g:required=['gettext', 'sodium', 'sound', 'python3',
'lua']" ^
- -S ci/if_feat_check.vim -c quit
- )
- )
-
- #- name: Prepare Artifact
- # shell: cmd
- # run: |
- # mkdir artifacts
- # copy src\*vim.exe artifacts
- # copy src im*.dll artifacts
- #
- #- name: Upload Artifact
- # uses: actions/upload-artifact@v7
- # with:
- # name: vim${{ matrix.bits }}-${{ matrix.toolchain }}
- # path: ./artifacts
-
- # disabled because of
https://github.com/tunisiano187/Chocolatey-packages/issues/3916
- #- name: Install packages for testing
- # shell: bash
- # run: |
- # if ${{ matrix.features != 'TINY' }}; then
- # if ${{ matrix.arch == 'x64' }}; then
- # choco install netbeans --no-progress
- # else
- # exit 0
- # fi
- # fi
-
- - name: Test and show the result of testing gVim
- if: matrix.GUI == 'yes' || matrix.VIMDLL == 'yes'
- shell: cmd
- timeout-minutes: 15
- run: |
- PATH %LUA_DIR%;C:\msys64\%MSYSTEM%
in;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB%
- call "%VCVARSALL%" %VCARCH%
-
- echo %COL_GREEN%Test gVim:%COL_RESET%
- cd src estdir
- if "${{ matrix.GUI }}"=="yes" (
- nmake -nologo -f Make_mvc.mak VIMPROG=..\gvim || exit 1
- ) else (
- @rem Run only tiny tests.
- nmake -nologo -f Make_mvc.mak tiny VIMPROG=..\gvim || exit 1
- )
-
- - name: Test and show the result of testing Vim
- if: matrix.GUI == 'no' || matrix.VIMDLL == 'yes'
- shell: cmd
- timeout-minutes: 15
- run: |
- PATH %LUA_DIR%;C:\msys64\%MSYSTEM%
in;%PYTHON3_DIR%;%PATH%;%SODIUM_LIB%
- call "%VCVARSALL%" %VCARCH%
-
- echo %COL_GREEN%Test Vim:%COL_RESET%
- cd src estdir
- nmake -nologo -f Make_mvc.mak clean
- if "${{ matrix.GUI }}"=="no" (
- nmake -nologo -f Make_mvc.mak VIMPROG=.. im || exit 1
- ) else (
- @rem Run only tiny tests.
- nmake -nologo -f Make_mvc.mak tiny VIMPROG=.. im || exit 1
- )
-
- - name: Upload failed test artifacts
- if: ${{ !cancelled() }}
- uses: ./.github/actions/test_artifacts
-
- - name: Generate gcov files
- if: matrix.coverage
- shell: msys2 {0}
- run: |
- cd src
- find . -type f -name '*.gcno' -exec gcov -pb {} + || true
-
- - name: Codecov
- timeout-minutes: 20
- if: matrix.coverage
- uses: codecov/codecov-action@v6
- with:
- directory: src
- flags: windows,${{ matrix.toolchain }}-${{ matrix.arch }}-${{
matrix.features }}
- token: ${{ secrets.CODECOV_TOKEN }}
+ name: Windows
+ uses: ./.github/workflows/ci-windows.yml
+ secrets: inherit
diff --git a/Filelist b/Filelist
index 4ea946c84..53113b456 100644
--- a/Filelist
+++ b/Filelist
@@ -9,6 +9,10 @@ SRC_ALL = \
.github/MAINTAINERS \
.github/ISSUE_TEMPLATE/bug_report.yml \
.github/ISSUE_TEMPLATE/feature_request.md \
+ .github/workflows/ci-linux.yml \
+ .github/workflows/ci-linux_asan.yml \
+ .github/workflows/ci-macos.yml \
+ .github/workflows/ci-windows.yml \
.github/workflows/ci.yml \
.github/workflows/codeql-analysis.yml \
.github/workflows/coverity.yml \
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1wRXFn-005zNH-3V%40256bit.org.