Why Fireactions?
Fireactions is designed to be a cost-effective, fast, and secure solution for running self-hosted GitHub runners. It is built on top of Firecracker microVMs, which provide a lightweight and secure environment for running workloads.
Several key features:
Scalable
Pool-based scaling approach. Fireactions always ensure the minimum number of GitHub runners in the pool.Ephemeral
Each virtual machine is created from scratch and destroyed after the job is finished; no state is preserved between jobs, just like with GitHub-hosted runners.Customizable
Define job labels and customize virtual machine resources to fit Your needs.
Why Firecracker?
Firecracker is a lightweight virtual machine monitor (VMM) that uses the Linux Kernel-based Virtual Machine (KVM) to create and manage microVMs. MicroVMs are lightweight, fast, and secure virtual machines that are designed to run a single application or service.
Compared to containers, microVMs provide a higher level of isolation and security, as each microVM runs in its own isolated environment. This makes them ideal for running untrusted workloads, such as CI/CD jobs.
Configuring Fireactions
To start using Fireactions, a few steps have to be performed:
Create and install a GitHub App (see Creating a GitHub App) with the following permissions:
Read access to metadata
Read and write access to actions and organization self-hosted runners
Note down the GitHub App ID as well as Github Organization, and generate a private key. This data will need to be added manually on the VPS in the following file /etc/fireactions/config.yml
using your favorite text editor, for example:
nano /etc/fireactions/config.yml
Example of content:
app_private_key: |
-----BEGIN RSA PRIVATE KEY-----
#
app_id: 12345
organization: MyORG
After configuration is done, the Fireactions service has to be restarted with the following command: systemctl restart fireactions.service
This creates a default configuration with a single pool named default
with a single runner. Check Configuration for more information and further configuration possibilities.
To create a new GitHub workflow, you need to create a new file in the .github/workflows
directory of your repository. The file should have an .yml
extension and contain the following content:
# .github/workflows/test.yaml
name: test
on:
workflow_dispatch:
pull_request:
branches:
- '*'
push:
branches:
- main
jobs:
test:
name: test
runs-on: # The label(s) of the Fireactions pool
- self-hosted
- fireactions
steps:
- name: Example
run: |
echo "Hello, Fireactions!"
This workflow will run on every push to the main branch, pull request, and manual trigger. The job will run on the Example pool, which is the pool label you created in the previous steps while configuring Fireactions.
For more information and configuration options, please check the following: