diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a5943c223f8047bf62b7443bfc55cc4be4db5852
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,158 @@
+name: Build
+
+on:
+  - push
+
+jobs:
+  build_ubuntu:
+    runs-on: ubuntu-18.04
+    container: gitlab-registry.cern.ch/acts/machines/ubuntu1910
+    steps:
+    - uses: actions/checkout@v1
+
+    - name: Configure
+      run: >
+        mkdir build && cd build
+        && cmake ..
+        -DCMAKE_BUILD_TYPE=Release
+        -DCMAKE_CXX_STANDARD=17
+        -DACTS_BUILD_UNITTESTS=ON
+        -DCMAKE_CXX_FLAGS="-Werror -fdiagnostics-color=always"
+        -DACTS_BUILD_DIGITIZATION_PLUGIN=on
+        -DACTS_BUILD_IDENTIFICATION_PLUGIN=on
+        -DACTS_BUILD_JSON_PLUGIN=on
+        -DACTS_BUILD_BENCHMARKS=on
+        -DACTS_BUILD_FATRAS=on
+        -DACTS_BUILD_EXAMPLES=on
+        -DACTS_BUILD_UNITTESTS=on
+        -DACTS_BUILD_LEGACY=on
+        -DACTS_BUILD_DD4HEP_PLUGIN=on
+        -DACTS_BUILD_TGEO_PLUGIN=on
+        -DACTS_BUILD_INTEGRATIONTESTS=on
+
+    - name: Build
+      working-directory: build
+      run: cmake --build . -- -j$(nproc)
+
+    - name: Unit tests
+      working-directory: build
+      run: cmake --build . -- test
+
+    - name: Integration tests
+      working-directory: build
+      run: cmake --build . -- integrationtests
+
+  build_macos:
+    runs-on: macos-10.15
+    steps:
+      - uses: actions/checkout@v1
+        with:
+          path: src
+
+      - name: Install dependencies
+        run: >
+          cd ..
+          && brew install boost eigen cmake xerces-c
+          && mkdir deps
+          && curl -SL https://acts.web.cern.ch/ACTS/ci/macOS_10.15_deps.tar.gz | tar -xzC deps
+
+      - name: Configure
+        run: >
+          cd ..
+          && source deps/bin/thisroot.sh
+          && mkdir build && cd build
+          && cmake ../src
+          -DCMAKE_PREFIX_PATH=../deps
+          -DCMAKE_BUILD_TYPE=Release
+          -DCMAKE_CXX_STANDARD=17
+          -DACTS_BUILD_UNITTESTS=ON
+          -DCMAKE_CXX_FLAGS="-Werror -fdiagnostics-color=always"
+          -DACTS_BUILD_DIGITIZATION_PLUGIN=on
+          -DACTS_BUILD_IDENTIFICATION_PLUGIN=on
+          -DACTS_BUILD_JSON_PLUGIN=on
+          -DACTS_BUILD_BENCHMARKS=on
+          -DACTS_BUILD_FATRAS=on
+          -DACTS_BUILD_EXAMPLES=on
+          -DACTS_BUILD_UNITTESTS=on
+          -DACTS_BUILD_LEGACY=on
+          -DACTS_BUILD_DD4HEP_PLUGIN=on
+          -DACTS_BUILD_TGEO_PLUGIN=on
+          -DACTS_BUILD_INTEGRATIONTESTS=on
+
+      - name: Build
+        working-directory: ../build
+        run: cmake --build . -- -j2
+
+      - name: Unit tests
+        working-directory: ../build
+        run: cmake --build . -- test
+
+      - name: Integration tests
+        working-directory: ../build
+        run: cmake --build . -- integrationtests
+
+
+  build_lcg:
+    runs-on: ubuntu-latest
+    container: gitlab-registry.cern.ch/acts/machines/${{ matrix.os }}_lcg${{ matrix.lcg }}:latest
+    strategy:
+      matrix:
+        os:
+          - cc7
+          - slc6
+        lcg:
+          - 95
+          - 96
+        exclude:
+          - os: slc6
+            lcg: 96
+    env:
+      lcg_map_95: 95apython3
+      lcg_map_96: 96
+      os_map_cc7: centos7
+      os_map_slc6: slc6
+    steps:
+      - uses: actions/checkout@v1
+
+      # - name: Build on ${{ matrix.os }}, LCG${{ matrix.lcg }}
+        # run: .github/workflows/build_job.sh ${{ matrix.lcg }} ${{ matrix.os }}
+
+      - name: Configure
+        run: >
+          source /opt/lcg/views/LCG_${lcg_map_${{ matrix.lcg }}}/x86_64-${os_map_${{ matrix.os }}}-gcc8-opt/setup.sh
+          && mkdir build && cd build
+          && cmake ..
+          -DCMAKE_BUILD_TYPE=Release
+          -DCMAKE_CXX_STANDARD=17
+          -DACTS_BUILD_UNITTESTS=ON
+          -DCMAKE_CXX_FLAGS="-Werror -fdiagnostics-color=always"
+          -DACTS_BUILD_DIGITIZATION_PLUGIN=on
+          -DACTS_BUILD_IDENTIFICATION_PLUGIN=on
+          -DACTS_BUILD_JSON_PLUGIN=on
+          -DACTS_BUILD_BENCHMARKS=on
+          -DACTS_BUILD_FATRAS=on
+          -DACTS_BUILD_EXAMPLES=on
+          -DACTS_BUILD_UNITTESTS=on
+          -DACTS_BUILD_LEGACY=on
+          -DACTS_BUILD_DD4HEP_PLUGIN=on
+          -DACTS_BUILD_TGEO_PLUGIN=on
+          -DACTS_BUILD_INTEGRATIONTESTS=on
+
+      - name: Build
+        working-directory: build
+        run: >
+          source /opt/lcg/views/LCG_${lcg_map_${{ matrix.lcg }}}/x86_64-${os_map_${{ matrix.os }}}-gcc8-opt/setup.sh
+          && cmake --build . -- -j$(nproc)
+
+      - name: Unit tests
+        working-directory: build
+        run: >
+          source /opt/lcg/views/LCG_${lcg_map_${{ matrix.lcg }}}/x86_64-${os_map_${{ matrix.os }}}-gcc8-opt/setup.sh
+          && cmake --build . -- test
+
+      - name: Integration tests
+        working-directory: build
+        run: >
+          source /opt/lcg/views/LCG_${lcg_map_${{ matrix.lcg }}}/x86_64-${os_map_${{ matrix.os }}}-gcc8-opt/setup.sh
+          && cmake --build . -- integrationtests
+
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2aef22946ea46c4799c4dd972e33beb9d34958c6
--- /dev/null
+++ b/.github/workflows/checks.yml
@@ -0,0 +1,39 @@
+name: Checks
+
+on:
+  - push
+
+
+jobs:
+  format:
+    runs-on: ubuntu-18.04
+    container: gitlab-registry.cern.ch/acts/machines/check_llvm8:latest
+    steps:
+    - uses: actions/checkout@v1
+    - name: Check
+      run: CI/check_format .
+
+
+    - uses: actions/upload-artifact@v1
+      if: failure()
+      with:
+        name: changed
+        path: changed
+
+  license:
+    runs-on: ubuntu-18.04
+    container: python:alpine3.6
+    steps:
+    - uses: actions/checkout@v1
+    - name: Check
+      run: >
+        apk add --no-cache git
+        && CI/check_license.py . --exclude "*thirdparty/*"
+  include_guards:
+    runs-on: ubuntu-18.04
+    container: python:alpine3.6
+    steps:
+    - uses: actions/checkout@v1
+    - name: Check
+      run: >
+        CI/check_include_guards.py . --fail-global --exclude "*thirdparty/*"
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a09a70a1cb90cc076ddec5c920a2f153505b3dba
--- /dev/null
+++ b/.github/workflows/coverage.yml
@@ -0,0 +1,39 @@
+name: coverage
+
+on:
+  - pull_request
+
+jobs:
+  build_debug:
+    runs-on: ubuntu-18.04
+    container: gitlab-registry.cern.ch/acts/machines/ubuntu1910
+    steps:
+    - uses: actions/checkout@v1
+    - name: Build
+      run: >
+        mkdir build && cd build
+        && cmake ..
+        -DCMAKE_BUILD_TYPE=Debug
+        -DCMAKE_CXX_STANDARD=17
+        -DACTS_BUILD_UNITTESTS=ON
+        -DCMAKE_CXX_FLAGS="-Werror -fdiagnostics-color=always"
+        -DACTS_BUILD_DIGITIZATION_PLUGIN=on
+        -DACTS_BUILD_IDENTIFICATION_PLUGIN=on
+        -DACTS_BUILD_JSON_PLUGIN=on
+        -DACTS_BUILD_BENCHMARKS=on
+        -DACTS_BUILD_FATRAS=on
+        -DACTS_BUILD_EXAMPLES=on
+        -DACTS_BUILD_UNITTESTS=on
+        -DACTS_BUILD_LEGACY=on
+        -DACTS_BUILD_DD4HEP_PLUGIN=on
+        -DACTS_BUILD_TGEO_PLUGIN=on
+        -DACTS_BUILD_INTEGRATIONTESTS=off
+        && cmake --build . -- -j$(nproc)
+        && cmake --build . -- test
+        && pip3 install gcovr
+        && /usr/bin/python3 ../CI/test_coverage
+    - name: Upload coverage
+      uses: codecov/codecov-action@v1
+      with:
+        file: ./build/coverage/cov.xml
+
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index b66bea5a58a8f3b8286d3812c0632e1047ebccac..0000000000000000000000000000000000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-language: cpp
-
-matrix:
-  include:
-    - os: osx
-      osx_image: xcode10.2
-      before_install:
-        - brew install eigen
-    - os: linux
-      addons:
-        apt:
-          update: true
-          sources:
-            - sourceline: 'ppa:mhier/libboost-latest'
-            - ubuntu-toolchain-r-test
-          packages:
-            - libeigen3-dev
-            - boost1.67
-            - cmake
-            - g++-7
-      env: CC=gcc-7 CXX=g++-7
-    - os: linux
-      sudo: required
-      before_install:
-        - wget --no-check-certificate https://ecsft.cern.ch/dist/cvmfs/cvmfs-release/cvmfs-release-latest_all.deb
-        - sudo dpkg -i cvmfs-release-latest_all.deb
-        - sudo apt-get update
-        - sudo apt-get install cvmfs cvmfs-config-default
-        - rm -f cvmfs-release-latest_all.deb
-        - wget --no-check-certificate https://lcd-data.web.cern.ch/lcd-data/CernVM/default.local
-        - sudo mkdir -p /etc/cvmfs
-        - sudo mv default.local /etc/cvmfs/default.local
-        - sudo /etc/init.d/autofs stop
-        - sudo cvmfs_config setup
-        - sudo mkdir -p /cvmfs/sft.cern.ch
-        - sudo mount -t cvmfs sft.cern.ch /cvmfs/sft.cern.ch
-        - ls /cvmfs/sft.cern.ch
-      services:
-        - docker
-      script:
-        - docker run -ti --name CI_container -v ${PWD}:/src -w /src -v"/cvmfs:/cvmfs:ro" -d gitlab-registry.cern.ch/acts/machines/cc7 /bin/bash
-        - docker exec -ti CI_container /bin/bash -c "source CI/setup_lcg94.sh && mkdir build && cd build && cmake .. -DACTS_BUILD_EXAMPLES=on -DACTS_BUILD_TESTS=on -DACTS_BUILD_INTEGRATION_TESTS=on -DACTS_BUILD_DIGITIZATION_PLUGIN=on -DACTS_BUILD_IDENTIFICATION_PLUGIN=on -DACTS_BUILD_JSON_PLUGIN=on -DACTS_BUILD_LEGACY=on -DACTS_BUILD_DD4HEP_PLUGIN=on -DACTS_BUILD_TGEO_PLUGIN=on && cmake --build . -- -j$(nproc) && cmake --build . -- test"
-
-script:
-  - mkdir build && cd build
-  - cmake .. -DCMAKE_CXX_FLAGS="-std=c++17" -DACTS_BUILD_EXAMPLES=on -DACTS_BUILD_TESTS=on -DACTS_BUILD_INTEGRATION_TESTS=on -DACTS_BUILD_DIGITIZATION_PLUGIN=on -DACTS_BUILD_IDENTIFICATION_PLUGIN=on -DACTS_BUILD_JSON_PLUGIN=on -DACTS_BUILD_LEGACY=on
-  - cmake --build . -- -j$(nproc)
-  - cmake --build . -- test
-
-
-
-
diff --git a/CI/check_format b/CI/check_format
index ea60eee823a4d5f95ff8a29fe9460cd17a5723a3..8038456c6f18c73480050841f22c2b50ead97685 100755
--- a/CI/check_format
+++ b/CI/check_format
@@ -26,7 +26,7 @@ find . \( -iname '*.cpp' -or -iname '*.hpp' -or -iname '*.ipp' \) \
   | xargs $_binary -i -style=file
 
 
-if ! [ -z $CI ]; then
+if ! [ -z $CI ] || ! [ -z $GITHUB_ACTIONS ]; then
   mkdir changed
   for f in $(git diff --name-only); do
     cp --parents $f changed
diff --git a/CI/test_coverage b/CI/test_coverage
index da90e1769b31d83821a50445cc3b727f326c6a29..5e8c6aeaaa054402b68fca4b61272379b368a90a 100755
--- a/CI/test_coverage
+++ b/CI/test_coverage
@@ -81,8 +81,9 @@ call(gcovr
      + ["--gcov-executable", args.gcov]
      + ["-j", str(mp.cpu_count())]
      + excludes +
-     ["--html", "--html-details",
-     "-o", os.path.join(coverage_dir, "index.html")])
+     ["--xml", "-o", "coverage/cov.xml"])
+     #  ["--html", "--html-details",
+     #  "-o", os.path.join(coverage_dir, "index.html")])
 
 call(gcovr
      + ["-r", source_dir]
diff --git a/Tests/CommonHelpers/Acts/Tests/CommonHelpers/LineSurfaceStub.hpp b/Tests/CommonHelpers/Acts/Tests/CommonHelpers/LineSurfaceStub.hpp
index 41ed0a6b803ef3e0e222e16a13a5b9429b310aab..e384e22758e7a29213f4d4e5784cae38ef472f67 100644
--- a/Tests/CommonHelpers/Acts/Tests/CommonHelpers/LineSurfaceStub.hpp
+++ b/Tests/CommonHelpers/Acts/Tests/CommonHelpers/LineSurfaceStub.hpp
@@ -38,6 +38,12 @@ class LineSurfaceStub : public LineSurface {
   LineSurfaceStub(const LineSurfaceStub& ls)
       : GeometryObject(), LineSurface(ls) { /* nop */
   }
+
+  LineSurfaceStub& operator=(const LineSurfaceStub& ls) {
+    LineSurface::operator=(ls);
+    return *this;
+  }
+
   //
   LineSurfaceStub(const GeometryContext& gctx, const LineSurfaceStub& ls,
                   const Transform3D& t)
diff --git a/Tests/IntegrationTests/Fatras/FatrasSimulationTests.cpp b/Tests/IntegrationTests/Fatras/FatrasSimulationTests.cpp
index 0b7c41a299b442855c4c5a2f538a3bf6f773b0c1..1bcff998afe4c4f505dcd7e1bca735213a4d9299 100644
--- a/Tests/IntegrationTests/Fatras/FatrasSimulationTests.cpp
+++ b/Tests/IntegrationTests/Fatras/FatrasSimulationTests.cpp
@@ -81,29 +81,30 @@ using Simulator = ActsFatras::Simulator<ChargedSelector, ChargedSimulator,
 
 // parameters for data-driven test cases
 
-const auto rangePdg = boost::unit_test::data::make({
-    Acts::PdgParticle::eElectron,
-    Acts::PdgParticle::eMuon,
-    Acts::PdgParticle::ePionPlus,
-    Acts::PdgParticle::ePionZero,
-});
-const auto rangePhi = boost::unit_test::data::make({
+const auto rangePdg =
+    boost::unit_test::data::make(std::vector<Acts::PdgParticle>{
+        Acts::PdgParticle::eElectron,
+        Acts::PdgParticle::eMuon,
+        Acts::PdgParticle::ePionPlus,
+        Acts::PdgParticle::ePionZero,
+    });
+const auto rangePhi = boost::unit_test::data::make(std::vector<double>{
     -135_degree,
     -45_degree,
     45_degree,
     135_degree,
 });
-const auto rangeEta = boost::unit_test::data::make({
+const auto rangeEta = boost::unit_test::data::make(std::vector<double>{
     -1.0,
     0.0,
     1.0,
     3.0,
 });
-const auto rangeP = boost::unit_test::data::make({
+const auto rangeP = boost::unit_test::data::make(std::vector<double>{
     1_GeV,
     10_GeV,
 });
-const auto rangeNumParticles = boost::unit_test::data::make({
+const auto rangeNumParticles = boost::unit_test::data::make(std::vector<int>{
     1,
     2,
 });
diff --git a/Tests/UnitTests/Core/Seeding/ATLASCuts.hpp b/Tests/UnitTests/Core/Seeding/ATLASCuts.hpp
index 593bc7c7788693388893f754b74fc5d4770d760c..9f2507f9da382693241c7f5168cb5a608e868ad1 100644
--- a/Tests/UnitTests/Core/Seeding/ATLASCuts.hpp
+++ b/Tests/UnitTests/Core/Seeding/ATLASCuts.hpp
@@ -83,8 +83,8 @@ ATLASCuts<SpacePoint>::cutPerMiddleSP(
         newSeedsVector.push_back(std::move(seeds[i]));
       }
     }
-    return std::move(newSeedsVector);
+    return newSeedsVector;
   }
-  return std::move(seeds);
+  return seeds;
 }
 }  // namespace Acts
diff --git a/Tests/UnitTests/Fatras/Physics/Dataset.hpp b/Tests/UnitTests/Fatras/Physics/Dataset.hpp
index eee0c82117753522cfbd3d9ade9a182fb58102bd..4feafbc512bc60f10d32cdd3e3c1ed59d7c75bdc 100644
--- a/Tests/UnitTests/Fatras/Physics/Dataset.hpp
+++ b/Tests/UnitTests/Fatras/Physics/Dataset.hpp
@@ -22,7 +22,7 @@ namespace data = boost::unit_test::data;
 using namespace Acts::UnitLiterals;
 
 // particle identity
-const auto particlePdg = data::make({
+const auto particlePdg = data::make(std::vector<Acts::PdgParticle>{
     Acts::PdgParticle::eElectron,
     Acts::PdgParticle::ePositron,
     Acts::PdgParticle::eMuon,