mirror of
https://github.com/neovim/neovim.git
synced 2026-02-20 09:19:43 +10:00
“make clint-full” bypasses the normal mechanisms used to communicate build flags in the CI jobs, so explicitly build nvim before running the lint jobs.
233 lines
6.8 KiB
YAML
233 lines
6.8 KiB
YAML
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]+'
|
|
|
|
# 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:
|
|
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
|
|
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: |
|
|
~/.ccache
|
|
key: lint-${{ hashFiles('cmake/*', '**/CMakeLists.txt', '!third-party/**CMakeLists.txt') }}-${{ github.base_ref }}
|
|
|
|
- name: Build nvim
|
|
run: ./ci/run_tests.sh build
|
|
|
|
- if: "!cancelled()"
|
|
name: clint
|
|
run: ./ci/run_lint.sh clint
|
|
|
|
- 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: single-includes
|
|
run: ./ci/run_lint.sh single-includes
|
|
|
|
- name: Cache dependencies
|
|
if: ${{ success() }}
|
|
run: ./ci/before_cache.sh
|
|
|
|
unixish:
|
|
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
|
|
- 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 >/dev/null
|
|
brew install automake ccache perl 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
|
|
|
|
- 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
|
|
if: ${{ success() }}
|
|
run: ./ci/before_cache.sh
|
|
|
|
windows:
|
|
runs-on: windows-2016
|
|
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 }}
|