Import Debian changes 2:8.2.3995-1ubuntu2.22 #19
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: GitHub CI | |
on: | |
push: | |
branches: ['**'] | |
pull_request: | |
# 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 }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
linux: | |
runs-on: ubuntu-18.04 | |
env: | |
CC: ${{ matrix.compiler }} | |
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, small, normal, huge] | |
compiler: [clang, gcc] | |
extra: [none] | |
include: | |
- features: tiny | |
compiler: clang | |
extra: nogui | |
- features: tiny | |
compiler: gcc | |
extra: nogui | |
- features: normal | |
shadow: ./src/shadow | |
- features: huge | |
coverage: true | |
- features: huge | |
compiler: gcc | |
coverage: true | |
extra: testgui | |
uchar: true | |
- features: huge | |
compiler: clang | |
extra: asan | |
- features: huge | |
compiler: gcc | |
coverage: true | |
extra: unittests | |
- features: normal | |
compiler: gcc | |
extra: vimtags | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install packages | |
run: | | |
sudo apt update && sudo apt install -y \ | |
autoconf \ | |
lcov \ | |
gettext \ | |
libcanberra-dev \ | |
libperl-dev \ | |
python-dev \ | |
python3-dev \ | |
liblua5.3-dev \ | |
lua5.3 \ | |
ruby-dev \ | |
tcl-dev \ | |
cscope \ | |
libgtk2.0-dev \ | |
desktop-file-utils \ | |
libtool-bin \ | |
libsodium-dev | |
- name: Install clang-13 | |
if: matrix.compiler == 'clang' | |
run: | | |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - | |
. /etc/lsb-release | |
sudo add-apt-repository -y "deb http://apt.llvm.org/${DISTRIB_CODENAME}/ llvm-toolchain-${DISTRIB_CODENAME}-13 main" | |
sudo apt-get install -y clang-13 llvm-13 | |
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-13 100 | |
sudo update-alternatives --set clang /usr/bin/clang-13 | |
sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-13 100 | |
- name: Set up environment | |
run: | | |
mkdir -p "${LOG_DIR}" | |
mkdir -p "${HOME}/bin" | |
echo "${HOME}/bin" >> $GITHUB_PATH | |
( | |
echo "LINUX_VERSION=$(uname -r)" | |
echo "NPROC=$(getconf _NPROCESSORS_ONLN)" | |
echo "SND_DUMMY_DIR=${HOME}/snd-dummy" | |
echo "TMPDIR=${{ runner.temp }}" | |
case "${{ matrix.features }}" in | |
tiny|small) | |
echo "TEST=testtiny" | |
if ${{ contains(matrix.extra, 'nogui') }}; then | |
echo "CONFOPT=--disable-gui" | |
fi | |
;; | |
normal) | |
;; | |
huge) | |
echo "TEST=scripttests test_libvterm" | |
echo "CONFOPT=--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" | |
;; | |
esac | |
CFLAGS="" | |
if ${{ matrix.coverage == true }}; then | |
CFLAGS="$CFLAGS --coverage -DUSE_GCOV_FLUSH" | |
echo "LDFLAGS=--coverage" | |
fi | |
if ${{ matrix.uchar == true }}; then | |
CFLAGS="$CFLAGS -funsigned-char" | |
fi | |
if ${{ contains(matrix.extra, 'testgui') }}; then | |
echo "TEST=-C src testgui" | |
fi | |
if ${{ contains(matrix.extra, 'unittests') }}; then | |
echo "TEST=unittests" | |
fi | |
if ${{ contains(matrix.extra, 'asan') }}; then | |
echo "SANITIZER_CFLAGS=-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" | |
echo "ASAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/asan" | |
echo "UBSAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/ubsan" | |
echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt" | |
fi | |
if ${{ contains(matrix.extra, 'vimtags') }}; then | |
echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim" | |
fi | |
echo "CFLAGS=$CFLAGS" | |
) >> $GITHUB_ENV | |
- name: Set up system | |
run: | | |
if [[ ${CC} = clang ]]; then | |
# Use llvm-cov instead of gcov when compiler is clang. | |
ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov | |
fi | |
# Setup lua5.3 manually since its package doesn't provide alternative. | |
# https://bugs.launchpad.net/ubuntu/+source/lua5.3/+bug/1707212 | |
if [[ ${CONFOPT} =~ luainterp ]]; then | |
sudo update-alternatives --install /usr/bin/lua lua /usr/bin/lua5.3 10 | |
fi | |
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 | |
sudo usermod -a -G audio "${USER}" | |
sudo bash ci/setup-xvfb.sh | |
- name: Cache snd-dummy | |
uses: actions/cache@v2 | |
with: | |
path: ${{ env.SND_DUMMY_DIR }} | |
key: linux-${{ env.LINUX_VERSION }}-snd-dummy | |
- name: Set up snd-dummy | |
run: | | |
if [[ ! -e ${SND_DUMMY_DIR}/snd-dummy.ko ]]; then | |
bash ci/build-snd-dummy.sh | |
fi | |
cd "${SND_DUMMY_DIR}" | |
sudo insmod soundcore.ko | |
sudo insmod snd.ko | |
sudo insmod snd-pcm.ko | |
sudo insmod snd-dummy.ko | |
- name: Check autoconf | |
if: contains(matrix.extra, 'unittests') | |
run: | | |
make -C src autoconf | |
- name: Set up shadow dir | |
if: matrix.shadow | |
run: | | |
make -C src shadow | |
echo "SRCDIR=${{ matrix.shadow }}" >> $GITHUB_ENV | |
echo "SHADOWOPT=-C ${{ matrix.shadow }}" >> $GITHUB_ENV | |
- name: Configure | |
run: | | |
./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing | |
# Append various warning flags to CFLAGS. | |
sed -i -f ci/config.mk.sed ${SRCDIR}/auto/config.mk | |
sed -i -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk | |
if [[ ${CC} = clang ]]; then | |
# Suppress some warnings produced by clang 12 and later. | |
sed -i -f ci/config.mk.clang-12.sed ${SRCDIR}/auto/config.mk | |
fi | |
- name: Build | |
if: (!contains(matrix.extra, 'unittests')) | |
run: | | |
make ${SHADOWOPT} -j${NPROC} | |
- name: Check version | |
if: (!contains(matrix.extra, 'unittests')) | |
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 | |
- name: Test | |
timeout-minutes: 20 | |
run: | | |
do_test() { sg audio "sg $(id -gn) '$*'"; } | |
do_test make ${SHADOWOPT} ${TEST} | |
# - name: Coveralls | |
# if: matrix.coverage && success() && github.event_name != 'pull_request' | |
# env: | |
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} | |
# COVERALLS_PARALLEL: true | |
# TRAVIS_JOB_ID: ${{ github.run_id }} | |
# run: | | |
# sudo apt-get install -y python3-setuptools python3-wheel | |
# sudo -H pip3 install pip -U | |
# # needed for https support for coveralls building cffi only works with gcc, not with clang | |
# CC=gcc pip3 install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1 | |
# ~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8 | |
- name: Codecov | |
if: matrix.coverage && success() | |
run: | | |
cd "${SRCDIR}" | |
bash <(curl -s https://codecov.io/bash) -F "${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }}" | |
- name: ASan logs | |
if: contains(matrix.extra, 'asan') && !cancelled() | |
run: | | |
for f in $(grep -lR '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "${LOG_DIR}"); do | |
asan_symbolize-13 -l "$f" | |
false # in order to fail a job | |
done | |
# coveralls: | |
# runs-on: ubuntu-18.04 | |
# | |
# needs: linux | |
# if: always() && github.event_name != 'pull_request' | |
# | |
# steps: | |
# - name: Parallel finished | |
# env: | |
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} | |
# run: | | |
# curl -k "https://coveralls.io/webhook?repo_token=${COVERALLS_REPO_TOKEN}" -d "payload[build_num]=${GITHUB_RUN_ID}&payload[status]=done" | |
macos: | |
runs-on: macos-latest | |
env: | |
CC: clang | |
TEST: test | |
SRCDIR: ./src | |
LEAK_CFLAGS: -DEXITFREE | |
TERM: xterm | |
strategy: | |
fail-fast: false | |
matrix: | |
features: [tiny, normal, huge] | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install packages | |
env: | |
HOMEBREW_NO_AUTO_UPDATE: 1 | |
run: | | |
brew install lua | |
echo "LUA_PREFIX=/usr/local" >> $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 | |
- name: Test | |
timeout-minutes: 20 | |
run: | | |
make ${TEST} | |
windows: | |
runs-on: windows-latest | |
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" | |
strategy: | |
fail-fast: false | |
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: Initialize | |
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 "PYTHON_DIR=$python_dir" >> $GITHUB_ENV | |
echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV | |
- 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: Copy src directory to src2 | |
shell: cmd | |
run: | | |
xcopy src src2\ /E > nul | |
- 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 | |
echo %COL_GREEN%Start testing vim in background.%COL_RESET% | |
start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt" | |
echo %COL_GREEN%Test gvim:%COL_RESET% | |
cd testdir | |
nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1 | |
cd .. | |
echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET% | |
cd ..\src2\testdir | |
:: Wait about 10 minutes. | |
for /L %%i in (1,1,60) do ( | |
if exist done.txt goto exitloop | |
timeout 10 > NUL 2>&1 | |
if ERRORLEVEL 1 ping -n 11 localhost > NUL | |
) | |
set timeout=1 | |
:exitloop | |
echo %COL_GREEN%Test results of vim:%COL_RESET% | |
if exist messages type messages | |
nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1 | |
if "%timeout%"=="1" ( | |
echo %COL_RED%Timed out.%COL_RESET% | |
exit 1 | |
) |