Skip to content

GitHub wf on self-hosted runner #48

GitHub wf on self-hosted runner

GitHub wf on self-hosted runner #48

name: e2c-runner-tests-310
on:
pull_request:
types: [opened, synchronize, reopened, labeled]
jobs:
start-runner:
if: github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'to-test-gpu')
name: start-runner
runs-on: ubuntu-latest
outputs:
label: ${{ steps.start-ec2-runner.outputs.label }}
ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }}
job-ran: ${{ steps.set-ran.outputs.ran }}
steps:
- id: set-ran
run: echo "::set-output name=ran::true"
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_KEY_SECRET }}
aws-region: ${{ vars.AWS_REGION }}
- name: Start EC2 runner
id: start-ec2-runner
uses: machulav/ec2-github-runner@v2
with:
mode: start
github-token: ${{ secrets.GH_TOKEN }}
ec2-image-id: ${{ vars.AWS_IMAGE_ID }}
ec2-instance-type: ${{ vars.AWS_INSTANCE_TYPE }}
subnet-id: ${{ vars.AWS_SUBNET }}
security-group-id: ${{ vars.AWS_SECURITY_GROUP }}
ubuntu-tests-310:
name: ubuntu-tests-310
needs: start-runner
runs-on: ${{ needs.start-runner.outputs.label }}
defaults:
run:
shell: bash
working-directory: ${{ vars.WORKING_DIR }}
strategy:
matrix:
python-version: ['3.10']
env:
WORKING_DIR: ${{ vars.WORKING_DIR }}
POETRY_CACHE_DIR: ${{ vars.WORKING_DIR }}
outputs:
job-ran: ${{ steps.set-ran.outputs.ran }}
steps:
- id: set-ran
run: echo "::set-output name=ran::true"
- uses: actions/checkout@v4
with:
fetch-depth: 1 # no need for the history
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install ffmpeg (Ubuntu)
if: startsWith(matrix.os, 'ubuntu')
run: sudo apt-get update && sudo apt-get install -y ffmpeg
shell: bash
- name: Install Poetry
uses: snok/install-poetry@v1
with:
version: 1.7.1
virtualenvs-create: true
virtualenvs-in-project: true
- name: Check available space
run: |
df -h
shell: bash
- name: Echo python info
run: |
python --version
which python
shell: bash
- name: Copy senselab directory to current directory
run: |
cp -r /actions-runner/_work/senselab/senselab .
- name: Install dependencies with Poetry
run: |
cd senselab
poetry env use ${{ matrix.python-version }}
poetry run pip install iso-639
poetry install --with dev
shell: bash
- name: Check poetry info
run: |
cd senselab
poetry env info
poetry --version
shell: bash
- name: Check NVIDIA SMI details
run: |
cd senselab
poetry run nvidia-smi
poetry run nvidia-smi -L
poetry run nvidia-smi -q -d Memory
shell: bash
- name: Prepare cache folder for pytest
run: mkdir -p $WORKING_DIR/pytest/temp
shell: bash
- name: Run unit tests
id: run-tests
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
HF_TOKEN: ${{ secrets.HF_TOKEN }}
run: >
cd senselab && poetry run pytest \
--rootdir=$WORKING_DIR/pytest \
--basetemp=$WORKING_DIR/pytest/temp \
--junitxml=pytest.xml \
--cov-report=term-missing:skip-covered \
--cov-report=xml:coverage.xml \
--cov=src src/tests \
--log-level=DEBUG \
--verbose
shell: bash
stop-runner:
name: stop-runner
needs:
- start-runner # waits for the EC2 instance to be created
- ubuntu-tests-310 # waits for the actual job to finish
runs-on: ubuntu-latest
if: ${{ needs.start-runner.outputs.job-ran == 'true' && needs.ubuntu-tests-310.outputs.job-ran == 'true' || failure() }} # required to stop the runner even if an error occurred in previous jobs
steps:
- name: Check available space
run: |
df -h
shell: bash
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_KEY_SECRET }}
aws-region: ${{ vars.AWS_REGION }}
- name: Stop EC2 runner
uses: machulav/ec2-github-runner@v2
with:
mode: stop
github-token: ${{ secrets.GH_TOKEN }}
label: ${{ needs.start-runner.outputs.label }}
ec2-instance-id: ${{ needs.start-runner.outputs.ec2-instance-id }}