Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(ci): Update tests action to run django unit tests. #164

Closed
wants to merge 31 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
66995ad
Update tests action to run django unit tests.
fergmac Nov 6, 2024
8c293be
Merge branch 'main' into chore/ci/unit-tests
fergmac Nov 6, 2024
8110e4b
Comment out builds and deploys.
fergmac Nov 7, 2024
67e4831
Comment out build job.
fergmac Nov 7, 2024
7cee3d9
Comment out test event check.
fergmac Nov 7, 2024
fb7c395
🙃
fergmac Nov 7, 2024
2a24709
Comment out check for deploys.
fergmac Nov 7, 2024
aecd1ef
Add GDAL setup.
fergmac Nov 7, 2024
5eae848
Pin version of setuptools.
fergmac Nov 7, 2024
05b6c05
Split out python deps.
fergmac Nov 7, 2024
9f0d3cd
Add numpy.
fergmac Nov 7, 2024
21c0bb8
Uninstall setuptools first.
fergmac Nov 7, 2024
39ffcfe
Use slim python version.
fergmac Nov 7, 2024
3886e32
Run tests in docker container.
fergmac Nov 7, 2024
14f477d
Update timeout.
fergmac Nov 7, 2024
8b78b80
Update docker remove container flag.
fergmac Nov 7, 2024
ba7717e
Add db service.
fergmac Nov 7, 2024
38c9824
Uncomment database service.
fergmac Nov 7, 2024
2752896
Update test database.
fergmac Nov 7, 2024
f551e13
Remove args for service running in the same container.
fergmac Nov 7, 2024
0233e5d
Add db host.
fergmac Nov 7, 2024
6164c98
Inline docker command.
fergmac Nov 7, 2024
8eac22e
Update db host.
fergmac Nov 7, 2024
5e096ce
Update database vars.
fergmac Nov 7, 2024
1db557a
Comment vars.
fergmac Nov 7, 2024
c1b21de
Resolve merge conflicts.
fergmac Nov 15, 2024
0843822
Comment check for code changes.
fergmac Nov 15, 2024
0051f5a
Add some logs.
fergmac Nov 15, 2024
02cea69
Comment out dockerfile env vars.
fergmac Nov 19, 2024
a502ad5
Merge branch 'main' into chore/ci/unit-tests
fergmac Nov 25, 2024
79dd6ae
Merge branch 'main' into chore/ci/unit-tests
fergmac Nov 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 79 additions & 80 deletions .github/workflows/.deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,25 +54,24 @@ jobs:
-p S3_HOST=${{ secrets.S3_HOST }}
-p S3_ROOT_BUCKET=${{ secrets.S3_ROOT_BUCKET }}

minio:
name: Minio
needs: [ init ]
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest
steps:
- name: Deploy Minio
uses: bcgov-nr/[email protected]
with:
oc_namespace: ${{ vars.OC_NAMESPACE }}
oc_server: ${{ vars.OC_SERVER }}
oc_token: ${{ secrets.OC_TOKEN }}
oc_version: "4.14.37"
file: minio/openshift.deploy.yml
parameters:
-p NAME_SUFFIX=${{ inputs.target }}
-p IMAGE_TAG=${{ inputs.tag }}
# ${{ inputs.environment && '' || '-p MINIO_DATA_DIR=/tmp/data' }}
# ${{ inputs.environment && '' || '-p DEST_PVC_SIZE=1Mi' }}
# minio:
# name: Minio
# needs: [ init ]
# runs-on: ubuntu-latest
# steps:
# - name: Deploy Minio
# uses: bcgov-nr/[email protected]
# with:
# oc_namespace: ${{ vars.OC_NAMESPACE }}
# oc_server: ${{ vars.OC_SERVER }}
# oc_token: ${{ secrets.OC_TOKEN }}
# oc_version: "4.14.37"
# file: minio/openshift.deploy.yml
# parameters:
# -p NAME_SUFFIX=${{ inputs.target }}
# -p IMAGE_TAG=${{ inputs.tag }}
# ${{ inputs.environment && '' || '-p MINIO_DATA_DIR=/tmp/data' }}
# ${{ inputs.environment && '' || '-p DEST_PVC_SIZE=1Mi' }}

database:
name: Database
Expand All @@ -99,66 +98,66 @@ jobs:
-p LIMIT_CPU=500m
-p LIMIT_MEMORY=1Gi

backend:
name: Backend
needs: [ init, database ]
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest
steps:
- name: Deploy Backend
uses: bcgov-nr/[email protected]
with:
oc_namespace: ${{ vars.OC_NAMESPACE }}
oc_server: ${{ vars.OC_SERVER }}
oc_token: ${{ secrets.OC_TOKEN }}
oc_version: "4.14.37"
file: backend/openshift.deploy.yml
parameters:
-p NAME_SUFFIX=${{ inputs.target }}
-p IMAGE_TAG=${{ inputs.tag }}
-p E_LICENSING_URL=${{ vars.E_LICENSING_URL }}
-p DB_REPLICATE=${{ vars.DB_REPLICATE }}
-p DJANGO_DEBUG=${{ vars.DJANGO_DEBUG }}
-p ENABLE_ADDITIONAL_DOCUMENTS=${{ vars.ENABLE_ADDITIONAL_DOCUMENTS }}
-p S3_PRIVATE_BUCKET=${{ vars.S3_PRIVATE_BUCKET }}
-p S3_PRIVATE_HOST=${{ vars.S3_PRIVATE_HOST }}
-p S3_WELL_EXPORT_BUCKET=${{ vars.S3_WELL_EXPORT_BUCKET }}
-p SSO_AUDIENCE=${{ vars.SSO_AUDIENCE }}
-p SSO_AUTH_HOST=${{ vars.SSO_AUTH_HOST }}
-p SSO_CLIENT=${{ vars.SSO_CLIENT }}
-p SSO_IDP_HINT=${{ vars.SSO_IDP_HINT }}
-p SSO_PORT=${{ vars.SSO_PORT }}
-p SSO_PUBKEY=${{ vars.SSO_PUBKEY }}
-p SSO_REALM=${{ vars.SSO_REALM }}
-p SSO_TEST_AUDIENCE=${{ vars.SSO_TEST_AUDIENCE }}
-p SSO_TEST_CLIENT=${{ vars.SSO_TEST_CLIENT }}
-p GDAL_LIBRARY_PATH=${{ vars.GDAL_LIBRARY_PATH }}
-p GEOS_LIBRARY_PATH=${{ vars.GEOS_LIBRARY_PATH }}
-p S3_AQUIFER_BUCKET=${{ vars.S3_AQUIFER_BUCKET }}
-p S3_REGISTRANT_BUCKET=${{ vars.S3_REGISTRANT_BUCKET }}
-p S3_PRIVATE_ROOT_BUCKET=${{ vars.S3_PRIVATE_ROOT_BUCKET }}
-p S3_PRIVATE_AQUIFER_BUCKET=${{ vars.S3_PRIVATE_AQUIFER_BUCKET }}
-p S3_PRIVATE_REGISTRANT_BUCKET=${{ vars.S3_PRIVATE_REGISTRANT_BUCKET }}
-p S3_PRIVATE_WELL_BUCKET=${{ vars.S3_PRIVATE_WELL_BUCKET }}
-p ENABLE_AQUIFERS_SEARCH=${{ vars.ENABLE_AQUIFERS_SEARCH }}
-p EMAIL_NOTIFICATION_RECIPIENT=${{ vars.EMAIL_NOTIFICATION_RECIPIENT }}
-p GEOCODER_ADDRESS_API_BASE=${{ vars.GEOCODER_ADDRESS_API_BASE }}
# backend:
# name: Backend
# needs: [ init, database ]
# environment: ${{ inputs.environment }}
# runs-on: ubuntu-latest
# steps:
# - name: Deploy Backend
# uses: bcgov-nr/[email protected]
# with:
# oc_namespace: ${{ vars.OC_NAMESPACE }}
# oc_server: ${{ vars.OC_SERVER }}
# oc_token: ${{ secrets.OC_TOKEN }}
# oc_version: "4.14.37"
# file: backend/openshift.deploy.yml
# parameters:
# -p NAME_SUFFIX=${{ inputs.target }}
# -p IMAGE_TAG=${{ inputs.tag }}
# -p E_LICENSING_URL=${{ vars.E_LICENSING_URL }}
# -p DB_REPLICATE=${{ vars.DB_REPLICATE }}
# -p DJANGO_DEBUG=${{ vars.DJANGO_DEBUG }}
# -p ENABLE_ADDITIONAL_DOCUMENTS=${{ vars.ENABLE_ADDITIONAL_DOCUMENTS }}
# -p S3_PRIVATE_BUCKET=${{ vars.S3_PRIVATE_BUCKET }}
# -p S3_PRIVATE_HOST=${{ vars.S3_PRIVATE_HOST }}
# -p S3_WELL_EXPORT_BUCKET=${{ vars.S3_WELL_EXPORT_BUCKET }}
# -p SSO_AUDIENCE=${{ vars.SSO_AUDIENCE }}
# -p SSO_AUTH_HOST=${{ vars.SSO_AUTH_HOST }}
# -p SSO_CLIENT=${{ vars.SSO_CLIENT }}
# -p SSO_IDP_HINT=${{ vars.SSO_IDP_HINT }}
# -p SSO_PORT=${{ vars.SSO_PORT }}
# -p SSO_PUBKEY=${{ vars.SSO_PUBKEY }}
# -p SSO_REALM=${{ vars.SSO_REALM }}
# -p SSO_TEST_AUDIENCE=${{ vars.SSO_TEST_AUDIENCE }}
# -p SSO_TEST_CLIENT=${{ vars.SSO_TEST_CLIENT }}
# -p GDAL_LIBRARY_PATH=${{ vars.GDAL_LIBRARY_PATH }}
# -p GEOS_LIBRARY_PATH=${{ vars.GEOS_LIBRARY_PATH }}
# -p S3_AQUIFER_BUCKET=${{ vars.S3_AQUIFER_BUCKET }}
# -p S3_REGISTRANT_BUCKET=${{ vars.S3_REGISTRANT_BUCKET }}
# -p S3_PRIVATE_ROOT_BUCKET=${{ vars.S3_PRIVATE_ROOT_BUCKET }}
# -p S3_PRIVATE_AQUIFER_BUCKET=${{ vars.S3_PRIVATE_AQUIFER_BUCKET }}
# -p S3_PRIVATE_REGISTRANT_BUCKET=${{ vars.S3_PRIVATE_REGISTRANT_BUCKET }}
# -p S3_PRIVATE_WELL_BUCKET=${{ vars.S3_PRIVATE_WELL_BUCKET }}
# -p ENABLE_AQUIFERS_SEARCH=${{ vars.ENABLE_AQUIFERS_SEARCH }}
# -p EMAIL_NOTIFICATION_RECIPIENT=${{ vars.EMAIL_NOTIFICATION_RECIPIENT }}
# -p GEOCODER_ADDRESS_API_BASE=${{ vars.GEOCODER_ADDRESS_API_BASE }}

frontend:
name: Frontend
needs: [ init, database, backend ]
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest
steps:
- name: Deploy Frontend
uses: bcgov-nr/[email protected]
with:
oc_namespace: ${{ vars.OC_NAMESPACE }}
oc_server: ${{ vars.OC_SERVER }}
oc_token: ${{ secrets.OC_TOKEN }}
oc_version: "4.14.37"
file: frontend/openshift.deploy.yml
parameters:
-p NAME_SUFFIX=${{ inputs.target }}
-p IMAGE_TAG=${{ inputs.tag }}
# frontend:
# name: Frontend
# needs: [ init, database, backend ]
# environment: ${{ inputs.environment }}
# runs-on: ubuntu-latest
# steps:
# - name: Deploy Frontend
# uses: bcgov-nr/[email protected]
# with:
# oc_namespace: ${{ vars.OC_NAMESPACE }}
# oc_server: ${{ vars.OC_SERVER }}
# oc_token: ${{ secrets.OC_TOKEN }}
# oc_version: "4.14.37"
# file: frontend/openshift.deploy.yml
# parameters:
# -p NAME_SUFFIX=${{ inputs.target }}
# -p IMAGE_TAG=${{ inputs.tag }}

48 changes: 48 additions & 0 deletions .github/workflows/.tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,54 @@ env:
PREFIX: ${{ github.event.repository.name }}-${{ inputs.target }}

jobs:
unit-test:
name: Unit Tests
# if: github.event_name != 'pull_request' || !github.event.pull_request.draft
continue-on-error: true
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout Code
uses: actions/checkout@v3

- name: Build Docker Image
run: docker build -t nr-gwells-backend-image --no-cache ./backend

- name: Run Migrations
run: |
docker run --rm -e PG_PRIMARY_HOST=gwells-164-database -e DB_NAME=postgresql -e PG_USER=${{ vars.PG_USER }} -e PG_HOST=5432 -e PG_PRIMARY_PASSWORD=${{ secrets.PG_PRIMARY_PASSWORD}} nr-gwells-backend-image python3 manage.py migrate

- name: Run Tests
run: docker run --rm -e PG_PRIMARY_HOST=gwells-164-database -e DB_NAME=postgresql -e PG_USER=${{ vars.PG_USER }} -e PG_HOST=5432 -e PG_PRIMARY_PASSWORD=${{ secrets.PG_PRIMARY_PASSWORD}} nr-gwells-backend-image python3 manage.py test

# - name: Set up Python
# uses: actions/setup-python@v3
# with:
# python-version: '3.7'

# - name: Install GDAL dependencies
# run: sudo apt update && sudo apt install -y gdal-bin libgdal-dev

# - name: Upgrade pip
# run: python3 -m pip install --upgrade pip

# - name: Install Numpy
# run: python3 -m pip install numpy

# - name: Install ptvsd
# run: python3 -m pip install ptvsd

# - name: Install Setuptools
# run: python3 -m pip install 'setuptools<58.0'

# - name: Install Dependencies
# run: python3 -m pip install -r requirements.txt --verbose
# working-directory: ./backend

# - name: Run Django Tests
# run: python3 manage.py test
# working-directory: ./backend

tests:
name: Tests
runs-on: ubuntu-latest
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/pr-open.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
package: [database, backend, frontend, minio]
# package: [database, backend, frontend, minio]
package: [database, backend]
timeout-minutes: 20
steps:
- uses: bcgov-nr/[email protected]
Expand All @@ -27,14 +28,14 @@ jobs:
triggers: ('${{ matrix.package }}/')

deploys:
name: Deploy
name: Deploys
needs: [builds]
secrets: inherit
uses: ./.github/workflows/.deploy.yml

tests:
name: Tests
if: needs.deploys.outputs.triggered == 'true'
# if: needs.deploys.outputs.triggered == 'true'
needs: [deploys]
uses: ./.github/workflows/.tests.yml
with:
Expand Down
4 changes: 4 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,24 @@
ENV CUSTOM_GDAL_GEOS="False"
ENV DATABASE_NAME=gwells
ENV DATABASE_USER="gwells"
ENV DATABASE_PASSWORD="test1"

Check warning on line 10 in backend/Dockerfile

View workflow job for this annotation

GitHub Actions / Builds (backend)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "DATABASE_PASSWORD") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENV DATABASE_SERVICE_NAME=gwells
ENV DJANGO_ADMIN_URL=admin
ENV DJANGO_DEBUG="true"
ENV DJANGO_SECRET_KEY=secret

Check warning on line 14 in backend/Dockerfile

View workflow job for this annotation

GitHub Actions / Builds (backend)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "DJANGO_SECRET_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENV ENABLE_ADDITIONAL_DOCUMENTS="true"
ENV ENABLE_AQUIFERS_SEARCH="true"
ENV GWELLS_SERVICE_HOST="db"
ENV GWELLS_SERVICE_PORT="5432"
ENV MINIO_ACCESS_KEY=minio

Check warning on line 19 in backend/Dockerfile

View workflow job for this annotation

GitHub Actions / Builds (backend)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "MINIO_ACCESS_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENV MINIO_SECRET_KEY=minio1234

Check warning on line 20 in backend/Dockerfile

View workflow job for this annotation

GitHub Actions / Builds (backend)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "MINIO_SECRET_KEY") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENV PYTHONUNBUFFERED="1"
ENV SESSION_COOKIE_SECURE="False"
ENV SSO_AUDIENCE=gwells-4121
ENV SSO_CLIENT=gwells-4121
ENV SSO_TEST_AUDIENCE=gwells-api-tests-4820
ENV SSO_TEST_CLIENT=gwells-api-tests-4820
ENV SSO_AUTH_HOST=https://test.loginproxy.gov.bc.ca/auth

Check warning on line 27 in backend/Dockerfile

View workflow job for this annotation

GitHub Actions / Builds (backend)

Sensitive data should not be used in the ARG or ENV commands

SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "SSO_AUTH_HOST") More info: https://docs.docker.com/go/dockerfile/rule/secrets-used-in-arg-or-env/
ENV SSO_IDP_HINT="undefined"
ENV SSO_PORT=0
ENV SSO_REALM=standard
Expand All @@ -49,9 +49,13 @@
ENV LOCAL="true"
ENV LOAD_FIXTURES="true"

RUN echo "before deps install"

# Install dependencies
RUN apt -y update && apt -y install git build-essential gdal-bin libgdal-dev

RUN echo "before deps install"

ENV PATH="/usr/bin/python3:${PATH}"

WORKDIR /app
Expand All @@ -74,7 +78,7 @@

# TODO: move to entrypoint in deployment template?
# chmod -R 777 /app && \
CMD sh -c "python3 manage.py migrate --noinput && \

Check warning on line 81 in backend/Dockerfile

View workflow job for this annotation

GitHub Actions / Builds (backend)

JSON arguments recommended for ENTRYPOINT/CMD to prevent unintended behavior related to OS signals

JSONArgsRecommended: JSON arguments recommended for CMD to prevent unintended behavior related to OS signals More info: https://docs.docker.com/go/dockerfile/rule/json-args-recommended/
./load_fixtures.sh all && \
python3 manage.py createinitialrevisions && \
# python3 manage.py collectstatic --noinput && \
Expand Down
Loading