Skip to content

Validation with Standalone Kepler #192

Validation with Standalone Kepler

Validation with Standalone Kepler #192

name: Validation with Standalone Kepler
on:
workflow_dispatch:
schedule:
- cron: '0 16 * * *'
permissions:
pull-requests: write
contents: write
repository-projects: write
packages: write
jobs:
Create-runner:
name: "Create Runner"
uses: ./.github/workflows/create_equinix_runner.yml
secrets: inherit
Install:
name: "Install"
needs: Create-runner
runs-on: self-hosted
continue-on-error: true
outputs:
runner-name: ${{ runner.name }}
steps:
- name: Setup runner
run: |
echo "This is runner: ${{ runner.name }}"
echo "Running on ${{ runner.arch }} ${{ runner.os }}"
# config ssh
sudo ssh-keygen -t rsa -b 4096 -f /root/.ssh/ansible_rsa -N ''
sudo cat ~/.ssh/ansible_rsa.pub >> ~/.ssh/authorized_keys
sudo echo "StrictHostKeyChecking no" >> ~/.ssh/config
# install ansible
sudo dnf -y install ansible-core python3-pip
sudo dnf install -y rhel-system-roles
sudo ansible-galaxy collection install prometheus.prometheus
sudo ansible-galaxy collection install community.crypto
sudo ansible-galaxy collection install community.libvirt
sudo ansible-config init --disabled | sed "s/;host_key_checking=True/host_key_checking=False/g" | sed "s/;private_key_file=/private_key_file=~\/.ssh\/ansible_rsa/g" | sed 's|;roles_path={{ ANSIBLE_HOME ~ "/roles:/usr/share/ansible/roles:/etc/ansible/roles" }}|roles_path={{ ANSIBLE_HOME ~ "/roles:/usr/share/ansible/roles:/etc/ansible/roles;/root/.ansible/collections/ansible_collections/community/libvirt/roles" }}|' > /etc/ansible/ansible.cfg
- name: List available RAPL domains
run: |
for file in $(sudo find -L /sys/class/powercap/intel-rapl -name name 2>/dev/null); do cat $file; done | sort -n| uniq | tee -a /tmp/rapl-domain-availability.txt
# expected typical output if all domains are supported
# - core
# - dram
# - package-0
# - psys # relatively new power management domain, only available after Skylake
# - uncore
- name: Checkout code
uses: actions/checkout@v3
- name: Run playbook
run: |
cd ${GITHUB_WORKSPACE}/ansible
cp roles/kvm_vm/files/meta-data /tmp/meta-data
cp cloud-init-script.sh /tmp/cloud-init-script.sh
echo "Create VM"
ansible-playbook -i inventory.yml kvm_playbook.yml
echo "Install SSH tunnel"
ansible-playbook ssh_tunnel_playbook.yml
echo "Install Prometheus"
ansible-playbook -i inventory.yml metrics_playbook.yml
echo "Install Kepler"
ansible-playbook -i inventory.yml kepler_playbook.yml
echo "Create ssh tunnel"
ansible-playbook -i inventory.yml ssh_tunnel_playbook.yml
echo "Run validation test"
ansible-playbook -vvv kepler_validator.yml
echo "Checkout the report"
ls /tmp
cat /tmp/report-*.md || true
# create a directory to store the artifacts, the directory is the current date
set -x
export DATE_STR=$(date +%Y-%m-%d)
cd ${GITHUB_WORKSPACE}
mkdir -p docs/validation/${DATE_STR}
export KEPLER_TAG=$(ls -d /tmp/validator-* |tail -1 | sed 's/.*validator-//g')
# copy the report to the directory
mv /tmp/validator-${KEPLER_TAG}/ docs/validation/${DATE_STR}/
mv /tmp/rapl-domain-availability.txt docs/validation/${DATE_STR}/validator-${KEPLER_TAG}/
echo "| " ${DATE_STR} " | " ${KEPLER_TAG} " | [Report](validation/${DATE_STR}/validator-${KEPLER_TAG}/report-${KEPLER_TAG}.md) | [Artifacts](validation/${DATE_STR}/validator-${KEPLER_TAG}/artifacts) |" \
>> docs/kepler-model-validation.md
git config user.email "dependabot[bot]@users.noreply.github.com"
git config user.name "dependabot[bot]"
git add docs/*
git commit -m "Add validation report for ${DATE_STR}" -s
git push
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Update model validation chart
run: |
export DATE_STR=$(date +%Y-%m-%d)
cd ${GITHUB_WORKSPACE}
cd docs/analytics
python -m pip install --upgrade pip
pip install -r requirements.txt
python ./kepler_analytics.py
# update git
git config user.email "dependabot[bot]@users.noreply.github.com"
git config user.name "dependabot[bot]"
cd ${GITHUB_WORKSPACE}
git add docs/analytics/*
git add docs/kepler-model-validation-chart.md
git commit -m "Add validation chart for ${DATE_STR}" -s
git push
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Cleanup:
name: "Cleanup"
needs: [Install]
uses: ./.github/workflows/clean_equinix_runner.yml
secrets: inherit
with:
runner_name: ${{ needs.Install.outputs.runner-name }}