mirror of
https://github.com/neovim/neovim.git
synced 2026-06-28 14:10:29 +00:00
This will allow contributors to test changes in their own fork when pushing without needing to make a pull request. This can be useful when wanting to test out an idea before initiating a review process. Make the following assumptions when defining concurrency: - Pull request will work the same. - Pushes to the neovim repo will work the same: each unique commit will trigger a test run that won't cancel each other. - Pushes to forks will cancel older CI runs on the same branch, similar to how pull requests work. This will create duplicate CI runs when doing a pull request, one in the neovim repo for the pull request event and one in the fork for the push event. This is an acceptable trade as the runs in the fork doesn't count towards the CI limit of neovim. Contributors are also free to disable these actions in their own fork if they wish.
323 lines
11 KiB
YAML
323 lines
11 KiB
YAML
name: test
|
|
on:
|
|
push:
|
|
pull_request:
|
|
branches:
|
|
- 'master'
|
|
- 'release-[0-9]+.[0-9]+'
|
|
paths-ignore:
|
|
- 'contrib/**'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.repository_owner == 'neovim' && github.sha || github.ref_name }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
ASAN_OPTIONS: detect_leaks=1:check_initialization_order=1:handle_abort=1:handle_sigill=1:log_path=${{ github.workspace }}/build/log/asan:intercept_tls_get_addr=0
|
|
BIN_DIR: ${{ github.workspace }}/bin
|
|
BUILD_DIR: ${{ github.workspace }}/build
|
|
INSTALL_PREFIX: ${{ github.workspace }}/nvim-install
|
|
LOG_DIR: ${{ github.workspace }}/build/log
|
|
NVIM_LOG_FILE: ${{ github.workspace }}/build/.nvimlog
|
|
TSAN_OPTIONS: log_path=${{ github.workspace }}/build/log/tsan
|
|
UBSAN_OPTIONS: "print_stacktrace=1 log_path=${{ github.workspace }}/build/log/ubsan"
|
|
VALGRIND_LOG: ${{ github.workspace }}/build/log/valgrind-%p.log
|
|
# TEST_FILE: test/functional/core/startup_spec.lua
|
|
# TEST_FILTER: foo
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Set up Homebrew
|
|
uses: Homebrew/actions/setup-homebrew@master
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
./.github/scripts/install_deps.sh
|
|
brew install stylua uncrustify
|
|
|
|
- uses: ./.github/actions/cache
|
|
|
|
- name: Build third-party deps
|
|
run: |
|
|
cmake -S cmake.deps -B .deps -G Ninja
|
|
cmake --build .deps
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
run: cmake -B build -G Ninja
|
|
|
|
- if: "!cancelled()"
|
|
name: Determine if run should be aborted
|
|
id: abort_job
|
|
run: echo "status=${{ job.status }}" >> $GITHUB_OUTPUT
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: stylua
|
|
run: cmake --build build --target lintlua-stylua
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: luacheck
|
|
run: cmake --build build --target lintlua-luacheck
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: lintsh
|
|
run: cmake --build build --target lintsh
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: clint.py
|
|
run: cmake --build build --target lintc-clint
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
run: cmake --build build --target clang-tidy
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: uncrustify
|
|
run: cmake --build build --target lintc-uncrustify
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: suggester / uncrustify
|
|
uses: reviewdog/action-suggester@v1
|
|
with:
|
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
tool_name: uncrustify
|
|
cleanup: false
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: check uncrustify
|
|
run: git diff --color --exit-code
|
|
|
|
posix:
|
|
name: ${{ matrix.runner }} ${{ matrix.flavor }} (cc=${{ matrix.cc }})
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- flavor: asan
|
|
cc: clang
|
|
runner: ubuntu-22.04
|
|
flags: -D ENABLE_ASAN_UBSAN=ON
|
|
- flavor: tsan
|
|
cc: clang
|
|
runner: ubuntu-22.04
|
|
flags: -D ENABLE_TSAN=ON
|
|
- flavor: uchar
|
|
cc: gcc
|
|
runner: ubuntu-22.04
|
|
flags: -D UNSIGNED_CHAR=ON
|
|
- cc: clang
|
|
runner: macos-12
|
|
flags: -D CMAKE_FIND_FRAMEWORK=NEVER
|
|
deps_flags: -D CMAKE_FIND_FRAMEWORK=NEVER
|
|
|
|
# functionaltest-lua is our dumping ground for non-mainline configurations.
|
|
# 1. Check that the tests pass with PUC Lua instead of LuaJIT.
|
|
# 2. No treesitter parsers installed.
|
|
- flavor: functionaltest-lua
|
|
cc: gcc
|
|
runner: ubuntu-22.04
|
|
deps_flags: -D USE_BUNDLED_LUAJIT=OFF -D USE_BUNDLED_LUA=ON
|
|
flags: -D PREFER_LUA=ON
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 45
|
|
env:
|
|
CC: ${{ matrix.cc }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Set up environment
|
|
run: |
|
|
ulimit -c unlimited
|
|
echo "$BIN_DIR" >> $GITHUB_PATH
|
|
|
|
- name: Create log dir
|
|
run: mkdir -p "$LOG_DIR"
|
|
|
|
- name: Install dependencies
|
|
run: ./.github/scripts/install_deps.sh --test
|
|
|
|
- name: Set up interpreter packages
|
|
run: |
|
|
# Use default CC to avoid compilation problems when installing Python modules.
|
|
echo "Install neovim module for Python."
|
|
CC=cc python3 -m pip -q install --user --upgrade pynvim
|
|
|
|
echo "Install neovim RubyGem."
|
|
gem install --no-document --bindir "$BIN_DIR" --user-install --pre neovim
|
|
|
|
echo "Install neovim npm package"
|
|
npm install -g neovim
|
|
npm link neovim
|
|
|
|
if [[ $RUNNER_OS != macOS ]]; then
|
|
sudo cpanm -n Neovim::Ext || cat "$HOME/.cpanm/build.log"
|
|
perl -W -e 'use Neovim::Ext; print $Neovim::Ext::VERSION'
|
|
fi
|
|
|
|
- uses: ./.github/actions/cache
|
|
|
|
- name: Build third-party deps
|
|
run: |
|
|
cmake -S cmake.deps -B .deps -G Ninja ${{ matrix.deps_flags }}
|
|
cmake --build .deps
|
|
|
|
- name: Build
|
|
run: |
|
|
cmake --preset ci -D CMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX ${{ matrix.flags }}
|
|
cmake --build build
|
|
|
|
- if: "!cancelled()"
|
|
name: Determine if run should be aborted
|
|
id: abort_job
|
|
run: echo "status=${{ job.status }}" >> $GITHUB_OUTPUT
|
|
|
|
- if: matrix.flavor != 'tsan' && matrix.flavor != 'functionaltest-lua' && (success() || failure() && steps.abort_job.outputs.status == 'success')
|
|
name: Unittest
|
|
timeout-minutes: 5
|
|
run: cmake --build build --target unittest
|
|
|
|
- if: matrix.flavor != 'functionaltest-lua' && (success() || failure() && steps.abort_job.outputs.status == 'success')
|
|
name: Functionaltest
|
|
timeout-minutes: 20
|
|
run: cmake --build build --target functionaltest
|
|
|
|
- if: matrix.flavor == 'functionaltest-lua' && (success() || failure() && steps.abort_job.outputs.status == 'success')
|
|
name: Functionaltest with PUC Lua
|
|
timeout-minutes: 20
|
|
run: cmake --build build --target functionaltest-lua
|
|
|
|
- if: matrix.flavor != 'tsan' && (success() || failure() && steps.abort_job.outputs.status == 'success')
|
|
name: Oldtest
|
|
run: make oldtest
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: Install
|
|
run: cmake --install build
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: Installtests
|
|
run: |
|
|
"$INSTALL_PREFIX/bin/nvim" --version
|
|
if ! "$INSTALL_PREFIX/bin/nvim" -u NONE -e -c ':help' -c ':qall'; then
|
|
echo "Running ':help' in the installed nvim failed."
|
|
echo "Maybe the helptags have not been generated properly."
|
|
echo 'Failed running :help'
|
|
exit 1
|
|
fi
|
|
|
|
# Check that all runtime files were installed
|
|
for file in $(git -C runtime ls-files '*.vim' '*.ps' '*.dict' '*.py' '*.tutor' '*.awk' '*.sh' '*.bat'); do
|
|
if ! test -e "$INSTALL_PREFIX/share/nvim/runtime/$file"; then
|
|
printf "It appears that %s is not installed." "$file"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Check that generated syntax file has function names, #5060.
|
|
genvimsynf=syntax/vim/generated.vim
|
|
gpat='syn keyword vimFuncName .*eval'
|
|
if ! grep -q "$gpat" "$INSTALL_PREFIX/share/nvim/runtime/$genvimsynf"; then
|
|
echo "It appears that $genvimsynf does not contain $gpat."
|
|
exit 1
|
|
fi
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: Show logs
|
|
run: cat $(find "$LOG_DIR" -type f)
|
|
|
|
build-types:
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Install dependencies
|
|
run: ./.github/scripts/install_deps.sh
|
|
|
|
- uses: ./.github/actions/cache
|
|
|
|
- name: Build third-party deps
|
|
run: |
|
|
cmake -S cmake.deps -B .deps -G "Ninja Multi-Config"
|
|
cmake --build .deps
|
|
|
|
- name: Configure
|
|
run: cmake -B build -G "Ninja Multi-Config" -D CMAKE_C_COMPILER=gcc -D CI_BUILD=ON
|
|
|
|
- name: Release
|
|
run: cmake --build build --config Release
|
|
|
|
- name: RelWithDebInfo
|
|
run: cmake --build build --config RelWithDebInfo
|
|
|
|
- name: MinSizeRel
|
|
run: cmake --build build --config MinSizeRel
|
|
|
|
windows:
|
|
runs-on: windows-2022
|
|
timeout-minutes: 45
|
|
name: windows
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: ./.github/actions/cache
|
|
- run: .github/scripts/env.ps1
|
|
|
|
- name: Build deps
|
|
run: |
|
|
cmake -S cmake.deps -B .deps -G Ninja -D CMAKE_BUILD_TYPE='RelWithDebInfo'
|
|
cmake --build .deps
|
|
|
|
- name: Build
|
|
run: |
|
|
cmake --preset ci -D CMAKE_BUILD_TYPE='RelWithDebInfo'
|
|
cmake --build build
|
|
|
|
- name: Install test deps
|
|
run: |
|
|
$PSNativeCommandArgumentPassing = 'Legacy'
|
|
|
|
& build\bin\nvim.exe "--version"
|
|
|
|
# Ensure that the "win32" feature is set.
|
|
& build\bin\nvim -u NONE --headless -c 'exe !has(\"win32\").\"cq\"'
|
|
|
|
python -m pip install pynvim
|
|
# Sanity check
|
|
python -c "import pynvim; print(str(pynvim))"
|
|
|
|
node --version
|
|
npm.cmd --version
|
|
|
|
npm.cmd install -g neovim
|
|
Get-Command -CommandType Application neovim-node-host.cmd
|
|
npm.cmd link neovim
|
|
|
|
- if: "!cancelled()"
|
|
name: Determine if run should be aborted
|
|
id: abort_job
|
|
run: |
|
|
"status=${{ job.status }}" >> $env:GITHUB_OUTPUT
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: Run functionaltest
|
|
timeout-minutes: 20
|
|
run: cmake --build build --target functionaltest
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
update: true
|
|
pacboy: >-
|
|
make:p gcc:p diffutils:p
|
|
release: false
|
|
|
|
- if: success() || failure() && steps.abort_job.outputs.status == 'success'
|
|
name: Run oldtest
|
|
shell: msys2 {0}
|
|
run: |
|
|
cd test/old/testdir
|
|
mingw32-make VERBOSE=1
|