From d3e51603bc94fac68cd2c92ae7ebc90baa8471fe Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sun, 3 Mar 2024 12:01:37 +0100 Subject: [PATCH] ci(windows): optionally test windows with ASAN Add the label `ci:windows-asan` to enable it. --- .github/workflows/optional.yml | 7 +++ .github/workflows/test.yml | 60 +------------------------ .github/workflows/test_windows.yml | 71 ++++++++++++++++++++++++++++++ MAINTAIN.md | 1 + src/nvim/main.c | 4 +- 5 files changed, 83 insertions(+), 60 deletions(-) create mode 100644 .github/workflows/test_windows.yml diff --git a/.github/workflows/optional.yml b/.github/workflows/optional.yml index 84d71821c5..742d51377f 100644 --- a/.github/workflows/optional.yml +++ b/.github/workflows/optional.yml @@ -46,3 +46,10 @@ jobs: runuser -u qemuci -- cmake -B build -G Ninja -D CI_BUILD=ON -D PREFER_LUA=ON && runuser -u qemuci -- make ${{ matrix.test }} " + + windows-asan: + if: contains(github.event.pull_request.labels.*.name, 'ci:windows-asan') || github.event_name == 'workflow_dispatch' + uses: ./.github/workflows/test_windows.yml + with: + build_flags: "-D ENABLE_ASAN_UBSAN=ON" + functionaltest_timeout: 40 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cf1ea48506..d383d96de2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -193,65 +193,7 @@ jobs: 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/setup - - - 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 + uses: ./.github/workflows/test_windows.yml # This job tests the following things: # - Check if Release, MinSizeRel and RelWithDebInfo compiles correctly. diff --git a/.github/workflows/test_windows.yml b/.github/workflows/test_windows.yml new file mode 100644 index 0000000000..fec2275cbd --- /dev/null +++ b/.github/workflows/test_windows.yml @@ -0,0 +1,71 @@ +name: windows +on: + workflow_call: + inputs: + build_flags: + type: string + functionaltest_timeout: + default: 20 + type: number + +jobs: + windows: + runs-on: windows-2022 + timeout-minutes: 45 + strategy: + fail-fast: false + matrix: + test: [functional, old] + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/setup + + - 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' ${{ inputs.build_flags }} + 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: ${{ inputs.functionaltest_timeout }} + 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 diff --git a/MAINTAIN.md b/MAINTAIN.md index b2434d6259..09f3efbed2 100644 --- a/MAINTAIN.md +++ b/MAINTAIN.md @@ -232,6 +232,7 @@ Some github labels are used to trigger certain jobs: * `backport release-x.y` - backport to release branch * `ci:s390x` - enable s390x CI * `ci:skip-news` - skip news.yml workflows +* `ci:windows-asan` - test windows with ASAN enabled * `needs:response` - close PR after a certain amount of time if author doesn't respond diff --git a/src/nvim/main.c b/src/nvim/main.c index 361d43393b..50d1a5a735 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -14,7 +14,9 @@ #include #ifdef ENABLE_ASAN_UBSAN # include -# include +# ifndef MSWIN +# include +# endif #endif #include "auto/config.h" // IWYU pragma: keep