From f55cd26277ab38186ac52956deb4119241deb719 Mon Sep 17 00:00:00 2001 From: Aleksandr Meshchriakov Date: Tue, 28 Apr 2026 11:23:36 +0200 Subject: [PATCH] ci: expose dev manual actions on default branch --- .gitea/workflows/ci-cd.yml | 85 +++++++++++++++++++++++++++++++------- 1 file changed, 70 insertions(+), 15 deletions(-) diff --git a/.gitea/workflows/ci-cd.yml b/.gitea/workflows/ci-cd.yml index 45b252e..da4085c 100644 --- a/.gitea/workflows/ci-cd.yml +++ b/.gitea/workflows/ci-cd.yml @@ -10,15 +10,31 @@ on: branches: - main - dev + workflow_dispatch: + inputs: + manual_action: + description: "Manual action: dokploy_start or cleanup_dev_database" + required: true + default: "dokploy_start" + dokploy_target: + description: "Dokploy dev target: all, web, or celery" + required: true + default: "all" + cleanup_confirm: + description: "Type CLEAN_DEV_DB to drop and recreate the dev public schema" + required: false + default: "" env: PYTHON_VERSION: "3.11" + UV_VERSION: "0.7.2" + PIP_DISABLE_PIP_VERSION_CHECK: "1" jobs: lint: name: Code Quality Checks runs-on: ubuntu-latest - if: ${{ !contains(github.event.head_commit.message, '#no_lint') }} + if: ${{ github.event_name != 'workflow_dispatch' && !contains(github.event.head_commit.message, '#no_lint') }} env: TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }} TG_CHANNEL: ${{ secrets.TG_CHANNEL }} @@ -39,15 +55,20 @@ jobs: add-apt-repository -y ppa:deadsnakes/ppa apt-get update apt-get install -y python3.11 python3.11-venv - curl -LsSf https://astral.sh/uv/install.sh | sh - name: Create virtual environment and install dependencies run: | set -euo pipefail - export PATH="$HOME/.local/bin:$PATH" - uv venv --python python3.11 + python3.11 -m venv .venv . .venv/bin/activate - uv sync --dev --frozen + python -m pip install "uv==${UV_VERSION}" + uv sync \ + --dev \ + --frozen \ + --active \ + --python "$(command -v python3.11)" \ + --no-managed-python \ + --no-python-downloads - name: Run Ruff linting run: | @@ -63,6 +84,7 @@ jobs: - name: Telegram notify (lint failed) if: failure() + continue-on-error: true run: | set -euo pipefail if [ -z "${TG_BOT_KEY:-}" ] || [ -z "${TG_CHANNEL:-}" ]; then @@ -75,14 +97,18 @@ jobs: sha=${GITHUB_SHA} actor=${GITHUB_ACTOR}" - curl -fsS -X POST "https://api.telegram.org/bot${TG_BOT_KEY}/sendMessage" \ + curl -fsS \ + --connect-timeout 5 \ + --max-time 15 \ + --retry 1 \ + -X POST "https://api.telegram.org/bot${TG_BOT_KEY}/sendMessage" \ -d "chat_id=${TG_CHANNEL}" \ --data-urlencode "text=${MSG}" test: name: Run Tests runs-on: ubuntu-latest - if: ${{ !contains(github.event.head_commit.message, '#no_test') }} + if: ${{ github.event_name != 'workflow_dispatch' && !contains(github.event.head_commit.message, '#no_test') }} env: TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }} TG_CHANNEL: ${{ secrets.TG_CHANNEL }} @@ -103,17 +129,22 @@ jobs: add-apt-repository -y ppa:deadsnakes/ppa apt-get update apt-get install -y python3.11 python3.11-venv - curl -LsSf https://astral.sh/uv/install.sh | sh - name: Create virtual environment and install dependencies run: | set -euo pipefail - export PATH="$HOME/.local/bin:$PATH" - uv venv --python python3.11 + python3.11 -m venv .venv . .venv/bin/activate - uv sync --dev --frozen + python -m pip install "uv==${UV_VERSION}" + uv sync \ + --dev \ + --frozen \ + --active \ + --python "$(command -v python3.11)" \ + --no-managed-python \ + --no-python-downloads - - name: Run Django tests + - name: Run pytest suite env: DJANGO_SETTINGS_MODULE: settings.test SECRET_KEY: test-secret-key-for-ci @@ -121,10 +152,11 @@ jobs: set -euo pipefail . .venv/bin/activate export PYTHONPATH="${PWD}/src:${PYTHONPATH:-}" - python src/manage.py test tests --verbosity=2 + python -m pytest tests --ignore=tests/test_api_inventory_e2e.py -q - name: Telegram notify (test failed) if: failure() + continue-on-error: true run: | set -euo pipefail if [ -z "${TG_BOT_KEY:-}" ] || [ -z "${TG_CHANNEL:-}" ]; then @@ -137,7 +169,11 @@ jobs: sha=${GITHUB_SHA} actor=${GITHUB_ACTOR}" - curl -fsS -X POST "https://api.telegram.org/bot${TG_BOT_KEY}/sendMessage" \ + curl -fsS \ + --connect-timeout 5 \ + --max-time 15 \ + --retry 1 \ + -X POST "https://api.telegram.org/bot${TG_BOT_KEY}/sendMessage" \ -d "chat_id=${TG_CHANNEL}" \ --data-urlencode "text=${MSG}" @@ -147,6 +183,7 @@ jobs: needs: [lint, test] if: | always() && + github.event_name != 'workflow_dispatch' && needs.lint.result == 'success' && needs.test.result == 'success' env: @@ -154,6 +191,7 @@ jobs: TG_CHANNEL: ${{ secrets.TG_CHANNEL }} steps: - name: Telegram notify (lint+test success) + continue-on-error: true env: COMMIT_MESSAGE: ${{ github.event.head_commit.message }} run: | @@ -169,6 +207,23 @@ jobs: actor=${GITHUB_ACTOR} commit=${COMMIT_MESSAGE:-n/a}" - curl -fsS -X POST "https://api.telegram.org/bot${TG_BOT_KEY}/sendMessage" \ + curl -fsS \ + --connect-timeout 5 \ + --max-time 15 \ + --retry 1 \ + -X POST "https://api.telegram.org/bot${TG_BOT_KEY}/sendMessage" \ -d "chat_id=${TG_CHANNEL}" \ --data-urlencode "text=${MSG}" + + manual_actions_require_dev: + name: Manual Actions Require Dev Branch + runs-on: ubuntu-latest + if: ${{ github.event_name == 'workflow_dispatch' && github.ref != 'refs/heads/dev' }} + + steps: + - name: Explain manual action branch + run: | + set -euo pipefail + echo "Manual actions are implemented in the dev workflow." + echo "Run this workflow with branch/ref dev." + exit 1