Skip to content

Create an Azure VM

Create an Azure VM #15

name: Create an Azure VM
defaults:
run:
shell: bash
on:
workflow_dispatch:
inputs:
action:
description: Action
required: true
type: choice
options:
- start
- terminate all
size:
description: Instance
required: true
type: choice
# All numbers are for spot instances in East US as of 2023-06-03.
# Standard_HB120rs_v3:
# - https://learn.microsoft.com/en-us/azure/virtual-machines/hbv3-series
# - 120 AMD EPYC™ 7V73X (Milan-X) CPU cores
# - 448 GB of RAM
# - 2 * 960 GB SSD
# - $0.37/hour
# Standard_NC8as_T4_v3:
# - https://learn.microsoft.com/en-us/azure/virtual-machines/nct4-v3-series
# - 1x NVIDIA Tesla T4 GPU with 16 GB of RAM
# - 8 AMD EPYC 7V12 (Rome) CPU cores
# - 56 GB of RAM
# - 1 * 360 GB SSD
# - $0.14/hour
# Standard_NV36ads_A10_v5:
# - https://learn.microsoft.com/en-us/azure/virtual-machines/nva10v5-series
# - 1x NVIDIA A10 GPU with 24 GB of RAM
# - 36 AMD EPYC 74F3V(Milan) CPU cores
# - 440 GB of RAM
# - 1 * 1440 GB SSD
# - $1.28/hour
options:
- Standard_HB120rs_v3
# - Standard_NC8as_T4_v3
# - Standard_NV36ads_A10_v5
jobs:
# check-for-instance:
# name: Check for instance
# runs-on: ubuntu-latest
# if: ${{ inputs.action == 'start' }}
# outputs:
# # NOTE: Returns the ID of the matching runner, or -1 if no matching runner is found.
# id: ${{ steps.id.outputs.value }}
# steps:
# - name: Query GitHub for runners
# id: runners
# env:
# # We require admin read access to the repository to query the runners.
# # TODO: Expires on Thu, Jun 13 2024.
# GH_TOKEN: ${{ secrets.NIX_CUDA_TEST_GH_TOKEN_ADMIN_READ }}
# run: |
# gh api \
# -H "Accept: application/vnd.github+json" \
# -H "X-GitHub-Api-Version: 2022-11-28" \
# /repos/ConnorBaker/nix-cuda-test/actions/runners \
# | jq -crS '.runners' \
# | xargs --null printf "json=%s" \
# | tee -a "$GITHUB_OUTPUT"
# - name: Filter the runners by size and status
# id: matching-runners
# run: |
# jq -crS \
# --arg size "${{ inputs.size }}" \
# 'map(select(.name == $size and .status == "online"))' \
# <<< "${{ steps.runners.outputs.json }}" \
# | xargs --null printf "json=%s" \
# | tee -a "$GITHUB_OUTPUT"
# - name: Get the ID of the matching runners
# id: id
# run: |
# declare -i length=$(jq -crS 'length' <<< "${{ steps.matching-runners.outputs.json }}")
# declare -i id=-1
# if (( length == 0 )); then
# echo "No matching runner found."
# elif (( length == 1 )); then
# echo "Matching runner found."
# id=$(jq -crS '.[0].id' <<< "${{ steps.matching-runners.outputs.json }}")
# else
# echo "Multiple matching runners found!"
# exit 1
# fi
# echo "value=$id" | tee -a "$GITHUB_OUTPUT"
create-running-instance:
name: Create instance
runs-on: ubuntu-latest
# needs: check-for-instance
# if: ${{ inputs.action == 'start' && needs.check-for-instance.outputs.id == -1 }}
permissions:
contents: read
id-token: write
steps:
- name: Log in to Azure
uses: Azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
- name: Azure CLI script
uses: azure/CLI@v1
with:
azcliversion: latest
inlineScript: |
az account show