Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
cc146f7
Allow markdown in announcement
jaqxues Jan 21, 2026
4fff913
Merge branch 'markdown-announcements' into 'master'
yutotakano Jan 30, 2026
e30cf58
Make buttons less annoying
jaqxues Feb 2, 2026
b87e347
Merge branch 'smaller-category-buttons' into 'master'
burakemirsezen Feb 3, 2026
75eba5c
Sort by newest and remove unused imports
burakemirsezen Feb 3, 2026
8c56a01
Merge branch 'feedback-sorting' into 'master'
yutotakano Feb 17, 2026
7a8690c
initialize mise
markbeep Nov 6, 2025
d68dea6
update and minimize local development setup in readme
markbeep Nov 6, 2025
2c748d3
initialize uv for local dev and remove old requirements.txt
markbeep Nov 6, 2025
bf8c6bf
update dockerfiles to use uv
markbeep Nov 6, 2025
f1bf071
fix typing error preventing the building of the frontend
markbeep Nov 6, 2025
180a026
Add profiles readme note
jaqxues Mar 5, 2024
92a4a0b
Create Official Answers 'account'
jaqxues Mar 5, 2024
be91924
Fix frontend build
jaqxues Mar 5, 2024
e51e72d
Migration madness
jaqxues Mar 5, 2024
6f9d6b1
Apply 1 suggestion(s) to 1 file(s)
Mar 7, 2024
5658d45
custom Markdown for official solutions
leandrocoding Apr 23, 2024
d4be315
try rendering a pdf.
leandrocoding Apr 24, 2024
3f3ca67
Try rendering a pdf
leandrocoding Apr 24, 2024
09e37da
Add official solutions pdf rendering and official solution markdown p…
leandrocoding Apr 27, 2024
40e94ad
add missing types
leandrocoding Apr 27, 2024
5b5af1e
Fix type issues
leandrocoding Apr 27, 2024
705c23d
fix some more types
leandrocoding Apr 27, 2024
ab82b64
add null as allowed value for value
leandrocoding Apr 27, 2024
e1cd4ad
Fix type errors
leandrocoding Apr 27, 2024
64fd042
add useMemo to prevent component to rerender
leandrocoding Apr 27, 2024
bd4e195
Correct relative coordinates in pdf rendering and add handle invalid …
leandrocoding Apr 27, 2024
fe850bd
remove some comments
leandrocoding Apr 27, 2024
82e1247
Add support for official solutions in comments
leandrocoding Apr 27, 2024
4365080
add targetedwidth
leandrocoding Apr 27, 2024
a9ad8d9
Add PdfCoordinates interface
Apr 27, 2024
789ca13
Formatting
Apr 27, 2024
f080cb4
fix cordinate switch bug
leandrocoding Apr 27, 2024
c5574bd
scale according to the site scale
leandrocoding Apr 27, 2024
4a18436
rename soulution_file to solutionFile for more consistency
leandrocoding Apr 27, 2024
96ae11d
Decouple Official Solution Rendering from MarkdownText
Apr 27, 2024
f96a998
Rename ComponentRenderer
Apr 27, 2024
08475b7
Rename file
Apr 27, 2024
f8d1be0
Add Tooltip to Official Solution
Apr 27, 2024
6c25f84
Add maximum scale of 2.5
leandrocoding Apr 27, 2024
8c79f3d
Add maximum scale
leandrocoding Apr 27, 2024
e24e407
Starting generalization for solution embedding (very WIP)
leandrocoding Aug 24, 2024
a328cc2
Refactor to make it more readable
leandrocoding Nov 16, 2024
f22ad07
attempt at caching of canvas , add pdf to userpage, fix type
leandrocoding Nov 16, 2024
da147ab
fix rerender issue
leandrocoding Nov 29, 2025
e43dacf
incorperating all the helpfull feedback
leandrocoding Nov 29, 2025
0830bc6
Moved official-answer DB migration below latest master migration
yutotakano Feb 18, 2026
d50d0b1
Simplify object prop assignment where we can
yutotakano Feb 18, 2026
25af69c
Run Prettier on code modified in this PR
yutotakano Feb 18, 2026
281f0fc
Revert dev OIDC client secret change
yutotakano Feb 18, 2026
a3b4fa9
collapse wrapperquick fix
jaqxues Feb 18, 2026
ed9b214
Merge branch 'official-answers' into 'master'
yutotakano Feb 18, 2026
52960da
Add explicit instructions for setting up Mise
yutotakano Feb 19, 2026
9e5b5fc
Fix backend not being able to start on Windows due to missing pyroscope
yutotakano Feb 19, 2026
c40d2d4
Bump gevent to 23.9.1, as 23.7.0 wheels fail to compile on macOS nati…
yutotakano Feb 19, 2026
6d0e424
Remove unused fluff fields from backend pyproject.toml
yutotakano Feb 19, 2026
2980a99
Explicitly specify linux/amd64 as backend platform
yutotakano Feb 19, 2026
230c6a9
Bump psycopg2 from 2.8.6 to 2.9.3 to guarantee arm64 binary wheels on…
yutotakano Feb 19, 2026
1e4650e
Merge remote-tracking branch 'upstream-ethz/master' into uv-and-devco…
yutotakano Feb 19, 2026
3cc0915
restore home-page.tsx type errors
Feb 19, 2026
741e223
Remove unnecessary re-render on CommentSectionComponent when URL has …
yutotakano Sep 6, 2025
d062234
Reduce MutationObserver scope for PermalinkHandler
yutotakano Sep 6, 2025
f735400
Fix wrong useEffect deps list in PermaLinkHandler
yutotakano Sep 6, 2025
0a41ce3
Highlight the permalinked element for a second to draw attention
yutotakano Sep 6, 2025
fd4c9ca
Modernise HashLocation & PermalinkHandler to hooks
yutotakano Sep 6, 2025
4d425c2
Document why we need useEffect in Exam to expand sections based on pe…
yutotakano Sep 6, 2025
447491e
Add comment explaining why last conditional is needed in loadSections
yutotakano Sep 7, 2025
a09da0b
Fix answer sections in page 0
burakemirsezen Feb 19, 2026
bf558ce
add note about mise.local.toml
Feb 19, 2026
d631ad8
Merge branch 'uv-and-devcontainer' into 'master'
yutotakano Feb 19, 2026
1e8aaeb
Add a pre-commit hook for Prettier on the frontend
yutotakano Feb 19, 2026
f64a1cf
Add a pre-commit hook for black on the backend
yutotakano Feb 19, 2026
d87f905
Add note in README about pre-commit hooks
yutotakano Feb 19, 2026
3d08295
Merge branch '377-local-test-data-creation-script-creates-answer-sect…
yutotakano Feb 19, 2026
50b6641
Disable CI while the network in executor VMs are unstable
yutotakano Feb 19, 2026
45dbc4c
Merge branch 'disable-ci' into 'master'
yutotakano Feb 19, 2026
5f331e4
Add postgres db in docker compose
burakemirsezen Feb 19, 2026
5535a22
Change db password and user to postgres that way psql -U postgres works
burakemirsezen Feb 19, 2026
1ce2369
Fix app-user not having permissions to run uv
yutotakano Feb 19, 2026
d7134cc
Merge branch 'hotfix-uv-permissions' into 'master'
yutotakano Feb 19, 2026
b0d7e43
Fix /usr/local/bin/gunicorn not existing after uv-ification
yutotakano Feb 19, 2026
3a94d78
Merge branch 'hotfix-uv-permissions' into 'master'
yutotakano Feb 19, 2026
4a1b187
Fix small issues with readme
burakemirsezen Feb 19, 2026
6ea71d7
Merge branch 'improve-readme' into 'master'
yutotakano Feb 20, 2026
2deeac8
Merge branch 'clean-up-permalinks' into 'master'
yutotakano Feb 23, 2026
a7a5762
Merge branch '378-local-setup-docker-compose-yaml-creates-a-redundant…
yutotakano Feb 23, 2026
3d1a24c
Backend support for editing display names of already uploaded files
burakemirsezen Mar 18, 2025
109d1fb
Frontend support to allow changing the file and the display name of a…
burakemirsezen Mar 18, 2025
0b07538
Cleaner handling of attachment logic
burakemirsezen Apr 8, 2025
0a14227
Remove wrongly added import
burakemirsezen Apr 8, 2025
7b809f4
Correct the name of the url path
burakemirsezen Apr 12, 2025
49a5769
Changed to PUT and added to exam metadata
jupieper May 4, 2025
d6080ea
Removed json
jupieper May 4, 2025
a3eec5b
Implement suggested changes and put an index in the filename in the c…
burakemirsezen Feb 23, 2026
eadc2ce
Make the ui nicer
burakemirsezen Feb 23, 2026
cabca85
Change the tooltip message
burakemirsezen Feb 23, 2026
fe98753
Populate request.DATA for patch requests
burakemirsezen Feb 24, 2026
3653dc9
Merge branch 'pre-commit-hooks' into 'master'
yutotakano Feb 24, 2026
2a7ba26
Update all non-major dependencies
Mar 1, 2026
fd6238b
Merge branch 'renovate-patch-all-minor-patch' into 'master'
Mar 2, 2026
404d60a
Fix flagged page
burakemirsezen Mar 3, 2026
593f50c
Merge branch 'improve-flagged-page' into 'master'
yutotakano Mar 3, 2026
a253ab5
add optional overrrides for properties of the useConfirm modal
MMMMMNG Feb 26, 2026
7158e27
fix linting issues
MMMMMNG Feb 26, 2026
87e42f6
replace "Cancel" with "No"
MMMMMNG Mar 3, 2026
b93e5b4
change default button labels & rename 'useConfirm' to 'useRemoveConfirm'
MMMMMNG Mar 3, 2026
c33bcdf
invert footer VIS logo in dark mode
MMMMMNG Mar 3, 2026
c37930b
make first answer card section darker
MMMMMNG Mar 4, 2026
67c0ebd
Merge branch '291-change-confirm-modal' into 'master'
burakemirsezen Mar 4, 2026
5d16ad2
Merge branch '346-dark-mode-visual-regressions' into 'master'
burakemirsezen Mar 4, 2026
e4c0976
Merge branch 'remove-userroutes' into 'master'
yutotakano Nov 16, 2025
0c1318e
Fix Björn (NotFoundPage) rendering on every page due to missed Switch
yutotakano Nov 25, 2025
9e59513
Migrate from React Router 5.3.4 to React Router 6.30.2
yutotakano Nov 26, 2025
dba8512
Replace get_page_text shelling out to poppler with PyPdfium2
yutotakano Feb 24, 2026
708c530
Replace analyze_pdf shelling out to poppler with PyPdfium2
yutotakano Feb 24, 2026
cfec908
Remove ExamPageFlow and ExamWord from database
yutotakano Feb 24, 2026
76ab474
Fix assets folder being different between Docker and local backend
yutotakano Feb 24, 2026
7156765
Remove unused argument to get_page_text
burakemirsezen Mar 4, 2026
a3f3731
Merge branch 'remove-poppler' into 'master'
yutotakano Mar 4, 2026
8fb36e2
Setting to warn users agains dark mode
burakemirsezen Mar 3, 2026
e2f70bd
Rename migration to avoid conflict
burakemirsezen Mar 5, 2026
00cfd5d
Merge branch '356-allow-attachments-to-be-renamed-through-the-ui' int…
yutotakano Mar 5, 2026
d076136
fix: Use str.join to return valid answer kinds
melusc Mar 6, 2026
684042a
Merge branch '401-attributeerror-builtin_function_or_method-object-ha…
yutotakano Mar 6, 2026
f2b2aa6
Merge branch 'dark-mode-flag' into 'master'
yutotakano Mar 6, 2026
6b4b958
Flag comments in create_testdata
melusc Mar 6, 2026
4676848
Drive-by format create_testdata
melusc Mar 6, 2026
7925d00
Merge branch '403-test-script-does-not-create-flagged-comments' into …
yutotakano Mar 6, 2026
a002f23
Use `get_file_obj` instead of `get_document_file`
melusc Mar 6, 2026
bf75355
Format `document/views.py`
melusc Mar 6, 2026
eef5267
Wrap `get_file_obj` in `response.success`
melusc Mar 6, 2026
232f4c7
Merge branch '387-api-document-author-slug-files-returns-500-internal…
yutotakano Mar 6, 2026
5a232d4
Fix auth failing locally when time to expiry < timezone offset to UTC
yutotakano Mar 6, 2026
813d258
Add tblib to backend development dependencies to see UT exception tra…
yutotakano Mar 6, 2026
bfd9afb
Merge branch 'fix-ut-tblib' into 'master'
burakemirsezen Mar 7, 2026
7a13163
Merge branch 'fix-auth-expiry-timezone' into 'master'
burakemirsezen Mar 7, 2026
2b2c35e
add mermaid support in answers
MMMMMNG Mar 7, 2026
e655cf0
Use Django Ninja experimentally for feedback APIs
yutotakano Mar 7, 2026
f000779
lint "add mermaid support"
MMMMMNG Mar 7, 2026
5e2fbae
Migrate from `@umijs/hooks` to `ahooks@2`
melusc Mar 7, 2026
47b8781
fix type error
MMMMMNG Mar 7, 2026
5247178
fix selecting of text
MMMMMNG Mar 7, 2026
1cb14d4
drive-by-lint & -format
MMMMMNG Mar 7, 2026
6872d3b
Merge branch 'cherry-pick-c79abd92' into 'master'
burakemirsezen Mar 7, 2026
52efae6
Merge branch '367-userequest-returns-stale-data-and-keeps-loading-tru…
yutotakano Mar 8, 2026
1b6f638
Merge branch '368-cannot-select-data-in-supported-markdown-functions-…
yutotakano Mar 8, 2026
4af256c
replace match[1] with named variable (language)
MMMMMNG Mar 8, 2026
ed8bc43
Merge branch 'master' into 290-feature-request-add-mermaid-support-fo…
MMMMMNG Mar 8, 2026
70f23a0
Merge branch '290-feature-request-add-mermaid-support-for-exam-soluti…
yutotakano Mar 8, 2026
3201d3f
add mermaid section to supported functions popup
MMMMMNG Mar 8, 2026
dc563ec
remove unnecessary empty lines
MMMMMNG Mar 8, 2026
740ef73
Merge branch 'mermaid-supported-funcs' into 'master'
yutotakano Mar 8, 2026
a20d021
Change config to allow access to ninja
burakemirsezen Mar 7, 2026
71c796b
Fix Django-Ninja assets not being bundled in frontend
yutotakano Mar 8, 2026
2be9850
Merge branch 'feedback-ninja' into 'master'
yutotakano Mar 8, 2026
7144b16
Merge remote-tracking branch 'ethz/master' into upstream-integration
yutotakano Mar 12, 2026
ad2e041
Update GitHub workflow to use uv instead of pip
yutotakano Mar 12, 2026
6a1d128
Address eslint errors
yutotakano Mar 12, 2026
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
17 changes: 9 additions & 8 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,12 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Cache pip dependencies
uses: actions/cache@v4
- name: Set up uv
uses: astral-sh/setup-uv@v6
with:
path: backend/.cache/pip
key: ${{ runner.os }}-pip-dependencies-${{ hashFiles('backend/requirements.txt') }}
version: "0.10.7"
enable-cache: true
cache-dependency-glob: backend/uv.lock

- name: Install mc
# Install mc so that we can create the community-solutions bucket in minio
Expand All @@ -73,10 +74,10 @@ jobs:
run: |
apt update && apt install -y --no-install-recommends poppler-utils

- name: Install pip dependencies
- name: Install Python dependencies
run: |
pip3 install -r backend/requirements.txt
pip3 install tblib
cd backend
uv sync --locked

- name: Make/copy files
# Make/copy files (same as Dockerfile definition) to make resources availabe to tests
Expand All @@ -100,7 +101,7 @@ jobs:
SIP_S3_FILES_USE_SSL: false
run: |
cd backend
python3 manage.py test --parallel # parallel speeds up by approx 4x.
uv run manage.py test --parallel # parallel speeds up by approx 4x.

typecheck-lint:
name: Frontend Typecheck & Lint
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ __pycache__
temp-gen
data
.envrc
.env
shell.nix
.direnv
keys
mise.local.toml
4 changes: 4 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Any repo-wide pre-commit hooks go here.
# Otherwise, backend- and frontend-specific hooks are in their
# respective configs in each directory.
repos: []
58 changes: 35 additions & 23 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,28 @@ ARG git_commit="<none>"

FROM eu.gcr.io/vseth-public/base:echo AS backend
LABEL maintainer='cat@vis.ethz.ch'

WORKDIR /app

RUN mkdir intermediate_pdf_storage && chown app-user:app-user intermediate_pdf_storage

COPY ./backend/requirements.txt ./requirements.txt
RUN apt-get update -y
RUN apt-get install -y --no-install-recommends \
python3 python3-pip \
python3-setuptools python3-cryptography \
smbclient poppler-utils \
pgbouncer
RUN pip3 install -r requirements.txt
# install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
smbclient poppler-utils \
pgbouncer
# slightly minimize docker image
RUN rm -rf /var/lib/apt/lists/*

COPY ./backend/ ./
# install python dependencies
COPY --from=astral/uv:0.10 /uv /bin/
COPY ./backend/pyproject.toml ./backend/uv.lock ./backend/.python-version ./

# Temporarily switch to non-root user to install deps and temp write dirs, since
# cinit will run the final process as app-user and won't be able to access
# files created by root. Easiser than chowning files after creation.
USER app-user
RUN uv sync --locked --no-dev
RUN mkdir intermediate_pdf_storage
USER root

COPY ./backend/ ./
COPY ./frontend/public/exam10.pdf ./exam10.pdf
COPY ./frontend/public/static ./static

Expand All @@ -40,13 +45,14 @@ ENV PYTHONUNBUFFERED True
COPY ./pgbouncer ./pgbouncer
COPY cinit.yml /etc/cinit.d/community-solutions.yml

# -------------------------------

FROM node:20-alpine AS frontend-base

WORKDIR /usr/src/app
COPY ./frontend/package.json \
./frontend/yarn.lock \
./frontend/index.html .
./frontend/yarn.lock \
./frontend/index.html ./

RUN yarn --ignore-engines

Expand All @@ -56,34 +62,41 @@ ARG git_branch
ARG git_commit

COPY ./frontend/tsconfig.json \
./frontend/postcss.config.cjs \
./frontend/vite.config.ts \
./frontend/eslint.config.mjs \
./frontend/.env.production \
./frontend/.prettierrc.json .
./frontend/postcss.config.cjs \
./frontend/vite.config.ts \
./frontend/eslint.config.mjs \
./frontend/.env.production \
./frontend/.prettierrc.json ./
COPY ./frontend/public ./public
COPY ./frontend/src ./src
ENV VITE_GIT_BRANCH=${git_branch}
ENV VITE_GIT_COMMIT=${git_commit}
RUN yarn run build

# -------------------------------

FROM backend AS combined

COPY --from=frontend-build /usr/src/app/build/manifest.json \
/usr/src/app/build/favicon.ico .
/usr/src/app/build/favicon.ico ./
COPY --from=frontend-build /usr/src/app/build/index.html ./templates/index.html
COPY --from=frontend-build /usr/src/app/build/static ./static

# Bundle Django/app package static assets (e.g. Django Ninja docs UI files)
# into STATIC_ROOT for production serving.
RUN uv run manage.py collectstatic --noinput

EXPOSE 80

# -------------------------------

# Development-only stages
# Backend
FROM backend AS backend-hotreload

ENV IS_DEBUG true
CMD python3 manage.py migrate \
&& python3 manage.py runserver 0:8081
CMD uv run manage.py migrate \
&& uv run manage.py runserver 0:8081

# Frontend
FROM frontend-base AS frontend-dev
Expand All @@ -96,4 +109,3 @@ CMD ["yarn", "start-docker"]

# Production build as final result
FROM combined

Loading
Loading