123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- name: CI
- on:
- push:
- branches:
- - 'master'
- - 'release-[0-9]+.[0-9]+'
- pull_request:
- types: [opened, synchronize, reopened, ready_for_review]
- branches:
- - 'master'
- - 'release-[0-9]+.[0-9]+'
- paths-ignore:
- - 'runtime/doc/*'
- # Cancel any in-progress CI runs for a PR if it is updated
- concurrency:
- group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
- cancel-in-progress: true
- jobs:
- lint:
- # 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.pull_request.draft) || (github.event_name == 'push' && github.ref == 'refs/heads/master')
- runs-on: ubuntu-20.04
- timeout-minutes: 10
- env:
- CC: gcc
- steps:
- - uses: actions/checkout@v2
- - name: Setup common environment variables
- run: ./.github/workflows/env.sh lint
- - name: Install apt packages
- run: |
- sudo add-apt-repository ppa:neovim-ppa/stable
- sudo apt-get update
- sudo apt-get install -y \
- autoconf \
- automake \
- build-essential \
- ccache \
- cmake \
- flake8 \
- gettext \
- gperf \
- libluajit-5.1-dev \
- libmsgpack-dev \
- libtermkey-dev \
- libtool-bin \
- libtree-sitter-dev \
- libunibilium-dev \
- libuv1-dev \
- libvterm-dev \
- locales \
- lua-busted \
- lua-check \
- lua-filesystem \
- lua-inspect \
- lua-lpeg \
- lua-luv-dev \
- lua-nvim \
- luajit \
- ninja-build \
- pkg-config
- - name: Cache artifacts
- uses: actions/cache@v2
- with:
- path: |
- ${{ env.CACHE_NVIM_DEPS_DIR }}
- ~/.ccache
- key: lint-${{ hashFiles('cmake/*', '**/CMakeLists.txt', '!third-party/**CMakeLists.txt') }}-${{ github.base_ref }}
- - name: Build third-party
- run: ./ci/before_script.sh
- - name: Build nvim
- run: ./ci/run_tests.sh build_nvim
- - if: "!cancelled()"
- name: clint-full
- run: ./ci/run_lint.sh clint-full
- - if: "!cancelled()"
- name: lualint
- run: ./ci/run_lint.sh lualint
- - if: "!cancelled()"
- name: pylint
- run: ./ci/run_lint.sh pylint
- - if: "!cancelled()"
- name: shlint
- run: ./ci/run_lint.sh shlint
- - if: "!cancelled()"
- name: check-single-includes
- run: ./ci/run_lint.sh check-single-includes
- - name: Cache dependencies
- run: ./ci/before_cache.sh
- posix:
- name: ${{ matrix.runner }} ${{ matrix.flavor }} (cc=${{ matrix.cc }})
- strategy:
- fail-fast: false
- matrix:
- include:
- - flavor: asan
- cc: clang-13
- runner: ubuntu-20.04
- os: linux
- - flavor: tsan
- cc: clang-13
- runner: ubuntu-20.04
- os: linux
- - cc: clang
- runner: macos-10.15
- os: osx
- - cc: clang
- runner: macos-11.0
- os: osx
- # The functionaltest-lua test two things simultaneously:
- # 1. Check that the tests pass with PUC Lua instead of LuaJIT.
- # 2. Use as oldest/minimum versions of dependencies/build tools we
- # still explicitly support so we don't accidentally rely on
- # features that is only available on later versions.
- - flavor: functionaltest-lua
- cc: gcc
- runner: ubuntu-20.04
- os: linux
- cmake: minimum_required
- runs-on: ${{ matrix.runner }}
- timeout-minutes: 45
- if: github.event.pull_request.draft == false
- env:
- CC: ${{ matrix.cc }}
- CI_OS_NAME: ${{ matrix.os }}
- steps:
- - uses: actions/checkout@v2
- - name: Setup common environment variables
- run: ./.github/workflows/env.sh ${{ matrix.flavor }}
- - name: Install apt packages
- if: matrix.os == 'linux'
- run: |
- sudo apt-get update
- sudo apt-get install -y autoconf automake build-essential ccache cmake cpanminus cscope gcc-multilib gdb gettext gperf language-pack-tr libtool-bin locales ninja-build pkg-config python3 python3-pip python3-setuptools unzip valgrind xclip
- - name: Install minimum required version of cmake
- if: matrix.cmake == 'minimum_required'
- env:
- CMAKE_URL: 'https://cmake.org/files/v3.10/cmake-3.10.0-Linux-x86_64.sh'
- CMAKE_VERSION: '3.10.0'
- shell: bash
- run: |
- curl --retry 5 --silent --show-error --fail -o /tmp/cmake-installer.sh "$CMAKE_URL"
- mkdir -p "$HOME/.local/bin" /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 "$HOME/.local/bin/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: Install new clang
- if: matrix.flavor == 'asan' || matrix.flavor == 'tsan'
- run: |
- wget https://apt.llvm.org/llvm.sh
- chmod a+x llvm.sh
- sudo ./llvm.sh 13
- rm llvm.sh
- - name: Install brew packages
- if: matrix.os == 'osx'
- run: |
- brew update --quiet
- brew install automake ccache cpanminus ninja
- - name: Setup interpreter packages
- run: ./ci/install.sh
- - name: Cache dependencies
- uses: actions/cache@v2
- with:
- path: |
- ${{ env.CACHE_NVIM_DEPS_DIR }}
- ~/.ccache
- key: ${{ matrix.runner }}-${{ matrix.flavor }}-${{ matrix.cc }}-${{ hashFiles('cmake/*', 'third-party/**', '**/CMakeLists.txt') }}-${{ github.base_ref }}
- - name: Build third-party
- run: ./ci/before_script.sh
- - name: Build
- run: ./ci/run_tests.sh build_nvim
- - if: matrix.flavor != 'tsan' && matrix.flavor != 'functionaltest-lua' && !cancelled()
- name: Unittests
- run: ./ci/run_tests.sh unittests
- - if: matrix.flavor != 'tsan' && !cancelled()
- name: Functionaltests
- run: ./ci/run_tests.sh functionaltests
- - if: "!cancelled()"
- name: Oldtests
- run: ./ci/run_tests.sh oldtests
- - if: "!cancelled()"
- name: Install nvim
- run: ./ci/run_tests.sh install_nvim
- - name: Cache dependencies
- run: ./ci/before_cache.sh
- windows:
- runs-on: windows-2019
- timeout-minutes: 45
- if: github.event.pull_request.draft == false
- env:
- DEPS_BUILD_DIR: ${{ format('{0}/nvim-deps', github.workspace) }}
- DEPS_PREFIX: ${{ format('{0}/nvim-deps/usr', github.workspace) }}
- strategy:
- fail-fast: false
- matrix:
- config: [ MINGW_64-gcov, MSVC_64 ]
- name: windows (${{ matrix.config }})
- steps:
- - uses: actions/checkout@v2
- - uses: actions/cache@v2
- with:
- path: ${{ env.DEPS_BUILD_DIR }}
- key: ${{ matrix.config }}-${{ hashFiles('third-party\**') }}
- - name: Run CI
- run: powershell ci\build.ps1
- env:
- CONFIGURATION: ${{ matrix.config }}
|