feat: Add energy scheduler #263
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |