diff --git a/.github/workflows/deploy-pr.yaml b/.github/workflows/deploy-pr.yaml index 56938bd..0228e16 100644 --- a/.github/workflows/deploy-pr.yaml +++ b/.github/workflows/deploy-pr.yaml @@ -12,25 +12,7 @@ jobs: test: name: Run Python Tests if: github.event.action != 'closed' - runs-on: ubuntu-latest - - steps: - - name: Check out repository code - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - - - name: Run tests with pytest - run: pytest - working-directory: ./7project/backend + uses: ./.github/workflows/run-tests.yml build: if: github.event.action != 'closed' diff --git a/.github/workflows/deploy-prod.yaml b/.github/workflows/deploy-prod.yaml index 7f99e56..0bdfefb 100644 --- a/.github/workflows/deploy-prod.yaml +++ b/.github/workflows/deploy-prod.yaml @@ -23,26 +23,7 @@ concurrency: jobs: test: name: Run Python Tests - if: github.event.action != 'closed' - runs-on: ubuntu-latest - - steps: - - name: Check out repository code - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - - - name: Run tests with pytest - run: pytest - working-directory: ./7project/backend + uses: ./.github/workflows/run-tests.yml build: name: Build and push image (reusable) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index a813431..ff3ad3e 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -2,48 +2,31 @@ name: Run Python Tests permissions: contents: read -# ----------------- -# --- Triggers ---- -# ----------------- -# This section defines when the workflow will run. on: - # Run on every push to the 'main' branch - push: - branches: [ "main" ] - # Also run on every pull request that targets the 'main' branch - pull_request: - branches: [ "main" ] + workflow_call: -# ----------------- -# ------ Jobs ----- -# ----------------- -# A workflow is made up of one or more jobs that can run in parallel or sequentially. jobs: build-and-test: runs-on: ubuntu-latest + # 1) Start a MariaDB service container for tests services: + # The label 'mariadb' becomes the hostname mariadb: image: mariadb:11.4 env: MARIADB_ROOT_PASSWORD: rootpw - MARIADB_DATABASE: group_project # Using the DB name your app expects + # This DB name now matches what your app expects + MARIADB_DATABASE: group_project MARIADB_USER: appuser MARIADB_PASSWORD: apppass - ports: - - 3306:3306 - # Healthcheck ensures the job only starts when DB is ready - options: >- - --health-cmd="mysqladmin ping -h 127.0.0.1 -u root -prootpw --silent" - --health-interval=5s - --health-timeout=2s - --health-retries=20 - # This is the job-level 'env' block - # It will be used by all steps (alembic, pytest, etc.) + # 2) Expose DB connection settings to steps env: - MARIADB_HOST: 127.0.0.1 - MARIADB_PORT: "3306" + # Use the service label 'mariadb' as the host + MARIADB_HOST: mariadb + MARIADB_PORT: "3306" # This is the internal port, which is correct + # Match the database name from the service MARIADB_DB: group_project MARIADB_USER: appuser MARIADB_PASSWORD: apppass @@ -57,26 +40,21 @@ jobs: with: python-version: '3.11' + - name: Add test dependencies to requirements + run: | + echo "pytest==8.4.2" >> ./7project/backend/requirements.txt + echo "pytest-asyncio==1.2.0" >> ./7project/backend/requirements.txt + - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r requirements.txt + pip install -r ./7project/backend/requirements.txt - # This step will now wait for the healthcheck to pass - # and will use the job-level 'env' block - name: Run Alembic migrations run: | alembic upgrade head working-directory: ./7project/backend - # This step-level 'env' block overrides any local .env - # file that your pytest setup might be loading - name: Run tests with pytest - env: - MARIADB_HOST: 127.0.0.1 - MARIADB_PORT: "3306" - MARIADB_DB: group_project - MARIADB_USER: appuser - MARIADB_PASSWORD: apppass run: pytest working-directory: ./7project/backend \ No newline at end of file