Skip to content

Commit e22fcfd

Browse files
Merge branch 'v3' of github.com:uzh-bf/klicker-uzh into clean-argocd
# Conflicts: # deploy/charts/klicker-uzh-v2/Chart.yaml
2 parents 0a04f51 + 5326488 commit e22fcfd

188 files changed

Lines changed: 8741 additions & 826 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/v3_chat-prod.yml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: Build Docker image for chat (Production)
2+
3+
on:
4+
push:
5+
tags: ['v*.*.*']
6+
7+
env:
8+
REGISTRY: ghcr.io
9+
IMAGE_NAME: ${{ github.repository }}/chat
10+
11+
jobs:
12+
build:
13+
runs-on: ubuntu-latest
14+
permissions:
15+
contents: read
16+
packages: write
17+
steps:
18+
- name: Checkout repository
19+
uses: actions/checkout@v3
20+
21+
- name: Set up QEMU
22+
uses: docker/setup-qemu-action@v2
23+
24+
- name: Set up Docker Buildx
25+
uses: docker/setup-buildx-action@v2
26+
27+
- name: Log into registry ${{ env.REGISTRY }}
28+
uses: docker/login-action@v2
29+
with:
30+
registry: ${{ env.REGISTRY }}
31+
username: ${{ github.actor }}
32+
password: ${{ secrets.GITHUB_TOKEN }}
33+
34+
- name: Extract Docker metadata
35+
id: meta
36+
uses: docker/metadata-action@v4
37+
with:
38+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
39+
40+
- name: Build and push Docker image
41+
uses: docker/build-push-action@v5
42+
with:
43+
context: .
44+
file: apps/chat/Dockerfile
45+
push: true
46+
tags: ${{ steps.meta.outputs.tags }}
47+
labels: ${{ steps.meta.outputs.labels }}
48+
build-args: |
49+
NEXT_PUBLIC_ENV=${{ startsWith(github.ref, 'refs/tags/') && 'production' || 'staging' }}

.github/workflows/v3_chat-qa.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Build Docker image for chat (QA)
2+
3+
on:
4+
push:
5+
branches:
6+
- 'v3'
7+
- 'v3*'
8+
pull_request:
9+
# branches: [ "v3" ]
10+
types: [opened, synchronize, reopened, ready_for_review]
11+
paths:
12+
- 'apps/chat/**'
13+
- '.github/workflows/v3_chat**'
14+
15+
concurrency:
16+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref_name }}
17+
cancel-in-progress: true
18+
19+
env:
20+
REGISTRY: ghcr.io
21+
IMAGE_NAME: ${{ github.repository }}/chat
22+
23+
jobs:
24+
build:
25+
if: github.event.pull_request.draft == false
26+
runs-on: ubuntu-latest
27+
permissions:
28+
contents: read
29+
packages: write
30+
steps:
31+
- name: Checkout repository
32+
uses: actions/checkout@v3
33+
34+
- name: Replace .env.production with .env.qa
35+
shell: bash
36+
run: |
37+
rm apps/chat/.env.production
38+
mv apps/chat/.env.qa apps/chat/.env.production
39+
40+
- name: Set up QEMU
41+
uses: docker/setup-qemu-action@v2
42+
43+
- name: Set up Docker Buildx
44+
uses: docker/setup-buildx-action@v2
45+
46+
- name: Log into registry ${{ env.REGISTRY }}
47+
uses: docker/login-action@v2
48+
with:
49+
registry: ${{ env.REGISTRY }}
50+
username: ${{ github.actor }}
51+
password: ${{ secrets.GITHUB_TOKEN }}
52+
53+
- name: Extract Docker metadata
54+
id: meta
55+
uses: docker/metadata-action@v4
56+
with:
57+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
58+
59+
- name: Build and push Docker image
60+
uses: docker/build-push-action@v5
61+
with:
62+
context: .
63+
file: apps/chat/Dockerfile
64+
push: ${{ github.event_name != 'pull_request' }}
65+
tags: ${{ steps.meta.outputs.tags }}
66+
labels: ${{ steps.meta.outputs.labels }}
67+
build-args: |
68+
NEXT_PUBLIC_ENV=${{ startsWith(github.ref, 'refs/tags/') && 'production' || 'staging' }}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ util/backup/dumps
3434
dist/
3535
trees/
3636

37+
.idea/
3738
tsconfig.tsbuildinfo

.vscode/launch.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@
2929
"url": "https://office.klicker.com",
3030
"webRoot": "${workspaceFolder}/apps/office-addin"
3131
},
32+
{
33+
"name": "Launch Chrome (chat)",
34+
"request": "launch",
35+
"type": "chrome",
36+
"url": "https://chat.klicker.com",
37+
"webRoot": "${workspaceFolder}/apps/chat"
38+
},
3239
{
3340
"name": "Attach to Node Functions",
3441
"type": "node",

CHANGELOG.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,59 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
## [3.4.0-alpha.18](https://github.com/uzh-bf/klicker-uzh/compare/v3.4.0-alpha.17...v3.4.0-alpha.18) (2025-09-18)
6+
7+
8+
### Bug Fixes
9+
10+
* **ci:** add CI workflow for chat production image ([e905e1b](https://github.com/uzh-bf/klicker-uzh/commit/e905e1b4fc08b8c1d24c6df6ebc4e7913cb28b5b))
11+
12+
13+
### Enhancements
14+
15+
* **packages/graphql:** instead of unlinking, set expiration date on instance keys within block closure operation ([#4927](https://github.com/uzh-bf/klicker-uzh/issues/4927)) ([fc7b6a7](https://github.com/uzh-bf/klicker-uzh/commit/fc7b6a769fa15041354891ea3c0d180e13b4896a))
16+
* show owner permission as disabled entry on sharing dialog ([#4923](https://github.com/uzh-bf/klicker-uzh/issues/4923)) ([675b5f1](https://github.com/uzh-bf/klicker-uzh/commit/675b5f1ccc7931648f781e2fc328a5912cde2801))
17+
18+
## [3.4.0-alpha.17](https://github.com/uzh-bf/klicker-uzh/compare/v3.4.0-alpha.16...v3.4.0-alpha.17) (2025-09-17)
19+
20+
21+
### Features
22+
23+
* **apps/chat:** add new chatbot frontend ([#4863](https://github.com/uzh-bf/klicker-uzh/issues/4863)) ([0f6ec47](https://github.com/uzh-bf/klicker-uzh/commit/0f6ec472a675d14ffc79ab66c6c179ca454768e2))
24+
25+
## [3.4.0-alpha.16](https://github.com/uzh-bf/klicker-uzh/compare/v3.4.0-alpha.15...v3.4.0-alpha.16) (2025-09-17)
26+
27+
28+
### Bug Fixes
29+
30+
* **apps/frontend-manage:** ensure that scoring can be customized for both gamified and assessment live quizzes ([#4924](https://github.com/uzh-bf/klicker-uzh/issues/4924)) ([71ef2e2](https://github.com/uzh-bf/klicker-uzh/commit/71ef2e298d346c19d7e2ba04e7aa13dad1c79f6c))
31+
* **apps/frontend-pwa:** make sure that repsonded at date is loaded correctly for submitted responses ([ed0acda](https://github.com/uzh-bf/klicker-uzh/commit/ed0acda4fcd698e1ac99bcda5dbcae1fea7df6d7))
32+
* **packages/graphql:** ensure that only course re-assignment is blocked for non-admins on course ([933c977](https://github.com/uzh-bf/klicker-uzh/commit/933c97781044ecf7d431112679407ecf211ed267))
33+
* **packages/graphql:** make sure that live quiz pins are modified only in the required cases ([#4925](https://github.com/uzh-bf/klicker-uzh/issues/4925)) ([0426a40](https://github.com/uzh-bf/klicker-uzh/commit/0426a401611a9c489f85ac61a9f4abec8a7f4189))
34+
* **packages/shared-components:** correctly validate case study case status on response loading ([07cf502](https://github.com/uzh-bf/klicker-uzh/commit/07cf502852042fd9595696d73199892abfccd1f4))
35+
36+
## [3.4.0-alpha.15](https://github.com/uzh-bf/klicker-uzh/compare/v3.4.0-alpha.14...v3.4.0-alpha.15) (2025-09-16)
37+
38+
39+
### Bug Fixes
40+
41+
* **apps/frontend-pwa:** resolve validation issues for selection questions with partially missing responses ([c32a38d](https://github.com/uzh-bf/klicker-uzh/commit/c32a38d8718537e8cafc99bc6ef86d6c30d12efd))
42+
* **cypress:** change the existing assessment test case to cover pin-protected quizzes instead ([#4922](https://github.com/uzh-bf/klicker-uzh/issues/4922)) ([447e7e9](https://github.com/uzh-bf/klicker-uzh/commit/447e7e945798ce61356c4f57a9cd9e08cc36dea9))
43+
44+
## [3.4.0-alpha.14](https://github.com/uzh-bf/klicker-uzh/compare/v3.4.0-alpha.13...v3.4.0-alpha.14) (2025-09-16)
45+
46+
47+
### Bug Fixes
48+
49+
* **apps/frontend-manage:** show correct tooltips when hovering over one-dimensional scatter plot items (case study evaluation) ([47b6997](https://github.com/uzh-bf/klicker-uzh/commit/47b69971c893285c7fe3d86bfb4df6df336d6b41))
50+
* **packages/util:** ensure that cache results are correctly loaded for selection and case study questions ([8950660](https://github.com/uzh-bf/klicker-uzh/commit/8950660bef8f5b6a0b7ab81ecf3e772f96fde5d4))
51+
* treat cleared answers for selection questions as missing answers ([#4919](https://github.com/uzh-bf/klicker-uzh/issues/4919)) ([cbb661b](https://github.com/uzh-bf/klicker-uzh/commit/cbb661bc258ade030bec385aa25a4d2327194b3c))
52+
53+
54+
### Enhancements
55+
56+
* **apps/frontend-manage:** add possibility to show complete live quiz qr modal on evaluation ([#4921](https://github.com/uzh-bf/klicker-uzh/issues/4921)) ([22587e4](https://github.com/uzh-bf/klicker-uzh/commit/22587e4b75120b88fdd38b4329716dd8836b6c7d))
57+
558
## [3.4.0-alpha.13](https://github.com/uzh-bf/klicker-uzh/compare/v3.4.0-alpha.12...v3.4.0-alpha.13) (2025-09-16)
659

760

_run_app_dependencies.sh

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,24 @@ determine_proxy() {
3535
esac
3636
}
3737

38+
confirm() {
39+
while true; do
40+
printf "%s [Y/n] " "$1"
41+
read -r response
42+
case "$response" in
43+
[yY][eE][sS]|[yY]|"")
44+
return 0
45+
;;
46+
[nN][oO]|[nN])
47+
return 1
48+
;;
49+
*)
50+
echo "Please answer y or n."
51+
;;
52+
esac
53+
done
54+
}
55+
3856
# Ensure docker services are stopped when the script exits or is interrupted
3957
cleanup_called=0
4058
cleanup() {
@@ -83,23 +101,28 @@ docker compose up --build -d postgres redis_exec redis_assessment redis_cache "$
83101
exit 1
84102
}
85103

86-
pnpm run build
104+
if confirm "Run pnpm run build?"; then
105+
pnpm run build
106+
else
107+
echo "Skipping pnpm run build"
108+
fi
87109

88110
# create hatchet client token (switch script for cypress/test mode)
89111
if [ "$MODE" = "cypress" ]; then
90112
echo "Using cypress hatchet token script"
91113
./util/_create_hatchet_token_cypress.sh
92114

93-
# reset prisma database after tokens are created
94-
echo "Resetting Prisma database (pnpm run prisma:reset)"
95-
pnpm run prisma:reset -f || {
96-
echo "Prisma reset failed" >&2
97-
exit 1
98-
}
115+
# reset prisma database after tokens are created
116+
echo "Resetting Prisma database (pnpm run prisma:reset)"
117+
pnpm run prisma:reset -f || {
118+
echo "Prisma reset failed" >&2
119+
exit 1
120+
}
99121
else
100122
echo "Using local hatchet token script"
101123
./util/_create_hatchet_token.sh
102124

125+
if confirm "Run Prisma database setup (pnpm run prisma:setup)?"; then
103126
# prepare prisma database after tokens are created
104127
echo "Preparing Prisma database (pnpm run prisma:setup)"
105128
# prisma:setup may prompt for a destructive reset; if the user declines,
@@ -114,6 +137,9 @@ else
114137
# Try a non-destructive push to keep the schema in sync; do not fail the script if this also fails.
115138
pnpm run --filter @klicker-uzh/prisma prisma:push || echo "Prisma push failed; you may need to run migrations manually."
116139
fi
140+
else
141+
echo "Skipping Prisma database setup"
142+
fi
117143
fi
118144

119145
docker compose logs -f

apps/auth/.env.production

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ APP_ORIGIN_MANAGE=https://manage.klicker.uzh.ch
88
APP_ORIGIN_CONTROL=https://control.klicker.uzh.ch
99
APP_ORIGIN_LTI=https://lti.klicker.uzh.ch
1010
APP_ORIGIN_AUTH=https://auth.klicker.uzh.ch
11-
APP_ORIGIN_ASSESSMENT_API=https://chat.klicker.uzh.ch
11+
APP_ORIGIN_CHAT=https://chat.klicker.uzh.ch
12+
APP_ORIGIN_ASSESSMENT_API=https://assessment-api.klicker.uzh.ch
1213
APP_ORIGIN_ASSESSMENT_PWA=https://assessment.klicker.uzh.ch
1314

1415
NEXT_PUBLIC_PWA_URL=$APP_ORIGIN_PWA

apps/auth/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@klicker-uzh/auth",
3-
"version": "3.4.0-alpha.13",
3+
"version": "3.4.0-alpha.18",
44
"license": "AGPL-3.0",
55
"dependencies": {
66
"@auth/prisma-adapter": "2.10.0",

apps/backend-docker/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@klicker-uzh/backend-docker",
3-
"version": "3.4.0-alpha.13",
3+
"version": "3.4.0-alpha.18",
44
"license": "AGPL-3.0",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

apps/chat/.env.development

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
NEXT_PUBLIC_PWA_URL=https://pwa.klicker.com
2+
NEXT_PUBLIC_CHAT_URL=https://chat.klicker.com
3+
NEXT_PUBLIC_AVATAR_BASE_PATH="https://sos-ch-dk-2.exo.io/klicker-prod/avatars"

0 commit comments

Comments
 (0)