diff --git a/.github/workflows/all_test3.yaml b/.github/workflows/all_test3.yaml new file mode 100644 index 0000000..d764933 --- /dev/null +++ b/.github/workflows/all_test3.yaml @@ -0,0 +1,167 @@ + +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: Pull Docker image explicitly + run: | + docker pull cr.yandex/crp8vh46gd976oq8ipla/${{ github.event.repository.name }}:${{ env.effective_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: 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.effective_tag }}" + + docker run --rm \ + -v /home/runner/prbot_data:/tmp \ + cr.yandex/crp8vh46gd976oq8ipla/${{ github.event.repository.name }}:${{ env.effective_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.effective_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.effective_tag }} \ + bash -c ' + echo "📁 Listing contents of /server:" + ls -lah /server || echo "❌ /server not found" + + 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 "📁 Listing contents of /server SECOND:" + ls -lah /server || echo "❌ /server not found" + + echo "🔧 Copying test config" + cp config-tests-example.yaml config.yaml + cp config-tests-example.yaml config-tests.yaml + + echo "🔧 Listing contents of test config" + ls -lah || echo "❌ /server not found" + + 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 \ No newline at end of file