54 lines
2.1 KiB
YAML
54 lines
2.1 KiB
YAML
name: CI
|
||
|
||
on:
|
||
# Без под-фильтров: срабатывает на любой push (ветки и теги). Комбинация
|
||
# branches+tags в Forgejo не поддерживается и помечает workflow как проблемный.
|
||
push:
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
REGISTRY: git.mpakosrv.ru
|
||
IMAGE_NAME: mpakobecx/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"
|
||
case "${GITHUB_REF:-}" in
|
||
refs/tags/*) TAGS="$TAGS $IMAGE:${GITHUB_REF_NAME:-${GITHUB_REF#refs/tags/}}" ;;
|
||
esac
|
||
ARGS=""
|
||
for t in $TAGS; do ARGS="$ARGS -t $t"; done
|
||
docker build $ARGS .
|
||
for t in $TAGS; do docker push "$t"; done
|