Skip to content

feat: Add energy scheduler #260

feat: Add energy scheduler

feat: Add energy scheduler #260

Workflow file for this run

name: Build, Upload and Test
on:
push:
branches:
- master
pull_request:
branches:
- master
- release/*
workflow_dispatch:
inputs:
frontend_branch:
description: 'Branch of FrontEnd to use'
required: true
default: 'master'
env:
SCRIPT_PATH: /opt/actions-runner-external/script
CACHE_PATH: /opt/actions-runner-external/cache
TEST_FAILED: false
jobs:
build:
if: github.event.pull_request.draft == false
runs-on: self-hosted
defaults:
run:
shell: bash -leo pipefail {0}
steps:
# Checkout repo
- name: Checkout code
uses: actions/checkout@v4
with:
path: CraneSched
# Checkout frontend
- name: Checkout frontend
uses: actions/checkout@v4
with:
repository: PKUHPC/CraneSched-FrontEnd
path: CraneSched-FrontEnd
ref: ${{ inputs.frontend_branch }}
# Pull CI Image and Prepare
- name: Pull CI Image
run: |
podman pull ghcr.io/nativu5/cranedev:ci
echo "Linking $SCRIPT_PATH to $(pwd)/script"
ln -sfT $SCRIPT_PATH $(pwd)/script
echo "Linking $CACHE_PATH to $(pwd)/cache"
ln -sfT $CACHE_PATH $(pwd)/cache
mkdir -p output
mkdir -p log
- name: Build in Container
run: |
podman run --rm \
-v ./CraneSched:/Workspace/CraneSched \
-v ./CraneSched-FrontEnd:/Workspace/CraneSched-FrontEnd \
-v ./output:/Workspace/output \
-v ./script:/Workspace/script \
-v ./cache/ccache:/root/.ccache \
ghcr.io/nativu5/cranedev:ci /bin/bash --login script/build.sh
# Collect and upload artifacts
- name: Count Artifacts
run: |
ARTIFACT_NAME_CRANED_DEB=$(basename $(ls output/*craned.deb))
ARTIFACT_NAME_CRANED_RPM=$(basename $(ls output/*craned.rpm))
ARTIFACT_NAME_CRANECTLD_DEB=$(basename $(ls output/*cranectld.deb))
ARTIFACT_NAME_CRANECTLD_RPM=$(basename $(ls output/*cranectld.rpm))
ARTIFACT_NAME_FRONTEND=bin
ARTIFACT_NAME_PLUGIN=plugin
echo "ARTIFACT_NAME_CRANED_DEB=$ARTIFACT_NAME_CRANED_DEB" >> $GITHUB_ENV
echo "ARTIFACT_NAME_CRANED_RPM=$ARTIFACT_NAME_CRANED_RPM" >> $GITHUB_ENV
echo "ARTIFACT_NAME_CRANECTLD_DEB=$ARTIFACT_NAME_CRANECTLD_DEB" >> $GITHUB_ENV
echo "ARTIFACT_NAME_CRANECTLD_RPM=$ARTIFACT_NAME_CRANECTLD_RPM" >> $GITHUB_ENV
echo "ARTIFACT_NAME_FRONTEND=$ARTIFACT_NAME_FRONTEND" >> $GITHUB_ENV
echo "ARTIFACT_NAME_PLUGIN=$ARTIFACT_NAME_PLUGIN" >> $GITHUB_ENV
- name: Upload craned .deb package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANED_DEB }}
path: output/${{ env.ARTIFACT_NAME_CRANED_DEB }}
retention-days: 14
if-no-files-found: error
- name: Upload craned .rpm package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANED_RPM }}
path: output/${{ env.ARTIFACT_NAME_CRANED_RPM }}
retention-days: 14
if-no-files-found: error
- name: Upload cranectld .deb package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANECTLD_DEB }}
path: output/${{ env.ARTIFACT_NAME_CRANECTLD_DEB }}
retention-days: 14
if-no-files-found: error
- name: Upload cranectld .rpm package
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME_CRANECTLD_RPM }}
path: output/${{ env.ARTIFACT_NAME_CRANECTLD_RPM }}
retention-days: 14
if-no-files-found: error
- name: Upload frontend
uses: actions/upload-artifact@v4
with:
name: frontend
path: output/${{ env.ARTIFACT_NAME_FRONTEND }}
retention-days: 14
if-no-files-found: error
- name: Upload plugin
uses: actions/upload-artifact@v4
with:
name: plugin
path: output/${{ env.ARTIFACT_NAME_PLUGIN }}
retention-days: 14
if-no-files-found: error
# Run AutoTest
- name: Run AutoTest
continue-on-error: true
run: |
NETWORK_ID=$(podman container inspect mongodb | jq -r '.[0].NetworkSettings.Networks | keys[]')
podman run -d --rm --name autotest \
--privileged \
--systemd true \
-v /lib/modules:/lib/modules:ro \
-v ./script:/CraneSched-AutoTest/script \
-v ./output:/CraneSched-AutoTest/output \
-v ./log:/CraneSched-AutoTest/log \
--network $NETWORK_ID \
localhost/autotest
podman exec autotest /bin/bash --login script/run.sh || echo "TEST_FAILED=true" >> $GITHUB_ENV
podman stop autotest
# Upload AutoTest Results
- name: Upload AutoTest Results
uses: actions/upload-artifact@v4
with:
name: result.json
path: output/result.json
retention-days: 14
if-no-files-found: error
# Alarm if has failed cases
- name: Alarm on test failure
if: env.TEST_FAILED == 'true'
run: exit 1