diff --git a/.github/workflows/frontend-tests.yaml b/.github/workflows/frontend-tests.yaml new file mode 100644 index 0000000..30892c7 --- /dev/null +++ b/.github/workflows/frontend-tests.yaml @@ -0,0 +1,77 @@ +name: Frontend Tests + +on: + push: + branches: [ main ] + paths: + - "src/static/**" + - "package.json" + - "vitest.config.js" + - "playwright.config.js" + - ".github/workflows/frontend-tests.yaml" + pull_request: + branches: [ main ] + paths: + - "src/static/**" + - "package.json" + - "vitest.config.js" + - "playwright.config.js" + - ".github/workflows/frontend-tests.yaml" + +jobs: + unit-tests: + name: Unit Tests (Vitest) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: src/static/package-lock.json + + - run: npm ci + working-directory: src/static + + - run: npm run test:unit + working-directory: src/static + + visual-tests: + name: Visual Tests (Playwright) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: src/static/package-lock.json + + - run: npm ci + working-directory: src/static + + - name: Install Playwright browsers + run: npx playwright install --with-deps chromium + working-directory: src/static + + - name: Run visual tests + run: npm run test:visual + working-directory: src/static + + - name: Upload screenshots on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-screenshots + path: src/static/tests/visual/test-results/ + retention-days: 7 + + - name: Upload snapshot updates + if: always() + uses: actions/upload-artifact@v4 + with: + name: playwright-snapshots + path: src/static/tests/visual/snapshots/ + retention-days: 30 \ No newline at end of file diff --git a/.github/workflows/python-tests.yaml b/.github/workflows/python-tests.yaml new file mode 100644 index 0000000..928c07b --- /dev/null +++ b/.github/workflows/python-tests.yaml @@ -0,0 +1,43 @@ +name: Python Tests + +on: + push: + branches: [ main ] + paths: + - "src/**/*.py" + - "src/tests/**" + - "requirements.txt" + - "package.json" + - ".github/workflows/python-tests.yaml" + pull_request: + branches: [ main ] + paths: + - "src/**/*.py" + - "src/tests/**" + - "requirements.txt" + - "package.json" + - ".github/workflows/python-tests.yaml" + +jobs: + python-tests: + name: Python Tests (unittest) + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" + cache-dependency-path: requirements.txt + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Run Python tests + run: npm test diff --git a/Dockerfile b/Dockerfile index 16b8f16..fa80ce9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,7 @@ ENV PATH="/opt/venv/bin:$PATH" COPY requirements.txt /tmp/requirements.txt RUN pip3 install -r /tmp/requirements.txt -COPY patches/01_add_api_urls.patch /opt/venv/lib/python3.12/site-packages/ + COPY patches/01_add_api_urls.patch /opt/venv/lib/python3.12/site-packages/ COPY patches/03_add_active_needs_renewal_status.patch /opt/venv/lib/python3.12/site-packages/ RUN cd /opt/venv/lib/python3.12/site-packages && \ @@ -39,12 +39,20 @@ RUN apt-get update && \ COPY --from=builder --chown=1001:0 /opt/venv /opt/venv COPY src/local_settings.py /opt/venv/lib/python3.12/site-packages +COPY src/nerc_allocation/ /opt/venv/lib/python3.12/site-packages/nerc_allocation/ COPY src/bin/run_coldfront.sh /opt/venv/bin # Update NERC's email templates COPY src/email/ /opt/venv/lib/python3.12/site-packages/coldfront/templates/email/ +# Add NERC usage chart static files and allocation detail template (replaces fragile patch) +COPY src/static/chartjs/ /opt/venv/lib/python3.12/site-packages/coldfront/static/chartjs/ +COPY src/static/css/ /opt/venv/lib/python3.12/site-packages/coldfront/static/css/ +COPY src/static/js/ /opt/venv/lib/python3.12/site-packages/coldfront/static/js/ +COPY src/templates/allocation/allocation_detail.html \ + /opt/venv/lib/python3.12/site-packages/coldfront/core/allocation/templates/allocation/allocation_detail.html + ENV PATH="/opt/venv/bin:$PATH" ENV DJANGO_SETTINGS_MODULE="local_settings" diff --git a/package.json b/package.json new file mode 100644 index 0000000..06d6f58 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "coldfront-nerc", + "version": "1.0.0", + "description": "- Packages [ubccr/coldfront](https://github.com/ubccr/coldfront) and the [nerc-project/coldfront-plugin-cloud](https://github.com/nerc-project/coldfront-plugin-cloud) using containers - Stores the kubernetes base manifests for deployment", + "main": "index.js", + "directories": { + "doc": "docs", + "test": "src/tests" + }, + "scripts": { + "test": "PYTHONPATH=src python3 -m unittest discover -s src/tests -p 'test_*.py' -v", + "test:frontend": "cd src/static && npm test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/nerc-project/coldfront-nerc.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/nerc-project/coldfront-nerc/issues" + }, + "homepage": "https://github.com/nerc-project/coldfront-nerc#readme" +} diff --git a/patches/04_add_usage_chart.patch b/patches/04_add_usage_chart.patch new file mode 100644 index 0000000..fa7bb8d --- /dev/null +++ b/patches/04_add_usage_chart.patch @@ -0,0 +1,86 @@ +diff --git a/coldfront/core/allocation/templates/allocation/allocation_detail.html b/coldfront/core/allocation/templates/allocation/allocation_detail.html +index 369cf81..cfea375 100644 +--- a/coldfront/core/allocation/templates/allocation/allocation_detail.html ++++ b/coldfront/core/allocation/templates/allocation/allocation_detail.html +@@ -173,6 +173,63 @@ Allocation Detail + + + ++ ++
Showing the cumulative cost for this month
++
The costs provided below exclude any discounts or credits.
The costs below do not take into account any non-billable projects you may have.