Skip to content

Commit

Permalink
Auto merge of #2878 - micbou:circleci, r=micbou
Browse files Browse the repository at this point in the history
[RFC] Move macOS builds to CircleCI

See PR ycm-core/ycmd#901.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/valloric/youcompleteme/2878)
<!-- Reviewable:end -->
  • Loading branch information
zzbot committed Jan 21, 2018
2 parents 28292f0 + af5a3ae commit d183f11
Show file tree
Hide file tree
Showing 8 changed files with 425 additions and 289 deletions.
63 changes: 63 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
version: 2
aliases:
common: &common
macos:
xcode: 9.0
update-submodules: &update-submodules
run:
name: Update submodules
command: git submodule update --init --recursive
install-dependencies: &install-dependencies
run:
name: Install dependencies
command: .circleci/install_dependencies.sh
run-tests: &run-tests
run:
name: Run tests
command: ./run_tests.py --coverage
upload-coverage: &upload-coverage
run:
name: Upload coverage
command: bash <(curl -s https://codecov.io/bash)
# Increase the version key to clear the cache.
save-cache: &save-cache
save_cache:
key: v1-ycm-{{ .Environment.CIRCLE_JOB }}
paths:
- ~/Library/Caches/Homebrew
- ~/.cache/pip
- ~/.pyenv
restore-cache: &restore-cache
restore_cache:
key: v1-ycm-{{ .Environment.CIRCLE_JOB }}
jobs:
python2:
<<: *common
steps:
- checkout
- *update-submodules
- *restore-cache
- *install-dependencies
- *save-cache
- *run-tests
- *upload-coverage
environment:
YCMD_PYTHON_VERSION: 2.7
python3:
<<: *common
steps:
- checkout
- *update-submodules
- *restore-cache
- *install-dependencies
- *save-cache
- *run-tests
- *upload-coverage
environment:
YCMD_PYTHON_VERSION: 3.3
workflows:
version: 2
build:
jobs:
- python2
- python3
79 changes: 79 additions & 0 deletions .circleci/install_dependencies.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/bin/bash

# Exit immediately if a command returns a non-zero status.
set -e

################
# Homebrew setup
################

# There's a homebrew bug which causes brew update to fail the first time. Run
# it twice to workaround. https://github.com/Homebrew/homebrew/issues/42553
brew update || brew update

# List of homebrew formulae to install in the order they appear.
# We require CMake and Ninja for our build and tests, and all the others are
# dependencies of pyenv.
REQUIREMENTS="cmake
ninja
readline
autoconf
pkg-config
openssl"

# Install CMake, Ninja, and pyenv dependencies.
for pkg in $REQUIREMENTS; do
# Install package, or upgrade it if it is already installed.
brew install $pkg || brew outdated $pkg || brew upgrade $pkg
done

##############
# Python setup
##############

PYENV_ROOT="${HOME}/.pyenv"

if [ ! -d "${PYENV_ROOT}/.git" ]; then
rm -rf ${PYENV_ROOT}
git clone https://github.com/yyuu/pyenv.git ${PYENV_ROOT}
fi
pushd ${PYENV_ROOT}
git fetch --tags
git checkout v1.2.1
popd

PATH="${PYENV_ROOT}/bin:${PATH}"

eval "$(pyenv init -)"

if [ "${YCMD_PYTHON_VERSION}" == "2.7" ]; then
# We need a recent enough version of Python 2.7 on macOS or an error occurs
# when installing the psutil dependency for our tests.
PYENV_VERSION="2.7.8"
else
PYENV_VERSION="3.3.6"
fi

# In order to work with ycmd, python *must* be built as a shared library. The
# most compatible way to do this on macOS is with --enable-framework. This is
# set via the PYTHON_CONFIGURE_OPTS option.
export PYTHON_CONFIGURE_OPTS="--enable-framework"

pyenv install --skip-existing ${PYENV_VERSION}
pyenv rehash
pyenv global ${PYENV_VERSION}

# Initialize pyenv in other steps. See
# https://circleci.com/docs/2.0/env-vars/#interpolating-environment-variables-to-set-other-environment-variables
# and https://github.com/pyenv/pyenv/issues/264
echo "export PATH=${PYENV_ROOT}/bin:\$PATH
if [ -z \"\${PYENV_LOADING}\" ]; then
export PYENV_LOADING=true
eval \"\$(pyenv init -)\"
unset PYENV_LOADING
fi" >> $BASH_ENV

pip install -U pip wheel setuptools
pip install -r python/test_requirements.txt

set +e
7 changes: 0 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
language: generic
os:
- linux
- osx
sudo: false
before_install:
- git submodule update --init --recursive
Expand All @@ -20,10 +17,6 @@ env:
- YCM_PYTHON_VERSION=2.6
- YCM_PYTHON_VERSION=2.7
- YCM_PYTHON_VERSION=3.3
matrix:
exclude:
- os: osx
env: YCM_PYTHON_VERSION=2.6
addons:
apt:
sources:
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
YouCompleteMe: a code-completion engine for Vim
===============================================

[![Gitter Room](https://img.shields.io/gitter/room/Valloric/YouCompleteMe.svg)](https://gitter.im/Valloric/YouCompleteMe)
[![Build Status](https://travis-ci.org/Valloric/YouCompleteMe.svg?branch=master)](https://travis-ci.org/Valloric/YouCompleteMe)
[![Build status](https://ci.appveyor.com/api/projects/status/ag9uqwi8s6btwjd8/branch/master?svg=true)](https://ci.appveyor.com/project/Valloric/YouCompleteMe)
[![Coverage Status](https://codecov.io/gh/Valloric/YouCompleteMe/branch/master/graph/badge.svg)](https://codecov.io/gh/Valloric/YouCompleteMe)
[![Gitter room](https://img.shields.io/gitter/room/Valloric/YouCompleteMe.svg)](https://gitter.im/Valloric/YouCompleteMe)
[![Linux build status](https://img.shields.io/travis/Valloric/YouCompleteMe/master.svg?label=Linux)](https://travis-ci.org/Valloric/YouCompleteMe)
[![macOS build status](https://img.shields.io/circleci/project/github/Valloric/YouCompleteMe/master.svg?label=macOS)](https://circleci.com/gh/Valloric/YouCompleteMe)
[![Windows build status](https://img.shields.io/appveyor/ci/Valloric/YouCompleteMe/master.svg?label=Windows)](https://ci.appveyor.com/project/Valloric/YouCompleteMe)
[![Coverage status](https://img.shields.io/codecov/c/github/Valloric/YouCompleteMe/master.svg)](https://codecov.io/gh/Valloric/YouCompleteMe)

Help, Advice, Support
---------------------
Expand Down
15 changes: 0 additions & 15 deletions ci/travis/travis_install.linux.sh

This file was deleted.

24 changes: 0 additions & 24 deletions ci/travis/travis_install.osx.sh

This file was deleted.

33 changes: 19 additions & 14 deletions ci/travis/travis_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,23 @@ set -ev
# commands.
unset -f cd popd pushd

####################
# OS-specific setup
####################
################
# Compiler setup
################

# Requirements of OS-specific install:
# - install any software which is not installed by Travis configuration
# - set up everything necessary so that pyenv can build python
source ci/travis/travis_install.${TRAVIS_OS_NAME}.sh
# We can't use sudo, so we have to approximate the behaviour of setting the
# default system compiler.

#############
# pyenv setup
#############
mkdir -p ${HOME}/bin

ln -s /usr/bin/g++-4.8 ${HOME}/bin/c++
ln -s /usr/bin/gcc-4.8 ${HOME}/bin/cc

export PATH=${HOME}/bin:${PATH}

##############
# Python setup
##############

PYENV_ROOT="${HOME}/.pyenv"

Expand All @@ -43,6 +48,10 @@ else
PYENV_VERSION="3.3.6"
fi

# In order to work with ycmd, python *must* be built as a shared library. This
# is set via the PYTHON_CONFIGURE_OPTS option.
export PYTHON_CONFIGURE_OPTS="--enable-shared"

pyenv install --skip-existing ${PYENV_VERSION}
pyenv rehash
pyenv global ${PYENV_VERSION}
Expand All @@ -54,10 +63,6 @@ python_version=$(python -c 'import sys; print( "{0}.{1}".format( sys.version_inf
echo "Checking python version (actual ${python_version} vs expected ${YCM_PYTHON_VERSION})"
test ${python_version} == ${YCM_PYTHON_VERSION}

############
# pip setup
############

pip install -U pip wheel setuptools
pip install -r python/test_requirements.txt

Expand Down

0 comments on commit d183f11

Please sign in to comment.