name: Build and push Docker image "on": push: branches: - main - master workflow_dispatch: env: REGISTRY: git.mpakosrv.ru IMAGE: git.mpakosrv.ru/mpakobecex/mpakoimageaibot jobs: tests: runs-on: ubuntu-latest timeout-minutes: 10 services: postgres: image: postgres:17-alpine env: POSTGRES_DB: mpako_test POSTGRES_USER: mpako POSTGRES_PASSWORD: mpako ports: - 55432:5432 options: >- --health-cmd "pg_isready -U mpako -d mpako_test" --health-interval 5s --health-timeout 5s --health-retries 20 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.13" - name: Install dependencies run: pip install -r requirements-dev.txt - name: Lint run: ruff check . --exclude .venv - name: Tests run: | if getent hosts postgres >/dev/null 2>&1; then export TEST_DATABASE_URL=postgresql://mpako:mpako@postgres:5432/mpako_test else export TEST_DATABASE_URL=postgresql://mpako:mpako@localhost:55432/mpako_test fi pytest -q docker: needs: tests runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout uses: actions/checkout@v4 - name: Login to registry env: REGISTRY_USER: ${{ secrets.REGISTRY_USER }} REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} run: | echo "$REGISTRY_TOKEN" | docker login "$REGISTRY" \ --username "$REGISTRY_USER" \ --password-stdin - name: Build image run: | docker build \ --label org.opencontainers.image.revision=${{ github.sha }} \ -t mpakoimageaibot:latest \ -t "$IMAGE:latest" \ -t "$IMAGE:${GITHUB_SHA}" \ . - name: Push image run: | docker push "$IMAGE:latest" docker push "$IMAGE:${GITHUB_SHA}" - name: Show image run: docker images mpakoimageaibot - name: Logout if: always() run: docker logout "$REGISTRY" || true