Provision VM and setup self-hosted runner #110
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: Provision VM and setup self-hosted runner | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 23 * * 0" | |
jobs: | |
setup-aws-vm: | |
runs-on: ubuntu-latest | |
env: | |
AWS_RUNNER_NAME: stellar-continuous-aws | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Configure AWS credentials using EASE lab account | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }} | |
aws-region: us-west-1 | |
- name: Create SSH public key file | |
run: | | |
mkdir -p $HOME/.ssh | |
echo ${{ vars.SSH_PUBLIC_KEY }} > $HOME/.ssh/id_rsa.pub | |
cat $HOME/.ssh/id_rsa.pub | |
- name: Create AWS EC2 instance | |
run: | | |
aws ec2 run-instances \ | |
--block-device-mappings 'DeviceName=/dev/sda1,Ebs={VolumeSize=16}' \ | |
--image-id ami-036cafe742923b3d9 \ | |
--instance-type t3a.small \ | |
--key-name stellar-ssh-key \ | |
--region us-west-1 \ | |
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=${{ env.AWS_RUNNER_NAME }}}]' | |
id: create-vm | |
- name: Get public IP address | |
run: echo ip=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=${{ env.AWS_RUNNER_NAME }}" --query "Reservations[*].Instances[*].PublicIpAddress" --output text) >> $GITHUB_OUTPUT | |
id: get-ip | |
- name: Create a registration token for self-hosted runners | |
run: | | |
gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/vhive-serverless/STeLLAR/actions/runners/registration-token \ | |
| echo token=$(jq -r .token) > $GITHUB_OUTPUT | |
env: | |
GH_TOKEN: ${{ secrets.DEPLOY_SELF_HOSTED_RUNNER_TOKEN }} | |
id: get-registration-token | |
- name: Setup SSH key on current GitHub-hosted runner | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Setup self-hosted runner | |
env: | |
GH_TOKEN: ${{ secrets.DEPLOY_SELF_HOSTED_RUNNER_TOKEN }} | |
uses: nick-fields/retry@v2 | |
with: | |
timeout_minutes: 30 | |
max_attempts: 5 | |
retry_wait_seconds: 10 | |
command: | | |
# Exit if runner is already set up | |
RUNNER_STATUS=$(gh api -H "Accept: application/vnd.github+json" /repos/vhive-serverless/STeLLAR/actions/runners | grep 'aws') | |
echo "Runner Status: $RUNNER_STATUS" | |
if [ -n "$RUNNER_STATUS" ]; then | |
echo "Runner with label 'aws' is already set up and running." | |
exit 0 | |
fi | |
# Connection status | |
CONNECTION_READY_STATUS=describe_instance=$(aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Instance:InstanceId,State:State.Name,PublicIP:PublicIpAddress}' --output table) | |
echo "$CONNECTION_READY_STATUS" | |
# Connect via SSH to instance | |
ssh -o StrictHostKeyChecking=no ubuntu@${{ steps.get-ip.outputs.ip }} " | |
echo 'Installing STeLLAR dependencies' | |
curl -o stellar-setup.sh https://raw.githubusercontent.com/vhive-serverless/STeLLAR/main/scripts/setup.sh | |
chmod +x stellar-setup.sh | |
./stellar-setup.sh | |
echo 'Setup self-hosted runner' | |
mkdir actions-runner && cd actions-runner | |
curl -o actions-runner-linux-x64-2.315.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.315.0/actions-runner-linux-x64-2.315.0.tar.gz | |
tar xzf ./actions-runner-linux-x64-2.315.0.tar.gz | |
./config.sh --url https://github.com/vhive-serverless/STeLLAR --token ${{ steps.get-registration-token.outputs.token }} --name ${{ env.AWS_RUNNER_NAME }} --labels aws | |
tmux new-session -d -s github-actions-runner 'bash ./run.sh' | |
" | |
setup-cloudflare-vm: | |
runs-on: ubuntu-latest | |
env: | |
CLOUDFLARE_RUNNER_NAME: stellar-continuous-cloudflare | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Configure AWS credentials using EASE lab account | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }} | |
aws-region: us-east-2 | |
- name: Create SSH public key file | |
run: | | |
mkdir -p $HOME/.ssh | |
echo ${{ vars.SSH_PUBLIC_KEY }} > $HOME/.ssh/id_rsa.pub | |
cat $HOME/.ssh/id_rsa.pub | |
- name: Create AWS EC2 instance | |
run: | | |
aws ec2 run-instances \ | |
--block-device-mappings 'DeviceName=/dev/sda1,Ebs={VolumeSize=16}' \ | |
--image-id ami-0f30a9c3a48f3fa79 \ | |
--instance-type t2.micro \ | |
--key-name stellar-ssh-key \ | |
--region us-east-2 \ | |
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=${{ env.CLOUDFLARE_RUNNER_NAME }}}]' | |
id: create-vm | |
- name: Get public IP address | |
run: echo ip=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=${{ env.CLOUDFLARE_RUNNER_NAME }}" --query "Reservations[*].Instances[*].PublicIpAddress" --output text) >> $GITHUB_OUTPUT | |
id: get-ip | |
- name: Create a registration token for self-hosted runners | |
run: | | |
gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/vhive-serverless/STeLLAR/actions/runners/registration-token \ | |
| echo token=$(jq -r .token) > $GITHUB_OUTPUT | |
env: | |
GH_TOKEN: ${{ secrets.DEPLOY_SELF_HOSTED_RUNNER_TOKEN }} | |
id: get-registration-token | |
- name: Setup SSH key on current GitHub-hosted runner | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Setup self-hosted runner | |
env: | |
GH_TOKEN: ${{ secrets.DEPLOY_SELF_HOSTED_RUNNER_TOKEN }} | |
uses: nick-fields/retry@v2 | |
with: | |
timeout_minutes: 30 | |
max_attempts: 5 | |
retry_wait_seconds: 10 | |
command: | | |
# "Exit if runner is already set up" | |
RUNNER_STATUS=$(gh api -H "Accept: application/vnd.github+json" /repos/vhive-serverless/STeLLAR/actions/runners | grep 'cloudflare') | |
echo "Runner Status: $RUNNER_STATUS" | |
if [ -n "$RUNNER_STATUS" ]; then | |
echo "Runner with label 'cloudflare' is already set up and running" | |
exit 0 | |
fi | |
# connection status | |
CONNECTION_READY_STATUS=describe_instance=$(aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Instance:InstanceId,State:State.Name,,PublicIP:PublicIpAddress}' --output table) | |
echo "$CONNECTION_READY_STATUS" | |
# connect via SSH to instance | |
ssh -o StrictHostKeyChecking=no ubuntu@${{ steps.get-ip.outputs.ip }} " | |
echo 'Installing STeLLAR dependencies' | |
curl -o stellar-setup.sh https://raw.githubusercontent.com/vhive-serverless/STeLLAR/main/scripts/setup.sh | |
chmod +x stellar-setup.sh | |
./stellar-setup.sh | |
curl -o cloudflare-setup.sh https://raw.githubusercontent.com/vhive-serverless/STeLLAR/main/scripts/cloudflare/setup.sh | |
chmod +x cloudflare-setup.sh | |
./cloudflare-setup.sh | |
echo 'Setup self-hosted runner' | |
mkdir actions-runner && cd actions-runner | |
curl -o actions-runner-linux-x64-2.315.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.315.0/actions-runner-linux-x64-2.315.0.tar.gz | |
tar xzf ./actions-runner-linux-x64-2.315.0.tar.gz | |
./config.sh --url https://github.com/vhive-serverless/STeLLAR --token ${{ steps.get-registration-token.outputs.token }} --name ${{ env.CLOUDFLARE_RUNNER_NAME }} --labels cloudflare | |
tmux new-session -d -s github-actions-runner 'bash ./run.sh' | |
" | |
setup-azure-vm: | |
runs-on: ubuntu-latest | |
permissions: write-all | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Azure CLI | |
uses: azure/login@v2 | |
with: | |
creds: ${{ secrets.AZURE_CREDENTIALS }} | |
- name: Create Azure resource group | |
run: az group create --name github-actions-runners --location westus | |
- name: Create SSH public key file | |
run: | | |
mkdir -p $HOME/.ssh | |
echo ${{ vars.SSH_PUBLIC_KEY }} > $HOME/.ssh/id_rsa.pub | |
cat $HOME/.ssh/id_rsa.pub | |
- name: Create Azure SSH Key resource | |
run: | | |
az sshkey create \ | |
--resource-group github-actions-runners \ | |
--name stellar-ssh-key \ | |
--location westus \ | |
--public-key @$HOME/.ssh/id_rsa.pub | |
- name: Create Azure VM | |
run: | | |
az vm create \ | |
--name github-actions-runner \ | |
--resource-group github-actions-runners \ | |
--image Ubuntu2204 \ | |
--public-ip-sku Standard \ | |
--size Standard_B1ms \ | |
--ssh-key-name stellar-ssh-key | |
id: create-vm | |
- name: Get public IP address | |
run: echo ip=$(az vm show --show-details --resource-group github-actions-runners --name github-actions-runner --query publicIps --output tsv) >> $GITHUB_OUTPUT | |
id: get-ip | |
- name: Create a registration token for self-hosted runners | |
run: | | |
gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/vhive-serverless/STeLLAR/actions/runners/registration-token \ | |
| echo token=$(jq -r .token) > $GITHUB_OUTPUT | |
env: | |
GH_TOKEN: ${{ secrets.DEPLOY_SELF_HOSTED_RUNNER_TOKEN }} | |
id: get-registration-token | |
- name: Setup SSH key on current GitHub-hosted runner | |
uses: webfactory/[email protected] | |
with: | |
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} | |
- name: Setup self-hosted runner | |
run: | | |
ssh -o StrictHostKeyChecking=no runner@${{ steps.get-ip.outputs.ip }} " | |
echo 'Installing STeLLAR dependencies' | |
curl -o stellar-setup.sh https://raw.githubusercontent.com/vhive-serverless/STeLLAR/main/scripts/setup.sh | |
chmod +x stellar-setup.sh | |
./stellar-setup.sh | |
echo 'Setup self-hosted runner' | |
mkdir actions-runner && cd actions-runner | |
curl -o actions-runner-linux-x64-2.315.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.315.0/actions-runner-linux-x64-2.315.0.tar.gz | |
tar xzf ./actions-runner-linux-x64-2.315.0.tar.gz | |
./config.sh --url https://github.com/vhive-serverless/STeLLAR --token ${{ steps.get-registration-token.outputs.token }} --name stellar-continuous-azure --labels azure | |
tmux new-session -d -s github-actions-runner 'bash ./run.sh' | |
" | |
setup-gcr-vm: | |
runs-on: ubuntu-latest | |
permissions: write-all | |
steps: | |
- uses: actions/checkout@v4 | |
- id: auth | |
name: Configure GCR credentials | |
uses: google-github-actions/auth@v1 | |
with: | |
credentials_json: ${{ secrets.GCR_CREDENTIALS }} | |
- name: Set up gcloud | |
uses: google-github-actions/setup-gcloud@v1 | |
with: | |
version: ">= 363.0.0" | |
- name: Create a registration token for self-hosted runners | |
run: | | |
gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/vhive-serverless/STeLLAR/actions/runners/registration-token \ | |
| echo token=$(jq -r .token) > $GITHUB_OUTPUT | |
env: | |
GH_TOKEN: ${{ secrets.DEPLOY_SELF_HOSTED_RUNNER_TOKEN }} | |
id: get-registration-token | |
- name: Create GCloud Compute Engine VM | |
run: gcloud compute instances create github-actions-runner-gcr --zone=us-west1-a --image=stellar-continuous-gcr-disk --image-project=stellar-benchmarking --machine-type=e2-small | |
- name: Setup self-hosted runner | |
run: | | |
gcloud compute ssh --zone "us-west1-a" "User@github-actions-runner-gcr" --project "stellar-benchmarking" --command ' | |
sudo rm -r ./actions-runner && | |
echo "Installing STeLLAR dependencies" && | |
curl -o stellar-setup.sh https://raw.githubusercontent.com/vhive-serverless/STeLLAR/main/scripts/setup.sh && | |
chmod +x stellar-setup.sh && | |
./stellar-setup.sh && | |
echo "Setup self-hosted runner" && | |
mkdir actions-runner && cd actions-runner && | |
curl -o actions-runner-linux-x64-2.315.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.315.0/actions-runner-linux-x64-2.315.0.tar.gz && | |
tar xzf ./actions-runner-linux-x64-2.315.0.tar.gz && | |
printf "\nstellar-continuous-gcr\ngcr\n" | ./config.sh --url https://github.com/vhive-serverless/STeLLAR --token ${{ steps.get-registration-token.outputs.token }} && | |
tmux new-session -d -s github-actions-runner-gcr "bash ./run.sh" | |
' |