152 lines
7.6 KiB
YAML
152 lines
7.6 KiB
YAML
# Requirements: Add runner variables `LABPC_IP` and `PM_IP`
|
|
# LABPC_IP: "192.168.170.23" # IP address of the LABPC
|
|
# PM_IP: "192.168.170.22" # IP address of the PM (Power Meter)
|
|
# NOTE: The values may change so check up with KEcoLab team if it doesn't work
|
|
|
|
.workflow-template:
|
|
rules:
|
|
# Ensure the pipeline runs for tag pushes
|
|
- if: $CI_COMMIT_TAG
|
|
# Ensure the pipeline runs for web triggers i.e triggered from the web ui
|
|
- if: $CI_PIPELINE_SOURCE == "web"
|
|
# Ensure the pipeline doesn't run for every commit push
|
|
- if: $CI_PIPELINE_SOURCE == "push"
|
|
when: never
|
|
|
|
include:
|
|
- project: sysadmin/ci-utilities
|
|
file:
|
|
- /gitlab-templates/flatpak.yml
|
|
|
|
kecolab-worker-build:
|
|
extends: .workflow-template
|
|
stage: publish
|
|
image: alpine
|
|
dependencies:
|
|
- flatpak
|
|
tags:
|
|
- EcoLabWorker
|
|
before_script:
|
|
- echo $CI_PROJECT_NAME:$CI_COMMIT_REF_NAME
|
|
# Copy flatpak artifacts to LABPC
|
|
- scp -o StrictHostKeyChecking=no -i ~/.ssh/kecolab ${CI_PROJECT_NAME}.flatpak kecolab@$LABPC_IP:/tmp/
|
|
script:
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
|
|
cd /tmp/ && flatpak install --user ${CI_PROJECT_NAME}.flatpak -y "
|
|
|
|
kecolab-worker-energy_measurement:
|
|
extends: .workflow-template
|
|
stage: publish
|
|
image: alpine
|
|
needs:
|
|
- kecolab-worker-build
|
|
dependencies:
|
|
- kecolab-worker-build
|
|
timeout: 12h
|
|
tags:
|
|
- EcoLabWorker
|
|
before_script:
|
|
# Download and Copy Usage scenario scripts to the LABPC
|
|
- git clone --no-checkout https://invent.kde.org/teams/eco/remote-eco-lab.git
|
|
- cd remote-eco-lab
|
|
- git checkout master
|
|
- git config core.sparseCheckout true
|
|
- git sparse-checkout set scripts/test_scripts/org.kde.$CI_PROJECT_NAME
|
|
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab scripts/test_scripts/org.kde.$CI_PROJECT_NAME/* kecolab@$LABPC_IP:/tmp/
|
|
- cd .. && rm -rf remote-eco-lab
|
|
# Check for configuration script for application under test
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP 'export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && if [ -f "configuration.sh" ]; then chmod +x configuration.sh && ./configuration.sh; fi; exit'
|
|
|
|
script:
|
|
- export CURRENT_DATE=$(date +%Y%m%d)
|
|
# Start taking PM Readings (Script 1)
|
|
- cd /home/gitlab-runner/GUDEPowerMeter && nohup python3 check_gude_modified.py -i 1 -x $PM_IP >> ~/testreadings1.csv 2>/dev/null &
|
|
# Start taking Hardware readings using collectl (for script 1)
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP '
|
|
nohup collectl -s cdmn -i1 -P --sep 59 -f ~/test1.csv >/dev/null 2>&1 &
|
|
export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && chmod +x log_sus.sh && ./log_sus.sh'
|
|
# Kill the Process taking PM Readings
|
|
- pkill -f check_gude_modified.py
|
|
# Start taking PM Readings (Script 2)
|
|
- cd /home/gitlab-runner/GUDEPowerMeter && nohup python3 check_gude_modified.py -i 1 -x $PM_IP >> ~/testreadings2.csv 2>/dev/null &
|
|
# Start taking Hardware readings using collectl (for script 2)
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP '
|
|
nohup collectl -s cdmn -i1 -P --sep 59 -f ~/test2.csv >/dev/null 2>&1 &
|
|
export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && chmod +x log_baseline.sh && ./log_baseline.sh'
|
|
- pkill -f check_gude_modified.py
|
|
# Start taking PM Readings (Script 3)
|
|
- cd /home/gitlab-runner/GUDEPowerMeter && nohup python3 check_gude_modified.py -i 1 -x $PM_IP >> ~/testreadings3.csv 2>/dev/null &
|
|
# Start taking Hardware readings using collectl (for script 3)
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP '
|
|
nohup collectl -s cdmn -i1 -P --sep 59 -f ~/test3.csv >/dev/null 2>&1 &
|
|
export DISPLAY=:0 && export TERM=xterm && cd /tmp/ && chmod +x log_idle.sh && ./log_idle.sh'
|
|
- pkill -f check_gude_modified.py
|
|
# Export collectl readings using Current Date in the filename
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
|
|
export CURRENT_DATE=$(date +%Y%m%d) && cd ~/ && cp test1.csv-kecolab-$CURRENT_DATE.tab.gz ~/test1.csv-kecolab.tab.gz"
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
|
|
export CURRENT_DATE=$(date +%Y%m%d) && cd ~/ && cp test2.csv-kecolab-$CURRENT_DATE.tab.gz ~/test2.csv-kecolab.tab.gz"
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP "
|
|
export CURRENT_DATE=$(date +%Y%m%d) && cd ~/ && cp test3.csv-kecolab-$CURRENT_DATE.tab.gz ~/test3.csv-kecolab.tab.gz"
|
|
# Export Power Meter Readings
|
|
- cp ~/testreadings1.csv testreadings1.csv
|
|
- cp ~/testreadings2.csv testreadings2.csv
|
|
- cp ~/testreadings3.csv testreadings3.csv
|
|
# Export all the Raw Power and Hardware Readings to Artifacts
|
|
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/test1.csv-kecolab.tab.gz test1.csv-kecolab-$CURRENT_DATE.tab.gz
|
|
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/test2.csv-kecolab.tab.gz test2.csv-kecolab-$CURRENT_DATE.tab.gz
|
|
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/test3.csv-kecolab.tab.gz test3.csv-kecolab-$CURRENT_DATE.tab.gz
|
|
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/log_sus.csv log_sus.csv
|
|
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/log_baseline.csv log_baseline.csv
|
|
- scp -o StrictHostKeyChecking=no -r -i ~/.ssh/kecolab kecolab@$LABPC_IP:~/log_idle.csv log_idle.csv
|
|
# Remove all the logs
|
|
- cd ~/ && rm testreadings1.csv testreadings2.csv testreadings3.csv
|
|
- ssh -o StrictHostKeyChecking=no -i ~/.ssh/kecolab kecolab@$LABPC_IP ' export CURRENT_DATE=$(date +%Y%m%d) && rm log_sus.csv log_baseline.csv log_idle.csv test1.csv-kecolab-$CURRENT_DATE.tab.gz test2.csv-kecolab-$CURRENT_DATE.tab.gz test3.csv-kecolab-$CURRENT_DATE.tab.gz test1.csv-kecolab.tab.gz test2.csv-kecolab.tab.gz test3.csv-kecolab.tab.gz && cd /tmp/ && rm log_sus.sh log_baseline.sh log_idle.sh'
|
|
artifacts:
|
|
paths:
|
|
- testreadings1.csv
|
|
- testreadings2.csv
|
|
- testreadings3.csv
|
|
- "test1.csv-kecolab-*.tab.gz"
|
|
- "test2.csv-kecolab-*.tab.gz"
|
|
- "test3.csv-kecolab-*.tab.gz"
|
|
- log_sus.csv
|
|
- log_baseline.csv
|
|
- log_idle.csv
|
|
expire_in: 90 days
|
|
|
|
# Result Stage (To Generate Energy Measurement Report)
|
|
kecolab-worker-result:
|
|
extends: .workflow-template
|
|
stage: publish
|
|
image: invent-registry.kde.org/sysadmin/ci-images/kecolab-analysis:latest
|
|
needs:
|
|
- kecolab-worker-energy_measurement
|
|
dependencies:
|
|
- kecolab-worker-energy_measurement
|
|
script:
|
|
- export CURRENT_DATE=$(date +%Y%m%d)
|
|
- gunzip test1.csv-kecolab-$CURRENT_DATE.tab.gz
|
|
- gunzip test2.csv-kecolab-$CURRENT_DATE.tab.gz
|
|
- gunzip test3.csv-kecolab-$CURRENT_DATE.tab.gz
|
|
|
|
# Preprocess Raw data for OSCAR Script
|
|
- Rscript ~/Preprocessing.R test1.csv-kecolab-$CURRENT_DATE.tab test2.csv-kecolab-$CURRENT_DATE.tab test3.csv-kecolab-$CURRENT_DATE.tab $CI_PROJECT_DIR
|
|
# Run OSCAR Analysis script to generate a report SUS
|
|
- Rscript ~/sus_analysis_script.R
|
|
- cp -r ~/SUS_Report.pdf ~/SUS_Report.tex ~/sus_graphics ~/SUS_Report_files $CI_PROJECT_DIR/
|
|
# Run OSCAR Analysis script to generate a report for Idle Mode
|
|
- Rscript ~/idle_analysis_script.R
|
|
- cp -r ~/Idle_Report.pdf ~/Idle_Report.tex ~/idle_graphics ~/Idle_Report_files $CI_PROJECT_DIR/
|
|
|
|
artifacts:
|
|
paths:
|
|
- SUS_Report.pdf
|
|
- SUS_Report.tex
|
|
- SUS_Report_files
|
|
- sus_graphics
|
|
- Idle_Report.pdf
|
|
- Idle_Report.tex
|
|
- Idle_Report_files
|
|
- idle_graphics
|
|
expire_in: 90 days
|