Files
workflows/.github/workflows/all_test3.yaml

168 lines
6.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

on:
workflow_call:
inputs:
tag:
description: 'Tag for registry'
type: string
default: latest
force_build:
type: boolean
description: force_build
default: false
jobs:
tests:
runs-on: gpu
env:
effective_tag: ${{ inputs.tag || github.head_ref || github.ref_name }}
steps:
- name: Checkout
uses: actions/checkout@master
- name: Extract Postgres container env vars from Compose
run: |
POSTGRES_CONTAINER=$(awk '/postgres/{f=1} f && /container_name:/ {print $2; exit}' docker-compose-dev.yaml)
POSTGRES_USER=$(awk '/postgres/{f=1} f && /POSTGRES_USER:/ {print $2; exit}' docker-compose-dev.yaml)
POSTGRES_DB=$(awk '/postgres/{f=1} f && /POSTGRES_DB:/ {print $2; exit}' docker-compose-dev.yaml)
echo "Found container: $POSTGRES_CONTAINER"
echo "DB: $POSTGRES_DB, USER: $POSTGRES_USER"
echo "POSTGRES_CONTAINER=$POSTGRES_CONTAINER" >> $GITHUB_ENV
echo "POSTGRES_USER=$POSTGRES_USER" >> $GITHUB_ENV
echo "POSTGRES_DB=$POSTGRES_DB" >> $GITHUB_ENV
- name: Login to Yandex Cloud
uses: yc-actions/yc-cr-login@v2
with:
yc-sa-json-credentials: ${{ secrets.YC_SA_JSON_CREDENTIALS }}
- name: Send PRBot feedback
uses: imgurbot12/prbot@v2
with:
username: ${{ secrets.ACCOUNT_NAME }}
api_token: ${{ secrets.GITHUBTOKEN }}
- name: Prepare prbot_data directory
run: mkdir -p /home/runner/prbot_data && chmod -R 777 /home/runner/prbot_data
- name: Sanitize tag
run: |
TAG="${{ inputs.tag || github.head_ref || github.ref_name }}"
SANITIZED_TAG=$(echo "$TAG" | tr '/' '-')
echo "SANITIZED_TAG=$SANITIZED_TAG" >> $GITHUB_ENV
- name: Pull Docker image explicitly
run: |
docker pull cr.yandex/crp8vh46gd976oq8ipla/${{ github.event.repository.name }}:${{ env.SANITIZED_TAG }}
- name: Setup SSH access to Gitea
run: |
mkdir -p ~/.ssh
echo "${{ secrets.GITEASSH }}" | base64 -d > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H bb.hublab.ru >> ~/.ssh/known_hosts
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> $GITHUB_ENV
#На случай зависших сервисов
- name: Clean up existing Docker Compose services (if any)
run: |
docker compose -f docker-compose-dev.yaml down || true
- name: Start docker-compose services
env:
DOCKER_BUILDKIT: 1
SSH_AUTH_SOCK: ${{ env.SSH_AUTH_SOCK }}
run: |
docker compose -f docker-compose-dev.yaml up -d
- name: Ruff format check (strict)
run: |
echo "Starting Ruff format check with tag: ${{ env.SANITIZED_TAG }}"
docker run --rm \
-v /home/runner/prbot_data:/tmp \
cr.yandex/crp8vh46gd976oq8ipla/${{ github.event.repository.name }}:${{ env.SANITIZED_TAG }} \
bash -c '
pip install ruff
cd /server
echo "=== Ruff format check ==="
ruff format . --check
' \
| tee /home/runner/prbot_data/full_output.txt | prbot
echo "=== Format Output ==="
cat /home/runner/prbot_data/full_output.txt
- name: Run Docker with output redirection
run: |
docker run --rm \
-v /home/runner/prbot_data:/tmp \
cr.yandex/crp8vh46gd976oq8ipla/${{ github.event.repository.name }}:${{ env.SANITIZED_TAG }} \
bash -c '
pip install ruff pytest pytest-github-actions-annotate-failures
echo "=== Ruff ==="
cd /server && ruff check . | sed "s|/server/||g" || true
' \
| tee /home/runner/prbot_data/full_output.txt | prbot
echo "=== Full Output ==="
cat /home/runner/prbot_data/full_output.txt
- name: Create database
run: |
docker exec "$POSTGRES_CONTAINER" bash -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "DROP DATABASE IF EXISTS test"'
docker exec "$POSTGRES_CONTAINER" bash -c 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "CREATE DATABASE test"'
- name: Pytest inside other container via docker exec from main test container
run: |
docker run --rm \
--network hub-network \
-v /home/runner/prbot_data:/tmp \
-e GITEASSH="$(echo "${{ secrets.GITEASSH }}" | tr -d '\n')" \
cr.yandex/crp8vh46gd976oq8ipla/${{ github.event.repository.name }}:${{ env.SANITIZED_TAG }} \
bash -c '
mkdir -p ~/.ssh
echo "$GITEASSH" | base64 -d > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H bb.hublab.ru >> ~/.ssh/known_hosts
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
echo "🔧 Copying test config"
cp config-tests-example.yaml config.yaml
cp config-tests-example.yaml config-tests.yaml
echo "🚀 Creating virtual environment..."
python3 -m venv .venv && \
source .venv/bin/activate && \
echo "✅ Virtual environment activated."
echo "📦 Installing requirements from requirements-dev.txt"
pip install --upgrade pip && \
pip install -r /server/requirements-dev.txt && \
pip install pytest
pip install pytest-github-actions-annotate-failures
echo "🔍 Searching for test files and running them individually"
pytest -v -W always --capture=no \
2>&1 | tee /tmp/test_output.txt
echo "📄 Copying results to PRBot output"
cat /tmp/test_output.txt > /tmp/prbot_output.txt
'
- name: Commit PRBot feedback
if: always()
run: |
prbot commit
- name: Stop docker-compose services
if: always()
run: |
docker compose -f docker-compose-dev.yaml down
- name: Cleanup SSH key
if: always()
run: |
rm -f ~/.ssh/id_rsa ~/.ssh/id_rsa.pub