fi
if [ -f ${DOVETAIL_CONFIG}/pod.yaml ]; then
+ echo "Adapt process info for $INSTALLER_TYPE ..."
+ attack_process='rabbitmq'
+ cat << EOF >> ${DOVETAIL_CONFIG}/pod.yaml
+process_info:
+- {testcase_name: dovetail.ha.tc010, attack_process: ${attack_process}}
+
+EOF
echo "file ${DOVETAIL_CONFIG}/pod.yaml:"
cat ${DOVETAIL_CONFIG}/pod.yaml
else
envs="${envs} -e POD_ARCH=${COMPUTE_ARCH}"
fi
-volumes="${images_vol} ${results_vol} ${sshkey_vol} ${rc_file_vol} ${cacert_file_vol}"
+
+if [[ ${INSTALLER_TYPE} == 'compass' && ${DEPLOY_SCENARIO} =~ 'odl.*sfc' ]]; then
+ ssh_key="/tmp/id_rsa"
+ user_config="/tmp/openstack_user_config.yml"
+ docker cp compass-tasks:/root/.ssh/id_rsa $ssh_key
+ docker cp compass-tasks:/etc/openstack_deploy/openstack_user_config.yml $user_config
+ sshkey_vol="-v ${ssh_key}:/root/.ssh/id_rsa"
+ userconfig_vol="-v ${user_config}:${user_config}"
+ envs="${envs} -e EXTERNAL_NETWORK=${EXTERNAL_NETWORK}"
+fi
+
+
+volumes="${images_vol} ${results_vol} ${sshkey_vol} ${userconfig_vol} ${rc_file_vol} ${cacert_file_vol}"
set +e
- 'daily':
job-timeout: 360
- 'arm-daily':
- job-timeout: 360
+ job-timeout: 480
jobs:
- 'functest-{installer}-{pod}-{testsuite}-{stream}'
KUBE_MASTER_IP=$(echo $KUBE_MASTER_URL|awk -F'https://|:[0-9]+' '$0=$2')
echo "export KUBE_MASTER_IP=$KUBE_MASTER_IP" >> $rc_file
elif [[ ${INSTALLER_TYPE} == 'joid' && ${BRANCH} == 'master' ]]; then
- admin_conf_file_vol="-v ${HOME}/joid_config/config:/root/joid_config/config"
+ admin_conf_file_vol="-v ${HOME}/joid_config/config:/root/.kube/config"
rc_file=${HOME}/joid_config/k8config
else
echo "Not supported by other installers yet"
volumes="${rc_file_vol} ${results_vol} ${admin_conf_file_vol}"
-# Set iptables rule to allow forwarding return traffic for container
-if ! sudo iptables -C FORWARD -j RETURN 2> ${redirect} || ! sudo iptables -L FORWARD | awk 'NR==3' | grep RETURN 2> ${redirect}; then
- sudo iptables -I FORWARD -j RETURN
-fi
-
envs="-e INSTALLER_TYPE=${INSTALLER_TYPE} \
-e NODE_NAME=${NODE_NAME} -e DEPLOY_SCENARIO=${DEPLOY_SCENARIO} \
-e BUILD_TAG=${BUILD_TAG} -e DEPLOY_TYPE=${DEPLOY_TYPE}"
echo "Pulling Docker image ${FUNCTEST_IMAGE} ..."
docker pull ${FUNCTEST_IMAGE}>/dev/null
cmd_opt="run_tests -r -t all"
-cmd="docker run --rm --privileged=true ${envs} ${volumes} ${FUNCTEST_IMAGE} /bin/bash -c '${cmd_opt}'"
+cmd="docker run --rm ${envs} ${volumes} ${FUNCTEST_IMAGE} /bin/bash -c '${cmd_opt}'"
echo "Running Functest k8s test cases, CMD: ${cmd}"
eval ${cmd}
ret_value=$?
+
+ret_val_file="${HOME}/opnfv/functest/results/${BRANCH##*/}/return_value"
+echo 0 > ${ret_val_file}
if [ ${ret_value} != 0 ]; then
echo ${ret_value} > ${ret_val_file}
fi
- opensuse:
disabled: false
# -------------------------------
- # scenarios
- # -------------------------------
- scenario:
- - 'os-odl-sfc':
- project: sfc
- # -------------------------------
- # type
- # -------------------------------
- type:
- - virtual
- # -------------------------------
# postmerge promotion phases
# -------------------------------
phase:
# jobs
# -------------------------------
jobs:
- - 'xci-{scenario}-{type}-merge-{stream}'
- - 'xci-{scenario}-{type}-promote-merge-{stream}'
- - 'xci-merge-{distro}-{type}-{stream}'
- - 'xci-merge-{distro}-{phase}-{type}-{stream}'
+ - 'xci-merge-virtual-{stream}'
+ - 'xci-merge-promote-virtual-{stream}'
+ - 'xci-merge-{distro}-virtual-{stream}'
+ - 'xci-merge-{distro}-{phase}-virtual-{stream}'
# -------------------------------
# job templates
# -------------------------------
- job-template:
- name: 'xci-{scenario}-{type}-merge-{stream}'
+ name: 'xci-merge-virtual-{stream}'
project-type: multijob
- disabled: '{obj:disabled}'
+ disabled: false
concurrent: false
comment-contains-value: 'remerge'
projects:
- project-compare-type: 'ANT'
- project-pattern: '{obj:project}'
+ project-pattern: 'releng-xci'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ disable-strict-forbidden-file-verification: 'false'
+ forbidden-file-paths:
+ - compare-type: ANT
+ pattern: 'xci/scripts/vm/**'
+ - compare-type: ANT
+ pattern: 'docs/**'
+ - compare-type: ANT
+ pattern: 'prototypes/**'
+ - compare-type: ANT
+ pattern: 'upstream/**'
+ - project-compare-type: 'REG_EXP'
+ project-pattern: 'sfc|sdnvpn'
branches:
- branch-compare-type: 'ANT'
branch-pattern: '**/{branch}'
- label:
name: SLAVE_LABEL
default: 'xci-virtual'
+ - string:
+ name: CI_LOOP
+ default: 'merge'
+ - string:
+ name: FUNCTEST_MODE
+ default: 'tier'
+ - string:
+ name: FUNCTEST_SUITE_NAME
+ default: 'healthcheck'
- string:
name: DISTRO
default: 'all'
description: 'Git URL to use on this Jenkins Slave'
builders:
- - description-setter:
- description: "Node: $NODE_NAME"
- 'xci-merge-set-scenario-macro'
+ - inject:
+ properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties"
+ - description-setter:
+ description: "Scenario: $DEPLOY_SCENARIO | Node: $NODE_NAME"
- multijob:
name: deploy and test
condition: SUCCESSFUL
projects:
- - name: 'xci-merge-opensuse-{type}-{stream}'
+ - name: 'xci-merge-opensuse-virtual-{stream}'
current-parameters: false
predefined-parameters: |
DISTRO=opensuse
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ CI_LOOP=$CI_LOOP
+ FUNCTEST_MODE=$FUNCTEST_MODE
+ FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
node-parameters: false
kill-phase-on: FAILURE
abort-all-job: true
- - name: 'xci-merge-ubuntu-{type}-{stream}'
+ - name: 'xci-merge-ubuntu-virtual-{stream}'
current-parameters: false
predefined-parameters: |
DISTRO=ubuntu
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ CI_LOOP=$CI_LOOP
+ FUNCTEST_MODE=$FUNCTEST_MODE
+ FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
node-parameters: false
kill-phase-on: FAILURE
abort-all-job: true
- - name: 'xci-merge-centos-{type}-{stream}'
+ - name: 'xci-merge-centos-virtual-{stream}'
current-parameters: false
predefined-parameters: |
DISTRO=centos
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ CI_LOOP=$CI_LOOP
+ FUNCTEST_MODE=$FUNCTEST_MODE
+ FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
node-parameters: false
- kill-phase-on: FAILURE
- abort-all-job: true
+ kill-phase-on: NEVER
+ abort-all-job: false
- inject:
properties-file: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties"
- multijob:
name: promote
condition: SUCCESSFUL
projects:
- - name: 'xci-{scenario}-{type}-promote-merge-{stream}'
+ - name: 'xci-merge-promote-virtual-{stream}'
current-parameters: true
predefined-parameters: |
GERRIT_PROJECT=$GERRIT_PROJECT
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ CI_LOOP=$CI_LOOP
+ FUNCTEST_MODE=$FUNCTEST_MODE
+ FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
node-parameters: true
kill-phase-on: NEVER
abort-all-job: true
- job-template:
- name: 'xci-merge-{distro}-{type}-{stream}'
+ name: 'xci-merge-{distro}-virtual-{stream}'
project-type: multijob
- disabled: '{obj:disabled}'
+ disabled: false
- concurrent: true
+ concurrent: false
properties:
- logrotate-default
- label:
name: SLAVE_LABEL
default: 'xci-virtual'
+ - string:
+ name: CI_LOOP
+ default: 'merge'
+ - string:
+ name: FUNCTEST_MODE
+ default: 'tier'
+ - string:
+ name: FUNCTEST_SUITE_NAME
+ default: 'healthcheck'
- string:
name: DISTRO
default: '{distro}'
name: deploy
condition: SUCCESSFUL
projects:
- - name: 'xci-merge-{distro}-deploy-{type}-{stream}'
+ - name: 'xci-merge-{distro}-deploy-virtual-{stream}'
current-parameters: true
predefined-parameters: |
DISTRO={distro}
name: healthcheck
condition: SUCCESSFUL
projects:
- - name: 'xci-merge-{distro}-healthcheck-{type}-{stream}'
+ - name: 'xci-merge-{distro}-healthcheck-virtual-{stream}'
current-parameters: true
predefined-parameters: |
DISTRO={distro}
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
- FUNCTEST_MODE=tier
- FUNCTEST_TIER=healthcheck
+ CI_LOOP=$CI_LOOP
+ FUNCTEST_MODE=$FUNCTEST_MODE
+ FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
node-parameters: true
kill-phase-on: NEVER
abort-all-job: true
!include-raw: ./xci-cleanup.sh
- job-template:
- name: 'xci-merge-{distro}-{phase}-{type}-{stream}'
+ name: 'xci-merge-{distro}-{phase}-virtual-{stream}'
disabled: false
- concurrent: true
+ concurrent: false
properties:
- logrotate-default
- string:
name: DISTRO
default: 'ubuntu'
+ - string:
+ name: CI_LOOP
+ default: 'merge'
- string:
name: FUNCTEST_MODE
default: 'tier'
- 'xci-merge-{phase}-macro'
- job-template:
- name: 'xci-{scenario}-{type}-promote-merge-{stream}'
+ name: 'xci-merge-promote-virtual-{stream}'
disabled: false
- string:
name: PROJECT
default: $GERRIT_PROJECT
+ - string:
+ name: CI_LOOP
+ default: 'merge'
+ - string:
+ name: FUNCTEST_MODE
+ default: 'tier'
+ - string:
+ name: FUNCTEST_SUITE_NAME
+ default: 'healthcheck'
- string:
name: DISTRO
default: 'all'
- string:
name: OPNFV_RELENG_DEV_PATH
default: $WORKSPACE/
+ - string:
+ name: LOCAL_PROMOTION_METADATA_FILE
+ default: "/tmp/$GERRIT_CHANGE_NUMBER/$DISTRO/scenario.properties"
+ - string:
+ name: REMOTE_PROMOTION_METADATA_FILE
+ default: "gs://artifacts.opnfv.org/xci/pipeline/merge/$DEPLOY_SCENARIO.properties"
- string:
name: GIT_BASE
default: https://gerrit.opnfv.org/gerrit/$PROJECT
- builder:
name: 'xci-merge-deploy-macro'
builders:
- - shell: |
- #!/bin/bash
- echo "Hello World"
+ - shell:
+ !include-raw: ./xci-start-new-vm.sh
+
+ - shell:
+ !include-raw: ./xci-start-deployment.sh
- builder:
name: 'xci-merge-healthcheck-macro'
builders:
- - shell: |
- #!/bin/bash
- echo "Hello World"
+ - shell:
+ !include-raw: ./xci-run-functest.sh
- builder:
name: 'xci-merge-promote-macro'
builders:
- - shell: |
- #!/bin/bash
- echo "Hello World"
+ - shell:
+ !include-raw: ./xci-promote.sh
exit 0
fi
-# skip the deployment if the scenario is not supported on this distro
-OPNFV_SCENARIO_REQUIREMENTS=$WORKSPACE/xci/opnfv-scenario-requirements.yml
-if ! sed -n "/^- scenario: $DEPLOY_SCENARIO$/,/^$/p" $OPNFV_SCENARIO_REQUIREMENTS | grep -q $DISTRO; then
- echo "# SKIPPED: Scenario $DEPLOY_SCENARIO is NOT supported on $DISTRO"
- exit 0
+# fail if promotion metadata file doesn't exist
+if [ ! -f $LOCAL_PROMOTION_METADATA_FILE ]; then
+ echo "Unable to find promotion metadata file $LOCAL_PROMOTION_METADATA_FILE"
+ echo "Skipping promotion!"
+ exit 1
fi
-echo "Hello World!"
+# upload promotion metadata file to OPNFV artifact repo
+echo "Storing promotion metadata as $REMOTE_PROMOTION_METADATA_FILE"
+gsutil cp $LOCAL_PROMOTION_METADATA_FILE $REMOTE_PROMOTION_METADATA_FILE > /dev/null 2>&1
+
+# update the file metadata on gs to prevent the use of cached version of the file
+gsutil -m setmeta -r -h "Cache-Control:private, max-age=0, no-transform" \
+ $REMOTE_PROMOTION_METADATA_FILE > /dev/null 2>&1
+
+# log the metadata to console
+echo "Stored the metadata for $DEPLOY_SCENARIO"
+echo "---------------------------------------------------------------------------------"
+gsutil cat $REMOTE_PROMOTION_METADATA_FILE
+echo "---------------------------------------------------------------------------------"
+echo "Scenario $DEPLOY_SCENARIO has successfully been promoted!"
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-set -o errexit
set -o nounset
-set -o pipefail
#----------------------------------------------------------------------
# This script is used by CI and executed by Jenkins jobs.
echo "---------------------------------------------------------------------------------"
ssh -F $HOME/.ssh/${DISTRO}-xci-vm-config ${DISTRO}_xci_vm_opnfv "cat /root/results/functest.log"
echo "---------------------------------------------------------------------------------"
+# check the log to see if we have any error
+if ssh -F $HOME/.ssh/${DISTRO}-xci-vm-config ${DISTRO}_xci_vm_opnfv "grep -q 'FAIL' /root/results/functest.log"; then
+ echo "Error: Functest failed!"
+ exit 1
+fi
function override_generic_scenario() {
echo "Processing $GERRIT_PROJECT patchset $GERRIT_REFSPEC"
+ # ensure the metadata we record is consistent for all types of patches including skipped ones
+ # extract releng-xci sha
+ XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD)
+
+ # extract scenario sha which is same as releng-xci sha for generic scenarios
+ SCENARIO_SHA=$XCI_SHA
+
# process topic branch names
- if [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment ]]; then
- # skip the real verification
- echo "Skipping verify!"
- echo "INSTALLER_TYPE=osa" > $WORK_DIRECTORY/scenario.properties
- echo "DEPLOY_SCENARIO=os-nosdn-nofeature" >> $WORK_DIRECTORY/scenario.properties
- exit 0
- elif [[ "$GERRIT_TOPIC" =~ 'force-verify' ]]; then
- # Run the deployment with default installer and scenario when multiple things change
- # and we want to force that.
- echo "Recording the installer 'osa' and scenario 'os-nosdn-nofeature' for downstream jobs"
- echo "Forcing CI verification of default scenario and installer!"
+ if [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment|force-verify ]]; then
+ [[ "$GERRIT_TOPIC" =~ force-verify ]] && echo "Forcing CI verification using default scenario and installer!"
+ [[ "$GERRIT_TOPIC" =~ skip-verify|skip-deployment ]] && echo "Skipping verification!"
echo "INSTALLER_TYPE=osa" > $WORK_DIRECTORY/scenario.properties
echo "DEPLOY_SCENARIO=os-nosdn-nofeature" >> $WORK_DIRECTORY/scenario.properties
+ echo "XCI_SHA=$XCI_SHA" >> $WORK_DIRECTORY/scenario.properties
+ echo "SCENARIO_SHA=$SCENARIO_SHA" >> $WORK_DIRECTORY/scenario.properties
+ echo "PROJECT_NAME=$GERRIT_PROJECT" >> $WORK_DIRECTORY/scenario.properties
exit 0
fi
echo "Recording the installer '$INSTALLER_TYPE' and scenario '$DEPLOY_SCENARIO' for downstream jobs"
echo "INSTALLER_TYPE=$INSTALLER_TYPE" > $WORK_DIRECTORY/scenario.properties
echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> $WORK_DIRECTORY/scenario.properties
+ echo "XCI_SHA=$XCI_SHA" >> $WORK_DIRECTORY/scenario.properties
+ echo "SCENARIO_SHA=$SCENARIO_SHA" >> $WORK_DIRECTORY/scenario.properties
+ echo "PROJECT_NAME=$GERRIT_PROJECT" >> $WORK_DIRECTORY/scenario.properties
exit 0
fi
else
done
# extract releng-xci sha
- RELENG_XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD)
+ XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD)
# extract scenario sha which is same as releng-xci sha for generic scenarios
- SCENARIO_SHA=$RELENG_XCI_SHA
+ SCENARIO_SHA=$XCI_SHA
}
# This function determines the impacted external scenario by processing the Gerrit
DEPLOY_SCENARIO+=$(git diff HEAD^..HEAD --name-only | grep scenarios | awk -F '[/|/]' '{print $2}' | uniq)
# extract releng-xci sha
- RELENG_XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD)
+ XCI_SHA=$(cd $WORKSPACE && git rev-parse HEAD)
# extract scenario sha
SCENARIO_SHA=$(cd $WORK_DIRECTORY/$GERRIT_PROJECT && git rev-parse HEAD)
echo "Recording the installer '$INSTALLER_TYPE' and scenario '${DEPLOY_SCENARIO[0]}' and SHAs for downstream jobs"
echo "INSTALLER_TYPE=$INSTALLER_TYPE" > $WORK_DIRECTORY/scenario.properties
echo "DEPLOY_SCENARIO=$DEPLOY_SCENARIO" >> $WORK_DIRECTORY/scenario.properties
-echo "RELENG_XCI_SHA=$RELENG_XCI_SHA" >> $WORK_DIRECTORY/scenario.properties
+echo "XCI_SHA=$XCI_SHA" >> $WORK_DIRECTORY/scenario.properties
echo "SCENARIO_SHA=$SCENARIO_SHA" >> $WORK_DIRECTORY/scenario.properties
+echo "PROJECT_NAME=$GERRIT_PROJECT" >> $WORK_DIRECTORY/scenario.properties
# skip scenario support check if the job is promotion job
if [[ "$JOB_NAME" =~ (os|k8) ]]; then
- string:
name: CLEAN_DIB_IMAGES
default: 'true'
+ - string:
+ name: CI_LOOP
+ default: 'verify'
+ - string:
+ name: FUNCTEST_MODE
+ default: 'tier'
+ - string:
+ name: FUNCTEST_SUITE_NAME
+ default: 'healthcheck'
- string:
name: GIT_BASE
default: https://gerrit.opnfv.org/gerrit/$PROJECT
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ CI_LOOP=$CI_LOOP
node-parameters: true
kill-phase-on: FAILURE
abort-all-job: true
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
- FUNCTEST_MODE=tier
- FUNCTEST_TIER=healthcheck
+ CI_LOOP=$CI_LOOP
+ FUNCTEST_MODE=$FUNCTEST_MODE
+ FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
node-parameters: true
kill-phase-on: NEVER
abort-all-job: true
- string:
name: DISTRO
default: 'ubuntu'
+ - string:
+ name: CI_LOOP
+ default: 'verify'
- string:
name: FUNCTEST_MODE
default: 'tier'
--- /dev/null
+---
+project: armband
+project-type: installer
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ armband: 26f7f4fffa50452fd6e5cb5c2afbae63449afc00
--- /dev/null
+---
+project: availability
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ availability: 374fe9ba9a1fc9c10eb6fa44a25b177f1e9ad96c
--- /dev/null
+---
+project: bamboo
+project-type: tools
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ bamboo: 37ed3fde974e656893edbfcee2ad5f0c1b1e2011
--- /dev/null
+---
+project: barometer
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ barometer: cb183a3dbe6c1bf0955a0260292709020d2ef338
--- /dev/null
+---
+project: bottlenecks
+project-type: testing
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ bottlenecks: 0cd98516d581bc661772473be92f7e4d5a26036d
--- /dev/null
+---
+project: calipso
+project-type: tools
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ calipso: c8440f4158805fed1c49d1f06cd71f324eac26a2
--- /dev/null
+---
+project: container4nfv
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ container4nfv: dbd4804f6353c5ba49af784502654991520e02e6
--- /dev/null
+---
+project: daisy
+project-type: installer
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ daisy: ef7ce0b8c457cf9831d9556572ab13d7d4c660f6
--- /dev/null
+---
+project: doctor
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ doctor: 06980156b3eed6a6e456d3105c70b68386c1dfb7
--- /dev/null
+---
+project: domino
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ domino: 5aca24e307f2eb11026a086fbe3db6f0cbeb6699
--- /dev/null
+---
+project: fds
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ fds: 5eed588472406181f8182731e03eb09e2c20f588
--- /dev/null
+---
+project: fuel
+project-type: installer
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ fuel: fe9be64738ff1a1091e7df5b04b391fb15d6abc0
--- /dev/null
+---
+project: functest
+project-type: testing
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ functest: e556a792b6b0c7275c20c779688f4ffc383b7f2a
--- /dev/null
+---
+project: ipv6
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ ipv6: 79ddbacd3ee05d8605ebd103042ca9502edb626f
--- /dev/null
+---
+project: joid
+project-type: installer
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ joid: ba3766e175571756f690b24448cb5dfae934ad80
--- /dev/null
+---
+project: kvmfornfv
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ kvmfornfv: 3a36c490d63e834ee9454553a14995be839118e3
--- /dev/null
+---
+project: moon
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ moon: 2c380003fa911fdfad85d2c7164b95160eb54963
--- /dev/null
+---
+project: nfvbench
+project-type: tools
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ nfvbench: cf9c95ccda2f5afbdf79c7debe5fcd88c05eaa6a
--- /dev/null
+---
+project: octopus
+project-type: infra
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ octopus: 1c1b92913c93cfddb9fee16bc9c15b1873fc4e04
--- /dev/null
+---
+project: opnfvdocs
+project-type: infra
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ opnfvdocs: 18d0ebca65b68e56497c08cc489e4ecc3c649fa9
--- /dev/null
+---
+project: orchestra
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ orchestra: 1f0d8ed7261f1b202476680b2e3fc2d41b399cc9
--- /dev/null
+---
+project: ovn4nfv
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ ovn4nfv: 2c6027fb46d1a55f767cc2882d946c794ca5843c
--- /dev/null
+---
+project: ovno
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ ovno: f49eab063a13bb89bd90f583bd6d814c3a7d21d2
--- /dev/null
+---
+project: parser
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ parser: 3447589a78375d4dab41608a3504f56a6e4ac9c9
--- /dev/null
+---
+project: pharos
+project-type: infra
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ pharos: 1d7a94bf5ab86f28b3183f52644d00801cde815b
+ - name: stable/euphrates
+ location:
+ pharos-tools: d46ab54583a6c20bfa5bea581f512474f488e788
--- /dev/null
+---
+project: promise
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ promise: 2ff86a92816faa4d71d2b0e260a5f44ce51d9b2c
--- /dev/null
+---
+project: qtip
+project-type: testing
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ qtip: 3f929d991ea4ca402aaf4db46752f703771f44ea
--- /dev/null
+---
+project: samplevnf
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ samplevnf: af6b18166ddbe9331c529256cb71c11e8b280982
--- /dev/null
+---
+project: sdnvpn
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ sdnvpn: e66856ba6b9275582aa4fc370d2b9abf48b5381f
--- /dev/null
+---
+project: sfc
+project-type: feature
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ sfc: 2b785ea6a618b031cde2fd327f33733ab9c352e9
--- /dev/null
+---
+project: snaps
+project-type: tools
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ snaps: fd18b6790cd9b59851bce6746cc83f27d3e18e4f
--- /dev/null
+---
+project: storperf
+project-type: testing
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ storperf: 577bb77e605f78934260d6578bf07fb5071f3354
--- /dev/null
+---
+project: vswitchperf
+project-type: testing
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ vswitchperf: d126de94bea2e5d0e237dc6a3373fd3d53e3cfa3
--- /dev/null
+---
+project: yardstick
+project-type: testing
+release-model: stable
+
+branches:
+ - name: stable/euphrates
+ location:
+ yardstick: 3431cd1801023e2ee09b520fc9f7a890677ff7b1