Skip to content
Draft
Show file tree
Hide file tree
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
49 changes: 49 additions & 0 deletions .github/workflows/lxc-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: build lxc image

on:
push:
branches:
- master
pull_request:
branches:
- master

permissions:
contents: read

jobs:
build-lxc:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6.0.2

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y debootstrap debian-archive-keyring
sudo snap install distrobuilder --classic

- name: Set up Python
uses: actions/setup-python@v6.2.0
with:
python-version: "3.12"

- name: Build Errbot Wheel
run: |
python -m pip install --upgrade pip build
python -m build --wheel
mkdir -p /tmp/errbot-build
cp dist/*.whl /tmp/errbot-build/

- name: Build LXC Image
run: |
mkdir -p out
sudo distrobuilder build-lxc tools/distrobuilder.yaml out/

- name: Upload LXC Artifacts
uses: actions/upload-artifact@v4
with:
name: errbot-lxc-image
path: out/*
retention-days: 7
74 changes: 74 additions & 0 deletions tools/distrobuilder.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
image:
distribution: debian
release: bookworm
description: Errbot Chatbot
architecture: amd64

files:
- path: /tmp/errbot-build
source: /tmp/errbot-build
generator: dump

source:
downloader: debootstrap
url: http://deb.debian.org/debian
keys: []

packages:
manager: apt
update: true
cleanup: true
sets:
- packages:
- python3
- python3-pip
- python3-venv
- git
- build-essential
- libssl-dev
- libffi-dev
- systemd
- systemd-sysv
action: install

actions:
- trigger: post-packages
action: |-
#!/bin/sh
set -e
useradd --create-home --shell /bin/bash errbot

su - errbot -c "python3 -m venv /home/errbot/.venv"

# If a wheel was injected into /tmp/errbot-build, install from it.
if ls /tmp/errbot-build/errbot-*.whl 1> /dev/null 2>&1; then
echo "Installing local Errbot build..."
# Install the wheel with extras
su - errbot -c "/home/errbot/.venv/bin/pip install --no-cache-dir /tmp/errbot-build/errbot-*.whl[irc,XMPP,telegram,slack]"
else
echo "Installing Errbot from PyPI..."
su - errbot -c "/home/errbot/.venv/bin/pip install --no-cache-dir errbot[irc,XMPP,telegram,slack]"
fi

su - errbot -c "/home/errbot/.venv/bin/errbot --init"

- trigger: post-packages
action: |-
#!/bin/sh
set -e
cat <<EOF > /etc/systemd/system/errbot.service
[Unit]
Description=Errbot Chatbot
After=network.target

[Service]
User=errbot
Group=errbot
WorkingDirectory=/home/errbot
ExecStart=/home/errbot/.venv/bin/errbot
Restart=always

[Install]
WantedBy=multi-user.target
EOF
systemctl enable errbot.service
Loading