diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9976b67 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.git +.github +*.md +**/__pycache__ diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..cfe09fd --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,35 @@ +name: Docker + +on: + push: + tags: ["v*"] + workflow_dispatch: + +jobs: + image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v4 + - uses: docker/setup-buildx-action@v3 + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/edeev/school_menu + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=raw,value=latest + - uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..eba6bca --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +# Школьный Telegram-бот столовой (aiogram 2). pymorphy2 0.9 не работает на Python 3.11+ +FROM python:3.10-slim +ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 +WORKDIR /app +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +COPY code code +# базы из репозитория — в том /app/db при первом запуске +COPY db /opt/db-seed +COPY docker/entrypoint.sh /entrypoint.sh +VOLUME ["/app/db"] +WORKDIR /app/code +ENTRYPOINT ["sh", "/entrypoint.sh"] diff --git a/README.en.md b/README.en.md index 7ba55fb..846f4f2 100644 --- a/README.en.md +++ b/README.en.md @@ -3,6 +3,7 @@ [Русский](README.md) · **English** [![CI](https://github.com/EDeev/school_menu/actions/workflows/ci.yml/badge.svg)](https://github.com/EDeev/school_menu/actions/workflows/ci.yml) +[![Release](https://img.shields.io/github/v/release/EDeev/school_menu)](https://github.com/EDeev/school_menu/releases) A school cafeteria Telegram bot: every morning it posts the menu from the school website, takes breakfast, lunch and snack orders by class and compiles a summary for the cafeteria. @@ -25,6 +26,9 @@ cd code && BOT_TOKEN=token BOT_ID=bot_id TECH_GROUP_ID=group_id python bot.py Portion weights and calories from Excel are parsed without `eval`: only numbers and `+ - * /` are allowed. +**Docker:** `docker run -d -e BOT_TOKEN=token -e BOT_ID=bot_id -e TECH_GROUP_ID=group_id -v school-menu-db:/app/db ghcr.io/edeev/school_menu` +(same as `git.deev.su/edeev/school_menu`); on first start the databases from the repository are copied into the volume. + ## License School project (2021–2022). The code is open for study; there is no separate license. diff --git a/README.md b/README.md index 593f262..9d80db9 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ **Русский** · [English](README.en.md) [![CI](https://github.com/EDeev/school_menu/actions/workflows/ci.yml/badge.svg)](https://github.com/EDeev/school_menu/actions/workflows/ci.yml) +[![Release](https://img.shields.io/github/v/release/EDeev/school_menu)](https://github.com/EDeev/school_menu/releases) Telegram-бот школьной столовой: каждое утро присылает меню с сайта школы, принимает заказы завтраков, обедов и полдников по классам и собирает сводку для столовой. @@ -25,6 +26,9 @@ cd code && BOT_TOKEN=токен BOT_ID=id_бота TECH_GROUP_ID=id_группы Граммовка и калорийность из Excel разбираются без `eval`: допускаются только числа и `+ - * /`. +**Docker:** `docker run -d -e BOT_TOKEN=токен -e BOT_ID=id_бота -e TECH_GROUP_ID=id_группы -v school-menu-db:/app/db ghcr.io/edeev/school_menu` +(то же — `git.deev.su/edeev/school_menu`); при первом запуске в том копируются базы из репозитория. + ## Лицензия Школьный проект (2021–2022). Код открыт для изучения, отдельной лицензии нет. diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 0000000..e633746 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# BOT_TOKEN, BOT_ID, TECH_GROUP_ID — из окружения +cp -n /opt/db-seed/* /app/db/ 2>/dev/null || true +exec python bot.py