diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 348f271..1b8f6ec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,11 +19,12 @@ jobs: mkcert -install mkcert -cert-file certs/localhost.pem -key-file certs/localhost-key.pem localhost 127.0.0.1 ::1 - - name: Cache certificates - uses: actions/cache/save@v4 + - name: Upload certificates + uses: christopherHX/gitea-upload-artifact@v4 with: - path: certs - key: certs-${{ runner.os }}-${{ github.sha }} + name: ssl-certs + path: certs/ + retention-days: 1 frontend: name: Frontend CI @@ -37,10 +38,10 @@ jobs: - uses: oven-sh/setup-bun@v2 - name: Restore certificates - uses: actions/cache/restore@v4 + uses: christopherHX/gitea-download-artifact@v4 with: - path: certs - key: certs-${{ runner.os }}-${{ github.sha }} + name: ssl-certs + path: certs/ - name: Install dependencies run: bun install --frozen-lockfile @@ -61,15 +62,15 @@ jobs: runs-on: ubuntu-latest needs: setup-environment services: - postgres: + db: image: postgres:16-alpine env: - POSTGRES_DB: piku - POSTGRES_USER: user + POSTGRES_DB: piku__test + POSTGRES_USER: test POSTGRES_PASSWORD: password123 ports: - - 5432:5432 - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + - 5442:5432 + options: --tmpfs /var/lib/postgresql/data --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 defaults: run: working-directory: ./backend @@ -82,18 +83,28 @@ jobs: cache-dependency-glob: "backend/uv.lock" - name: Restore certificates - uses: actions/cache/restore@v4 + uses: christopherHX/gitea-download-artifact@v4 with: - path: certs - key: certs-${{ runner.os }}-${{ github.sha }} + name: ssl-certs + path: certs/ - - name: Setup Environment + - name: Setup & Test run: | cp ../.env.example ../.env uv sync - - name: Lint & Test - run: | + export DB_NAME="piku__test" + export DB_USER="test" + export DB_PASSWORD="password123" + + if [ "$GITEA_ACTIONS" = "true" ]; then + export DB_HOST="db" + export DB_PORT="5432" + else + export DB_HOST="127.0.0.1" + export DB_PORT="5442" + fi + uv run ruff check uv run python manage.py test @@ -101,23 +112,27 @@ jobs: name: E2E Tests runs-on: ubuntu-latest needs: setup-environment + # Skipping on Gitea pushes until cache server is configured + if: github.server_url == 'https://github.com' || github.event_name == 'pull_request' steps: - uses: actions/checkout@v4 - name: Restore Certificates - uses: actions/cache/restore@v4 + uses: christopherHX/gitea-download-artifact@v4 with: - path: certs - key: certs-${{ runner.os }}-${{ github.sha }} + name: ssl-certs + path: certs/ - name: Setup Tools uses: astral-sh/setup-uv@v5 - uses: oven-sh/setup-bun@v2 - - name: Cache Playwright id: playwright-cache + # Disable cache when not using GitHub Actions because the runner spends ~3mins trying to upload the cache and failing + # TODO: setup cache server in Gitea + if: github.server_url == 'https://github.com' uses: actions/cache@v4 with: path: ~/.cache/ms-playwright @@ -140,7 +155,7 @@ jobs: - name: Upload Playwright Report if: always() - uses: actions/upload-artifact@v4 + uses: christopherHX/gitea-upload-artifact@v4 with: name: playwright-report path: frontend/playwright-report/ diff --git a/scripts/run-e2e.sh b/scripts/run-e2e.sh index 45c31b7..c00ed5b 100755 --- a/scripts/run-e2e.sh +++ b/scripts/run-e2e.sh @@ -55,6 +55,18 @@ until $CONTAINER_BIN exec "$DB_NAME" pg_isready -U "${DB_USER:-test}" >/dev/null done export PIKU_ENV_FILE="$ENV_FILE" + +# NOTE: When running in Gitea Actions (within container), We must ponint DB and mail to the internal docker host instead. +if [ "$GITEA_ACTIONS" = "true" ]; then + sudo apt-get update && sudo apt-get install -y iproute2 + # Sample: "default via dev proto dhcp src metric 100" + HOST_IP=$(ip route show default | awk '/default/ {print $3}') + echo "Running on Gitea. Internal Docker host... $HOST_IP" + + export DB_HOST=$HOST_IP + export EMAIL_HOST=$HOST_IP +fi + echo "Starting Backend..." mkdir -p ./tmp/logs (