Add OMEC cppcheck patchset test to JJB

Change-Id: I0a685c7ea200a7c7e110a7ef7e474a7a61ec509e
diff --git a/jjb/omec-ci.yaml b/jjb/omec-ci.yaml
index 5c13e45..c3097da 100644
--- a/jjb/omec-ci.yaml
+++ b/jjb/omec-ci.yaml
@@ -175,6 +175,9 @@
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
           build-node: 'ubuntu16.04-basebuild-1c-2g'
+      - 'omec-cppcheck':
+          pipeline-file: 'omec-cppcheck.groovy'
+          build-node: 'ubuntu16.04-basebuild-1c-2g'
       - 'docker-publish-github':
           build-timeout: 60
           docker-repo: 'omecproject'
@@ -473,6 +476,65 @@
     project-type: pipeline
     dsl: !include-raw-escape: pipeline/{pipeline-file}
 
+# cppcheck
+- job-template:
+    id: 'omec-cppcheck'
+    name: 'omec_{project}-cppcheck'
+    project-type: pipeline
+
+    description: |
+      <!-- Managed by Jenkins Job Builder -->
+      Created by {id} job-template from ci-management/jjb/omec-ci.yaml<br />
+
+    properties:
+      - cord-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+      - github:
+          url: 'https://github.com/{github-organization}/{project}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: '{build-timeout}'
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    parameters:
+      - string:
+          name: ghprbPullId
+          default: '$ghprbPullId'
+          description: 'Pull request number to fetch changes from. Leave blank to run manually.'
+
+      - string:
+          name: branch
+          default: '$ghprbTargetBranch'
+          description: 'Branch to run. Only used when manually run.'
+
+      - string:
+          name: buildNode
+          default: '{build-node}'
+          description: 'Name of the Jenkins executor node to run the job on'
+
+      - string:
+          name: project
+          default: '{project}'
+          description: 'Name of the project'
+
+      - string:
+          name: ghprbGhRepository
+          default: '{github-organization}/{project}'
+          description: 'Repository of the project.'
+
+    triggers:
+      - cord-infra-github-pr-trigger:
+          github_pr_org_list: '{obj:github_pr_org_list}'
+          github_pr_auth_id: '{github_pr_auth_id}'
+          status_context: 'CORD Jenkins - cppcheck Verification'
+
+    concurrent: false
+
+    project-type: pipeline
+    dsl: !include-raw-escape: pipeline/{pipeline-file}
+
 # tests
 - job-template:
     id: 'omec-tc1'
diff --git a/jjb/pipeline/omec-cppcheck.groovy b/jjb/pipeline/omec-cppcheck.groovy
new file mode 100644
index 0000000..31d8c4d
--- /dev/null
+++ b/jjb/pipeline/omec-cppcheck.groovy
@@ -0,0 +1,86 @@
+// Copyright 2020-present Open Networking Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// omec-reuse-scan.groovy
+// checks an omec-project repo against reuse in a docker container
+
+pipeline {
+
+    agent {
+        docker {
+            image "registry.aetherproject.org/ci/cppcheck-verify:latest"
+            label "${params.buildNode}"
+            registryUrl "https://registry.aetherproject.org/"
+            registryCredentialsId "registry.aetherproject.org"
+        }
+    }
+
+    options {
+        timeout(15)
+    }
+
+    stages {
+        stage ("Clean Workspace") {
+            steps {
+                sh 'rm -rf *'
+            }
+        }
+
+        stage ("Checkout Pull Request") {
+            when {
+                expression {return params.ghprbPullId != ""}
+            }
+            steps {
+                checkout([
+                    $class: 'GitSCM',
+                    userRemoteConfigs: [[ url: "https://github.com/${params.ghprbGhRepository}", refspec: "pull/${params.ghprbPullId}/head" ]],
+                    extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: "${params.project}"]],
+                    ],
+                )
+            }
+        }
+
+        stage ("Checkout Repo (manual)") {
+            when {
+                expression {return params.ghprbPullId == ""}
+            }
+            steps {
+                checkout([
+                    $class: 'GitSCM',
+                    userRemoteConfigs: [[ url: "https://github.com/${params.ghprbGhRepository}" ]],
+                    extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: "${params.project}"]],
+                    ],
+                )
+            }
+        }
+
+        stage("Run cppcheck"){
+            steps {
+                script {
+                    sh  """
+                        cd ${params.project}
+                        if [ ! -z ${params.ghprbPullId} ]
+                        then
+                          git checkout FETCH_HEAD
+                        else
+                          git checkout ${params.branch}
+                        fi
+                        git show
+                        make cppcheck
+                        """
+                }
+            }
+        }
+    }
+}