diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
commit | 1b7b916b7631ddf73c38e3a0070d64e4636cb2f3 (patch) | |
tree | cd08258054db80bb9a11b1061bb091c70b76926a /.github/workflows/test.yml | |
parent | eaa89c11d0f8aefbb512de769c6c82f61a8baca3 (diff) | |
parent | 4a8bf24ac690004aedf5540fa440e788459e5e34 (diff) | |
download | rneovim-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.yml | 342 |
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 |