Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
canghaiwuhen
OpenXG-RAN
Commits
27a62710
Commit
27a62710
authored
Jun 22, 2018
by
matzakos
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into fix-nfapi-L2-emulator
parents
74d1853e
b34e6d45
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
597 additions
and
246 deletions
+597
-246
ci-scripts/Jenkinsfile-gitlab
ci-scripts/Jenkinsfile-gitlab
+38
-8
ci-scripts/buildOnVM.sh
ci-scripts/buildOnVM.sh
+302
-0
ci-scripts/reportBuildLocally.sh
ci-scripts/reportBuildLocally.sh
+230
-238
ci-scripts/template-host.xml
ci-scripts/template-host.xml
+27
-0
No files found.
ci-scripts/Jenkinsfile-gitlab
View file @
27a62710
...
@@ -8,8 +8,7 @@ pipeline {
...
@@ -8,8 +8,7 @@ pipeline {
disableConcurrentBuilds()
disableConcurrentBuilds()
timestamps()
timestamps()
gitLabConnection('OAI GitLab')
gitLabConnection('OAI GitLab')
//gitlabBuilds(builds: ["Build", "Test"])
gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Analysis with cppcheck"])
gitlabBuilds(builds: ["Local Build"])
}
}
stages {
stages {
...
@@ -22,6 +21,7 @@ pipeline {
...
@@ -22,6 +21,7 @@ pipeline {
// GitLab-Jenkins plugin integration is lacking to perform the merge by itself
// GitLab-Jenkins plugin integration is lacking to perform the merge by itself
// Doing it manually --> it may have merge conflicts
// Doing it manually --> it may have merge conflicts
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
sh "zip -r -qq localZip.zip ."
// Running astyle options on the list of modified files by the merge request
// Running astyle options on the list of modified files by the merge request
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
...
@@ -38,6 +38,7 @@ pipeline {
...
@@ -38,6 +38,7 @@ pipeline {
echo "Git Branch is ${GIT_BRANCH}"
echo "Git Branch is ${GIT_BRANCH}"
echo "Git Commit is ${GIT_COMMIT}"
echo "Git Commit is ${GIT_COMMIT}"
sh "zip -r -qq localZip.zip ."
// Running astyle options on all C/H files in the repository
// Running astyle options on all C/H files in the repository
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
// For the moment, there is no fail criteria. Just a notification of number of files that do not follow
sh "./ci-scripts/checkCodingFormattingRules.sh"
sh "./ci-scripts/checkCodingFormattingRules.sh"
...
@@ -45,17 +46,46 @@ pipeline {
...
@@ -45,17 +46,46 @@ pipeline {
}
}
}
}
}
}
stage ("Local Build") {
steps {
stage ("Variant Builds") {
gitlabCommitStatus(name: "Local Build") {
parallel {
sh "./ci-scripts/buildLocally.sh --workspace $WORKSPACE"
stage ("Analysis with cppcheck") {
steps {
gitlabCommitStatus(name: "Analysis with cppcheck") {
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck"
}
}
}
stage ("Build eNb-USRP") {
steps {
gitlabCommitStatus(name: "Build eNb-USRP") {
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp"
}
}
}
stage ("Build basic simulator") {
steps {
gitlabCommitStatus(name: "Build basic-sim") {
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant basic-sim"
}
}
}
stage ("Build physical simulators") {
steps {
gitlabCommitStatus(name: "Build phy-sim") {
sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant phy-sim"
}
}
}
}
}
}
post {
post {
always {
always {
script {
script {
if(fileExists('archives/local_build_logs.zip')) {
dir ('archives') {
archiveArtifacts artifacts: 'archives/local_build_logs.zip'
sh "zip -r vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck"
}
if(fileExists('archives/vm_build_logs.zip')) {
archiveArtifacts artifacts: 'archives/vm_build_logs.zip'
}
}
if ("MERGE".equals(env.gitlabActionType)) {
if ("MERGE".equals(env.gitlabActionType)) {
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
sh "./ci-scripts/reportBuildLocally.sh --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}"
...
...
ci-scripts/buildOnVM.sh
0 → 100755
View file @
27a62710
#!/bin/bash
function
usage
{
echo
"OAI VM Build Check script"
echo
" Original Author: Raphael Defosseux"
echo
" Requirements:"
echo
" -- uvtool uvtool-libvirt apt-cacher"
echo
" -- xenial image already synced"
echo
" Default:"
echo
" -- eNB with USRP"
echo
""
echo
"Usage:"
echo
"------"
echo
" buildOnVM.sh [OPTIONS]"
echo
""
echo
"Options:"
echo
"--------"
echo
" --workspace #### OR -ws ####"
echo
" Specify the workspace."
echo
""
echo
" --variant enb-usrp OR -v1"
echo
" --variant basic-sim OR -v2"
echo
" --variant phy-sim OR -v3"
echo
" --variant cppcheck OR -v4"
echo
" Specify the variant to build."
echo
""
echo
" --keep-vm-alive OR -k"
echo
" Keep the VM alive after the build."
echo
""
echo
" --help OR -h"
echo
" Print this help message."
echo
""
}
function
variant_usage
{
echo
"OAI VM Build Check script"
echo
" Original Author: Raphael Defosseux"
echo
""
echo
" --variant enb-usrp OR -v1"
echo
" --variant basic-sim OR -v2"
echo
" --variant phy-sim OR -v3"
echo
" --variant cppcheck OR -v4"
echo
""
}
if
[
$#
-lt
1
]
||
[
$#
-gt
5
]
then
echo
"Syntax Error: not the correct number of arguments"
echo
""
usage
exit
1
fi
VM_NAME
=
ci-enb-usrp
ARCHIVES_LOC
=
enb_usrp
LOG_PATTERN
=
.Rel14.txt
NB_PATTERN_FILES
=
4
BUILD_OPTIONS
=
"--eNB -w USRP"
KEEP_VM_ALIVE
=
0
while
[[
$#
-gt
0
]]
do
key
=
"
$1
"
case
$key
in
-h
|
--help
)
shift
usage
exit
0
;;
-ws
|
--workspace
)
JENKINS_WKSP
=
"
$2
"
shift
shift
;;
-k
|
--keep-vm-alive
)
KEEP_VM_ALIVE
=
1
shift
;;
-v1
)
VM_NAME
=
ci-enb-usrp
ARCHIVES_LOC
=
enb_usrp
LOG_PATTERN
=
.Rel14.txt
NB_PATTERN_FILES
=
4
BUILD_OPTIONS
=
"--eNB -w USRP"
shift
;;
-v2
)
VM_NAME
=
ci-basic-sim
ARCHIVES_LOC
=
basic_sim
LOG_PATTERN
=
basic_simulator
NB_PATTERN_FILES
=
2
BUILD_OPTIONS
=
"--basic-simulator"
shift
;;
-v3
)
VM_NAME
=
ci-phy-sim
ARCHIVES_LOC
=
phy_sim
LOG_PATTERN
=
.Rel14.txt
NB_PATTERN_FILES
=
3
BUILD_OPTIONS
=
"--phy_simulators"
shift
;;
-v4
)
VM_NAME
=
ci-cppcheck
ARCHIVES_LOC
=
cppcheck
LOG_PATTERN
=
cppcheck.xml
NB_PATTERN_FILES
=
1
BUILD_OPTIONS
=
"--enable=warning --force --xml --xml-version=2"
shift
;;
--variant
)
variant
=
"
$2
"
case
$variant
in
enb-usrp
)
VM_NAME
=
ci-enb-usrp
ARCHIVES_LOC
=
enb_usrp
LOG_PATTERN
=
.Rel14.txt
NB_PATTERN_FILES
=
4
BUILD_OPTIONS
=
"--eNB -w USRP"
;;
basic-sim
)
VM_NAME
=
ci-basic-sim
ARCHIVES_LOC
=
basic_sim
LOG_PATTERN
=
basic_simulator
NB_PATTERN_FILES
=
2
BUILD_OPTIONS
=
"--basic-simulator"
;;
phy-sim
)
VM_NAME
=
ci-phy-sim
ARCHIVES_LOC
=
phy_sim
LOG_PATTERN
=
.Rel14.txt
NB_PATTERN_FILES
=
3
BUILD_OPTIONS
=
"--phy_simulators"
;;
cppcheck
)
VM_NAME
=
ci-cppcheck
ARCHIVES_LOC
=
cppcheck
LOG_PATTERN
=
cppcheck.xml
NB_PATTERN_FILES
=
1
BUILD_OPTIONS
=
"--enable=warning --force --xml --xml-version=2"
;;
*
)
echo
""
echo
"Syntax Error: Invalid Variant option ->
$variant
"
echo
""
variant_usage
exit
1
esac
shift
shift
;;
*
)
echo
"Syntax Error: unknown option:
$key
"
echo
""
usage
exit
1
esac
done
if
[
!
-f
$JENKINS_WKSP
/localZip.zip
]
then
echo
"Missing localZip.zip file!"
exit
1
fi
if
[
!
-f
/etc/apt/apt.conf.d/01proxy
]
then
echo
"Missing /etc/apt/apt.conf.d/01proxy file!"
echo
"Is apt-cacher installed and configured?"
exit
1
fi
VM_CMDS
=
${
VM_NAME
}
_cmds.txt
ARCHIVES_LOC
=
${
JENKINS_WKSP
}
/archives/
${
ARCHIVES_LOC
}
echo
"VM_NAME =
$VM_NAME
"
echo
"VM_CMD_FILE =
$VM_CMDS
"
echo
"JENKINS_WKSP =
$JENKINS_WKSP
"
echo
"ARCHIVES_LOC =
$ARCHIVES_LOC
"
echo
"BUILD_OPTIONS =
$BUILD_OPTIONS
"
echo
"############################################################"
echo
"Creating VM (
$VM_NAME
) on Ubuntu Cloud Image base"
echo
"############################################################"
uvt-kvm create
$VM_NAME
release
=
xenial
--memory
2048
--cpu
4
--unsafe-caching
--template
ci-scripts/template-host.xml
echo
"Waiting for VM to be started"
uvt-kvm
wait
$VM_NAME
--insecure
VM_IP_ADDR
=
`
uvt-kvm ip
$VM_NAME
`
echo
"
$VM_NAME
has for IP addr =
$VM_IP_ADDR
"
echo
"############################################################"
echo
"Copying GIT repo into VM (
$VM_NAME
)"
echo
"############################################################"
scp
-o
StrictHostKeyChecking
=
no localZip.zip ubuntu@
$VM_IP_ADDR
:/home/ubuntu
scp
-o
StrictHostKeyChecking
=
no /etc/apt/apt.conf.d/01proxy ubuntu@
$VM_IP_ADDR
:/home/ubuntu
echo
"############################################################"
echo
"Running install and build script on VM (
$VM_NAME
)"
echo
"############################################################"
echo
"sudo cp 01proxy /etc/apt/apt.conf.d/"
>
$VM_CMDS
if
[
"
$VM_NAME
"
==
"ci-cppcheck"
]
then
echo
"echo
\"
sudo apt-get --yes --quiet install zip cppcheck
\"
"
>>
$VM_CMDS
echo
"sudo apt-get update > zip-install.txt 2>&1"
>>
$VM_CMDS
echo
"sudo apt-get --yes install zip cppcheck >> zip-install.txt 2>&1"
>>
$VM_CMDS
else
echo
"echo
\"
sudo apt-get --yes --quiet install zip subversion libboost-dev
\"
"
>>
$VM_CMDS
echo
"sudo apt-get --yes install zip subversion libboost-dev > zip-install.txt 2>&1"
>>
$VM_CMDS
fi
echo
"mkdir tmp"
>>
$VM_CMDS
echo
"cd tmp"
>>
$VM_CMDS
echo
"echo
\"
unzip -qq -DD ../localZip.zip
\"
"
>>
$VM_CMDS
echo
"unzip -qq -DD ../localZip.zip"
>>
$VM_CMDS
if
[
"
$VM_NAME
"
==
"ci-cppcheck"
]
then
echo
"mkdir cmake_targets/log"
>>
$VM_CMDS
echo
"cp /home/ubuntu/zip-install.txt cmake_targets/log"
>>
$VM_CMDS
echo
"echo
\"
cppcheck
$BUILD_OPTIONS
.
\"
"
>>
$VM_CMDS
echo
"cppcheck
$BUILD_OPTIONS
. 2> cmake_targets/log/cppcheck.xml 1> cmake_targets/log/cppcheck_build.txt"
>>
$VM_CMDS
else
echo
"echo
\"
source oaienv
\"
"
>>
$VM_CMDS
echo
"source oaienv"
>>
$VM_CMDS
echo
"cd cmake_targets/"
>>
$VM_CMDS
echo
"mkdir log"
>>
$VM_CMDS
echo
"cp /home/ubuntu/zip-install.txt log"
>>
$VM_CMDS
echo
"echo
\"
./build_oai -I
$BUILD_OPTIONS
\"
"
>>
$VM_CMDS
echo
"./build_oai -I
$BUILD_OPTIONS
> log/install-build.txt 2>&1"
>>
$VM_CMDS
fi
ssh
-o
StrictHostKeyChecking
=
no ubuntu@
$VM_IP_ADDR
<
$VM_CMDS
echo
"############################################################"
echo
"Creating a tmp folder to store results and artifacts"
echo
"############################################################"
if
[
!
-d
$JENKINS_WKSP
/archives
]
then
mkdir
$JENKINS_WKSP
/archives
fi
if
[
!
-d
$ARCHIVES_LOC
]
then
mkdir
$ARCHIVES_LOC
fi
scp
-o
StrictHostKeyChecking
=
no ubuntu@
$VM_IP_ADDR
:/home/ubuntu/tmp/cmake_targets/log/
*
.txt
$ARCHIVES_LOC
if
[
"
$VM_NAME
"
==
"ci-cppcheck"
]
then
scp
-o
StrictHostKeyChecking
=
no ubuntu@
$VM_IP_ADDR
:/home/ubuntu/tmp/cmake_targets/log/
*
.xml
$ARCHIVES_LOC
fi
if
[
$KEEP_VM_ALIVE
-eq
0
]
then
echo
"############################################################"
echo
"Destroying VM"
echo
"############################################################"
uvt-kvm destroy
$VM_NAME
ssh-keygen
-R
$VM_IP_ADDR
fi
rm
-f
$VM_CMDS
echo
"############################################################"
echo
"Checking build status"
echo
"############################################################"
LOG_FILES
=
`
ls
$ARCHIVES_LOC
/
*
.txt
$ARCHIVES_LOC
/
*
.xml
`
STATUS
=
0
NB_FOUND_FILES
=
0
for
FULLFILE
in
$LOG_FILES
do
if
[[
$FULLFILE
==
*
"
$LOG_PATTERN
"
*
]]
then
filename
=
$(
basename
--
"
$FULLFILE
"
)
if
[
"
$LOG_PATTERN
"
==
".Rel14.txt"
]
then
PASS_PATTERN
=
`
echo
$filename
|
sed
-e
"s#
$LOG_PATTERN
##"
`
fi
if
[
"
$LOG_PATTERN
"
==
"basic_simulator"
]
then
PASS_PATTERN
=
"lte-"
fi
if
[
"
$LOG_PATTERN
"
==
"cppcheck.xml"
]
then
PASS_PATTERN
=
"results version"
LOCAL_STAT
=
`
egrep
-c
"
$PASS_PATTERN
"
$FULLFILE
`
else
LOCAL_STAT
=
`
egrep
-c
"Built target
$PASS_PATTERN
"
$FULLFILE
`
fi
if
[
$LOCAL_STAT
-eq
0
]
;
then
STATUS
=
-1
;
fi
NB_FOUND_FILES
=
$((
NB_FOUND_FILES
+
1
))
fi
done
if
[
$NB_PATTERN_FILES
-ne
$NB_FOUND_FILES
]
;
then
STATUS
=
-1
;
fi
if
[
$STATUS
-eq
0
]
then
echo
"STATUS seems OK"
else
echo
"STATUS failed?"
fi
exit
$STATUS
ci-scripts/reportBuildLocally.sh
View file @
27a62710
...
@@ -68,6 +68,177 @@ function trigger_usage {
...
@@ -68,6 +68,177 @@ function trigger_usage {
echo
""
echo
""
}
}
function
details_table
{
echo
" <h4>
$1
</h4>"
>>
$3
echo
" <table border =
\"
1
\"
>"
>>
$3
echo
" <tr bgcolor =
\"
#33CCFF
\"
>"
>>
$3
echo
" <th>File</th>"
>>
$3
echo
" <th>Line Number</th>"
>>
$3
echo
" <th>Status</th>"
>>
$3
echo
" <th>Message</th>"
>>
$3
echo
" </tr>"
>>
$3
LIST_MESSAGES
=
`
egrep
"error:|warning:"
$2
| egrep
-v
"jobserver unavailable|Clock skew detected.|flexran.proto"
`
COMPLETE_MESSAGE
=
"start"
for
MESSAGE
in
$LIST_MESSAGES
do
if
[[
$MESSAGE
==
*
"/home/ubuntu/tmp"
*
]]
then
FILENAME
=
`
echo
$MESSAGE
|
sed
-e
"s#^/home/ubuntu/tmp/##"
|
awk
-F
":"
'{print $1}'
`
LINENB
=
`
echo
$MESSAGE
|
awk
-F
":"
'{print $2}'
`
if
[
"
$COMPLETE_MESSAGE
"
!=
"start"
]
then
COMPLETE_MESSAGE
=
`
echo
$COMPLETE_MESSAGE
|
sed
-e
"s#‘#'#g"
-e
"s#’#'#g"
`
echo
" <td>
$COMPLETE_MESSAGE
</td>"
>>
$3
echo
" </tr>"
>>
$3
fi
echo
" <tr>"
>>
$3
echo
" <td>
$FILENAME
</td>"
>>
$3
echo
" <td>
$LINENB
</td>"
>>
$3
else
if
[[
$MESSAGE
==
*
"warning:"
*
]]
||
[[
$MESSAGE
==
*
"error:"
*
]]
then
MSGTYPE
=
`
echo
$MESSAGE
|
sed
-e
"s#:##g"
`
echo
" <td>
$MSGTYPE
</td>"
>>
$3
COMPLETE_MESSAGE
=
""
else
COMPLETE_MESSAGE
=
$COMPLETE_MESSAGE
" "
$MESSAGE
fi
fi
done
if
[
"
$COMPLETE_MESSAGE
"
!=
"start"
]
then
COMPLETE_MESSAGE
=
`
echo
$COMPLETE_MESSAGE
|
sed
-e
"s#‘#'#g"
-e
"s#’#'#g"
`
echo
" <td>
$COMPLETE_MESSAGE
</td>"
>>
$3
echo
" </tr>"
>>
$3
fi
echo
" </table>"
>>
$3
}
function
summary_table_header
{
echo
" <h3>
$1
</h3>"
>>
./build_results.html
echo
" <table border =
\"
1
\"
>"
>>
./build_results.html
echo
" <tr bgcolor =
\"
#33CCFF
\"
>"
>>
./build_results.html
echo
" <th>Element</th>"
>>
./build_results.html
echo
" <th>Status</th>"
>>
./build_results.html
echo
" <th>Nb Errors</th>"
>>
./build_results.html
echo
" <th>Nb Warnings</th>"
>>
./build_results.html
echo
" </tr>"
>>
./build_results.html
}
function
summary_table_row
{
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>
$1
</th>"
>>
./build_results.html
if
[
-f
$2
]
then
STATUS
=
`
egrep
-c
"
$3
"
$2
`
if
[
$STATUS
-eq
1
]
then
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
fi
NB_ERRORS
=
`
egrep
-c
"error:"
$2
`
if
[
$NB_ERRORS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$NB_ERRORS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>
$NB_ERRORS
</th>"
>>
./build_results.html
fi
NB_WARNINGS
=
`
egrep
"warning:"
$2
| egrep
-v
"jobserver unavailable|Clock skew detected.|flexran.proto"
| egrep
-c
"warning:"
`
if
[
$NB_WARNINGS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$NB_WARNINGS
</th>"
>>
./build_results.html
else
if
[
$NB_WARNINGS
-gt
20
]
then
echo
" <td bgcolor =
\"
red
\"
>
$NB_WARNINGS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$NB_WARNINGS
</th>"
>>
./build_results.html
fi
fi
if
[
$NB_ERRORS
-ne
0
]
||
[
$NB_WARNINGS
-ne
0
]
then
details_table
"
$1
"
$2
$4
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
}
function
summary_table_footer
{
echo
" </table>"
>>
./build_results.html
}
function
sca_summary_table_header
{
echo
" <h3>
$1
</h3>"
>>
./build_results.html
echo
" <table border =
\"
1
\"
>"
>>
./build_results.html
echo
" <tr bgcolor =
\"
#33CCFF
\"
>"
>>
./build_results.html
echo
" <th>Error / Warning Type</th>"
>>
./build_results.html
echo
" <th>Nb Errors</th>"
>>
./build_results.html
echo
" <th>Nb Warnings</th>"
>>
./build_results.html
echo
" </tr>"
>>
./build_results.html
echo
"0"
>
ccp_error_cnt.txt
}
function
sca_summary_table_row
{
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>
$2
</td>"
>>
./build_results.html
if
[
-f
$1
]
then
NB_ERRORS
=
`
egrep
"severity=
\"
error
\"
"
$1
| egrep
-c
"id=
\"
$3
\"
"
`
echo
" <td>
$NB_ERRORS
</td>"
>>
./build_results.html
echo
" <td>N/A</td>"
>>
./build_results.html
if
[
-f
ccp_error_cnt.txt
]
then
TOTAL_ERRORS
=
`
cat
ccp_error_cnt.txt
`
TOTAL_ERRORS
=
$((
TOTAL_ERRORS
+
NB_ERRORS
))
echo
$TOTAL_ERRORS
>
ccp_error_cnt.txt
fi
else
echo
" <td>Unknown</td>"
>>
./build_results.html
echo
" <td>Unknown</td>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
}
function
sca_summary_table_footer
{
if
[
-f
$1
]
then
NB_ERRORS
=
`
egrep
-c
"severity=
\"
error
\"
"
$1
`
NB_WARNINGS
=
`
egrep
-c
"severity=
\"
warning
\"
"
$1
`
if
[
-f
ccp_error_cnt.txt
]
then
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>Others</td>"
>>
./build_results.html
TOTAL_ERRORS
=
`
cat
ccp_error_cnt.txt
`
TOTAL_ERRORS
=
$((
NB_ERRORS
-
TOTAL_ERRORS
))
echo
" <td>
$TOTAL_ERRORS
</td>"
>>
./build_results.html
echo
" <td>
$NB_WARNINGS
</td>"
>>
./build_results.html
echo
" </tr>"
>>
./build_results.html
rm
-f
ccp_error_cnt.txt
fi
echo
" <tr bgcolor =
\"
#33CCFF
\"
>"
>>
./build_results.html
echo
" <th>Total</th>"
>>
./build_results.html
echo
" <th>
$NB_ERRORS
</th>"
>>
./build_results.html
echo
" <th>
$NB_WARNINGS
</th>"
>>
./build_results.html
else
echo
" <tr bgcolor =
\"
#33CCFF
\"
>"
>>
./build_results.html
echo
" <th>Total</th>"
>>
./build_results.html
echo
" <th>Unknown</th>"
>>
./build_results.html
echo
" <th>Unknown</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" </table>"
>>
./build_results.html
echo
" <p>Full details in zipped artifact (cppcheck/cppcheck.xml) </p>"
>>
./build_results.html
echo
" <p>Graphical Interface tool : <code>cppcheck-gui -l cppcheck/cppcheck.xml</code> </p>"
>>
./build_results.html
}
jb_checker
=
0
jb_checker
=
0
mr_checker
=
0
mr_checker
=
0
pu_checker
=
0
pu_checker
=
0
...
@@ -224,9 +395,23 @@ echo "<!DOCTYPE html>" > ./build_results.html
...
@@ -224,9 +395,23 @@ echo "<!DOCTYPE html>" > ./build_results.html
echo
"<html class=
\"
no-js
\"
lang=
\"
en-US
\"
>"
>>
./build_results.html
echo
"<html class=
\"
no-js
\"
lang=
\"
en-US
\"
>"
>>
./build_results.html
echo
"<head>"
>>
./build_results.html
echo
"<head>"
>>
./build_results.html
echo
" <title>Build Results for
$JOB_NAME
job build #
$BUILD_ID
</title>"
>>
./build_results.html
echo
" <title>Build Results for
$JOB_NAME
job build #
$BUILD_ID
</title>"
>>
./build_results.html
echo
" <base href =
\"
http://www.openairinterface.org/
\"
/>"
>>
./build_results.html
echo
"</head>"
>>
./build_results.html
echo
"</head>"
>>
./build_results.html
echo
"<body>"
>>
./build_results.html
echo
"<body>"
>>
./build_results.html
echo
" <h1>Job Summary -- Job:
$JOB_NAME
-- Build-ID:
$BUILD_ID
</h1>"
>>
./build_results.html
echo
" <table style=
\"
border-collapse: collapse; border: none;
\"
>"
>>
./build_results.html
echo
" <tr style=
\"
border-collapse: collapse; border: none;
\"
>"
>>
./build_results.html
echo
" <td style=
\"
border-collapse: collapse; border: none;
\"
>"
>>
./build_results.html
echo
" <a href=
\"
http://www.openairinterface.org/
\"
>"
>>
./build_results.html
echo
" <img src=
\"
/wp-content/uploads/2016/03/cropped-oai_final_logo2.png
\"
alt=
\"\"
border=
\"
none
\"
height=50 width=150>"
>>
./build_results.html
echo
" </img>"
>>
./build_results.html
echo
" </a>"
>>
./build_results.html
echo
" </td>"
>>
./build_results.html
echo
" <td style=
\"
border-collapse: collapse; border: none; vertical-align: center;
\"
>"
>>
./build_results.html
echo
" <b><font size =
\"
6
\"
>Job Summary -- Job:
$JOB_NAME
-- Build-ID:
$BUILD_ID
</font></b>"
>>
./build_results.html
echo
" </td>"
>>
./build_results.html
echo
" </tr>"
>>
./build_results.html
echo
" </table>"
>>
./build_results.html
echo
" <br>"
>>
./build_results.html
echo
" <table border =
\"
1
\"
>"
>>
./build_results.html
echo
" <table border =
\"
1
\"
>"
>>
./build_results.html
echo
" <tr>"
>>
./build_results.html
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>GIT Repository</td>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>GIT Repository</td>"
>>
./build_results.html
...
@@ -289,245 +474,52 @@ then
...
@@ -289,245 +474,52 @@ then
echo
" </table>"
>>
./build_results.html
echo
" </table>"
>>
./build_results.html
fi
fi
echo
" <h3>OAI Build eNb -- USRP option</h3>"
>>
./build_results.html
sca_summary_table_header
"OAI Static Code Analysis with CPPCHECK"
echo
" <table border = "
1
">"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Uninitialized variable"
uninitvar
echo
" <tr>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Uninitialized struct member"
uninitStructMember
echo
" <th>Element</th>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Memory leak"
memleak
echo
" <th>Status</th>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Memory is freed twice"
doubleFree
echo
" <th>Nb Errors</th>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Resource leak"
resourceLeak
echo
" <th>Nb Warnings</th>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Possible null pointer dereference"
nullPointer
echo
" </tr>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Array access out of bounds"
arrayIndexOutOfBounds
echo
" <tr>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Buffer is accessed out of bounds"
bufferAccessOutOfBounds
echo
" <td bgcolor =
\"
lightcyan
\"
>LTE SoftModem - Release 14</th>"
>>
./build_results.html
sca_summary_table_row ./archives/cppcheck/cppcheck.xml
"Expression depends on order of evaluation of side effects"
unknownEvaluationOrder
if
[
-f
./archives/enb_usrp/lte-softmodem.Rel14.txt
]
sca_summary_table_footer ./archives/cppcheck/cppcheck.xml
then
STATUS
=
`
egrep
-c
"Built target lte-softmodem"
./archives/enb_usrp/lte-softmodem.Rel14.txt
`
if
[
$STATUS
-eq
1
]
then
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"error:"
./archives/enb_usrp/lte-softmodem.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"warning:"
./archives/enb_usrp/lte-softmodem.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>Coding - Release 14</th>"
>>
./build_results.html
if
[
-f
./archives/enb_usrp/coding.Rel14.txt
]
then
STATUS
=
`
egrep
-c
"Built target coding"
./archives/enb_usrp/coding.Rel14.txt
`
if
[
$STATUS
-eq
1
]
then
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"error:"
./archives/enb_usrp/coding.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"warning:"
./archives/enb_usrp/coding.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>OAI USRP device if - Release 14</th>"
>>
./build_results.html
if
[
-f
./archives/enb_usrp/oai_usrpdevif.Rel14.txt
]
then
STATUS
=
`
egrep
-c
"Built target oai_usrpdevif"
./archives/enb_usrp/oai_usrpdevif.Rel14.txt
`
if
[
$STATUS
-eq
1
]
then
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"error:"
./archives/enb_usrp/oai_usrpdevif.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"warning:"
./archives/enb_usrp/oai_usrpdevif.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>Parameters Lib Config - Release 14</th>"
>>
./build_results.html
if
[
-f
./archives/enb_usrp/params_libconfig.Rel14.txt
]
then
STATUS
=
`
egrep
-c
"Built target params_libconfig"
./archives/enb_usrp/params_libconfig.Rel14.txt
`
if
[
$STATUS
-eq
1
]
then
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"error:"
./archives/enb_usrp/params_libconfig.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"warning:"
./archives/enb_usrp/params_libconfig.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" </table>"
>>
./build_results.html
# conf2uedata.Rel14.txt
summary_table_header
"OAI Build eNB -- USRP option"
# archives/basic_sim
summary_table_row
"LTE SoftModem - Release 14"
./archives/enb_usrp/lte-softmodem.Rel14.txt
"Built target lte-softmodem"
./enb_usrp_row1.html
summary_table_row
"Coding - Release 14"
./archives/enb_usrp/coding.Rel14.txt
"Built target coding"
./enb_usrp_row2.html
summary_table_row
"OAI USRP device if - Release 14"
./archives/enb_usrp/oai_usrpdevif.Rel14.txt
"Built target oai_usrpdevif"
./enb_usrp_row3.html
summary_table_row
"Parameters Lib Config - Release 14"
./archives/enb_usrp/params_libconfig.Rel14.txt
"Built target params_libconfig"
./enb_usrp_row4.html
summary_table_footer
echo
" <h3>OAI Build basic simulator option</h3>"
>>
./build_results.html
summary_table_header
"OAI Build basic simulator option"
echo
" <table border = "
1
">"
>>
./build_results.html
summary_table_row
"Basic Simulator eNb - Release 14"
./archives/basic_sim/basic_simulator_enb.txt
"Built target lte-softmodem"
./basic_sim_row1.html
echo
" <tr>"
>>
./build_results.html
summary_table_row
"Basic Simulator UE - Release 14"
./archives/basic_sim/basic_simulator_ue.txt
"Built target lte-uesoftmodem"
./basic_sim_row2.html
echo
" <th>Element</th>"
>>
./build_results.html
summary_table_row
"Conf 2 UE data - Release 14"
./archives/basic_sim/conf2uedata.Rel14.txt
"Built target conf2uedata"
./basic_sim_row3.html
echo
" <th>Status</th>"
>>
./build_results.html
summary_table_footer
echo
" <th>Nb Errors</th>"
>>
./build_results.html
echo
" <th>Nb Warnings</th>"
>>
./build_results.html
summary_table_header
"OAI Build Physical simulators option"
echo
" </tr>"
>>
./build_results.html
summary_table_row
"DL Simulator - Release 14"
./archives/phy_sim/dlsim.Rel14.txt
"Built target dlsim"
./phy_sim_row1.html
echo
" <tr>"
>>
./build_results.html
summary_table_row
"UL Simulator - Release 14"
./archives/phy_sim/ulsim.Rel14.txt
"Built target ulsim"
./phy_sim_row2.html
echo
" <td bgcolor =
\"
lightcyan
\"
>Basic Simulator eNb - Release 14</th>"
>>
./build_results.html
summary_table_row
"Coding - Release 14"
./archives/phy_sim/coding.Rel14.txt
"Built target coding"
./phy_sim_row3.html
if
[
-f
./archives/basic_sim/basic_simulator_enb.txt
]
summary_table_footer
then
STATUS
=
`
egrep
-c
"Built target lte-softmodem"
./archives/basic_sim/basic_simulator_enb.txt
`
echo
" <h3>Details</h3>"
>>
./build_results.html
if
[
$STATUS
-eq
1
]
then
for
DETAILS_TABLE
in
`
ls
./enb_usrp_row
*
.html
`
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
do
else
cat
$DETAILS_TABLE
>>
./build_results.html
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
done
fi
for
DETAILS_TABLE
in
`
ls
./basic_sim_row
*
.html
`
STATUS
=
`
egrep
-c
"error:"
./archives/basic_sim/basic_simulator_enb.txt
`
do
if
[
$STATUS
-eq
0
]
cat
$DETAILS_TABLE
>>
./build_results.html
then
done
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
for
DETAILS_TABLE
in
`
ls
./phy_sim_row
*
.html
`
else
do
echo
" <td bgcolor =
\"
red
\"
>
$STATUS
</th>"
>>
./build_results.html
cat
$DETAILS_TABLE
>>
./build_results.html
fi
done
STATUS
=
`
egrep
-c
"warning:"
./archives/basic_sim/basic_simulator_enb.txt
`
rm
-f
./enb_usrp_row
*
.html ./basic_sim_row
*
.html ./phy_sim_row
*
.html
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>Basic Simulator UE - Release 14</th>"
>>
./build_results.html
if
[
-f
./archives/basic_sim/basic_simulator_ue.txt
]
then
STATUS
=
`
egrep
-c
"Built target lte-uesoftmodem"
./archives/basic_sim/basic_simulator_ue.txt
`
if
[
$STATUS
-eq
1
]
then
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"error:"
./archives/basic_sim/basic_simulator_ue.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"warning:"
./archives/basic_sim/basic_simulator_ue.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" <tr>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightcyan
\"
>Conf 2 UE data - Release 14</th>"
>>
./build_results.html
if
[
-f
./archives/basic_sim/conf2uedata.Rel14.txt
]
then
STATUS
=
`
egrep
-c
"Built target conf2uedata"
./archives/basic_sim/conf2uedata.Rel14.txt
`
if
[
$STATUS
-eq
1
]
then
echo
" <td bgcolor =
\"
green
\"
>OK</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>KO</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"error:"
./archives/basic_sim/conf2uedata.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
red
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
STATUS
=
`
egrep
-c
"warning:"
./archives/basic_sim/conf2uedata.Rel14.txt
`
if
[
$STATUS
-eq
0
]
then
echo
" <td bgcolor =
\"
green
\"
>
$STATUS
</th>"
>>
./build_results.html
else
echo
" <td bgcolor =
\"
orange
\"
>
$STATUS
</th>"
>>
./build_results.html
fi
else
echo
" <td bgcolor =
\"
lightgray
\"
>Unknown</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
echo
" <td bgcolor =
\"
lightgray
\"
>--</th>"
>>
./build_results.html
fi
echo
" </tr>"
>>
./build_results.html
echo
" </table>"
>>
./build_results.html
echo
"</body>"
>>
./build_results.html
echo
"</body>"
>>
./build_results.html
echo
"</html>"
>>
./build_results.html
echo
"</html>"
>>
./build_results.html
...
...
ci-scripts/template-host.xml
0 → 100644
View file @
27a62710
<domain
type=
'kvm'
>
<os>
<type>
hvm
</type>
<boot
dev=
'hd'
/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu
mode=
'host-passthrough'
>
</cpu>
<devices>
<interface
type=
'network'
>
<source
network=
'default'
/>
<model
type=
'virtio'
/>
</interface>
<serial
type=
'pty'
>
<source
path=
'/dev/pts/3'
/>
<target
port=
'0'
/>
</serial>
<graphics
type=
'vnc'
autoport=
'yes'
listen=
'127.0.0.1'
>
<listen
type=
'address'
address=
'127.0.0.1'
/>
</graphics>
<video/>
</devices>
</domain>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment