51 lines
1.8 KiB
YAML
51 lines
1.8 KiB
YAML
name: CI
|
||
|
||
on:
|
||
# Только пуш в master (теги ничего не триггерят).
|
||
push:
|
||
branches: [master]
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
REGISTRY: git.mpakosrv.ru
|
||
IMAGE_NAME: mpakobecex/dispelevilbot-bot
|
||
|
||
jobs:
|
||
lint-test:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.12"
|
||
- name: Установка зависимостей
|
||
run: pip install -r requirements-dev.txt
|
||
# В Forgejo 1.21 `continue-on-error` игнорируется, поэтому неблокирующий
|
||
# режим для black сделан через shell. ruff обязателен.
|
||
- name: Ruff
|
||
run: ruff check .
|
||
- name: Black
|
||
run: black --check . || echo "::warning::black нашёл отличия в форматировании (пока не блокирует)"
|
||
- name: Pytest
|
||
run: pytest -q
|
||
|
||
build-push:
|
||
runs-on: ubuntu-latest
|
||
needs: lint-test
|
||
# Собираем и пушим образ. Автодеплой НЕ делаем — выкатка вручную (test -> prod).
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
- name: Логин в Gitea Registry
|
||
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "$REGISTRY" -u "${{ secrets.REGISTRY_USER }}" --password-stdin
|
||
- name: Сборка и публикация образа
|
||
run: |
|
||
set -e
|
||
IMAGE="$REGISTRY/$IMAGE_NAME"
|
||
SHA="${GITHUB_SHA:-unknown}"
|
||
SHORT_SHA="$(echo "$SHA" | cut -c1-12)"
|
||
TAGS="$IMAGE:$SHORT_SHA $IMAGE:latest"
|
||
ARGS=""
|
||
for t in $TAGS; do ARGS="$ARGS -t $t"; done
|
||
docker build $ARGS .
|
||
for t in $TAGS; do docker push "$t"; done
|