mirror of
https://github.com/chatmail/relay.git
synced 2026-05-15 10:24:40 +00:00
Remove the staging VPS-based test-and-deploy workflows and replace them with LXC-local CI. Refactor image caching to use per-container aliases instead of a single relay image. Ensure postfix/dovecot/opendkim restarts after unbound restarts
113 lines
3.6 KiB
YAML
113 lines
3.6 KiB
YAML
name: CI
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
|
|
jobs:
|
|
tox:
|
|
name: isolated chatmaild tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
# Checkout pull request HEAD commit instead of merge commit
|
|
# Otherwise `test_deployed_state` will be unhappy.
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- name: download filtermail
|
|
run: curl -L https://github.com/chatmail/filtermail/releases/download/v0.5.2/filtermail-x86_64 -o /usr/local/bin/filtermail && chmod +x /usr/local/bin/filtermail
|
|
- name: run chatmaild tests
|
|
working-directory: chatmaild
|
|
run: pipx run tox
|
|
|
|
scripts:
|
|
name: deploy-chatmail tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: initenv
|
|
run: scripts/initenv.sh
|
|
|
|
- name: append venv/bin to PATH
|
|
run: echo venv/bin >>$GITHUB_PATH
|
|
|
|
- name: run formatting checks
|
|
run: cmdeploy fmt -v
|
|
|
|
- name: run deploy-chatmail offline tests
|
|
run: pytest --pyargs cmdeploy
|
|
|
|
lxc-test:
|
|
name: LXC deploy and test
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 15
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
- name: install incus
|
|
run: sudo apt-get update && sudo apt-get install -y incus
|
|
|
|
- name: initialise incus
|
|
run: |
|
|
sudo systemctl stop docker.socket docker || true
|
|
sudo iptables -P FORWARD ACCEPT
|
|
sudo sysctl -w fs.inotify.max_user_instances=65535
|
|
sudo sysctl -w fs.inotify.max_user_watches=65535
|
|
sudo incus admin init --minimal --quiet
|
|
sudo usermod -aG incus-admin "$USER"
|
|
|
|
- name: initenv
|
|
run: scripts/initenv.sh
|
|
|
|
- name: append venv/bin to PATH
|
|
run: echo venv/bin >>$GITHUB_PATH
|
|
|
|
- name: restore cached images
|
|
id: cache-images
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
/tmp/localchat-base.tar.gz
|
|
/tmp/localchat-ns.tar.gz
|
|
/tmp/localchat-test0.tar.gz
|
|
/tmp/localchat-test1.tar.gz
|
|
lxconfigs/id_localchat*
|
|
key: incus-contain-v2-${{ runner.os }}-${{ github.ref_name }}
|
|
restore-keys: |
|
|
incus-contain-v2-${{ runner.os }}-${{ github.ref_name }}-
|
|
incus-contain-v2-${{ runner.os }}-main-
|
|
incus-contain-v2-${{ runner.os }}-
|
|
|
|
- name: import cached images
|
|
run: |
|
|
for alias in localchat-base localchat-ns localchat-test0 localchat-test1; do
|
|
if [ -f /tmp/$alias.tar.gz ]; then
|
|
sg incus-admin -c "incus --quiet image import /tmp/$alias.tar.gz --alias $alias" || true
|
|
fi
|
|
done
|
|
|
|
- name: cmdeploy lxc-test
|
|
run: sg incus-admin -c 'cmdeploy lxc-test -vv'
|
|
|
|
- name: show container logs on failure
|
|
if: failure() || cancelled()
|
|
run: |
|
|
for c in test0-localchat test1-localchat; do
|
|
echo "::group::$c journal (warnings+errors)"
|
|
sg incus-admin -c "incus exec $c -- journalctl -p warning --no-pager -n200" 2>/dev/null || echo "no log"
|
|
echo "::endgroup::"
|
|
echo "::group::$c failed services"
|
|
sg incus-admin -c "incus exec $c -- systemctl --no-pager --failed" || true
|
|
echo "::endgroup::"
|
|
done
|
|
|
|
- name: export images for cache
|
|
if: always()
|
|
run: |
|
|
for alias in localchat-base localchat-ns localchat-test0 localchat-test1; do
|
|
sg incus-admin -c "incus --quiet image export $alias /tmp/$alias" || true
|
|
done
|