From 0e0d13d67978325f2fccceda4233ec2f0b0fd07c Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 16:50:22 +1100 Subject: [PATCH 01/32] try get initial tests working --- .github/workflows/test.yaml | 45 +++++++++++++++++++++ argos/argos_viewer/tests.py | 7 ++++ devtools/conda-envs/argos-ubuntu-latest.yml | 11 +++-- devtools/deployment/.env.example | 2 +- 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..970ab17 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,45 @@ +name: ci + +on: + push: + branches: + - "main" + pull_request: + branches: + - "main" + schedule: + # Nightly tests run on main by default: + # Scheduled workflows run on the latest commit on the default or base branch. + # (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule) + - cron: "0 0 * * *" + workflow_dispatch: + merge_group: + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + +defaults: + run: + shell: bash -l {0} + + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install Docker Compose + run: | + sudo apt-get update + sudo apt-get install -y docker-compose + + - name: Build and run Docker Compose + run: | + docker-compose -f docker-compose-dev.yml up -d + - name: run tests + run: | + docker-compose -f docker-compose-dev.yml exec web bash -c " cd argos && /opt/conda/bin/python manage.py test" \ No newline at end of file diff --git a/argos/argos_viewer/tests.py b/argos/argos_viewer/tests.py index 7ce503c..be7ee9d 100644 --- a/argos/argos_viewer/tests.py +++ b/argos/argos_viewer/tests.py @@ -1,3 +1,10 @@ from django.test import TestCase # Create your tests here. + +class BlankTest(TestCase): + def test_placeholder(self): + self.assertEqual(1, 1) + + def test_fail(self): + self.assertEqual(1,2) diff --git a/devtools/conda-envs/argos-ubuntu-latest.yml b/devtools/conda-envs/argos-ubuntu-latest.yml index 4ac5d49..7e3387d 100644 --- a/devtools/conda-envs/argos-ubuntu-latest.yml +++ b/devtools/conda-envs/argos-ubuntu-latest.yml @@ -6,12 +6,18 @@ dependencies: # Base depends - pip - - python =3.10 - - git + - python >=3.10,<3.11 + # argos deps - django - gunicorn + + # Testing + - pytest + - pytest-cov + + # asapdiscovery deps # Others @@ -19,7 +25,6 @@ dependencies: - openeye-toolkits - pydantic >=1.10.8,<2.0.0a0 - # data - requests - boto3 diff --git a/devtools/deployment/.env.example b/devtools/deployment/.env.example index 9b13331..f0222d3 100644 --- a/devtools/deployment/.env.example +++ b/devtools/deployment/.env.example @@ -5,4 +5,4 @@ DATABASE_URL=postgresql://django_traefik:django_traefik@db:5432/django_traefik HOST_DOMAIN=localhost POSTGRES_USER=django_traefik POSTGRES_PASSWORD=django_traefik -POSTGRES_DB=django_traefik +POSTGRES_DB=django_traefik \ No newline at end of file From b20382aee9759077b88866d60c307ceb5560d0f6 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 16:53:19 +1100 Subject: [PATCH 02/32] add in env file --- .github/workflows/test.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 970ab17..3022e3d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -36,6 +36,10 @@ jobs: run: | sudo apt-get update sudo apt-get install -y docker-compose + + - name: copy example env file + run: | + cp devtools/deployment/.env.example .env - name: Build and run Docker Compose run: | From c0d67fb915f87cd517c6711a023c3196082ce41c Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 16:55:52 +1100 Subject: [PATCH 03/32] fix names and rename file --- .github/workflows/{test.yaml => ci.yaml} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename .github/workflows/{test.yaml => ci.yaml} (88%) diff --git a/.github/workflows/test.yaml b/.github/workflows/ci.yaml similarity index 88% rename from .github/workflows/test.yaml rename to .github/workflows/ci.yaml index 3022e3d..bea8b71 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/ci.yaml @@ -32,18 +32,18 @@ jobs: - name: Checkout code uses: actions/checkout@v2 - - name: Install Docker Compose + - name: Install docker-compose run: | sudo apt-get update sudo apt-get install -y docker-compose - - name: copy example env file + - name: Copy example env file run: | cp devtools/deployment/.env.example .env - - name: Build and run Docker Compose + - name: Build and run containers run: | docker-compose -f docker-compose-dev.yml up -d - - name: run tests + - name: Run tests run: | docker-compose -f docker-compose-dev.yml exec web bash -c " cd argos && /opt/conda/bin/python manage.py test" \ No newline at end of file From c5a819cf6a5d25b4ed1ac2fb7511595489509c56 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:00:44 +1100 Subject: [PATCH 04/32] fix --- .github/workflows/test.yaml | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..924e23b --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,67 @@ +name: ci + +on: + push: + branches: + - "main" + pull_request: + branches: + - "main" + schedule: + # Nightly tests run on main by default: + # Scheduled workflows run on the latest commit on the default or base branch. + # (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule) + - cron: "0 0 * * *" + workflow_dispatch: + merge_group: + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + +defaults: + run: + shell: bash -l {0} + + +jobs: + + env: + OE_LICENSE: ${{ github.workspace }}/.OpenEye/oe_license.txt + + + + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install docker-compose + run: | + sudo apt-get update + sudo apt-get install -y docker-compose + + - name: Copy example env file + run: | + cp devtools/deployment/.env.example .env + + - name: Make .OpenEye directory + run: | + mkdir -p ${{ github.workspace }}/.OpenEye + + - name: Test OE License & Write License to File + env: + OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} + run: | + echo "${OE_LICENSE_TEXT}" > ${OE_LICENSE} + python -c "import openeye; assert openeye.oechem.OEChemIsLicensed(), 'OpenEye license checks failed!'" + + + - name: Build and run containers + run: | + docker-compose -f docker-compose-dev.yml up -d + - name: Run tests + run: | + docker-compose -f docker-compose-dev.yml exec web bash -c " cd argos && /opt/conda/bin/python manage.py test" \ No newline at end of file From b17c64463288242e59538bbaa8639e8f16b4fc36 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:02:04 +1100 Subject: [PATCH 05/32] fix again --- .github/workflows/test.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 924e23b..31807f6 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -51,6 +51,7 @@ jobs: run: | mkdir -p ${{ github.workspace }}/.OpenEye + - name: Test OE License & Write License to File env: OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} From 73a9418e26c5605f218ea5dca4839c6da3130cea Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:04:05 +1100 Subject: [PATCH 06/32] move to ci file --- .github/workflows/ci.yaml | 21 +++++++++++- .github/workflows/test.yaml | 68 ------------------------------------- 2 files changed, 20 insertions(+), 69 deletions(-) delete mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index bea8b71..31807f6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,9 +22,15 @@ concurrency: defaults: run: shell: bash -l {0} - + jobs: + + env: + OE_LICENSE: ${{ github.workspace }}/.OpenEye/oe_license.txt + + + build: runs-on: ubuntu-latest @@ -41,6 +47,19 @@ jobs: run: | cp devtools/deployment/.env.example .env + - name: Make .OpenEye directory + run: | + mkdir -p ${{ github.workspace }}/.OpenEye + + + - name: Test OE License & Write License to File + env: + OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} + run: | + echo "${OE_LICENSE_TEXT}" > ${OE_LICENSE} + python -c "import openeye; assert openeye.oechem.OEChemIsLicensed(), 'OpenEye license checks failed!'" + + - name: Build and run containers run: | docker-compose -f docker-compose-dev.yml up -d diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml deleted file mode 100644 index 31807f6..0000000 --- a/.github/workflows/test.yaml +++ /dev/null @@ -1,68 +0,0 @@ -name: ci - -on: - push: - branches: - - "main" - pull_request: - branches: - - "main" - schedule: - # Nightly tests run on main by default: - # Scheduled workflows run on the latest commit on the default or base branch. - # (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule) - - cron: "0 0 * * *" - workflow_dispatch: - merge_group: - -concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" - cancel-in-progress: true - -defaults: - run: - shell: bash -l {0} - - -jobs: - - env: - OE_LICENSE: ${{ github.workspace }}/.OpenEye/oe_license.txt - - - - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Install docker-compose - run: | - sudo apt-get update - sudo apt-get install -y docker-compose - - - name: Copy example env file - run: | - cp devtools/deployment/.env.example .env - - - name: Make .OpenEye directory - run: | - mkdir -p ${{ github.workspace }}/.OpenEye - - - - name: Test OE License & Write License to File - env: - OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} - run: | - echo "${OE_LICENSE_TEXT}" > ${OE_LICENSE} - python -c "import openeye; assert openeye.oechem.OEChemIsLicensed(), 'OpenEye license checks failed!'" - - - - name: Build and run containers - run: | - docker-compose -f docker-compose-dev.yml up -d - - name: Run tests - run: | - docker-compose -f docker-compose-dev.yml exec web bash -c " cd argos && /opt/conda/bin/python manage.py test" \ No newline at end of file From 0d964ef39b1ba2d711d88a2c3bf071c3ac69b59b Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:05:33 +1100 Subject: [PATCH 07/32] Revert "move to ci file" This reverts commit 73a9418e26c5605f218ea5dca4839c6da3130cea. --- .github/workflows/ci.yaml | 21 +----------- .github/workflows/test.yaml | 68 +++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 31807f6..bea8b71 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,15 +22,9 @@ concurrency: defaults: run: shell: bash -l {0} - - -jobs: - - env: - OE_LICENSE: ${{ github.workspace }}/.OpenEye/oe_license.txt - +jobs: build: runs-on: ubuntu-latest @@ -47,19 +41,6 @@ jobs: run: | cp devtools/deployment/.env.example .env - - name: Make .OpenEye directory - run: | - mkdir -p ${{ github.workspace }}/.OpenEye - - - - name: Test OE License & Write License to File - env: - OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} - run: | - echo "${OE_LICENSE_TEXT}" > ${OE_LICENSE} - python -c "import openeye; assert openeye.oechem.OEChemIsLicensed(), 'OpenEye license checks failed!'" - - - name: Build and run containers run: | docker-compose -f docker-compose-dev.yml up -d diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..31807f6 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,68 @@ +name: ci + +on: + push: + branches: + - "main" + pull_request: + branches: + - "main" + schedule: + # Nightly tests run on main by default: + # Scheduled workflows run on the latest commit on the default or base branch. + # (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule) + - cron: "0 0 * * *" + workflow_dispatch: + merge_group: + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + +defaults: + run: + shell: bash -l {0} + + +jobs: + + env: + OE_LICENSE: ${{ github.workspace }}/.OpenEye/oe_license.txt + + + + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install docker-compose + run: | + sudo apt-get update + sudo apt-get install -y docker-compose + + - name: Copy example env file + run: | + cp devtools/deployment/.env.example .env + + - name: Make .OpenEye directory + run: | + mkdir -p ${{ github.workspace }}/.OpenEye + + + - name: Test OE License & Write License to File + env: + OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} + run: | + echo "${OE_LICENSE_TEXT}" > ${OE_LICENSE} + python -c "import openeye; assert openeye.oechem.OEChemIsLicensed(), 'OpenEye license checks failed!'" + + + - name: Build and run containers + run: | + docker-compose -f docker-compose-dev.yml up -d + - name: Run tests + run: | + docker-compose -f docker-compose-dev.yml exec web bash -c " cd argos && /opt/conda/bin/python manage.py test" \ No newline at end of file From 129f69988f0b0df0dc3acf13dff6923a72e40281 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:07:35 +1100 Subject: [PATCH 08/32] collapse to one file --- .github/workflows/ci.yaml | 4 +++ .github/workflows/test.yaml | 68 ------------------------------------- 2 files changed, 4 insertions(+), 68 deletions(-) delete mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index bea8b71..a8b3a75 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -41,6 +41,10 @@ jobs: run: | cp devtools/deployment/.env.example .env + - name: Make OpenEye directory + run: | + mkdir -p ${{ github.workspace }}/.OpenEye + - name: Build and run containers run: | docker-compose -f docker-compose-dev.yml up -d diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml deleted file mode 100644 index 31807f6..0000000 --- a/.github/workflows/test.yaml +++ /dev/null @@ -1,68 +0,0 @@ -name: ci - -on: - push: - branches: - - "main" - pull_request: - branches: - - "main" - schedule: - # Nightly tests run on main by default: - # Scheduled workflows run on the latest commit on the default or base branch. - # (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule) - - cron: "0 0 * * *" - workflow_dispatch: - merge_group: - -concurrency: - group: "${{ github.workflow }}-${{ github.ref }}" - cancel-in-progress: true - -defaults: - run: - shell: bash -l {0} - - -jobs: - - env: - OE_LICENSE: ${{ github.workspace }}/.OpenEye/oe_license.txt - - - - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Install docker-compose - run: | - sudo apt-get update - sudo apt-get install -y docker-compose - - - name: Copy example env file - run: | - cp devtools/deployment/.env.example .env - - - name: Make .OpenEye directory - run: | - mkdir -p ${{ github.workspace }}/.OpenEye - - - - name: Test OE License & Write License to File - env: - OE_LICENSE_TEXT: ${{ secrets.OE_LICENSE }} - run: | - echo "${OE_LICENSE_TEXT}" > ${OE_LICENSE} - python -c "import openeye; assert openeye.oechem.OEChemIsLicensed(), 'OpenEye license checks failed!'" - - - - name: Build and run containers - run: | - docker-compose -f docker-compose-dev.yml up -d - - name: Run tests - run: | - docker-compose -f docker-compose-dev.yml exec web bash -c " cd argos && /opt/conda/bin/python manage.py test" \ No newline at end of file From d349469577ab8ee246ed7200a5fcfba335685438 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:09:14 +1100 Subject: [PATCH 09/32] fix indents --- .github/workflows/ci.yaml | 47 +++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a8b3a75..a20c76b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,7 +13,6 @@ on: # (from https://help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule) - cron: "0 0 * * *" workflow_dispatch: - merge_group: concurrency: group: "${{ github.workflow }}-${{ github.ref }}" @@ -23,31 +22,31 @@ defaults: run: shell: bash -l {0} - jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Install docker-compose - run: | - sudo apt-get update - sudo apt-get install -y docker-compose - - - name: Copy example env file - run: | - cp devtools/deployment/.env.example .env - - - name: Make OpenEye directory - run: | - mkdir -p ${{ github.workspace }}/.OpenEye - - - name: Build and run containers - run: | - docker-compose -f docker-compose-dev.yml up -d - - name: Run tests - run: | - docker-compose -f docker-compose-dev.yml exec web bash -c " cd argos && /opt/conda/bin/python manage.py test" \ No newline at end of file + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install docker-compose + run: | + sudo apt-get update + sudo apt-get install -y docker-compose + + - name: Copy example env file + run: | + cp devtools/deployment/.env.example .env + + - name: Make OpenEye directory + run: | + mkdir -p ${{ github.workspace }}/.OpenEye + + - name: Build and run containers + run: | + docker-compose -f docker-compose-dev.yml up -d + + - name: Run tests + run: | + docker-compose -f docker-compose-dev.yml exec web bash -c "cd argos && /opt/conda/bin/python manage.py test" From 2474c4310acaef62900726349068ea43e10b4226 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:13:24 +1100 Subject: [PATCH 10/32] try some stuff --- .github/workflows/ci.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a20c76b..7aec30a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -42,6 +42,9 @@ jobs: - name: Make OpenEye directory run: | mkdir -p ${{ github.workspace }}/.OpenEye + cd ${{ github.workspace }}/.OpenEye + pwd + touch oe_license.txt - name: Build and run containers run: | From 1294206d0dabd0b806e9f13422d601449c460d3f Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:14:42 +1100 Subject: [PATCH 11/32] add ci to correct path --- .github/workflows/ci.yaml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7aec30a..20ecece 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -41,10 +41,8 @@ jobs: - name: Make OpenEye directory run: | - mkdir -p ${{ github.workspace }}/.OpenEye - cd ${{ github.workspace }}/.OpenEye - pwd - touch oe_license.txt + mkdir -p ~/.OpenEye + touch ~/.OpenEye/oe_license.txt - name: Build and run containers run: | From 4507072cfcfdafaafe9759ab7beb6050604651bc Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:19:03 +1100 Subject: [PATCH 12/32] fix TTY issues --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 20ecece..b0f000c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -50,4 +50,4 @@ jobs: - name: Run tests run: | - docker-compose -f docker-compose-dev.yml exec web bash -c "cd argos && /opt/conda/bin/python manage.py test" + docker-compose -f docker-compose-dev.yml exec -T web bash -c "cd argos && /opt/conda/bin/python manage.py test" From 298cb1081dde64d2108ce0e4e9fccfa6ed26655c Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:33:04 +1100 Subject: [PATCH 13/32] try waiting --- .github/workflows/ci.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b0f000c..98b29ef 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -47,6 +47,12 @@ jobs: - name: Build and run containers run: | docker-compose -f docker-compose-dev.yml up -d + docker container ls + + - name: wait for containers to start + run: | + sleep 30 + docker container ls - name: Run tests run: | From 5f77ff35623356896202fd368e0a4ebfc9e56577 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:42:20 +1100 Subject: [PATCH 14/32] try with healthcheck instead --- .github/workflows/ci.yaml | 8 ++++---- docker-compose-dev.yml | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 98b29ef..9404d5c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -49,10 +49,10 @@ jobs: docker-compose -f docker-compose-dev.yml up -d docker container ls - - name: wait for containers to start - run: | - sleep 30 - docker container ls + # - name: wait for containers to start + # run: | + # sleep 30 + # docker container ls - name: Run tests run: | diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 3926887..aa2fbc9 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -23,6 +23,13 @@ services: db: image: postgres:15-alpine + + healthcheck: + test: pg_isready + interval: 5s + timeout: 10s + retries: 120 + volumes: - postgres_data:/var/lib/postgresql/data/ expose: From 1632b523ad22b5cf7a7bbe506e42698da77b146f Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:48:27 +1100 Subject: [PATCH 15/32] try making sure service is healthy --- docker-compose-dev.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index aa2fbc9..1c67350 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -16,7 +16,9 @@ services: env_file: - .env depends_on: - - db + db: + condition: service_healthy + labels: - "traefik.enable=true" - "traefik.http.routers.django.rule=Host(`django.localhost`)" From 472a5f7adbc3312253b6c4d601186c386a509a2f Mon Sep 17 00:00:00 2001 From: hmacdope Date: Thu, 8 Feb 2024 17:57:13 +1100 Subject: [PATCH 16/32] add initial testing --- .github/workflows/ci.yaml | 5 ----- argos/argos_viewer/tests.py | 2 -- docker-compose-prod.yml | 10 +++++++++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9404d5c..be38497 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -49,11 +49,6 @@ jobs: docker-compose -f docker-compose-dev.yml up -d docker container ls - # - name: wait for containers to start - # run: | - # sleep 30 - # docker container ls - - name: Run tests run: | docker-compose -f docker-compose-dev.yml exec -T web bash -c "cd argos && /opt/conda/bin/python manage.py test" diff --git a/argos/argos_viewer/tests.py b/argos/argos_viewer/tests.py index be7ee9d..14c0393 100644 --- a/argos/argos_viewer/tests.py +++ b/argos/argos_viewer/tests.py @@ -6,5 +6,3 @@ class BlankTest(TestCase): def test_placeholder(self): self.assertEqual(1, 1) - def test_fail(self): - self.assertEqual(1,2) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 9151d41..46e3afe 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -17,7 +17,8 @@ services: env_file: - .env depends_on: - - db + db: + condition: service_healthy labels: - "traefik.enable=true" - "traefik.http.routers.django.rule=Host(`${HOST_DOMAIN:?err}`)" @@ -27,6 +28,13 @@ services: db: image: postgres:15-alpine + + healthcheck: + test: pg_isready + interval: 5s + timeout: 10s + retries: 120 + volumes: - postgres_data_prod:/var/lib/postgresql/data/ expose: From 28c2958877cde616d9a59252ab172d8f61c50116 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 13:58:54 +1100 Subject: [PATCH 17/32] add updates --- argos/argos/settings.py | 1 + argos/argos_viewer/models.py | 2 ++ argos/argos_viewer/tests.py | 39 ++++++++++++++++++--- devtools/conda-envs/argos-ubuntu-latest.yml | 4 ++- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/argos/argos/settings.py b/argos/argos/settings.py index fd7e91a..32b3b87 100644 --- a/argos/argos/settings.py +++ b/argos/argos/settings.py @@ -48,6 +48,7 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django_cleanup.apps.CleanupConfig', 'argos_viewer.apps.ArgosViewerConfig', ] diff --git a/argos/argos_viewer/models.py b/argos/argos_viewer/models.py index 8b094f8..742d528 100644 --- a/argos/argos_viewer/models.py +++ b/argos/argos_viewer/models.py @@ -10,3 +10,5 @@ class TargetPDBFile(models.Model): pdb_file = models.ForeignKey(PDBFile, on_delete=models.CASCADE) target = models.CharField(max_length=200) upload_date = models.DateTimeField(auto_now_add=True) + + diff --git a/argos/argos_viewer/tests.py b/argos/argos_viewer/tests.py index 14c0393..a569419 100644 --- a/argos/argos_viewer/tests.py +++ b/argos/argos_viewer/tests.py @@ -1,8 +1,39 @@ from django.test import TestCase +from .models import PDBFile, TargetPDBFile +from django.core.files.uploadedfile import SimpleUploadedFile +from django.utils import timezone +import os -# Create your tests here. +class PDBFileModelTest(TestCase): + def setUp(self): + self.file = SimpleUploadedFile("test.pdb", b"pdb file content") + self.pdb_file = PDBFile.objects.create(file=self.file) -class BlankTest(TestCase): - def test_placeholder(self): - self.assertEqual(1, 1) + def test_pdb_file_created(self): + self.assertTrue(os.path.exists(self.pdb_file.file.path)) + + def test_file_extension(self): + self.assertEqual(self.pdb_file.file.name.split(".")[-1], "pdb") + +class TargetPDBFileModelTest(TestCase): + def setUp(self): + self.file = SimpleUploadedFile("test.pdb", b"pdb file content") + self.pdb_file = PDBFile.objects.create(file=self.file) + self.target_pdb_file = TargetPDBFile.objects.create(pdb_file=self.pdb_file, target="test_target", upload_date=timezone.now()) + + def tearDown(self): + os.remove(self.file.name) + + def test_target_pdb_file_created(self): + self.assertTrue(TargetPDBFile.objects.exists()) + + def test_target(self): + self.assertEqual(self.target_pdb_file.target, "test_target") + + def test_upload_date(self): + self.assertIsNotNone(self.target_pdb_file.upload_date) + + def test_pdb_file_deletion_on_target_pdb_file_deletion(self): + self.target_pdb_file.delete() + self.assertFalse(os.path.exists(self.pdb_file.file.path)) diff --git a/devtools/conda-envs/argos-ubuntu-latest.yml b/devtools/conda-envs/argos-ubuntu-latest.yml index 7e3387d..862d2d1 100644 --- a/devtools/conda-envs/argos-ubuntu-latest.yml +++ b/devtools/conda-envs/argos-ubuntu-latest.yml @@ -12,11 +12,13 @@ dependencies: # argos deps - django - gunicorn + - django-cleanup + # Testing - pytest - pytest-cov - + - pooch # asapdiscovery deps From d5a16fbe4e960e0f6a59e95a61937169da9d12cd Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 14:11:00 +1100 Subject: [PATCH 18/32] make model tests work --- argos/argos_viewer/models.py | 14 +++++++++++++- argos/argos_viewer/tests.py | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/argos/argos_viewer/models.py b/argos/argos_viewer/models.py index 742d528..9a8966c 100644 --- a/argos/argos_viewer/models.py +++ b/argos/argos_viewer/models.py @@ -1,10 +1,17 @@ +from typing import Any from django.db import models from django.core.validators import FileExtensionValidator - +import os class PDBFile(models.Model): file = models.FileField(validators=[FileExtensionValidator(['pdb'])], upload_to="pdb_data") + def delete(self, *args, **kwargs): + # Delete the file when the instance is deleted + if self.file: + if os.path.isfile(self.file.path): + os.remove(self.file.path) + super(PDBFile, self).delete(*args, **kwargs) class TargetPDBFile(models.Model): pdb_file = models.ForeignKey(PDBFile, on_delete=models.CASCADE) @@ -12,3 +19,8 @@ class TargetPDBFile(models.Model): upload_date = models.DateTimeField(auto_now_add=True) + def delete(self, *args, **kwargs): + # Delete the associated PDBFile instance, which should trigger its delete method + if self.pdb_file: + self.pdb_file.delete() + super(TargetPDBFile, self).delete(*args, **kwargs) \ No newline at end of file diff --git a/argos/argos_viewer/tests.py b/argos/argos_viewer/tests.py index a569419..abbc4cf 100644 --- a/argos/argos_viewer/tests.py +++ b/argos/argos_viewer/tests.py @@ -23,7 +23,8 @@ def setUp(self): self.target_pdb_file = TargetPDBFile.objects.create(pdb_file=self.pdb_file, target="test_target", upload_date=timezone.now()) def tearDown(self): - os.remove(self.file.name) + if os.path.exists(self.target_pdb_file.pdb_file.file.path): + os.remove(self.target_pdb_file.pdb_file.file.path) def test_target_pdb_file_created(self): self.assertTrue(TargetPDBFile.objects.exists()) From ed5f687643c2d9d85e4123956188a71974c344b8 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 14:19:43 +1100 Subject: [PATCH 19/32] make tests even better --- argos/argos_viewer/tests/__init__.py | 0 .../{tests.py => tests/test_models.py} | 5 +- argos/argos_viewer/tests/test_urls.py | 28 +++++++++++ argos/argos_viewer/tests/test_views.py | 49 +++++++++++++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 argos/argos_viewer/tests/__init__.py rename argos/argos_viewer/{tests.py => tests/test_models.py} (96%) create mode 100644 argos/argos_viewer/tests/test_urls.py create mode 100644 argos/argos_viewer/tests/test_views.py diff --git a/argos/argos_viewer/tests/__init__.py b/argos/argos_viewer/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/argos/argos_viewer/tests.py b/argos/argos_viewer/tests/test_models.py similarity index 96% rename from argos/argos_viewer/tests.py rename to argos/argos_viewer/tests/test_models.py index abbc4cf..b914619 100644 --- a/argos/argos_viewer/tests.py +++ b/argos/argos_viewer/tests/test_models.py @@ -1,5 +1,5 @@ from django.test import TestCase -from .models import PDBFile, TargetPDBFile +from argos_viewer.models import PDBFile, TargetPDBFile from django.core.files.uploadedfile import SimpleUploadedFile from django.utils import timezone import os @@ -38,3 +38,6 @@ def test_upload_date(self): def test_pdb_file_deletion_on_target_pdb_file_deletion(self): self.target_pdb_file.delete() self.assertFalse(os.path.exists(self.pdb_file.file.path)) + + + diff --git a/argos/argos_viewer/tests/test_urls.py b/argos/argos_viewer/tests/test_urls.py new file mode 100644 index 0000000..52f6e2c --- /dev/null +++ b/argos/argos_viewer/tests/test_urls.py @@ -0,0 +1,28 @@ +from django.test import SimpleTestCase +from django.urls import reverse, resolve +from argos_viewer.views import home, upload_sucessful, TargetPDBListView, target_pdb_detail_view, failed, no_fitness_data + +class TestUrls(SimpleTestCase): + def test_home_url_resolves(self): + url = reverse('home') + self.assertEqual(resolve(url).func, home) + + def test_upload_sucessful_url_resolves(self): + url = reverse('upload_sucessful') + self.assertEqual(resolve(url).func, upload_sucessful) + + def test_pdb_files_url_resolves(self): + url = reverse('pdb_files') + self.assertEqual(resolve(url).func.view_class, TargetPDBListView) + + def test_detail_url_resolves(self): + url = reverse('detail', args=[1]) # assuming pk=1 + self.assertEqual(resolve(url).func, target_pdb_detail_view) + + def test_failed_url_resolves(self): + url = reverse('failed') + self.assertEqual(resolve(url).func, failed) + + def test_no_fitness_data_url_resolves(self): + url = reverse('no_fitness_data', args=['target_name']) + self.assertEqual(resolve(url).func, no_fitness_data) diff --git a/argos/argos_viewer/tests/test_views.py b/argos/argos_viewer/tests/test_views.py new file mode 100644 index 0000000..101eb26 --- /dev/null +++ b/argos/argos_viewer/tests/test_views.py @@ -0,0 +1,49 @@ +from django.test import TestCase, Client +from django.urls import reverse +from argos_viewer.models import PDBFile, TargetPDBFile +from django.contrib.auth.models import User + + +class ViewTests(TestCase): + def setUp(self): + # Create a user + self.user = User.objects.create_user(username='testuser', password='12345') + + def test_index_view(self): + response = self.client.get(reverse('index')) + self.assertEqual(response.status_code, 302) # Redirects to home + + def test_home_view_GET(self): + self.client.force_login(self.user) + response = self.client.get(reverse('home')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'argos_viewer/home.html') + + def test_upload_successful_view(self): + self.client.force_login(self.user) + response = self.client.get(reverse('upload_sucessful')) + self.assertEqual(response.status_code, 200) + self.assertContains(response, 'upload worked!') + + # You can write similar tests for other views... + + def test_target_pdb_detail_view_GET(self): + self.client.force_login(self.user) + target_pdb = TargetPDBFile.objects.create() + response = self.client.get(reverse('detail', args=[target_pdb.pk])) + self.assertEqual(response.status_code, 200) + # Make assertions based on the response content or template used + + def test_failed_view_GET(self): + self.client.force_login(self.user) + response = self.client.get(reverse('failed')) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'argos_viewer/failed.html') + + def test_no_fitness_data_view_GET(self): + self.client.force_login(self.user) + response = self.client.get(reverse('no_fitness_data', args=['target_name'])) + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'argos_viewer/no_fitness_data.html') + + # Add tests for POST requests as well if necessary From d40eb8c7f3edc6f10265a8cf0a4b29e3fa59c966 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 14:25:58 +1100 Subject: [PATCH 20/32] improve again --- argos/argos_viewer/tests/test_views.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/argos/argos_viewer/tests/test_views.py b/argos/argos_viewer/tests/test_views.py index 101eb26..ff33481 100644 --- a/argos/argos_viewer/tests/test_views.py +++ b/argos/argos_viewer/tests/test_views.py @@ -1,6 +1,8 @@ from django.test import TestCase, Client from django.urls import reverse from argos_viewer.models import PDBFile, TargetPDBFile +from django.core.files.uploadedfile import SimpleUploadedFile +from django.utils import timezone from django.contrib.auth.models import User @@ -8,6 +10,9 @@ class ViewTests(TestCase): def setUp(self): # Create a user self.user = User.objects.create_user(username='testuser', password='12345') + self.file = SimpleUploadedFile("test.pdb", b"pdb file content") + self.pdb_file = PDBFile.objects.create(file=self.file) + self.target_pdb_file = TargetPDBFile.objects.create(pdb_file=self.pdb_file, target="test_target", upload_date=timezone.now()) def test_index_view(self): response = self.client.get(reverse('index')) @@ -25,14 +30,12 @@ def test_upload_successful_view(self): self.assertEqual(response.status_code, 200) self.assertContains(response, 'upload worked!') - # You can write similar tests for other views... def test_target_pdb_detail_view_GET(self): self.client.force_login(self.user) - target_pdb = TargetPDBFile.objects.create() - response = self.client.get(reverse('detail', args=[target_pdb.pk])) + response = self.client.get(reverse('detail', args=[self.target_pdb_file.pk])) self.assertEqual(response.status_code, 200) - # Make assertions based on the response content or template used + self.assertTemplateUsed(response, 'argos_viewer/detail.html') def test_failed_view_GET(self): self.client.force_login(self.user) From 74bf28a702df015738c4a95ab2686c38c4395a21 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 15:56:26 +1100 Subject: [PATCH 21/32] get tests partially working --- argos/argos/settings.py | 15 +++++++++++++++ .../argos_viewer/target_pdb_detail_view.html | 1 - argos/argos_viewer/tests/test_views.py | 11 +++++++---- argos/argos_viewer/views.py | 13 ++++++++----- 4 files changed, 30 insertions(+), 10 deletions(-) delete mode 100644 argos/argos_viewer/templates/argos_viewer/target_pdb_detail_view.html diff --git a/argos/argos/settings.py b/argos/argos/settings.py index 32b3b87..7241fd3 100644 --- a/argos/argos/settings.py +++ b/argos/argos/settings.py @@ -147,3 +147,18 @@ # Redirect to home URL after login (Default redirects to /accounts/profile/) LOGIN_REDIRECT_URL = '/' + + +LOGGING = { + "version": 1, + "disable_existing_loggers": False, + "handlers": { + "console": {"class": "logging.StreamHandler"}, + }, + "loggers": { + "django": { + "handlers": ["console"], + "level": "INFO", + }, + } +} diff --git a/argos/argos_viewer/templates/argos_viewer/target_pdb_detail_view.html b/argos/argos_viewer/templates/argos_viewer/target_pdb_detail_view.html deleted file mode 100644 index f3ca97f..0000000 --- a/argos/argos_viewer/templates/argos_viewer/target_pdb_detail_view.html +++ /dev/null @@ -1 +0,0 @@ -{{html_content}} \ No newline at end of file diff --git a/argos/argos_viewer/tests/test_views.py b/argos/argos_viewer/tests/test_views.py index ff33481..3b24268 100644 --- a/argos/argos_viewer/tests/test_views.py +++ b/argos/argos_viewer/tests/test_views.py @@ -1,6 +1,7 @@ -from django.test import TestCase, Client +from django.test import TestCase, Client, RequestFactory from django.urls import reverse from argos_viewer.models import PDBFile, TargetPDBFile +from argos_viewer.views import target_pdb_detail_view from django.core.files.uploadedfile import SimpleUploadedFile from django.utils import timezone from django.contrib.auth.models import User @@ -12,7 +13,7 @@ def setUp(self): self.user = User.objects.create_user(username='testuser', password='12345') self.file = SimpleUploadedFile("test.pdb", b"pdb file content") self.pdb_file = PDBFile.objects.create(file=self.file) - self.target_pdb_file = TargetPDBFile.objects.create(pdb_file=self.pdb_file, target="test_target", upload_date=timezone.now()) + self.target_pdb_file = TargetPDBFile.objects.create(pdb_file=self.pdb_file, target="SARS-CoV-2-Mpro", upload_date=timezone.now()) def test_index_view(self): response = self.client.get(reverse('index')) @@ -33,9 +34,11 @@ def test_upload_successful_view(self): def test_target_pdb_detail_view_GET(self): self.client.force_login(self.user) - response = self.client.get(reverse('detail', args=[self.target_pdb_file.pk])) + print("HELLO") + response = self.client.get(reverse('detail', args=[self.target_pdb_file.pk]), follow=True) + print(response) + print(response.content) self.assertEqual(response.status_code, 200) - self.assertTemplateUsed(response, 'argos_viewer/detail.html') def test_failed_view_GET(self): self.client.force_login(self.user) diff --git a/argos/argos_viewer/views.py b/argos/argos_viewer/views.py index e1d67ba..60454c3 100644 --- a/argos/argos_viewer/views.py +++ b/argos/argos_viewer/views.py @@ -15,6 +15,10 @@ from asapdiscovery.data.fitness import target_has_fitness_data import tempfile +import logging + +logger = logging.getLogger('django') + def index(request): context = {} return redirect("home") @@ -74,14 +78,13 @@ def target_pdb_detail_view(request, pk): target_kwargs={"target_name": "unknown"}, ) - tf = tempfile.NamedTemporaryFile() + tf = tempfile.NamedTemporaryFile() html_viz = HTMLVisualizer( - [c.ligand.to_oemol()], [tf], obj.target, c.target.to_oemol(), color_method="fitness", align=False - ) - # align=True is broken, see https://github.com/choderalab/asapdiscovery/issues/709 + [c.ligand.to_oemol()], [tf], obj.target, c.target.to_oemol(), color_method="fitness", align=True) html = html_viz.make_poses_html()[0] + logger.debug("Made pose html") except Exception as e: - print(f"rendering failed with exception {e}") + logger.error(f"rendering failed with exception {e}") return redirect("failed") return HttpResponse(html) From 0af693b813a3d998c7088d5276bb999c102ca51c Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 16:29:40 +1100 Subject: [PATCH 22/32] try --- argos/argos/settings.py | 3 ++- argos/argos_viewer/tests/test_oe_license.py | 6 ++++++ argos/argos_viewer/tests/test_views.py | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 argos/argos_viewer/tests/test_oe_license.py diff --git a/argos/argos/settings.py b/argos/argos/settings.py index 7241fd3..913958d 100644 --- a/argos/argos/settings.py +++ b/argos/argos/settings.py @@ -89,7 +89,8 @@ # https://docs.djangoproject.com/en/4.2/ref/settings/#databases DATABASES = { - 'default': env.db(), + 'default': env.db().update({"TEST": {"NAME": "test_db"}}), + } diff --git a/argos/argos_viewer/tests/test_oe_license.py b/argos/argos_viewer/tests/test_oe_license.py new file mode 100644 index 0000000..17662ee --- /dev/null +++ b/argos/argos_viewer/tests/test_oe_license.py @@ -0,0 +1,6 @@ +from django.test import TestCase + +class OELicenseTests(TestCase): + def test_oechem_is_licensed(self): + from asapdiscovery.data.openeye import oechem + self.assertTrue(oechem.OEChemIsLicensed()) \ No newline at end of file diff --git a/argos/argos_viewer/tests/test_views.py b/argos/argos_viewer/tests/test_views.py index 3b24268..06d12cf 100644 --- a/argos/argos_viewer/tests/test_views.py +++ b/argos/argos_viewer/tests/test_views.py @@ -1,7 +1,6 @@ from django.test import TestCase, Client, RequestFactory from django.urls import reverse from argos_viewer.models import PDBFile, TargetPDBFile -from argos_viewer.views import target_pdb_detail_view from django.core.files.uploadedfile import SimpleUploadedFile from django.utils import timezone from django.contrib.auth.models import User From 81f60b68d8765bfbf77c2c413ed566c2ebe769ac Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 16:33:27 +1100 Subject: [PATCH 23/32] inject OE license --- .github/workflows/ci.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index be38497..3e136db 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -42,7 +42,12 @@ jobs: - name: Make OpenEye directory run: | mkdir -p ~/.OpenEye - touch ~/.OpenEye/oe_license.txt + + - name: Copy OpenEye license file + env: + OE_LICENSE: ${{ secrets.OE_LICENSE }} + run: | + echo "$OE_LICENSE" > ~/.OpenEye/oe_license.txt - name: Build and run containers run: | From 29d9ee2f9cbe801e3cd1daa2653fdf45950b1b0a Mon Sep 17 00:00:00 2001 From: hmacdope Date: Fri, 9 Feb 2024 16:46:19 +1100 Subject: [PATCH 24/32] fix settings stuff --- argos/argos/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/argos/argos/settings.py b/argos/argos/settings.py index 913958d..6f95457 100644 --- a/argos/argos/settings.py +++ b/argos/argos/settings.py @@ -89,7 +89,7 @@ # https://docs.djangoproject.com/en/4.2/ref/settings/#databases DATABASES = { - 'default': env.db().update({"TEST": {"NAME": "test_db"}}), + 'default': env.db(), } From b91d3a28b860d6fc778d7b19bf02911828cea55a Mon Sep 17 00:00:00 2001 From: hmacdope Date: Sat, 10 Feb 2024 00:24:29 +1100 Subject: [PATCH 25/32] HOLY GUACAMOLE it was the OE version --- Dockerfile | 17 +++++++++++++++-- devtools/conda-envs/argos-ubuntu-latest.yml | 2 +- docker-compose-dev.yml | 8 ++++---- docker-compose-prod.yml | 2 +- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2737df3..ca28ae2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,17 @@ # Use the conda-forge base image with Python FROM mambaorg/micromamba:jammy + +ARG USER_ID +ARG GROUP_ID + +USER root + +RUN addgroup --gid $GROUP_ID user +RUN adduser --disabled-password --gecos '' --uid $USER_ID --gid $GROUP_ID user +USER user + + # set environment variables ENV PYTHONUNBUFFERED 1 @@ -13,15 +24,17 @@ COPY . /argos RUN micromamba config append channels conda-forge RUN micromamba config append channels openeye -COPY --chown=$MAMBA_USER:$MAMBA_USER devtools/conda-envs/argos-ubuntu-latest.yml /tmp/env.yaml +COPY --chown=user:user devtools/conda-envs/argos-ubuntu-latest.yml /tmp/env.yaml RUN micromamba install -y -n base git -f /tmp/env.yaml && \ micromamba clean --all --yes USER root RUN mkdir /openeye +RUN chown -R user:user /openeye RUN mkdir /argos/pdb_data -USER $MAMBA_USER +RUN chown -R user:user /argos/pdb_data +USER user ENV OE_LICENSE=/openeye/oe_license.txt diff --git a/devtools/conda-envs/argos-ubuntu-latest.yml b/devtools/conda-envs/argos-ubuntu-latest.yml index 862d2d1..6e627ad 100644 --- a/devtools/conda-envs/argos-ubuntu-latest.yml +++ b/devtools/conda-envs/argos-ubuntu-latest.yml @@ -24,7 +24,7 @@ dependencies: # Others - appdirs - - openeye-toolkits + - openeye-toolkits <2023.2.3 - pydantic >=1.10.8,<2.0.0a0 # data diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 1c67350..0e1f80d 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -27,7 +27,7 @@ services: image: postgres:15-alpine healthcheck: - test: pg_isready + test: pg_isready -U ${POSTGRES_USER:?err} -d ${POSTGRES_DB:?err} interval: 5s timeout: 10s retries: 120 @@ -37,9 +37,9 @@ services: expose: - 5432 environment: - - POSTGRES_USER=django_traefik - - POSTGRES_PASSWORD=django_traefik - - POSTGRES_DB=django_traefik + - POSTGRES_USER=${POSTGRES_USER:?err} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?err} + - POSTGRES_DB=${POSTGRES_DB:?err} traefik: image: traefik:latest diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 46e3afe..0c0a751 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -30,7 +30,7 @@ services: image: postgres:15-alpine healthcheck: - test: pg_isready + test: pg_isready -U ${POSTGRES_USER:?err} -d ${POSTGRES_DB:?err} interval: 5s timeout: 10s retries: 120 From 8e543615ff4d653f7d5ac55446f908959b437d41 Mon Sep 17 00:00:00 2001 From: hmacdope Date: Sat, 10 Feb 2024 00:29:05 +1100 Subject: [PATCH 26/32] fix wf --- .github/workflows/ci.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3e136db..5d81c71 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -49,11 +49,16 @@ jobs: run: | echo "$OE_LICENSE" > ~/.OpenEye/oe_license.txt - - name: Build and run containers + - name: Build containers run: | - docker-compose -f docker-compose-dev.yml up -d + docker-compose -f docker-compose-dev.yml build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) docker container ls + docker-compose -f docker-compose-dev.yml up -d + + - name: Chown volume + run: | + chown -R $(id -u):$(id -g) argos/pdb_data - name: Run tests run: | - docker-compose -f docker-compose-dev.yml exec -T web bash -c "cd argos && /opt/conda/bin/python manage.py test" + docker-compose -f docker-compose-dev.yml exec -T web bash -c "cd argos && /opt/conda/bin/python manage.py test --no-input" From ca40809138e98c7d23718b0677a8d4ffd296b1ac Mon Sep 17 00:00:00 2001 From: hmacdope Date: Sat, 10 Feb 2024 00:33:05 +1100 Subject: [PATCH 27/32] gix path? --- .github/workflows/ci.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5d81c71..3f7dd46 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -57,7 +57,9 @@ jobs: - name: Chown volume run: | - chown -R $(id -u):$(id -g) argos/pdb_data + ls -alsh + ls -alsh argos + chown -R $(id -u):$(id -g) argos/argos/pdb_data - name: Run tests run: | From 9ead9ab6300481d6ea38e2b8e567b7791dc1cd38 Mon Sep 17 00:00:00 2001 From: Hugo MacDermott-Opeskin Date: Sun, 11 Feb 2024 18:59:03 +1100 Subject: [PATCH 28/32] Update ci.yaml --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3f7dd46..9cb0fe9 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -59,7 +59,7 @@ jobs: run: | ls -alsh ls -alsh argos - chown -R $(id -u):$(id -g) argos/argos/pdb_data + sudo chown -R $(id -u):$(id -g) argos/argos/pdb_data - name: Run tests run: | From dd9b7cb1a3859c50ef82f0363d90306d53f82302 Mon Sep 17 00:00:00 2001 From: Hugo MacDermott-Opeskin Date: Sun, 11 Feb 2024 19:02:34 +1100 Subject: [PATCH 29/32] Update ci.yaml --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9cb0fe9..aacea74 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -59,7 +59,7 @@ jobs: run: | ls -alsh ls -alsh argos - sudo chown -R $(id -u):$(id -g) argos/argos/pdb_data + sudo chown -R $(id -u):$(id -g) argos/pdb_data - name: Run tests run: | From 588237646d6d01522b37e5df83d09e8ed5146041 Mon Sep 17 00:00:00 2001 From: Hugo MacDermott-Opeskin Date: Sun, 11 Feb 2024 19:15:39 +1100 Subject: [PATCH 30/32] Update test_views.py --- argos/argos_viewer/tests/test_views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/argos/argos_viewer/tests/test_views.py b/argos/argos_viewer/tests/test_views.py index 06d12cf..a639da5 100644 --- a/argos/argos_viewer/tests/test_views.py +++ b/argos/argos_viewer/tests/test_views.py @@ -4,13 +4,17 @@ from django.core.files.uploadedfile import SimpleUploadedFile from django.utils import timezone from django.contrib.auth.models import User +from asapdiscovery.data.testing.test_resources import fetch_test_file class ViewTests(TestCase): def setUp(self): + self._test_file = fetch_test_file("Mpro-P2660_0A_bound.pdb") + with open(self._test_file, "r") as f: + self._file_contents = f.read() # Create a user self.user = User.objects.create_user(username='testuser', password='12345') - self.file = SimpleUploadedFile("test.pdb", b"pdb file content") + self.file = SimpleUploadedFile("test.pdb", self._file_contents) self.pdb_file = PDBFile.objects.create(file=self.file) self.target_pdb_file = TargetPDBFile.objects.create(pdb_file=self.pdb_file, target="SARS-CoV-2-Mpro", upload_date=timezone.now()) @@ -33,7 +37,7 @@ def test_upload_successful_view(self): def test_target_pdb_detail_view_GET(self): self.client.force_login(self.user) - print("HELLO") + print(self._file_contents) response = self.client.get(reverse('detail', args=[self.target_pdb_file.pk]), follow=True) print(response) print(response.content) From b50f232e853c8655466e8b044c6b271734bb999b Mon Sep 17 00:00:00 2001 From: Hugo MacDermott-Opeskin Date: Sun, 11 Feb 2024 19:20:14 +1100 Subject: [PATCH 31/32] Update test_views.py --- argos/argos_viewer/tests/test_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/argos/argos_viewer/tests/test_views.py b/argos/argos_viewer/tests/test_views.py index a639da5..61a1120 100644 --- a/argos/argos_viewer/tests/test_views.py +++ b/argos/argos_viewer/tests/test_views.py @@ -14,7 +14,7 @@ def setUp(self): self._file_contents = f.read() # Create a user self.user = User.objects.create_user(username='testuser', password='12345') - self.file = SimpleUploadedFile("test.pdb", self._file_contents) + self.file = SimpleUploadedFile("test.pdb", self._file_contents.encode()) self.pdb_file = PDBFile.objects.create(file=self.file) self.target_pdb_file = TargetPDBFile.objects.create(pdb_file=self.pdb_file, target="SARS-CoV-2-Mpro", upload_date=timezone.now()) From 40411e42772be31441c9846c82be7cc291116ed5 Mon Sep 17 00:00:00 2001 From: Hugo MacDermott-Opeskin Date: Sun, 11 Feb 2024 19:24:33 +1100 Subject: [PATCH 32/32] Update test_views.py --- argos/argos_viewer/tests/test_views.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/argos/argos_viewer/tests/test_views.py b/argos/argos_viewer/tests/test_views.py index 61a1120..e103e96 100644 --- a/argos/argos_viewer/tests/test_views.py +++ b/argos/argos_viewer/tests/test_views.py @@ -37,10 +37,7 @@ def test_upload_successful_view(self): def test_target_pdb_detail_view_GET(self): self.client.force_login(self.user) - print(self._file_contents) response = self.client.get(reverse('detail', args=[self.target_pdb_file.pk]), follow=True) - print(response) - print(response.content) self.assertEqual(response.status_code, 200) def test_failed_view_GET(self):