diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml
new file mode 100644
index 0000000000..0560c3cf44
--- /dev/null
+++ b/.github/workflows/build_test.yml
@@ -0,0 +1,55 @@
+name: Build and Test
+
+on:
+  pull_request:
+    branches: [master]
+
+jobs:
+  test:
+    runs-on: ${{ matrix.os }} # compiles and test on Ubuntu
+
+    strategy:
+      matrix:
+        os: [ubuntu-latest]
+        java: ["11"]
+      fail-fast: false
+
+    steps:
+    - name: Checkout PR branch
+      uses: actions/checkout@v2
+      with:
+        ref: ${{ github.event.pull_request.head.sha }}
+        fetch-depth: 0
+
+    # Java JDK 11 used for maven build
+    - name: Setup Java ${{ matrix.java }}
+      uses: actions/setup-java@v1
+      with:
+        java-version: ${{ matrix.java }}
+        java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
+        architecture: x64
+
+    # Try to find and apply jbosstools cache
+    - name: Cache local Maven repository for RedDeer components
+      uses: actions/cache@v2
+      with:
+        path: ~/.m2/repository
+        key: reddeer-${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+        restore-keys: |
+          reddeer-${{ runner.os }}-maven-
+
+    # Build and compile using Maven
+    - name: Build/Compile and run unit tests
+      uses: GabrielBB/xvfb-action@v1
+      with:
+        run: mvn clean verify -U -fae -Dmaven.test.error.ignore=true -Dmaven.test.failure.ignore=true --quiet
+
+    # Archive artifacts to be applied in Publish Reports workflow
+    - name: Archiving test artifacts
+      uses: actions/upload-artifact@v2
+      with: 
+        name: ${{ matrix.os }}-test-reports
+        path: |
+          *tests/*/target/surefire-reports/
+          */*tests/*/target/surefire-reports/
+          **/*.log
diff --git a/.github/workflows/publish_reports.yml b/.github/workflows/publish_reports.yml
new file mode 100644
index 0000000000..2a062f8053
--- /dev/null
+++ b/.github/workflows/publish_reports.yml
@@ -0,0 +1,49 @@
+name: Publish reports
+
+on:
+  workflow_run:
+    workflows: ["Build And Test"]
+    types:
+      - completed
+
+jobs:
+  publish:
+    name: Publish Test Report
+    runs-on: ubuntu-latest
+    steps:
+      - name: Download artifacts
+        uses: actions/github-script@v3.1.0
+        with:
+          script: |
+            var artifacts = await github.actions.listWorkflowRunArtifacts({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                run_id: ${{github.event.workflow_run.id}},
+            });
+            for (var artifact of artifacts.data.artifacts) {
+              if (artifact.name.endsWith('test-reports')) {
+                var zipfile = await github.actions.downloadArtifact({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  artifact_id: artifact.id,
+                  archive_format: 'zip',
+                });
+                var fs = require('fs');
+                var path = require('path');
+                var pathFile = path.format({
+                  root: '${{github.workspace}}/',
+                  name: artifact.name,
+                  ext: '.zip'
+                });
+                fs.writeFileSync(pathFile, Buffer.from(zipfile.data));
+              }
+            }
+      - name: Unzip artifacts
+        run: |
+          find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \;
+      - name: Publish aggregated tests reports
+        uses: scacap/action-surefire-report@v1
+        with:
+          github_token: ${{secrets.GITHUB_TOKEN}}
+          report_paths: '${{github.workspace}}/*test-reports/**/TEST-*.xml'
+          commit: ${{github.event.workflow_run.head_sha}}
diff --git a/.gitignore b/.gitignore
index 7a08fe0d88..3343b89b90 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@ target
 *.swp
 *.out
 .*
+!.github
 !.gitignore
 # Eclipse files
 .project