CI/CD Pipeline #41
Workflow file for this run
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: CI/CD Pipeline | |
on: | |
pull_request: | |
branches: | |
- main | |
push: | |
branches: | |
- main | |
workflow_dispatch: ~ # Allows manual triggering of the workflow | |
permissions: | |
contents: read | |
concurrency: | |
group: vm-ci-cd | |
cancel-in-progress: false | |
jobs: | |
setup: | |
name: Setup | |
runs-on: ubuntu-latest | |
outputs: | |
vm_started: ${{ steps.vm-status.outputs.vm_started }} | |
steps: | |
- name: Checkout Code on Runner # Just to get required actions in .github/. The actual code checkout is done on the VM | |
uses: actions/checkout@v4 | |
- name: Access Azure VM | |
id: vm-status | |
uses: azure/CLI@v2 | |
with: | |
azcliversion: 2.62.0 | |
inlineScript: | | |
echo "Logging into Azure..." | |
az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }} | |
if [ $? -eq 0 ]; then | |
echo "Logged in successfully" | |
else | |
echo "Failed to login" | |
exit 1 | |
fi | |
echo "Setting Azure subscription..." | |
az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
if [ $? -eq 0 ]; then | |
echo "Subscription set successfully" | |
else | |
echo "Failed to set subscription" | |
exit 1 | |
fi | |
echo "Checking if VM is running..." | |
VM_STATUS=$(az vm get-instance-view --resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} --name ${{ secrets.AZURE_VM_NAME }} --query instanceView.statuses[1].displayStatus --output tsv) | |
if [ "$VM_STATUS" != "VM running" ]; then | |
echo "Starting VM..." | |
az vm start --resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} --name ${{ secrets.AZURE_VM_NAME }} | |
echo "vm_started=true" >> $GITHUB_OUTPUT | |
else | |
echo "VM is already running" | |
echo "vm_started=false" >> $GITHUB_OUTPUT | |
fi | |
- name: Common SSH and Azure CLI Setup | |
uses: ./.github/actions/common-steps | |
with: | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Checkout Code on VM | |
run: | | |
ssh -T -o ConnectTimeout=10 ${{ secrets.VM_USERNAME }}@${{ secrets.VM_IP }} << 'EOF' | |
cd ~/aperi-mech | |
echo "Fetching git branches..." | |
git fetch origin +refs/pull/*:refs/remotes/origin/pr/* | |
echo "Checking out appropriate branch..." | |
if [ "${{ github.event_name }}" = "pull_request" ]; then | |
git checkout ${{ github.sha }} | |
elif [ "${{ github.event_name }}" = "push" ] && [ "${{ github.ref }}" = "refs/heads/main" ]; then | |
git checkout main | |
git pull origin main | |
else | |
git checkout ${{ github.ref }} | |
fi | |
git lfs pull # Pull LFS files | |
rm -rf build # Remove build directory, this prevents some false positives in tests | |
EOF | |
build-release: | |
name: Build Release | |
runs-on: ubuntu-latest | |
needs: setup | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
steps: | |
- name: Checkout Code on Runner # Just to get required actions in .github/. The actual code checkout is done on the VM | |
uses: actions/checkout@v4 | |
- name: Build Release | |
uses: ./.github/actions/build-action | |
with: | |
build-type: Release | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: false | |
build-debug: | |
name: Build Debug | |
runs-on: ubuntu-latest | |
needs: setup | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
steps: | |
- name: Checkout code # Just to get required actions in .github/ | |
uses: actions/checkout@v4 | |
- name: Build Debug | |
uses: ./.github/actions/build-action | |
with: | |
build-type: Debug | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: false | |
build-release-gpu: | |
name: Build Release, GPU | |
runs-on: ubuntu-latest | |
needs: [setup, build-release, test-release] | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
steps: | |
- name: Checkout code # Just to get required actions in .github/ | |
uses: actions/checkout@v4 | |
- name: Build Release, GPU | |
uses: ./.github/actions/build-action | |
with: | |
build-type: Release | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: true | |
build-debug-gpu: | |
name: Build Debug, GPU | |
runs-on: ubuntu-latest | |
needs: [setup, build-debug, test-debug] | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
steps: | |
- name: Checkout code # Just to get required actions in .github/ | |
uses: actions/checkout@v4 | |
- name: Build Debug, GPU | |
uses: ./.github/actions/build-action | |
with: | |
build-type: Debug | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: true | |
test-release: | |
name: Test Release | |
runs-on: ubuntu-latest | |
needs: [setup, build-release] | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
env: | |
BUILD_TYPE: Release | |
GPU: false | |
steps: | |
- name: Checkout Code on Runner # Just to get required actions in .github/. The actual code checkout is done on the VM | |
uses: actions/checkout@v4 | |
- name: Common SSH and Azure CLI Setup | |
uses: ./.github/actions/common-steps | |
with: | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Run unit tests | |
uses: ./.github/actions/run-unit-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
num-processes: 1 | |
- name: Run unit tests, parallel | |
uses: ./.github/actions/run-unit-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
num-processes: 3 | |
- name: Run material tests | |
uses: ./.github/actions/run-material-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
- name: Run utils modules tests | |
uses: ./.github/actions/run-utils-modules-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
test-debug: | |
name: Test Debug | |
runs-on: ubuntu-latest | |
needs: [setup, build-debug] | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
env: | |
BUILD_TYPE: Debug | |
GPU: false | |
steps: | |
- name: Checkout Code on Runner # Just to get required actions in .github/. The actual code checkout is done on the VM | |
uses: actions/checkout@v4 | |
- name: Common SSH and Azure CLI Setup | |
uses: ./.github/actions/common-steps | |
with: | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Run unit tests | |
uses: ./.github/actions/run-unit-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
num-processes: 1 | |
- name: Run unit tests, parallel | |
uses: ./.github/actions/run-unit-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
num-processes: 3 | |
- name: Run material tests | |
uses: ./.github/actions/run-material-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
- name: Run utils modules tests | |
uses: ./.github/actions/run-utils-modules-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
test-release-gpu: | |
name: Test Release, GPU | |
runs-on: ubuntu-latest | |
needs: [setup, build-release-gpu] | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
env: | |
BUILD_TYPE: Release | |
GPU: true | |
steps: | |
- name: Checkout Code on Runner # Just to get required actions in .github/. The actual code checkout is done on the VM | |
uses: actions/checkout@v4 | |
- name: Common SSH and Azure CLI Setup | |
uses: ./.github/actions/common-steps | |
with: | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Run unit tests | |
uses: ./.github/actions/run-unit-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
num-processes: 1 | |
- name: Run material tests | |
uses: ./.github/actions/run-material-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
- name: Run utils modules tests | |
uses: ./.github/actions/run-utils-modules-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
test-debug-gpu: | |
name: Test Debug, GPU | |
runs-on: ubuntu-latest | |
needs: [setup, build-debug-gpu] | |
concurrency: | |
group: build-and-test-vm-ci-cd | |
cancel-in-progress: false | |
env: | |
BUILD_TYPE: Debug | |
GPU: true | |
steps: | |
- name: Checkout Code on Runner # Just to get required actions in .github/. The actual code checkout is done on the VM | |
uses: actions/checkout@v4 | |
- name: Common SSH and Azure CLI Setup | |
uses: ./.github/actions/common-steps | |
with: | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Run unit tests | |
uses: ./.github/actions/run-unit-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
num-processes: 1 | |
- name: Run material tests | |
uses: ./.github/actions/run-material-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
- name: Run utils modules tests | |
uses: ./.github/actions/run-utils-modules-tests | |
with: | |
build-type: ${{ env.BUILD_TYPE }} | |
VM_IP: ${{ secrets.VM_IP }} | |
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} | |
VM_USERNAME: ${{ secrets.VM_USERNAME }} | |
gpu: ${{ env.GPU }} | |
teardown: | |
runs-on: ubuntu-latest | |
name: Teardown | |
needs: [ | |
setup, | |
build-release, | |
test-release, | |
build-debug, | |
test-debug, | |
build-release-gpu, | |
test-release-gpu, | |
build-debug-gpu, | |
test-debug-gpu, | |
] | |
steps: | |
# For debugging purposes | |
- name: Print VM status | |
if: always() | |
run: | | |
echo "VM started: ${{ needs.setup.outputs.vm_started }}" | |
- name: Stop Azure VM | |
if: always() && needs.setup.outputs.vm_started == 'true' | |
uses: azure/CLI@v2 | |
with: | |
azcliversion: 2.62.0 | |
inlineScript: | | |
echo "Logging into Azure..." | |
az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }} | |
if [ $? -eq 0 ]; then | |
echo "Logged in successfully" | |
else | |
echo "Failed to login" | |
exit 1 | |
fi | |
echo "Setting Azure subscription..." | |
az account set --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
if [ $? -eq 0 ]; then | |
echo "Subscription set successfully" | |
else | |
echo "Failed to set subscription" | |
exit 1 | |
fi | |
echo "Deallocating VM..." | |
az vm deallocate --resource-group ${{ secrets.AZURE_RESOURCE_GROUP }} --name ${{ secrets.AZURE_VM_NAME }} | |
if [ $? -eq 0 ]; then | |
echo "VM deallocated successfully" | |
else | |
echo "Failed to deallocate VM" | |
exit 1 | |
fi |