Add verify job for FOSSA (nonvoting currently)
Change-Id: I6a865ce455088e80439ba00b5f3888e1c967a14c
diff --git a/jjb/pipeline/fossa-verify.groovy b/jjb/pipeline/fossa-verify.groovy
new file mode 100644
index 0000000..855711c
--- /dev/null
+++ b/jjb/pipeline/fossa-verify.groovy
@@ -0,0 +1,156 @@
+// 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.
+
+// fossa-verify.groovy
+// checks a single repo against fossa
+
+pipeline {
+
+ /* no label, executor is determined by JJB */
+ agent {
+ label "${params.executorNode}"
+ }
+
+ // Set so that fossa will know where to run golang tools from
+ environment {
+ PATH = "$PATH:/usr/lib/go-1.12/bin:/usr/local/go/bin/:$WORKSPACE/go/bin"
+ GOPATH = "$WORKSPACE/go"
+ }
+
+ options {
+ timeout("${params.build-timeout}")
+ }
+
+ stages {
+
+ stage ("Clean workspace") {
+ steps {
+ sh 'rm -rf *'
+ }
+ }
+
+ stage('Checkout') {
+ steps {
+ checkout([
+ $class: 'GitSCM',
+ userRemoteConfigs: [[ url: "${params.gitUrl}", ]],
+ branches: [[ name: "${params.gitRef}", ]],
+ extensions: [
+ [$class: 'WipeWorkspace'],
+ [$class: 'RelativeTargetDirectory', relativeTargetDir: "${params.projectName}"],
+ [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
+ ],
+ ])
+
+ // Used later to set the branch/tag in
+ script {
+ git_tag_or_branch = sh(script:"cd $projectName; if [[ \$(git tag -l --points-at HEAD) ]]; then git tag -l --points-at HEAD; else echo ${branchName}; fi", returnStdout: true).trim()
+ }
+ }
+ }
+
+ stage ("Prepare") {
+ steps {
+
+ // change the path tested if for golang projects which expect to be found in GOPATH
+ script {
+ test_path = sh(script:"if [ -f \"$projectName/Gopkg.toml\" ] || [ -f \"$projectName/go.mod\" ] ; then echo $WORKSPACE/go/src/github.com/opencord/$projectName; else echo $projectName; fi", returnStdout: true).trim()
+ }
+
+ sh returnStdout: true, script: """
+ if [ -f "$projectName/package.json" ]
+ then
+ echo "Found '$projectName/package.json', assuming a Node.js project, running npm install"
+ pushd "$projectName"
+ npm install
+ popd
+ elif [ -f "$projectName/Gopkg.toml" ]
+ then
+ echo "Found '$projectName/Gopkg.toml', assuming a golang project using dep"
+ mkdir -p "\$GOPATH/src/github.com/opencord/"
+ mv "$WORKSPACE/$projectName" "$test_path"
+ pushd "$test_path"
+ dep ensure
+ popd
+ elif [ -f "$projectName/go.mod" ]
+ then
+ echo "Found '$projectName/go.mod', assuming a golang project using go modules"
+ mkdir -p "\$GOPATH/src/github.com/opencord/"
+ mv "$WORKSPACE/$projectName" "$test_path"
+ pushd "$test_path"
+ make dep
+ popd
+ fi
+ """
+ }
+ }
+
+ stage ("fossa") {
+ steps {
+ // catch any errors that occur so that logs can be saved in the next stage
+ // docs: https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#catcherror-catch-error-and-set-build-result-to-failure
+ catchError {
+
+ sh returnStdout: true, script: """
+ echo "Creating debug output directory"
+ mkdir -p "$WORKSPACE/debug"
+
+ echo "Download/install fossa tool"
+ curl -H 'Cache-Control: no-cache' -O https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh
+ mkdir -p "$WORKSPACE/go/bin"
+ bash install.sh -b "$WORKSPACE/go/bin"
+
+ echo "Fossa version:"
+ fossa -v
+
+ echo "Testing project: $projectName located in $test_path"
+ pushd "$test_path"
+
+ echo "Fossa init"
+ fossa init --no-ansi --debug 2>"$WORKSPACE/debug/init_stderr.log"
+
+ echo "Fossa analyze"
+ fossa analyze --no-ansi --debug \
+ -T "$fossaProject"
+ -t "$projectName" \
+ -L "$GERRIT_CHANGE_URL" \
+ -b "$git_tag_or_branch" \
+ -r "$GERRIT_CHANGE_NUMBER.$GERRIT_PATCHSET_NUMBER" \
+ 2>"$WORKSPACE/debug/analyze_stderr.log"
+
+ echo "Fossa test results"
+ fossa test --no-ansi --debug \
+ -T "$fossaProject"
+ -t "$projectName" \
+ -L "$GERRIT_CHANGE_URL" \
+ -b "$git_tag_or_branch" \
+ -r "$GERRIT_CHANGE_NUMBER.$GERRIT_PATCHSET_NUMBER" \
+ 2>"$WORKSPACE/debug/test_stderr.log"
+
+ popd
+ """
+ }
+ }
+ }
+
+ stage ("Save Logs") {
+ steps {
+ sh returnStdout: true, script: """
+ echo "Logs:"
+ ls -l $WORKSPACE/debug
+ """
+ archiveArtifacts artifacts:'debug/*.log'
+ }
+ }
+ }
+}
+