diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ccc5396..63f56b8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,31 +71,69 @@ jobs: uses: actions/cache@v4 with: path: ~/.cache/pip - key: pip-${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ hashFiles('**/requirements.txt') }} + key: pip-${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ hashFiles('**/requirements*.txt', 'pyproject.toml') }} restore-keys: | pip-${{ runner.os }}-${{ env.PYTHON_VERSION }}- - - name: Install dependencies + - name: Install deps run: | python -m pip install --upgrade pip pip install -r requirements.txt + # optional: extras/dev + if [ -f pyproject.toml ]; then pip install -e .[dev] || pip install -e . ; fi - name: Set PYTHONPATH run: echo "PYTHONPATH=${GITHUB_WORKSPACE}" >> $GITHUB_ENV - - name: Create .env for tests (optional for app runtime) + # Gitea ACT Runner needs this for some reason. + - name: Select Postgres host for runner run: | - printf "KEYWARDEN_POSTGRES_DSN=%s\nKEYWARDEN_SECRET_KEY=%s\n" \ - "${{ env.TEST_POSTGRES_DSN }}" "testsecret" > .env + if [ "${ACT:-}" = "true" ]; then + echo "KEYWARDEN_POSTGRES_HOST=postgres" >> "$GITHUB_ENV" # Gitea (act_runner) + else + echo "KEYWARDEN_POSTGRES_HOST=127.0.0.1" >> "$GITHUB_ENV" # GitHub Actions + fi + - name: Echo DB target + run: echo "DB → ${KEYWARDEN_POSTGRES_HOST:-unset}:${{ env.KEYWARDEN_POSTGRES_PORT }}" + + # Explicit wait (removes race on act_runner) + - name: Wait for Postgres + run: | + for i in {1..60}; do + python - <<'PY' + import os, socket, sys + h=os.environ.get("KEYWARDEN_POSTGRES_HOST","127.0.0.1"); p=int(os.environ.get("KEYWARDEN_POSTGRES_PORT","5432")) + s=socket.socket(); s.settimeout(1) + try: + s.connect((h,p)); print("Postgres is up:", h,p); sys.exit(0) + except Exception as e: + print("waiting:", e); sys.exit(1) + finally: + s.close() + PY + if [ $? -eq 0 ]; then break; fi + sleep 2 + done + - name: Run Alembic migrations env: - KEYWARDEN_POSTGRES_DSN: ${{ env.TEST_POSTGRES_DSN }} + KEYWARDEN_POSTGRES_USER: ${{ env.KEYWARDEN_POSTGRES_USER }} + KEYWARDEN_POSTGRES_PASSWORD: ${{ env.KEYWARDEN_POSTGRES_PASSWORD }} + KEYWARDEN_POSTGRES_HOST: ${{ env.KEYWARDEN_POSTGRES_HOST }} + KEYWARDEN_POSTGRES_PORT: ${{ env.KEYWARDEN_POSTGRES_PORT }} + KEYWARDEN_POSTGRES_DB: ${{ env.KEYWARDEN_POSTGRES_DB }} + KEYWARDEN_POSTGRES_SSL: ${{ env.KEYWARDEN_POSTGRES_SSL }} run: alembic upgrade head - name: Pytest env: - KEYWARDEN_POSTGRES_DSN: ${{ env.TEST_POSTGRES_DSN }} + KEYWARDEN_POSTGRES_USER: ${{ env.KEYWARDEN_POSTGRES_USER }} + KEYWARDEN_POSTGRES_PASSWORD: ${{ env.KEYWARDEN_POSTGRES_PASSWORD }} + KEYWARDEN_POSTGRES_HOST: ${{ env.KEYWARDEN_POSTGRES_HOST }} + KEYWARDEN_POSTGRES_PORT: ${{ env.KEYWARDEN_POSTGRES_PORT }} + KEYWARDEN_POSTGRES_DB: ${{ env.KEYWARDEN_POSTGRES_DB }} + KEYWARDEN_POSTGRES_SSL: ${{ env.KEYWARDEN_POSTGRES_SSL }} run: | pytest -q tests docker-build: