Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: use self-hosted runners to improve build performance #6

Closed
wants to merge 4 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 73 additions & 9 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ on:
description: 'The service name to build'
required: true
type: string
AWS_EC2_INSTANCE_TYPE:
description: 'The EC2 instance type to start'
required: true
type: string
secrets:
DOCKERHUB_USERNAME:
description: 'DockerHub username for login'
Expand All @@ -29,10 +33,56 @@ on:
SSH_PRIVATE_KEY:
description: 'Service user SSH key for repository checkout'
required: true
GH_PERSONAL_ACCESS_TOKEN:
description: 'GitHub personal access token'
required: true
AWS_ACCESS_KEY_ID:
description: 'AWS access key ID'
required: true
AWS_SECRET_ACCESS_KEY:
description: 'AWS secret access key'
required: true
AWS_REGION:
description: 'AWS region'
required: true
AWS_EC2_IMAGE_ID:
description: 'AWS EC2 image ID'
required: true
AWS_SUBNET_ID:
description: 'AWS subnet ID'
required: true
AWS_SECURITY_GROUP_ID:
description: 'AWS security group ID'
required: true

jobs:
build:
start-runner:
name: Start self-hosted EC2 runner
runs-on: ubuntu-latest
outputs:
label: ${{ steps.start-ec2-runner.outputs.label }}
ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }}
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Start EC2 runner
id: start-ec2-runner
uses: machulav/ec2-github-runner@v2
with:
mode: start
github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
ec2-image-id: ${{ secrets.AWS_EC2_IMAGE_ID }}
ec2-instance-type: ${{ inputs.AWS_EC2_INSTANCE_TYPE }}
subnet-id: ${{ secrets.AWS_SUBNET_ID }}
security-group-id: ${{ secrets.AWS_SECURITY_GROUP_ID }}
build:
name: Build service image
needs: start-runner
runs-on: ${{ needs.start-runner.outputs.label }}

steps:
- name: Login to DockerHub
Expand Down Expand Up @@ -143,14 +193,6 @@ jobs:
. .tvm/bin/activate
tutor distro run-extra-commands

- name: Prepare docker if building MFE
if: ${{ inputs.SERVICE == 'mfe' }}
shell: bash
run: |
echo "[worker.oci]" > buildkit.toml
echo "max-parallelism = 2" >> buildkit.toml
docker buildx create --use --node=max2cpu --driver=docker-container --config=./buildkit.toml

- name: Build service image with no cache
shell: bash
working-directory: ${{ inputs.STRAIN_PATH }}/${{ env.TUTOR_APP_NAME }}
Expand All @@ -169,3 +211,25 @@ jobs:
run: |
. .tvm/bin/activate
tutor images push $SERVICE

stop-runner:
name: Stop self-hosted EC2 runner
needs:
- start-runner
- build
runs-on: ubuntu-latest
if: ${{ always() }}
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Stop EC2 runner
uses: machulav/ec2-github-runner@v2
with:
mode: stop
github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
label: ${{ needs.start-runner.outputs.label }}
ec2-instance-id: ${{ needs.start-runner.outputs.ec2-instance-id }}