aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/test.yml
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2023-11-30 20:35:25 +0000
committerJosh Rahm <joshuarahm@gmail.com>2023-11-30 20:35:25 +0000
commit1b7b916b7631ddf73c38e3a0070d64e4636cb2f3 (patch)
treecd08258054db80bb9a11b1061bb091c70b76926a /.github/workflows/test.yml
parenteaa89c11d0f8aefbb512de769c6c82f61a8baca3 (diff)
parent4a8bf24ac690004aedf5540fa440e788459e5e34 (diff)
downloadrneovim-aucmd_textputpost.tar.gz
rneovim-aucmd_textputpost.tar.bz2
rneovim-aucmd_textputpost.zip
Merge remote-tracking branch 'upstream/master' into aucmd_textputpostaucmd_textputpost
Diffstat (limited to '.github/workflows/test.yml')
-rw-r--r--.github/workflows/test.yml342
1 files changed, 342 insertions, 0 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000000..acf0f195b9
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,342 @@
+name: test
+on:
+ push:
+ branches:
+ - 'master'
+ - 'release-[0-9]+.[0-9]+'
+ 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.sha }}
+ cancel-in-progress: true
+
+env:
+ ASAN_OPTIONS: detect_leaks=1:check_initialization_order=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
+ 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
+ env:
+ CC: clang
+ steps:
+ - uses: actions/checkout@v4
+ - run: ./.github/scripts/install_deps.sh
+ - uses: ./.github/actions/cache
+
+ - name: Install stylua
+ run: |
+ URL=$(curl -L https://api.github.com/repos/JohnnyMorganz/StyLua/releases/latest | jq -r '.assets[] | select(.name == "stylua-linux-x86_64.zip") | .browser_download_url')
+ wget --directory-prefix="$BIN_DIR" "$URL"
+ (cd "$BIN_DIR"; unzip stylua*.zip)
+ echo "$BIN_DIR" >> $GITHUB_PATH
+
+ - name: Build third-party deps
+ run: |
+ cmake -S cmake.deps -B .deps -G Ninja
+ cmake --build .deps
+
+ - run: cmake -B build -G Ninja -D CI_LINT=ON
+
+ - 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'
+ name: clang-tidy
+ run: cmake --build build --target lintc-clang-tidy
+
+ - if: success() || failure() && steps.abort_job.outputs.status == 'success'
+ name: uncrustify
+ run: cmake --build build --target lintc-uncrustify
+
+ clang-analyzer:
+ runs-on: ubuntu-22.04
+ timeout-minutes: 20
+ env:
+ CC: clang
+ steps:
+ - uses: actions/checkout@v4
+ - run: ./.github/scripts/install_deps.sh
+ - uses: ./.github/actions/cache
+ - name: Build third-party deps
+ run: |
+ cmake -S cmake.deps --preset ci
+ cmake --build .deps
+ cmake --preset ci
+ - run: cmake --build build --target clang-analyzer
+
+ posix:
+ name: ${{ matrix.build.runner }} ${{ matrix.build.flavor }} ${{ matrix.build.cc }} ${{ matrix.test }}
+ strategy:
+ fail-fast: false
+ matrix:
+ build:
+ [
+ { runner: ubuntu-22.04, flavor: asan, cc: clang, flags: -D ENABLE_ASAN_UBSAN=ON },
+ { runner: ubuntu-22.04, flavor: tsan, cc: clang, flags: -D ENABLE_TSAN=ON },
+ { runner: ubuntu-22.04, cc: gcc },
+ { runner: macos-12, cc: clang, flags: -D CMAKE_FIND_FRAMEWORK=NEVER, deps_flags: -D CMAKE_FIND_FRAMEWORK=NEVER },
+ { runner: ubuntu-22.04, flavor: functionaltest-lua, cc: gcc, deps_flags: -D USE_BUNDLED_LUAJIT=OFF -D USE_BUNDLED_LUA=ON, flags: -D PREFER_LUA=ON },
+ ]
+ test: [unittest, functionaltest, oldtest]
+ exclude:
+ - test: unittest
+ build: { flavor: tsan }
+ - test: unittest
+ build: { flavor: functionaltest-lua }
+ - test: oldtest
+ build: { flavor: tsan }
+ runs-on: ${{ matrix.build.runner }}
+ timeout-minutes: 45
+ env:
+ CC: ${{ matrix.build.cc }}
+ steps:
+ - uses: actions/checkout@v4
+ - run: ./.github/scripts/install_deps.sh --test
+ - uses: ./.github/actions/cache
+
+ - name: Set up environment
+ run: |
+ ulimit -c unlimited
+ echo "$BIN_DIR" >> $GITHUB_PATH
+
+ - name: Create log dir
+ run: mkdir -p "$LOG_DIR"
+
+ # FIXME(dundargoc): this workaround is needed for macos as the python3
+ # provider tests suddenly started to become extremely flaky, and this
+ # removes the flakiness for some reason.
+ - uses: actions/setup-python@v4
+ with:
+ python-version: '3.11'
+
+ - if: ${{ matrix.test != 'unittest' }}
+ 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
+
+ sudo cpanm -n Neovim::Ext || cat "$HOME/.cpanm/build.log"
+ perl -W -e 'use Neovim::Ext; print $Neovim::Ext::VERSION'
+
+ - name: Build third-party deps
+ run: |
+ cmake -S cmake.deps --preset ci ${{ matrix.build.deps_flags }}
+ cmake --build .deps
+
+ - name: Build
+ run: |
+ cmake --preset ci -D CMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX ${{ matrix.build.flags }}
+ cmake --build build
+
+ - name: ${{ matrix.test }}
+ timeout-minutes: 20
+ run: make ${{ matrix.test }}
+
+ - name: Install
+ run: |
+ cmake --install build
+ "$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: '!cancelled()'
+ name: Show logs
+ run: cat $(find "$LOG_DIR" -type f)
+
+ windows:
+ runs-on: windows-2022
+ timeout-minutes: 45
+ strategy:
+ fail-fast: false
+ matrix:
+ test: [functional, old]
+ steps:
+ - uses: actions/checkout@v4
+ - 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: ${{ matrix.test == 'functional' }}
+ name: functionaltest
+ timeout-minutes: 20
+ run: cmake --build build --target functionaltest
+
+ - if: ${{ matrix.test == 'old' }}
+ uses: msys2/setup-msys2@v2
+ with:
+ update: true
+ pacboy: >-
+ make:p gcc:p diffutils:p
+ release: false
+
+ - if: ${{ matrix.test == 'old' }}
+ name: oldtest
+ shell: msys2 {0}
+ run: |
+ cd test/old/testdir
+ mingw32-make VERBOSE=1
+
+ # This job tests the following things:
+ # - Check if Release, MinSizeRel and RelWithDebInfo compiles correctly.
+ # - Test the above build types with the GCC compiler specifically.
+ # Empirically the difference in warning levels between GCC and other
+ # compilers is particularly big.
+ # - Test if the build works with multi-config generators. We mostly use
+ # single-config generators so it's nice to have a small sanity check for
+ # multi-config.
+ build-types:
+ runs-on: ubuntu-22.04
+ timeout-minutes: 10
+ env:
+ CC: gcc
+ steps:
+ - uses: actions/checkout@v4
+ - 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 --preset ci -G "Ninja Multi-Config"
+
+ - name: Release
+ run: cmake --build build --config Release
+
+ - name: RelWithDebInfo
+ run: cmake --build build --config RelWithDebInfo
+
+ - name: MinSizeRel
+ run: cmake --build build --config MinSizeRel
+
+ with-external-deps:
+ runs-on: ubuntu-22.04
+ timeout-minutes: 10
+ env:
+ CC: gcc
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install dependencies
+ run: |
+ sudo add-apt-repository ppa:neovim-ppa/stable
+ ./.github/scripts/install_deps.sh
+ sudo apt-get install -y \
+ libluajit-5.1-dev \
+ libmsgpack-dev \
+ libtermkey-dev \
+ libunibilium-dev \
+ libuv1-dev \
+ lua-filesystem \
+ lua-lpeg \
+ luajit \
+ lua-luv-dev
+ # libtree-sitter-dev \
+ # libvterm-dev
+
+ # Remove comments from packages once we start using these external
+ # dependencies.
+
+ - uses: ./.github/actions/cache
+
+ - name: Build third-party deps
+ run: |
+ cmake -S cmake.deps --preset external_deps
+ cmake --build .deps
+
+ - name: Build
+ run: |
+ cmake --preset ci
+ cmake --build build