diff --git a/.github/runner/Dockerfile b/.github/runner/Dockerfile new file mode 100644 index 0000000..fecddb5 --- /dev/null +++ b/.github/runner/Dockerfile @@ -0,0 +1,30 @@ +FROM ubuntu:latest + +ARG RUNNER_VERSION="2.323.0" + +# Prevents installdependencies.sh from prompting the user and blocking the image creation +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt update -y && apt upgrade -y && useradd -m docker +RUN apt install -y --no-install-recommends \ + curl jq build-essential libssl-dev libffi-dev python3 python3-venv python3-dev python3-pip \ + # dot net core dependencies + libicu74 libssl3 libkrb5-3 zlib1g libcurl4 + + +RUN cd /home/docker && mkdir actions-runner && cd actions-runner \ + && curl -O -L https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz \ + && tar xzf ./actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz + +RUN chown -R docker ~docker && /home/docker/actions-runner/bin/installdependencies.sh + +COPY start.sh start.sh + +# make the script executable +RUN chmod +x start.sh + +# since the config and run script for actions are not allowed to be run by root, +# set the user to "docker" so all subsequent commands are run as the docker user +USER docker + +ENTRYPOINT ["./start.sh"] \ No newline at end of file diff --git a/.github/runner/docker-compose.yml b/.github/runner/docker-compose.yml new file mode 100644 index 0000000..b533bfa --- /dev/null +++ b/.github/runner/docker-compose.yml @@ -0,0 +1,17 @@ +# docker-compose.yml + +services: + github-runner: + build: + context: . + args: + RUNNER_VERSION: 2.323.0 + container_name: github-runner + env_file: + - .env + volumes: + - runner-work:/home/runner/actions-runner/_work + restart: unless-stopped + +volumes: + runner-work: diff --git a/.github/runner/example.env b/.github/runner/example.env new file mode 100644 index 0000000..6ab2dc8 --- /dev/null +++ b/.github/runner/example.env @@ -0,0 +1,9 @@ + +# Repository name +REPO="Magnus167/rustframe" + +# GitHub runner token +GH_TOKEN="some_token_here" + +# Labels for the runner +RUNNER_LABELS=self-hosted-linux,linux \ No newline at end of file diff --git a/.github/runner/start.sh b/.github/runner/start.sh new file mode 100644 index 0000000..97e8609 --- /dev/null +++ b/.github/runner/start.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +REPOSITORY=$REPO +ACCESS_TOKEN=$GH_TOKEN +LABELS=$RUNNER_LABELS + +# echo "REPO ${REPOSITORY}" +# echo "ACCESS_TOKEN ${ACCESS_TOKEN}" + +REG_TOKEN=$(curl -X POST -H "Authorization: token ${ACCESS_TOKEN}" -H "Accept: application/vnd.github+json" https://api.github.com/repos/${REPOSITORY}/actions/runners/registration-token | jq .token --raw-output) + +cd /home/docker/actions-runner + +./config.sh --url https://github.com/${REPOSITORY} --token ${REG_TOKEN} --labels ${LABELS} + +cleanup() { + echo "Removing runner..." + ./config.sh remove --unattended --token ${REG_TOKEN} +} + +trap 'cleanup; exit 130' INT +trap 'cleanup; exit 143' TERM + +./run.sh & wait $! \ No newline at end of file diff --git a/.github/workflows/run-benchmarks-self-hosted.yml b/.github/workflows/run-benchmarks-self-hosted.yml new file mode 100644 index 0000000..037eca6 --- /dev/null +++ b/.github/workflows/run-benchmarks-self-hosted.yml @@ -0,0 +1,29 @@ +name: Run benchmarks + +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + run-benchmarks: + runs-on: self-hosted-linux + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + + - name: Run benchmarks + run: cargo bench + + - name: Upload benchmark reports + uses: actions/upload-artifact@v4 + with: + name: benchmark-reports-${{ github.sha }} + path: ./target/criterion/ diff --git a/.github/workflows/run-benchmarks.yml b/.github/workflows/run-benchmarks.yml index 42f2b09..b05029e 100644 --- a/.github/workflows/run-benchmarks.yml +++ b/.github/workflows/run-benchmarks.yml @@ -2,9 +2,9 @@ name: Run benchmarks on: workflow_dispatch: - push: - branches: - - main + # push: + # branches: + # - main jobs: run-benchmarks: