ci: replace Travis with GitHub Actions
Change-Id: I6316bc7872fe25644dceafb1e2e2119c9c6e5ac3
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..e988485
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,68 @@
+name: CI
+on:
+ push:
+ paths-ignore:
+ - 'docs/**'
+ - '*.md'
+ - '.mailmap'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ linux:
+ name: ${{ matrix.compiler }} on ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ compiler: [g++-8, g++-9, g++-10, g++-11,
+ clang++-7, clang++-8, clang++-9, clang++-10, clang++-11, clang++-12]
+ os: [ubuntu-20.04]
+ include:
+ - compiler: g++-7
+ os: ubuntu-18.04
+ - compiler: clang++-5.0
+ os: ubuntu-18.04
+ - compiler: clang++-6.0
+ os: ubuntu-18.04
+ runs-on: ${{ matrix.os }}
+ env:
+ CXX: ${{ matrix.compiler }}
+ NODE_LABELS: Linux Ubuntu
+ WAF_JOBS: 2
+ steps:
+ - name: Install C++ compiler
+ run: |
+ sudo apt-get -qy install ${CXX/clang++/clang}
+ ${CXX} --version
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Build and test
+ run: ./.jenkins
+
+ macos:
+ name: Xcode ${{ matrix.xcode }} on ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ xcode: ['11.3', '11.7', '12.4']
+ os: [macos-10.15]
+ include:
+ - xcode: '12.5'
+ os: macos-11
+ - xcode: '13'
+ os: macos-11
+ runs-on: ${{ matrix.os }}
+ env:
+ NODE_LABELS: OSX
+ WAF_JOBS: 3
+ steps:
+ - name: Set up Xcode
+ uses: maxim-lobanov/setup-xcode@v1
+ with:
+ xcode-version: ${{ matrix.xcode }}
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Build and test
+ run: ./.jenkins
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 0000000..7e19491
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,38 @@
+name: Docs
+on:
+ push:
+ paths-ignore:
+ - '*.md'
+ - '.mailmap'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [macos-11, ubuntu-20.04]
+ runs-on: ${{ matrix.os }}
+ env:
+ JOB_NAME: Docs
+ WAF_JOBS: 3
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Install dependencies
+ run: |
+ case ${RUNNER_OS} in
+ Linux) export NODE_LABELS="Linux Ubuntu" ;;
+ macOS) export NODE_LABELS="OSX" ;;
+ esac
+ find .jenkins.d/ -type f -name '[1-9]*.sh' -exec chmod -x '{}' +
+ ./.jenkins
+ - name: Build documentation
+ run: |
+ ./waf --color=yes configure
+ ./waf --color=yes build --targets=version.hpp
+ ./waf --color=yes build --targets=manpages
+ ./waf --color=yes docs
diff --git a/.jenkins b/.jenkins
index bc1c847..da10d69 100755
--- a/.jenkins
+++ b/.jenkins
@@ -2,31 +2,25 @@
set -e
source .jenkins.d/util.sh
+if has Linux $NODE_LABELS; then
+ export PATH="${HOME}/.local/bin${PATH:+:}${PATH}"
+fi
export CACHE_DIR=${CACHE_DIR:-/tmp}
export WAF_JOBS=${WAF_JOBS:-1}
[[ $JOB_NAME == *"code-coverage" ]] && export DISABLE_ASAN=yes
-nanos() {
- # Cannot use date(1) because macOS does not support %N format specifier
- python3 -c 'import time; print(int(time.time() * 1e9))'
-}
-
for file in .jenkins.d/*; do
[[ -f $file && -x $file ]] || continue
- if [[ -n $TRAVIS ]]; then
+ if [[ -n $GITHUB_ACTIONS ]]; then
label=$(basename "$file" | sed -E 's/[[:digit:]]+-(.*)\..*/\1/')
- echo -ne "travis_fold:start:${label}\r"
- echo -ne "travis_time:start:${label}\r"
- start=$(nanos)
+ echo "::group::${label}"
fi
echo "\$ $file"
"$file"
- if [[ -n $TRAVIS ]]; then
- finish=$(nanos)
- echo -ne "travis_time:end:${label}:start=${start},finish=${finish},duration=$((finish-start)),event=${label}\r"
- echo -ne "travis_fold:end:${label}\r"
+ if [[ -n $GITHUB_ACTIONS ]]; then
+ echo "::endgroup::"
fi
done
diff --git a/.jenkins.d/00-deps.sh b/.jenkins.d/00-deps.sh
index cd3eb76..95dfe37 100755
--- a/.jenkins.d/00-deps.sh
+++ b/.jenkins.d/00-deps.sh
@@ -3,13 +3,13 @@
if has OSX $NODE_LABELS; then
FORMULAE=(boost openssl pkg-config)
- if has OSX-10.13 $NODE_LABELS || has OSX-10.14 $NODE_LABELS; then
- FORMULAE+=(python)
+ if [[ $JOB_NAME == *"Docs" ]]; then
+ FORMULAE+=(doxygen graphviz)
fi
- if [[ -n $TRAVIS ]]; then
- # Travis images come with a large number of pre-installed
- # brew packages, don't waste time upgrading all of them
+ if [[ -n $GITHUB_ACTIONS ]]; then
+ # GitHub Actions runners have a large number of pre-installed
+ # Homebrew packages. Don't waste time upgrading all of them.
brew list --versions "${FORMULAE[@]}" || brew update
for FORMULA in "${FORMULAE[@]}"; do
brew list --versions "$FORMULA" || brew install "$FORMULA"
@@ -23,12 +23,23 @@
brew cleanup
fi
+ if [[ $JOB_NAME == *"Docs" ]]; then
+ pip3 install --upgrade --upgrade-strategy=eager sphinx sphinxcontrib-doxylink
+ fi
+
elif has Ubuntu $NODE_LABELS; then
sudo apt-get -qq update
sudo apt-get -qy install build-essential pkg-config python3-minimal \
libboost-all-dev libssl-dev libsqlite3-dev
- if [[ $JOB_NAME == *"code-coverage" ]]; then
- sudo apt-get -qy install gcovr lcov
- fi
+ case $JOB_NAME in
+ *code-coverage)
+ sudo apt-get -qy install lcov python3-pip
+ pip3 install --user --upgrade --upgrade-strategy=eager 'gcovr~=5.0'
+ ;;
+ *Docs)
+ sudo apt-get -qy install doxygen graphviz python3-pip
+ pip3 install --user --upgrade --upgrade-strategy=eager sphinx sphinxcontrib-doxylink
+ ;;
+ esac
fi
diff --git a/.jenkins.d/10-build.sh b/.jenkins.d/10-build.sh
index b09f968..99eb066 100755
--- a/.jenkins.d/10-build.sh
+++ b/.jenkins.d/10-build.sh
@@ -28,7 +28,7 @@
fi
# Build in debug mode with tests
-./waf --color=yes configure --with-chronosync --debug --with-tests $ASAN $COVERAGE
+./waf --color=yes configure --debug --with-chronosync --with-tests $ASAN $COVERAGE
./waf --color=yes build -j$WAF_JOBS
# (tests will be run against the debug version)
diff --git a/.jenkins.d/30-coverage.sh b/.jenkins.d/30-coverage.sh
index 56baf77..33238e2 100755
--- a/.jenkins.d/30-coverage.sh
+++ b/.jenkins.d/30-coverage.sh
@@ -2,22 +2,19 @@
set -ex
if [[ $JOB_NAME == *"code-coverage" ]]; then
+ # Generate a detailed HTML report using lcov
lcov --quiet \
--capture \
--directory . \
+ --exclude "$PWD/tests/*" \
--no-external \
--rc lcov_branch_coverage=1 \
- --output-file build/coverage-with-tests.info
-
- lcov --quiet \
- --remove build/coverage-with-tests.info "$PWD/tests/*" \
- --rc lcov_branch_coverage=1 \
--output-file build/coverage.info
genhtml --branch-coverage \
--demangle-cpp \
--legend \
- --output-directory build/coverage \
+ --output-directory build/lcov \
--title "NLSR unit tests" \
build/coverage.info
fi
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 1ab91c5..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,115 +0,0 @@
-version: ~> 1.0
-language: cpp
-os: linux
-dist: bionic
-
-arch:
- - amd64
- - arm64
- - ppc64le
- - s390x
-
-env:
- - COMPILER=g++-7
- - COMPILER=g++-9
- - COMPILER=clang++-6.0
- - COMPILER=clang++-9
-
-jobs:
- include:
- # Linux
- - env: COMPILER=g++-5
- - env: COMPILER=g++-6
- - env: COMPILER=g++-8
- - env: COMPILER=clang++-4.0
- - env: COMPILER=clang++-5.0
- - env: COMPILER=clang++-7
- - env: COMPILER=clang++-8
- - env: COMPILER=clang++-10
- - env: COMPILER=clang++-11
- - env: COMPILER=clang++-12
-
- # macOS
- - os: osx
- osx_image: xcode9.4
- env: # default compiler
- - os: osx
- osx_image: xcode10.1
- env: # default compiler
- - os: osx
- osx_image: xcode10.3
- env: # default compiler
- - os: osx
- osx_image: xcode11.3
- env: # default compiler
- - os: osx
- osx_image: xcode11.6
- env: # default compiler
- - os: osx
- osx_image: xcode12
- env: # default compiler
-
- allow_failures:
- - env: COMPILER=g++-5
- - env: COMPILER=g++-6
- - env: COMPILER=clang++-4.0
- - env: COMPILER=clang++-12
-
- fast_finish: true
-
-before_install:
- - |
- : Adding apt repositories
- case ${COMPILER} in
- g++-9)
- # https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages
- travis_retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
- travis_retry sudo apt-get -qq update
- ;;
- clang++-1?)
- # https://apt.llvm.org/
- LLVM_REPO=${COMPILER/clang++/llvm-toolchain-${TRAVIS_DIST}}
- travis_retry wget -nv -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo apt-key add -
- travis_retry sudo add-apt-repository -y "deb http://apt.llvm.org/${TRAVIS_DIST}/ ${LLVM_REPO%-12} main"
- travis_retry sudo apt-get -qq update
- ;;
- esac
-
-install:
- - |
- : Installing C++ compiler
- if [[ -n ${COMPILER} ]]; then
- travis_retry sudo apt-get -qy install ${COMPILER/clang++/clang}
- fi
-
-before_script:
- - |
- : Setting environment variables
- if [[ -n ${COMPILER} ]]; then
- export CXX=${COMPILER}
- fi
- case ${TRAVIS_OS_NAME} in
- linux) export NODE_LABELS="Linux Ubuntu Ubuntu-18.04" ;;
- osx) export NODE_LABELS="OSX OSX-$(sw_vers -productVersion | cut -d . -f -2)" ;;
- esac
- export WAF_JOBS=2
- - |
- : Enabling workarounds
- case "${TRAVIS_CPU_ARCH},${COMPILER}" in
- arm64,g++*)
- # Avoid exceeding the per-job time limit
- export JOB_NAME=limited-build
- ;;
- ppc64le,g++-7)
- # AddressSanitizer does not seem to be working
- export DISABLE_ASAN=yes
- ;;
- *,clang++-8)
- # https://bugs.llvm.org/show_bug.cgi?id=40808
- export DISABLE_ASAN=yes
- ;;
- esac
- - ${CXX:-c++} --version
-
-script:
- - ./.jenkins
diff --git a/README-dev.md b/README-dev.md
index 068051f..b7b3958 100644
--- a/README-dev.md
+++ b/README-dev.md
@@ -8,8 +8,8 @@
Include the following header in all `.hpp` and `.cpp` files:
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
- /**
- * Copyright (c) [Year(s)], [Copyright Holder(s)].
+ /*
+ * Copyright (c) [Year(s)], [Copyright Holder(s)].
*
* This file is part of NLSR (Named-data Link State Routing).
* See AUTHORS.md for complete list of NLSR authors and contributors.
@@ -24,7 +24,7 @@
*
* You should have received a copy of the GNU General Public License along with
* NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
If you are affiliated with an NSF-supported NDN project institution,
please use the [NDN Team License Boilerplate]
@@ -37,4 +37,4 @@
https://redmine.named-data.net/projects/nfd/wiki/CodeStyle
NLSR Developer's guide can be found here:
-https://github.com/named-data/NLSR/blob/developers-guide/NLSR-Developers-Guide.pdf
\ No newline at end of file
+https://github.com/named-data/NLSR/blob/developers-guide/NLSR-Developers-Guide.pdf
diff --git a/README.md b/README.md
index 19dff9c..c745237 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,9 @@
# NLSR: Named Data Link State Routing Protocol
-![Language](https://img.shields.io/badge/C%2B%2B-14-blue.svg)
-[![Build Status](https://travis-ci.org/named-data/NLSR.svg?branch=master)](https://travis-ci.org/named-data/NLSR)
-![Latest Version](https://img.shields.io/github/tag/named-data/NLSR.svg?color=darkkhaki&label=latest%20version)
+[![CI](https://github.com/named-data/NLSR/actions/workflows/ci.yml/badge.svg)](https://github.com/named-data/NLSR/actions/workflows/ci.yml)
+[![Docs](https://github.com/named-data/NLSR/actions/workflows/docs.yml/badge.svg)](https://github.com/named-data/NLSR/actions/workflows/docs.yml)
+![Language](https://img.shields.io/badge/C%2B%2B-14-blue)
+![Latest version](https://img.shields.io/github/v/tag/named-data/NLSR?label=Latest%20version)
For complete documentation and more extensive information,
please visit the [NLSR homepage](https://named-data.net/doc/NLSR/current/).