mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	ci: split ci.yml into a test workflow and a build test workflow (#22302)
Having a workflow that only builds neovim without running all of the tests is a cheap way to test the build still works without burning too much CI time.
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/actions/cache/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/actions/cache/action.yml
									
									
									
									
										vendored
									
									
								
							| @@ -18,5 +18,5 @@ runs: | ||||
|       with: | ||||
|         path: ${{ env.DEPS_BUILD_DIR }} | ||||
|         key: ${{ env.CACHE_KEY }}-${{ hashFiles('cmake**', 'ci/**', | ||||
|           '.github/workflows/ci.yml', 'CMakeLists.txt', | ||||
|           '.github/workflows/test.yml', 'CMakeLists.txt', | ||||
|           'runtime/CMakeLists.txt', 'src/nvim/**/CMakeLists.txt') }} | ||||
|   | ||||
							
								
								
									
										118
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,118 @@ | ||||
| name: build | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - 'master' | ||||
|       - 'release-[0-9]+.[0-9]+' | ||||
|     paths: | ||||
|       - '**.cmake' | ||||
|       - '**/CMakeLists.txt' | ||||
|       - '**/CMakePresets.json' | ||||
|       - 'cmake.*/**' | ||||
|       - '.github/**' | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref }} | ||||
|   cancel-in-progress: true | ||||
|  | ||||
|  | ||||
| env: | ||||
|   BIN_DIR: ${{ github.workspace }}/bin | ||||
|   INSTALL_PREFIX: ${{ github.workspace }}/nvim-install | ||||
|  | ||||
| jobs: | ||||
|   macos-universal: | ||||
|     runs-on: macos-latest | ||||
|     timeout-minutes: 20 | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: ./.github/scripts/install_deps.sh | ||||
|  | ||||
|       - run: printf 'NVIM_BUILD_TYPE=Release\n' >> $GITHUB_ENV | ||||
|  | ||||
|       - name: Build universal binary | ||||
|         run: ./.github/scripts/build_universal_macos.sh | ||||
|  | ||||
|   old-cmake: | ||||
|     name: Test oldest supported cmake | ||||
|     runs-on: ubuntu-22.04 | ||||
|     timeout-minutes: 15 | ||||
|     env: | ||||
|       CMAKE_URL: 'https://cmake.org/files/v3.10/cmake-3.10.0-Linux-x86_64.sh' | ||||
|       CMAKE_VERSION: '3.10.0' | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|  | ||||
|       - name: Set up environment | ||||
|         run: echo "$BIN_DIR" >> $GITHUB_PATH | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: ./.github/scripts/install_deps.sh | ||||
|  | ||||
|       - name: Install minimum required version of cmake | ||||
|         run: | | ||||
|           curl --retry 5 --silent --show-error --fail -o /tmp/cmake-installer.sh "$CMAKE_URL" | ||||
|           mkdir -p "$BIN_DIR" /opt/cmake-custom | ||||
|           chmod a+x /tmp/cmake-installer.sh | ||||
|           /tmp/cmake-installer.sh --prefix=/opt/cmake-custom --skip-license | ||||
|           ln -sfn /opt/cmake-custom/bin/cmake "$BIN_DIR/cmake" | ||||
|           cmake_version="$(cmake --version | head -1)" | ||||
|           echo "$cmake_version" | grep -qF "cmake version $CMAKE_VERSION" || { | ||||
|             echo "Unexpected CMake version: $cmake_version" | ||||
|             exit 1 | ||||
|           } | ||||
|  | ||||
|       - name: Build dependencies | ||||
|         run: make deps | ||||
|  | ||||
|       - name: Build | ||||
|         run: make CMAKE_FLAGS="-D CI_BUILD=ON -D CMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX" | ||||
|  | ||||
|       - name: Install | ||||
|         run: make install | ||||
|  | ||||
|   with-external-deps: | ||||
|     runs-on: ubuntu-22.04 | ||||
|     timeout-minutes: 10 | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|  | ||||
|       - 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 \ | ||||
|             libtree-sitter-dev \ | ||||
|             libunibilium-dev \ | ||||
|             libuv1-dev \ | ||||
|             lua-busted \ | ||||
|             lua-filesystem \ | ||||
|             lua-inspect \ | ||||
|             lua-lpeg \ | ||||
|             lua-nvim \ | ||||
|             luajit | ||||
|             # libvterm-dev \ | ||||
|             # lua-luv-dev | ||||
|  | ||||
|             # Remove comments from packages once we start using these external | ||||
|             # dependencies. | ||||
|  | ||||
|       - name: Build third-party deps | ||||
|         run: | | ||||
|           # Ideally all dependencies should external for this job, but some | ||||
|           # dependencies don't have the required version available. We use the | ||||
|           # bundled versions for these with the hopes of being able to remove them | ||||
|           # later on. | ||||
|           cmake -S cmake.deps -B .deps -G Ninja -D USE_BUNDLED=OFF -D USE_BUNDLED_LUV=ON -D USE_BUNDLED_LIBVTERM=ON | ||||
|           cmake --build .deps | ||||
|  | ||||
|       - name: Build | ||||
|         run: | | ||||
|           cmake -B build -G Ninja | ||||
|           cmake --build build | ||||
|  | ||||
| @@ -1,4 +1,4 @@ | ||||
| name: CI | ||||
| name: test | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
| @@ -98,6 +98,13 @@ jobs: | ||||
|         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: | | ||||
| @@ -115,69 +122,6 @@ jobs: | ||||
|         name: check uncrustify | ||||
|         run: git diff --color --exit-code | ||||
| 
 | ||||
|   lintc: | ||||
|     # This job tests two things: it lints the code but also builds neovim using | ||||
|     # system dependencies instead of bundled dependencies. This is to make sure | ||||
|     # we are able to build neovim without pigeonholing ourselves into specifics | ||||
|     # of the bundled dependencies. | ||||
| 
 | ||||
|     if: (github.event_name == 'pull_request' && github.base_ref == 'master') || (github.event_name == 'push' && github.ref == 'refs/heads/master') | ||||
|     runs-on: ubuntu-22.04 | ||||
|     timeout-minutes: 10 | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
| 
 | ||||
|       - 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 \ | ||||
|             libtree-sitter-dev \ | ||||
|             libunibilium-dev \ | ||||
|             libuv1-dev \ | ||||
|             lua-busted \ | ||||
|             lua-filesystem \ | ||||
|             lua-inspect \ | ||||
|             lua-lpeg \ | ||||
|             lua-nvim \ | ||||
|             luajit | ||||
|             # libvterm-dev \ | ||||
|             # lua-luv-dev | ||||
| 
 | ||||
|             # Remove comments from packages once we start using these external | ||||
|             # dependencies. | ||||
| 
 | ||||
|       - uses: ./.github/actions/cache | ||||
| 
 | ||||
|       - name: Build third-party deps | ||||
|         run: | | ||||
|           # Ideally all dependencies should external for this job, but some | ||||
|           # dependencies don't have the required version available. We use the | ||||
|           # bundled versions for these with the hopes of being able to remove them | ||||
|           # later on. | ||||
|           cmake -S cmake.deps -B $DEPS_BUILD_DIR -G Ninja -D USE_BUNDLED=OFF -D USE_BUNDLED_LUV=ON -D USE_BUNDLED_LIBVTERM=ON | ||||
|           cmake --build $DEPS_BUILD_DIR | ||||
| 
 | ||||
|       - name: Build | ||||
|         run: | | ||||
|           cmake -B build -G Ninja | ||||
|           cmake --build build | ||||
| 
 | ||||
|       - 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: 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 | ||||
| 
 | ||||
|   posix: | ||||
|     name: ${{ matrix.runner }} ${{ matrix.flavor }} (cc=${{ matrix.cc }}) | ||||
|     strategy: | ||||
| @@ -352,46 +296,6 @@ jobs: | ||||
|           echo 'Core dumps found' | ||||
|           exit 1 | ||||
| 
 | ||||
|   old_cmake: | ||||
|     name: Test oldest supported cmake | ||||
|     runs-on: ubuntu-22.04 | ||||
|     timeout-minutes: 15 | ||||
|     env: | ||||
|       CMAKE_URL: 'https://cmake.org/files/v3.10/cmake-3.10.0-Linux-x86_64.sh' | ||||
|       CMAKE_VERSION: '3.10.0' | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
| 
 | ||||
|       - name: Set up environment | ||||
|         run: echo "$BIN_DIR" >> $GITHUB_PATH | ||||
| 
 | ||||
|       - name: Install dependencies | ||||
|         run: ./.github/scripts/install_deps.sh | ||||
| 
 | ||||
|       - name: Install minimum required version of cmake | ||||
|         run: | | ||||
|           curl --retry 5 --silent --show-error --fail -o /tmp/cmake-installer.sh "$CMAKE_URL" | ||||
|           mkdir -p "$BIN_DIR" /opt/cmake-custom | ||||
|           chmod a+x /tmp/cmake-installer.sh | ||||
|           /tmp/cmake-installer.sh --prefix=/opt/cmake-custom --skip-license | ||||
|           ln -sfn /opt/cmake-custom/bin/cmake "$BIN_DIR/cmake" | ||||
|           cmake_version="$(cmake --version | head -1)" | ||||
|           echo "$cmake_version" | grep -qF "cmake version $CMAKE_VERSION" || { | ||||
|             echo "Unexpected CMake version: $cmake_version" | ||||
|             exit 1 | ||||
|           } | ||||
| 
 | ||||
|       - uses: ./.github/actions/cache | ||||
| 
 | ||||
|       - name: Build dependencies | ||||
|         run: make deps | ||||
| 
 | ||||
|       - name: Build | ||||
|         run: make CMAKE_FLAGS="-D CI_BUILD=ON -D CMAKE_INSTALL_PREFIX:PATH=$INSTALL_PREFIX" | ||||
| 
 | ||||
|       - name: Install | ||||
|         run: make install | ||||
| 
 | ||||
|   windows: | ||||
|     runs-on: windows-2019 | ||||
|     timeout-minutes: 45 | ||||
							
								
								
									
										32
									
								
								.github/workflows/universal_macos.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								.github/workflows/universal_macos.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,32 +0,0 @@ | ||||
| name: macos-universal | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - 'master' | ||||
|       - 'release-[0-9]+.[0-9]+' | ||||
|     paths: | ||||
|       - '**.cmake' | ||||
|       - '**/CMakeLists.txt' | ||||
|       - '**/CMakePresets.json' | ||||
|       - 'cmake.*/**' | ||||
|       - '.github/scripts/build_universal_macos.sh' | ||||
|       - '.github/workflow/universal_macos.yml' | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref }} | ||||
|   cancel-in-progress: true | ||||
|  | ||||
| jobs: | ||||
|   macos-universal: | ||||
|     runs-on: macos-latest | ||||
|     timeout-minutes: 20 | ||||
|     steps: | ||||
|       - uses: actions/checkout@v3 | ||||
|  | ||||
|       - name: Install dependencies | ||||
|         run: ./.github/scripts/install_deps.sh | ||||
|  | ||||
|       - run: printf 'NVIM_BUILD_TYPE=Release\n' >> $GITHUB_ENV | ||||
|  | ||||
|       - name: Build universal binary | ||||
|         run: ./.github/scripts/build_universal_macos.sh | ||||
| @@ -3,7 +3,7 @@ | ||||
| #   best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 | ||||
| #   pitfalls: https://izzys.casa/2019/02/everything-you-never-wanted-to-know-about-cmake/ | ||||
|  | ||||
| # Version should match the tested CMAKE_URL in .github/workflows/ci.yml. | ||||
| # Version should match the tested CMAKE_URL in .github/workflows/build.yml. | ||||
| cmake_minimum_required(VERSION 3.10) | ||||
|  | ||||
| # Can be removed once minimum version is at least 3.15 | ||||
|   | ||||
| @@ -130,7 +130,7 @@ Each pull request must pass the automated builds on [Cirrus CI] and [GitHub Acti | ||||
|   [style](#style). (See [#3174][3174] for background.) | ||||
| - CI for FreeBSD runs on [Cirrus CI]. | ||||
| - To see CI results faster in your PR, you can temporarily set `TEST_FILE` in | ||||
|   [ci.yml](https://github.com/neovim/neovim/blob/e35b9020b16985eee26e942f9a3f6b045bc3809b/.github/workflows/ci.yml#L205). | ||||
|   [test.yml](https://github.com/neovim/neovim/blob/e35b9020b16985eee26e942f9a3f6b045bc3809b/.github/workflows/test.yml#L29). | ||||
|  | ||||
| ### Clang scan-build | ||||
|  | ||||
|   | ||||
							
								
								
									
										13
									
								
								MAINTAIN.md
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								MAINTAIN.md
									
									
									
									
									
								
							| @@ -117,12 +117,13 @@ our CI strategy be. The following guidelines have worked well for us so far: | ||||
|   prefer `-latest` tags so we don't need to manually bump the versions. An | ||||
|   example of a special-purpose workflow is `labeler.yml`. | ||||
|  | ||||
| * For our testing jobs, which is currently only `ci.yml`, prefer to use the | ||||
|   latest stable (i.e. non-beta) version explicitly. Avoid using the `-latest` | ||||
|   tags here as it makes it difficult to determine from an unrelated PR if a | ||||
|   failure is due to the PR itself or due to GitHub bumping the `-latest` tag | ||||
|   without our knowledge. There's also a high risk that automatic bumping the CI | ||||
|   versions will fail due to manual work being required from experience. | ||||
| * For our testing jobs, which are in `test.yml` and `build.yml`, prefer to use | ||||
|   the latest stable (i.e. non-beta) version explicitly. Avoid using the | ||||
|   `-latest` tags here as it makes it difficult to determine from an unrelated | ||||
|   PR if a failure is due to the PR itself or due to GitHub bumping the | ||||
|   `-latest` tag without our knowledge. There's also a high risk that automatic | ||||
|   bumping the CI versions will fail due to manual work being required from | ||||
|   experience. | ||||
|  | ||||
| * For our release job, which is `release.yml`, prefer to use the oldest stable | ||||
|   (i.e. non-deprecated) versions available. The reason is that we're trying to | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
|   <a href="https://app.element.io/#/room/#neovim:matrix.org">Chat</a> | ||||
| </h1> | ||||
|  | ||||
| [](https://github.com/neovim/neovim/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush) | ||||
| [](https://github.com/neovim/neovim/actions?query=workflow%3ACI+branch%3Amaster+event%3Apush) | ||||
| [](https://scan.coverity.com/projects/2227) | ||||
| [](https://neovim.io/doc/reports/clang) | ||||
| [](https://neovim.io/doc/reports/pvs/PVS-studio.html.d) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 dundargoc
					dundargoc