---
- _xtesting-containers: &xtesting-containers
    name: 'xtesting-containers'
    repo: '{repo}'
    port: '{port}'
    container: '{container}'
    tag: '{tag}'

- _xtesting-params: &xtesting-params
    name: 'xtesting-params'
    tag:
      - latest:
          from:
          build_args:
          branch: master
          node: opnfv-build
          dependency: 3.21
      - 2024.2:
          from:
          build_args:
          branch: stable/2024.2
          node: opnfv-build
          dependency: 3.21
      - 2024.1:
          from:
          build_args:
          branch: stable/2024.1
          node: opnfv-build
          dependency: 3.20
      - 2023.2:
          from:
          build_args:
          branch: stable/2023.2
          node: opnfv-build
          dependency: 3.17
      - 2023.1:
          from:
          build_args:
          branch: stable/2023.1
          node: opnfv-build
          dependency: 3.17
      - zed:
          from:
          build_args:
          branch: stable/zed
          node: opnfv-build
          dependency: 3.16
      - yoga:
          from:
          build_args:
          branch: stable/yoga
          node: opnfv-build
          dependency: 3.16
      - xena:
          from:
          build_args:
          branch: stable/xena
          node: opnfv-build
          dependency: 3.14
      - wallaby:
          from:
          build_args:
          branch: stable/wallaby
          node: opnfv-build
          dependency: 3.13

- _xtesting-opnfv-xtesting-params: &xtesting-opnfv-xtesting-params
    name: 'xtesting-opnfv-xtesting-params'
    repo: 'opnfv'
    container: 'xtesting'
    port:
    tag:
      - latest:
          from:
          build_args:
          branch: master
          node: opnfv-build
          dependency: 3.21
      - 2024.2:
          from:
          build_args:
          branch: stable/2024.2
          node: opnfv-build
          dependency: 3.21
      - 2024.1:
          from:
          build_args:
          branch: stable/2024.1
          node: opnfv-build
          dependency: 3.20
      - 2023.2:
          from:
          build_args:
          branch: stable/2023.2
          node: opnfv-build
          dependency: 3.17
      - 2023.1:
          from:
          build_args:
          branch: stable/2023.1
          node: opnfv-build
          dependency: 3.17
      - zed:
          from:
          build_args:
          branch: stable/zed
          node: opnfv-build
          dependency: 3.16
      - yoga:
          from:
          build_args:
          branch: stable/yoga
          node: opnfv-build
          dependency: 3.16
      - xena:
          from:
          build_args:
          branch: stable/xena
          node: opnfv-build
          dependency: 3.14
      - wallaby:
          from:
          build_args:
          branch: stable/wallaby
          node: opnfv-build
          dependency: 3.13

- _xtesting-jobs: &xtesting-jobs
    name: 'xtesting-jobs'
    current-parameters: true

- parameter:
    name: xtesting-node
    parameters:
      - label:
          name: node
          default: '{node}'

- parameter:
    name: xtesting-build_tag
    parameters:
      - random-string:
          name: build_tag

- _xtesting-run-containers: &xtesting-run-containers
    name: 'xtesting-run-containers'
    <<: *xtesting-containers
    privileged: '{privileged}'
    volumes: '{volumes}'
    env: '{env}'
    network: '{network}'
    uid: '{uid}'
    gid: '{gid}'
    published_ports: '{published_ports}'

- builder:
    name: xtesting-pull-containers
    builders:
      - shell: |
          set +x
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          sudo docker pull $image

- builder:
    name: xtesting-run-containers
    builders:
      - shell: |
          set +x
          volumes=;
          if [ "{volumes}" != "None" ]; then
            for i in $(echo {volumes} | tr -d '[]' |sed "s/, / /g" ); \
              do volumes="-v $i $volumes"; done
          fi
          env=;
          if [ "{env}" != "None" ]; then
            for i in $(eval echo {env} | tr -d '[]' |sed "s/, / /g" ); \
              do env="-e $i $env"; done
          fi
          published_ports=;
          if [ "{published_ports}" != "None" ]; then
            for i in $(echo {published_ports} | tr -d '[]' |sed "s/, / /g" ); \
              do published_ports="-p $i $published_ports"; done
          fi
          [ ! -z "$WORKSPACE" ] && sudo rm -rf $WORKSPACE/results || true
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          sudo mkdir -p $WORKSPACE/results
          sudo chown {uid}:{gid} $WORKSPACE/results
          sudo docker run --rm \
            --privileged={privileged} \
            --network={network} \
            $volumes \
            $env \
            $published_ports \
            -e S3_ENDPOINT_URL=https://storage.googleapis.com \
            -e S3_DST_URL=s3://artifacts.opnfv.org/xtesting/$BUILD_TAG/$JOB_NAME-$BUILD_ID \
            -e HTTP_DST_URL=http://artifacts.opnfv.org/xtesting/$BUILD_TAG/$JOB_NAME-$BUILD_ID \
            -v /home/opnfv/xtesting/.boto:/etc/boto.cfg \
            -e TEST_DB_URL=http://testresults.opnfv.org/test/api/v1/results \
            -e TEST_DB_EXT_URL=http://testresults.opnfv.org/test/api/v1/results \
            -e NODE_NAME=$node \
            -e BUILD_TAG=$BUILD_TAG \
            -v $WORKSPACE/../$JOB_NAME/results:/var/lib/xtesting/results \
            $image run_tests -t {test} -p -r

- builder:
    name: xtesting-remove-images
    builders:
      - shell: |
          set +x
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          sudo docker rmi $image || true

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-pull'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-pull-containers:
          <<: *xtesting-containers

- project:
    name: 'xtesting-opnfv-xtesting-pull'
    <<: *xtesting-opnfv-xtesting-params
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-pull'

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-rmi'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-remove-images:
          <<: *xtesting-containers

- project:
    name: 'xtesting-opnfv-xtesting-rmi'
    <<: *xtesting-opnfv-xtesting-params
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-rmi'

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-{test}-run'
    parameters:
      - xtesting-node:
          node: '{node}'
      - xtesting-build_tag:
          build_tag: ''
    builders:
      - xtesting-run-containers:
          <<: *xtesting-run-containers
          test: '{test}'

- project:
    name: 'xtesting-opnfv-xtesting'
    <<: *xtesting-opnfv-xtesting-params
    volumes:
    env:
    published_ports:
    container: 'xtesting'
    test:
      - first
      - second
      - third
      - fourth
      - fifth
      - sixth
      - eighth
      - nineth
    privileged: 'false'
    network: bridge
    uid: 1000
    gid: 1000
    exclude:
      - tag: wallaby
        test: nineth
      - tag: xena
        test: nineth
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-{test}-run'

- builder:
    name: xtesting-zip
    builders:
      - shell: |
          set +x
          volumes=;
          if [ "{volumes}" != "None" ]; then
            for i in $(echo {volumes} | tr -d '[]' |sed "s/, / /g" ); \
              do volumes="-v $i $volumes"; done
          fi
          env=;
          if [ "{env}" != "None" ]; then
            for i in $(eval echo {env} | tr -d '[]' |sed "s/, / /g" ); \
              do env="-e $i $env"; done
          fi
          published_ports=;
          if [ "{published_ports}" != "None" ]; then
            for i in $(echo {published_ports} | tr -d '[]' |sed "s/, / /g" ); \
              do published_ports="-p $i $published_ports"; done
          fi
          [ ! -z "$WORKSPACE" ] && sudo rm -rf $WORKSPACE/results || true
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          sudo mkdir -p $WORKSPACE/results
          sudo chown {uid}:{gid} $WORKSPACE/results
          sudo docker run --rm \
            --privileged={privileged} \
            --network={network} \
            $volumes \
            $env \
            $published_ports \
            -e S3_ENDPOINT_URL=https://storage.googleapis.com \
            -e S3_DST_URL=s3://artifacts.opnfv.org/xtesting \
            -e HTTP_DST_URL=http://artifacts.opnfv.org/xtesting \
            -v /home/opnfv/xtesting/.boto:/etc/boto.cfg \
            -e TEST_DB_URL=http://testresults.opnfv.org/test/api/v1/results \
            -e TEST_DB_EXT_URL=http://testresults.opnfv.org/test/api/v1/results \
            -e NODE_NAME=$node \
            -e BUILD_TAG=$BUILD_TAG \
            -v $WORKSPACE/../$JOB_NAME/results:/var/lib/xtesting/results \
            $image zip_campaign

- job-template:
    name: 'xtesting-{tag}-zip'
    parameters:
      - xtesting-node:
          node: '{node}'
      - xtesting-build_tag:
          build_tag: ''
    builders:
      - xtesting-zip:
          <<: *xtesting-run-containers

- project:
    name: 'xtesting-zip'
    <<: *xtesting-opnfv-xtesting-params
    volumes:
    env:
    published_ports:
    container: 'xtesting'
    privileged: 'false'
    network: bridge
    uid: 1000
    gid: 1000
    jobs:
      - 'xtesting-{tag}-zip'

- job-template:
    name: 'xtesting-{tag}-daily'
    project-type: multijob
    triggers:
      - timed: '@daily'
    parameters:
      - xtesting-node:
          node: '{node}'
      - xtesting-build_tag:
          build_tag: ''
    # PyYAML and yamllint differ here
    # see https://github.com/yaml/pyyaml/issues/234
    # yamllint disable rule:indentation
    properties:
      - build-blocker:
          blocking-jobs:
          - ^xtesting-(pi-)*{tag}-(daily|docker|review)$
    # yamllint enable rule:indentation
    builders:
      - multijob:
          name: remove former images
          projects:
            - name: 'xtesting-opnfv-xtesting-{tag}-rmi'
              <<: *xtesting-jobs
      - multijob:
          name: pull containers
          projects:
            - name: 'xtesting-opnfv-xtesting-{tag}-pull'
              <<: *xtesting-jobs
      - multijob:
          name: opnfv/xtesting:{tag}
          projects:
            - name: 'xtesting-opnfv-xtesting-{tag}-first-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-second-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-third-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-fourth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-fifth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-sixth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-eighth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-nineth-run'
              <<: *xtesting-jobs
      - multijob:
          name: dump all campaign data
          projects:
            - name: 'xtesting-{tag}-zip'
              <<: *xtesting-jobs
    publishers:
      - email-ext:
          failure: false
          first-failure: true
          fixed: true
          recipients: cedric.ollivier@orange.com

- project:
    name: 'xtesting-daily'
    <<: *xtesting-params
    jobs:
      - 'xtesting-{tag}-daily'

- view:
    name: xtesting
    view-type: list
    columns:
      - status
      - weather
      - job
      - last-success
      - last-failure
      - last-duration
    regex: ^xtesting-[a-z0-9.]+-daily$

- _xtesting-build-containers: &xtesting-build-containers
    name: 'xtesting-build-containers'
    <<: *xtesting-containers
    ref_arg: '{ref_arg}'
    path: '{path}'
    build_args: '{build_args}'
    from: '{from}'

- builder:
    name: xtesting-build-containers
    builders:
      - shell: |
          set +x
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          build_args=""
          if [ "{build_args}" != "None" ]; then
            for i in $(echo {build_args} | tr -d '[]' |sed "s/, / /g" ); \
              do build_args="--build-arg $i $build_args"; done
          fi
          if [ "{ref_arg}" != "None" ]; then
            build_args="$build_args --build-arg {ref_arg}={ref}"
          fi
          cd {path}
          if [ "{from}" != "None" ]; then
              sed -i {from} Dockerfile
          fi
          sudo docker build $build_args \
            --pull=false --no-cache --force-rm=true \
            -t $image .

- scm:
    name: xtesting-scm
    scm:
      - git:
          url: 'https://gerrit.opnfv.org/gerrit/functest-xtesting'
          refspec: '+refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/*'
          branches:
            - '{ref}'

- _xtesting-dep: &xtesting-dep
    name: 'xtesting-containers'
    repo: '{repo}'
    container: '{container}'
    port: '{port}'
    tag: '{dependency}'

- job-template:
    name: 'xtesting-{tag}-dep-pull'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-pull-containers:
          <<: *xtesting-dep

- _xtesting-dep-params: &xtesting-dep-params
    name: 'xtesting-dep-params'
    repo: '_'
    container: 'alpine'
    port:
    tag:
      - latest:
          dependency: 3.21
      - 2024.2:
          dependency: 3.21
      - 2024.1:
          dependency: 3.20
      - 2023.2:
          dependency: 3.17
      - 2023.1:
          dependency: 3.17
      - zed:
          dependency: 3.16
      - yoga:
          dependency: 3.16
      - xena:
          dependency: 3.14
      - wallaby:
          dependency: 3.13

- project:
    name: 'xtesting-dep-pull'
    <<: *xtesting-dep-params
    jobs:
      - 'xtesting-{tag}-dep-pull'

- job-template:
    name: 'xtesting-{tag}-dep-rmi'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-remove-images:
          <<: *xtesting-dep

- project:
    name: 'xtesting-dep-rmi'
    <<: *xtesting-dep-params
    jobs:
      - 'xtesting-{tag}-dep-rmi'

- builder:
    name: xtesting-tox
    builders:
      - shell: |
          set +x
          sudo apt-get -o DPkg::Lock::Timeout=300 update && \
          sudo DEBIAN_FRONTEND=noninteractive apt-get \
            -o DPkg::Lock::Timeout=300 dist-upgrade -y
          sudo DEBIAN_FRONTEND=noninteractive \
          apt-get -o DPkg::Lock::Timeout=300 install software-properties-common gpg -y
          sudo add-apt-repository -y ppa:deadsnakes/ppa
          sudo apt-get -o DPkg::Lock::Timeout=300 update && \
          sudo DEBIAN_FRONTEND=noninteractive apt-get \
            -o DPkg::Lock::Timeout=300 install \
            libxml2-dev libxslt-dev libffi-dev libjpeg-dev \
            python3.12 python3.12-dev \
            python3.11 python3.11-dev \
            python3.10 python3.10-dev \
            python3.9 python3.9-dev python3.9-distutils \
            python3.8 python3.8-dev python3.8-distutils \
            python3-pip enchant-2 -y
          sudo pip3 install tox

          tox

- job-template:
    name: 'xtesting-{tag}-tox'
    scm:
      - xtesting-scm:
          ref: $GERRIT_REFSPEC
    triggers:
      - xtesting-patchset-created:
          branch: '{branch}'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-tox:

- project:
    name: xtesting-tox
    <<: *xtesting-params
    jobs:
      - 'xtesting-{tag}-tox'

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-gate'
    parameters:
      - xtesting-node:
          node: '{node}'
    scm:
      - xtesting-scm:
          ref: $GERRIT_REFSPEC
    builders:
      - xtesting-build-containers:
          <<: *xtesting-build-containers
          ref: $GERRIT_REFSPEC
          build_args: '{build_args}'

- project:
    name: xtesting-opnfv-xtesting-gate
    <<: *xtesting-params
    repo: opnfv
    port:
    container: xtesting
    ref_arg: BRANCH
    path: docker/core
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-gate'

- trigger:
    name: xtesting-patchset-created
    triggers:
      - gerrit:
          trigger-on:
            - patchset-created-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: 'functest-xtesting'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'

- job-template:
    name: 'xtesting-{tag}-review'
    project-type: multijob
    triggers:
      - xtesting-patchset-created:
          branch: '{branch}'
    parameters:
      - xtesting-node:
          node: '{node}'
      - xtesting-build_tag:
          build_tag: ''
    # PyYAML and yamllint differ here
    # see https://github.com/yaml/pyyaml/issues/234
    # yamllint disable rule:indentation
    properties:
      - build-blocker:
          blocking-jobs:
          - ^xtesting-(pi-)*{tag}-(daily|docker|review)$
    # yamllint enable rule:indentation
    builders:
      - multijob:
          name: remove former images
          projects:
            - name: 'xtesting-opnfv-xtesting-{tag}-rmi'
              <<: *xtesting-jobs
      - multijob:
          name: remove dependency
          projects:
            - name: 'xtesting-{tag}-dep-rmi'
              <<: *xtesting-jobs
      - multijob:
          name: pull dependency
          projects:
            - name: 'xtesting-{tag}-dep-pull'
              <<: *xtesting-jobs
      - multijob:
          name: opnfv/xtesting
          projects:
            - name: 'xtesting-opnfv-xtesting-{tag}-gate'
              <<: *xtesting-jobs
      - multijob:
          name: opnfv/xtesting:{tag}
          projects:
            - name: 'xtesting-opnfv-xtesting-{tag}-first-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-second-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-third-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-fourth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-fifth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-sixth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-eighth-run'
              <<: *xtesting-jobs
            - name: 'xtesting-opnfv-xtesting-{tag}-nineth-run'
              <<: *xtesting-jobs
    publishers:
      - email-ext:
          failure: false
          first-failure: true
          fixed: true
          recipients: cedric.ollivier@orange.com

- project:
    name: 'xtesting-review'
    <<: *xtesting-params
    jobs:
      - 'xtesting-{tag}-review'

- view:
    name: xtesting-review
    view-type: list
    columns:
      - status
      - weather
      - job
      - last-success
      - last-failure
      - last-duration
    regex: ^xtesting-[a-z0-9.]+-review$

- view:
    name: xtesting-tox
    view-type: list
    columns:
      - status
      - weather
      - job
      - last-success
      - last-failure
      - last-duration
    regex: ^xtesting-[a-z0-9.]+-tox$

- builder:
    name: xtesting-push-containers
    builders:
      - shell: |
          set +x
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          sudo docker push $image

- trigger:
    name: xtesting-commit
    triggers:
      - pollscm:
          cron: "*/30 * * * *"

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-build'
    parameters:
      - xtesting-node:
          node: '{node}'
    scm:
      - xtesting-scm:
          ref: '{branch}'
    builders:
      - xtesting-build-containers:
          <<: *xtesting-build-containers
          ref: '{branch}'
          build_args: '{build_args}'
      - xtesting-push-containers:
          <<: *xtesting-build-containers
          ref: '{branch}'

- project:
    name: xtesting-opnfv-xtesting-build
    <<: *xtesting-params
    repo: opnfv
    container: xtesting
    port:
    ref_arg: BRANCH
    path: docker/core
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-build'

- job-template:
    name: 'xtesting-{tag}-docker'
    project-type: multijob
    triggers:
      - xtesting-commit
    scm:
      - xtesting-scm:
          ref: '{branch}'
    parameters:
      - xtesting-node:
          node: '{node}'
    # PyYAML and yamllint differ here
    # see https://github.com/yaml/pyyaml/issues/234
    # yamllint disable rule:indentation
    properties:
      - build-blocker:
          blocking-jobs:
          - ^xtesting-(pi-)*{tag}-(daily|docker|review)$
    # yamllint enable rule:indentation
    builders:
      - multijob:
          name: remove dependency
          projects:
            - name: 'xtesting-{tag}-dep-rmi'
              <<: *xtesting-jobs
      - multijob:
          name: pull dependency
          projects:
            - name: 'xtesting-{tag}-dep-pull'
              <<: *xtesting-jobs
      - multijob:
          name: opnfv/xtesting
          projects:
            - name: 'xtesting-opnfv-xtesting-{tag}-build'
              <<: *xtesting-jobs
    publishers:
      - email-ext:
          failure: false
          first-failure: true
          fixed: true
          recipients: cedric.ollivier@orange.com

- project:
    name: 'xtesting-docker'
    <<: *xtesting-params
    jobs:
      - 'xtesting-{tag}-docker'

- builder:
    name: xtesting-trivy
    builders:
      - shell: |
          sudo apt-get -o DPkg::Lock::Timeout=300 update && \
          sudo DEBIAN_FRONTEND=noninteractive apt-get \
            -o DPkg::Lock::Timeout=300 install curl -y

          curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b .
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          ./trivy image --exit-code 1 $image

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-trivy'
    triggers:
      - timed: '@daily'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-trivy:
          <<: *xtesting-containers
    publishers:
      - email-ext:
          failure: false
          first-failure: true
          fixed: true
          recipients: cedric.ollivier@orange.com

- project:
    name: 'xtesting-opnfv-xtesting-trivy'
    <<: *xtesting-params
    repo: 'opnfv'
    container: 'xtesting'
    port:
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-trivy'

- builder:
    name: xtesting-grype
    builders:
      - shell: |
          sudo apt-get -o DPkg::Lock::Timeout=300 update && \
          sudo DEBIAN_FRONTEND=noninteractive apt-get \
            -o DPkg::Lock::Timeout=300 install curl -y

          curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sudo sh -s -- -b .
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          ./grype -q $image

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-grype'
    triggers:
      - timed: '@daily'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-grype:
          <<: *xtesting-containers
    publishers:
      - email-ext:
          failure: false
          first-failure: true
          fixed: true
          recipients: cedric.ollivier@orange.com

- project:
    name: 'xtesting-opnfv-xtesting-grype'
    <<: *xtesting-params
    repo: 'opnfv'
    container: 'xtesting'
    port:
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-grype'

- builder:
    name: xtesting-sbom
    builders:
      - shell: |
          sudo apt-get -o DPkg::Lock::Timeout=300 update && \
          sudo DEBIAN_FRONTEND=noninteractive apt-get \
            -o DPkg::Lock::Timeout=300 install curl -y

          sudo mkdir -p ~/.docker
          curl -sSfL https://raw.githubusercontent.com/docker/sbom-cli-plugin/main/install.sh | sudo sh -s --
          if [ "{repo}" = "_" ]; then
            image={container}:{tag}
          elif [ "{port}" = "None" ]; then
            image={repo}/{container}:{tag}
          else
            image={repo}:{port}/{container}:{tag}
          fi
          sudo docker sbom $image

- job-template:
    name: 'xtesting-opnfv-xtesting-{tag}-sbom'
    triggers:
      - timed: '@daily'
    parameters:
      - xtesting-node:
          node: '{node}'
    builders:
      - xtesting-sbom:
          <<: *xtesting-containers
    publishers:
      - email-ext:
          failure: false
          first-failure: true
          fixed: true
          recipients: cedric.ollivier@orange.com

- project:
    name: 'xtesting-opnfv-xtesting-sbom'
    <<: *xtesting-params
    repo: 'opnfv'
    container: 'xtesting'
    port:
    jobs:
      - 'xtesting-opnfv-xtesting-{tag}-sbom'

- view:
    name: xtesting-docker
    view-type: list
    columns:
      - status
      - weather
      - job
      - last-success
      - last-failure
      - last-duration
    regex: ^xtesting-[a-z0-9.]+-docker$

- view:
    name: xtesting-trivy
    view-type: list
    columns:
      - status
      - weather
      - job
      - last-success
      - last-failure
      - last-duration
    regex: (?!xtesting-pi)^xtesting-[a-z-0-9.]+-trivy$

- view:
    name: xtesting-grype
    view-type: list
    columns:
      - status
      - weather
      - job
      - last-success
      - last-failure
      - last-duration
    regex: (?!xtesting-pi)^xtesting-[a-z-0-9.]+-grype$

- view:
    name: xtesting-sbom
    view-type: list
    columns:
      - status
      - weather
      - job
      - last-success
      - last-failure
      - last-duration
    regex: (?!xtesting-pi)^xtesting-[a-z-0-9.]+-sbom$