Merge branch 'release/4.0' into refactor/frontend-vue
# Conflicts: # .gitignore # web.py
This commit is contained in:
71 files changed
+3173
-1673
No files matched your search
@@ -0,0 +1,96 @@
|
||||
name: Backend
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "**.py"
|
||||
- "requirements*.txt"
|
||||
- "pyproject.toml"
|
||||
- "Dockerfile"
|
||||
- ".gitea/workflows/backend.yaml"
|
||||
pull_request:
|
||||
paths:
|
||||
- "**.py"
|
||||
- "requirements*.txt"
|
||||
- "pyproject.toml"
|
||||
- "Dockerfile"
|
||||
- ".gitea/workflows/backend.yaml"
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
PYTHON_VERSION: "3.13"
|
||||
RUFF_VERSION: "0.16.4"
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Lint i formatowanie
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
- name: Instalacja ruff
|
||||
run: pip install --no-cache-dir "ruff==${RUFF_VERSION}"
|
||||
|
||||
- name: Reguły lintera
|
||||
run: ruff check --output-format=github .
|
||||
|
||||
- name: Zgodność z formatterem
|
||||
run: ruff format --check --diff .
|
||||
|
||||
test:
|
||||
name: Testy i kontrakt API
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
cache: pip
|
||||
|
||||
# Zależności instalują się z gotowych kółek - kompilator nie jest
|
||||
# potrzebny. ffmpeg i libopus są wymagane dopiero przy odtwarzaniu,
|
||||
# a testy nie dotykają warstwy audio.
|
||||
- name: Instalacja zależności
|
||||
run: pip install -r requirements.txt
|
||||
|
||||
- name: Testy jednostkowe
|
||||
run: python -m unittest discover -s tests -t . -v
|
||||
|
||||
- name: Kontrola składni całego pakietu
|
||||
run: python -m compileall -q zyrarbot main.py
|
||||
|
||||
image:
|
||||
name: Testowy build obrazu
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint, test]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Budowa obrazu backendu
|
||||
run: docker build --tag zyrarbot-api:ci .
|
||||
|
||||
# Sam start procesu to za mało - panel łączy się z API po sieci, więc
|
||||
# sprawdzamy, że kontener faktycznie odpowiada. Zapytanie leci z jego
|
||||
# wnętrza, żeby nie zależeć od narzędzi zainstalowanych na runnerze.
|
||||
- name: Kontener odpowiada na API
|
||||
run: |
|
||||
docker run -d --name zyrarbot-ci -e DISCORD_TOKEN=ci-dummy zyrarbot-api:ci
|
||||
probe="import json,urllib.request;json.load(urllib.request.urlopen('http://localhost:8000/api/status',timeout=2))"
|
||||
for i in $(seq 1 30); do
|
||||
if docker exec zyrarbot-ci python -c "$probe" 2>/dev/null; then
|
||||
echo "API odpowiedziało po ${i}s"
|
||||
docker rm -f zyrarbot-ci
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
echo "::error::API nie odpowiedziało w ciągu 30 sekund"
|
||||
docker logs zyrarbot-ci
|
||||
docker rm -f zyrarbot-ci
|
||||
exit 1
|
||||
Reference in new issue
Block a user