diff --git a/.github/workflows/lxc-build.yml b/.github/workflows/lxc-build.yml new file mode 100644 index 000000000..9f902fa22 --- /dev/null +++ b/.github/workflows/lxc-build.yml @@ -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 diff --git a/tools/distrobuilder.yaml b/tools/distrobuilder.yaml new file mode 100644 index 000000000..86e622504 --- /dev/null +++ b/tools/distrobuilder.yaml @@ -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 < /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