From 84c0060cc6012a006a244d4e389106807eac741b Mon Sep 17 00:00:00 2001 From: Renku Bot Date: Wed, 7 Feb 2024 13:00:34 +0000 Subject: [PATCH 01/23] chore: create release release-0.48.x --- CHANGELOG.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 12d757c3f4..d2e5dc9958 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,5 +1,10 @@ .. _changelog: +release-0.48.x +-------------- + + + 0.47.1 ------ From 625f5ab3d91b491c19424bca5baa5c694bc2ddc9 Mon Sep 17 00:00:00 2001 From: Lorenzo Date: Wed, 7 Feb 2024 12:01:00 +0100 Subject: [PATCH 02/23] chore: bump ui version to 3.20.0 --- CHANGELOG.rst | 39 ++++++++++++++++++++++++++++++++++-- helm-chart/renku/values.yaml | 4 ++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d2e5dc9958..eaa81982f6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,8 +1,42 @@ .. _changelog: -release-0.48.x --------------- +0.48.0 +------ + +User-Facing Changes +~~~~~~~~~~~~~~~~~~~ + +**🌟 New Features** +- πŸ“œ **UI**: Show terms of use and privacy policy in the help section + (`#2954 `_). + +**✨ Improvements** + +- πŸ–Œ **UI**: Improve appearance of templates on new project page + (`#2999 `_). +- πŸ›‘ **UI**: Unify appearance of project settings alerts + (`#3001 `_). + +**🐞 Bug Fixes** + +- **UI**: Restore logged in/out notifications + (`#3014 `_). +- **UI**: Hide button to add storage on deployments not supporting external storages + (`#3001 `_). + +Internal Changes +~~~~~~~~~~~~~~~~ + +**Improvements** + +- **UI**: Add initial alpha implementation of Renku 1.0 projects + (`#2875 `_). + +Individual components +~~~~~~~~~~~~~~~~~~~~~~ + +- `renku-ui 3.20.0 `_ 0.47.1 @@ -11,6 +45,7 @@ release-0.48.x This release only includes changes to the documentation and updates to the acceptance tests. It doesn't bring any new features or bug fixes. + 0.47.0 ------ diff --git a/helm-chart/renku/values.yaml b/helm-chart/renku/values.yaml index 61f4d8b985..bc15ad9450 100644 --- a/helm-chart/renku/values.yaml +++ b/helm-chart/renku/values.yaml @@ -613,7 +613,7 @@ ui: replicaCount: 1 image: repository: renku/renku-ui - tag: "3.19.0" + tag: "3.20.0" pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -772,7 +772,7 @@ ui: keepCookies: [] image: repository: renku/renku-ui-server - tag: "3.19.0" + tag: "3.20.0" pullPolicy: IfNotPresent imagePullSecrets: [] nameOverride: "" From 4df0871a9a7c7ce7668441a186cd188ca0ce4384 Mon Sep 17 00:00:00 2001 From: Lorenzo Date: Wed, 7 Feb 2024 12:01:57 +0100 Subject: [PATCH 03/23] chore: bump cypress-io/github-action from 5 to 6 --- .github/workflows/renku-dev-test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/renku-dev-test.yaml b/.github/workflows/renku-dev-test.yaml index 9f922efd99..d02c960016 100644 --- a/.github/workflows/renku-dev-test.yaml +++ b/.github/workflows/renku-dev-test.yaml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4.1.1 - - uses: cypress-io/github-action@v5 + - uses: cypress-io/github-action@v6 id: cypress env: TEST_EMAIL: renku@datascience.ch From 2d7d1c3ccb233f7a1977f6dac88db5c1cce3275a Mon Sep 17 00:00:00 2001 From: Chandrasekhar Ramakrishnan Date: Mon, 29 Jan 2024 11:52:43 +0100 Subject: [PATCH 04/23] build: make configuration of privacy policy more flexible See https://github.com/SwissDataScienceCenter/renku-ui/issues/2954 --- docs/how-to-guides/admin/privacycookie.rst | 24 ++++++----- helm-chart/renku/templates/NOTES.txt | 2 +- .../templates/ui/ui-client-configmap.yaml | 20 ++++++++- .../ui/ui-client-deployment-template.yaml | 17 +++++--- helm-chart/renku/values.yaml | 5 ++- helm-chart/values.yaml.changelog.md | 42 ++++++++++++------- 6 files changed, 73 insertions(+), 37 deletions(-) diff --git a/docs/how-to-guides/admin/privacycookie.rst b/docs/how-to-guides/admin/privacycookie.rst index d71e64c72c..6c9c904090 100644 --- a/docs/how-to-guides/admin/privacycookie.rst +++ b/docs/how-to-guides/admin/privacycookie.rst @@ -3,22 +3,24 @@ User interface configuration options ------------------------------------ -Privacy page -~~~~~~~~~~~~ +Privacy page and Terms of Use +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The UI has a privacy page with a completely configurable content, suited for showing -any policy/terms related information, like the `Privacy Policy Statement` or the -`Terms of Use`. +The UI can be configured to show a `Privacy Policy` and `Terms of Use`. These are +displayed under the `Help` section of the UI. -The content is read from a ``ConfigMap``. You need to configure the values in -``ui.privacy.page`` to enable the feature and set the reference ConfigMap name and key. -Both ``ui.privacy.enabled`` and ``ui.privacy.page.enabled`` need to be ``true`` for -enabling the privacy page. +For each of these, the content is read from a ``ConfigMap``. You need to configure +the values in ``ui.client.privacy.page`` to enable the feature and set the reference +ConfigMap name and key. If ``ui.client.privacy.page.enabled`` is ``true``, then the privacy +policy and terms of use will be shown in the UI, with content taken from the ConfigMap +specified by ``ui.client.privacy.page.configMapName`` at the key +``ui.client.privacy.page.configMapPolicyKey`` for the privacy policy and +``ui.client.privacy.page.configMapTermsKey`` for the terms of use. .. note:: If you don't set the ConfigMap name and key, - `a sample `_ + `a sample `_ will be used instead. You can start from it as a template to create your customized ConfigMap. The `Markdown syntax `_ is fully supported for the @@ -33,7 +35,7 @@ for anonymous users (i.e. without an account or not currently logged in). To com international laws, it's strongly advised to explicitly require consent to the user for storing these data and using cookies. -To activate this feature, please set ``ui.privacy.enabled: true``. We have already configured a +To activate this feature, please set ``ui.privacy.banner.enabled: true``. We have already configured a default cookie banner to inform the users about the aforementioned requirements and points to point them to the privacy page for further details. diff --git a/helm-chart/renku/templates/NOTES.txt b/helm-chart/renku/templates/NOTES.txt index c1ea9777d7..d0ab572768 100644 --- a/helm-chart/renku/templates/NOTES.txt +++ b/helm-chart/renku/templates/NOTES.txt @@ -9,7 +9,7 @@ can be accessed using the following one-liner (you need to have jq installed). kubectl get secrets -n {{ .Release.Namespace }} {{ template "renku.fullname" . }} -o json | jq -r .data.users | base64 --decode {{- end -}} -{{ if .Values.ui.client.privacy.enabled -}} +{{ if or .Values.ui.client.privacy.banner.enabled .Values.ui.client.privacy.page.enabled -}} You may need to customize privacy values for your RenkuLab deployment (E.G. the Privacy page). Please refer to the following documentation: https://renku.readthedocs.io/en/latest/admin/index.html#additional-configurations {{ end }} diff --git a/helm-chart/renku/templates/ui/ui-client-configmap.yaml b/helm-chart/renku/templates/ui/ui-client-configmap.yaml index d81939eded..75c0e3cfcd 100644 --- a/helm-chart/renku/templates/ui/ui-client-configmap.yaml +++ b/helm-chart/renku/templates/ui/ui-client-configmap.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: {{ template "ui.fullname" . }}-privacy-sample + name: {{ template "renku.fullname" . }}-privacy-sample labels: app: ui chart: {{ template "renku.chart" . }} @@ -17,7 +17,7 @@ data: ## Configure the Privacy Page You should customize the privacy statement by cloning the sample ConfigMap ``*-sample-privacy`` and adjust the content. Any markdown formatted text works. Feel free to change the ConfigMap key and to pick any name, - be sure to properly configure the values ``ui.privacy.page`` before upgrading your RenkuLab deployment. + be sure to properly configure the values ``ui.client.privacy.page`` before upgrading your RenkuLab deployment. If the mapping is enabled but no text is provided (empty content, wrong ``privacy.page`` values, missing ConfigMap, etc.), the links in the navigation bars will be hidden and users manually accessing the privacy page will get a warning. @@ -25,3 +25,19 @@ data: ## Apply the changes If you edit the ConfigMap content and you don't upgrade the deployment from helm, keep in mind that the ui pod needs to be manually re-deployed in order to apply the changes to the privacy page. + terms: | + # Terms of Use + The content of this page is only a template. + ## Information + If you are reading this message, the Terms of Use page content has not been updated for this RenkuLab deployment. + The following content is intended to be read by a RenkuLab admin. + ## Configure the Terms of Use + You should customize the terms of use by cloning the sample ConfigMap ``*-sample-privacy`` and adjust the + content. Any markdown formatted text works. Feel free to change the ConfigMap key and to pick any name, + be sure to properly configure the values ``ui.client.privacy.page`` before upgrading your RenkuLab deployment. + If the mapping is enabled but no text is provided (empty content, wrong ``privacy.page`` values, missing + ConfigMap, etc.), the links in the navigation bars will be hidden and users manually accessing the terms page + will get a warning. + ## Apply the changes + If you edit the ConfigMap content and you don't upgrade the deployment from helm, keep in mind that the + ui pod needs to be manually re-deployed in order to apply the changes to the terms page. diff --git a/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml b/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml index 0d554fc275..ae58ef7a41 100644 --- a/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml +++ b/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml @@ -25,14 +25,17 @@ spec: app: ui release: {{ .Release.Name }} spec: - {{- if and .Values.ui.client.privacy.enabled .Values.ui.client.privacy.page.enabled }} + {{- if .Values.ui.client.privacy.page.enabled }} volumes: - name: privacy configMap: name: {{ .Values.ui.client.privacy.page.configMapName | default (printf "%s-privacy-sample" (include "renku.fullname" .)) | quote }} items: - - key: {{ .Values.ui.client.privacy.page.configMapKey | default (printf "privacy_statement") | quote }} + - key: {{ .Values.ui.client.privacy.page.configMapPolicyKey | default (printf "privacy_statement") | quote }} path: statement.md + - key: {{ .Values.ui.client.privacy.page.configMapTermsKey | default (printf "terms") | quote }} + path: terms.md + {{- end }} automountServiceAccountToken: {{ .Values.global.debug }} containers: @@ -43,7 +46,7 @@ spec: - name: http containerPort: 8080 protocol: TCP - {{- if and .Values.ui.client.privacy.enabled .Values.ui.client.privacy.page.enabled }} + {{- if .Values.ui.client.privacy.page.enabled }} volumeMounts: - mountPath: /config-privacy name: privacy @@ -75,9 +78,11 @@ spec: {{- end }} - name: ANONYMOUS_SESSIONS value: {{ .Values.global.anonymousSessions.enabled | default (printf "false") | quote }} - - name: PRIVACY_ENABLED - value: {{ .Values.ui.client.privacy.enabled | quote }} - {{- if .Values.ui.client.privacy.enabled }} + - name: PRIVACY_BANNER_ENABLED + value: {{ .Values.ui.client.privacy.banner.enabled | quote }} + - name: TERMS_PAGES_ENABLED + value: {{ .Values.ui.client.privacy.page.enabled | quote }} + {{- if .Values.ui.client.privacy.banner.enabled }} - name: PRIVACY_BANNER_CONTENT value: {{ .Values.ui.client.privacy.banner.content | default (printf "") | b64enc | quote }} - name: PRIVACY_BANNER_LAYOUT diff --git a/helm-chart/renku/values.yaml b/helm-chart/renku/values.yaml index bc15ad9450..e7ed993f76 100644 --- a/helm-chart/renku/values.yaml +++ b/helm-chart/renku/values.yaml @@ -696,12 +696,13 @@ ui: # privacy.page.configMapName value. As a reference, you can use the sample configMap generated when # enabling the feature. privacy: - enabled: false page: enabled: false #configMapName: privacy-page - #configMapKey: privacy_statement + #configMapPolicyKey: privacy_statement + #configMapTermsKey: terms banner: + enabled: false content: | This website requires cookies in order to ensure basic functionality. By clicking or navigating the site, you consent to the use of cookies in accordance with diff --git a/helm-chart/values.yaml.changelog.md b/helm-chart/values.yaml.changelog.md index 1aa578b668..c4b2e1b961 100644 --- a/helm-chart/values.yaml.changelog.md +++ b/helm-chart/values.yaml.changelog.md @@ -5,23 +5,35 @@ For changes that require manual steps other than changing values, please check o Please follow this convention when adding a new row * ` - **:
` +## Upgrading to Renku 0.48.0 + +The handling of privacy policy and terms of service content has been slightly changed to make +it more flexible. + +* DELETE `ui.privacy.enabled` has been removed to make the privacy policy and cookie banner configurable independently. +* NEW `ui.privacy.banner.enabled` allows turning on the cookie banner (defaults to false). +* DELETE `ui.client.privacy.page.configMapKey` which has been renamed to `ui.client.privacy.page.configMapPolicyKey`. +* NEW `ui.client.privacy.page.configMapPolicyKey` the key in the ConfigMap where the content for the privacy policy is located. +* NEW `ui.client.privacy.page.configMapTermsKey` the key in the ConfigMap where the content for the terms of use is located. + + ## Upgrading to Renku 0.47.0 -We completely overhauled how mounting cloud storage in sessions works, relying on a new CSI driver based on RClone -which has to be installed in the cluster for things to work. Either install it as part of Renku using the flag -mentioned below or install the csi-rclone chart manually and set the correct storage class in the values for the +We completely overhauled how mounting cloud storage in sessions works, relying on a new CSI driver based on RClone +which has to be installed in the cluster for things to work. Either install it as part of Renku using the flag +mentioned below or install the csi-rclone chart manually and set the correct storage class in the values for the notebooks service. * NEW `noteboks.cloudstorage.enabled` - set to `true` to enable mounting cloud storage in sessions. * DELETE `notebooks.cloudstorage.s3.enabed` - superseeded by previous property. -* NEW `notebooks.cloudstorage.storageClass` - the storage class for the CSI Rclone chart, needed for new cloudstorage +* NEW `notebooks.cloudstorage.storageClass` - the storage class for the CSI Rclone chart, needed for new cloudstorage to work. The default `csi-rclone` should be fine unless already in use. -* NEW `global.csi-rclone.install` - if `true` installs the csi-rclone chart alongside Renku. The chart is needed for +* NEW `global.csi-rclone.install` - if `true` installs the csi-rclone chart alongside Renku. The chart is needed for cloud storage in sessions to work. -* NEW `csi-rclone.storageClassName` - the storage class name the CSI drivers uses, should match what is configured in +* NEW `csi-rclone.storageClassName` - the storage class name the CSI drivers uses, should match what is configured in the `storageClass` property mentioned above. -* NEW `csi-rclone.csiNodePlugin.tolerations` - Tolerations for the node plugin part of the CSI driver. Need to be set - in a way that allows it to be scheduled on user session nodes. By default this would mean `key=renku.io/dedicated`, +* NEW `csi-rclone.csiNodePlugin.tolerations` - Tolerations for the node plugin part of the CSI driver. Need to be set + in a way that allows it to be scheduled on user session nodes. By default this would mean `key=renku.io/dedicated`, `operator=Equal`, `value=user` and `effect=NoSchedule` @@ -82,7 +94,7 @@ Amalthea will simply use your default Kubernetes scheduler. * DELETE `amalthea.scheduler.image` - deprecated will be ignored if provided * DELETE `amalthea.scheduler.enable` - deprecated will be ignored if provided * DELETE `amalthea.scheduler.priorities` - deprecated will be ignored if provided -* NEW `amalthea.scheduler.packing` - can be used to enable a preset scheduler that will try to pack sessions on the smallest number of nodes and favor the most used nodes +* NEW `amalthea.scheduler.packing` - can be used to enable a preset scheduler that will try to pack sessions on the smallest number of nodes and favor the most used nodes * NEW `amalthea.scheduler.custom` - can be used to add any custom scheduler for Amalthea, admins just have to provide the scheduler name * EDIT `crc` - the field has been renamed to `dataService`, all child fields and functionality remains the same * NEW `global.gitlab.url` has been added and needs to be specified, this will be the single place where the Gitlab URL will be specified in future releases we will deprecated all the other Gitlab URL fields in the values file. @@ -105,14 +117,14 @@ configuration is possible from its `values.yaml` file. * EDIT - `notebooks.amalthea.*` moved to `amalthea.*` * EDIT - `notebooks.dlf-chart.*` moved to `dlf-chart.*` -In addition going forward we will follow a much stricter versioning scheme that will distinguish changes to +In addition going forward we will follow a much stricter versioning scheme that will distinguish changes to the Renku Helm chart as opposed to changes to the application. Notably: - Patch changes (i.e. `0.50.1` -> `0.50.2`) indicate that there are NO changes in the Helm chart and that only appplication level bug fixes are present in the new release. - Minor version changes (i.e. `0.50.2` -> `0.51.0`) indicate that there are NO changes in the Helm chart and that only application level new features and/or application level breaking changes are present. -- Major version changes (i.e. `0.50.0` -> `1.0.0`) will be reserved for changes in the Helm chart, either when the -values file changes or when the Helm templates change. +- Major version changes (i.e. `0.50.0` -> `1.0.0`) will be reserved for changes in the Helm chart, either when the +values file changes or when the Helm templates change. ## Upgrading to Renku 0.37.0 * EDIT - `notebooks.culling.idleThresholdSeconds` in the notebooks' values file was renamed to @@ -261,7 +273,7 @@ redis: sentinel: true existingSecret: redis-secret existingSecretPasswordKey: redis-password - + commonConfiguration: |- appendonly no save "" @@ -269,10 +281,10 @@ redis: replica: replicaCount: 3 resources: - limits: + limits: cpu: 250m memory: 256Mi - requests: + requests: cpu: 250m memory: 256Mi updateStrategy: From 737b4a86f462312a7b332e5f8c7a259f3f098429 Mon Sep 17 00:00:00 2001 From: Flora Thiebaut Date: Thu, 8 Feb 2024 13:14:52 +0100 Subject: [PATCH 05/23] build: update to latest renku/keycloak-theme --- helm-chart/renku/values.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/helm-chart/renku/values.yaml b/helm-chart/renku/values.yaml index e7ed993f76..910d81c5dd 100644 --- a/helm-chart/renku/values.yaml +++ b/helm-chart/renku/values.yaml @@ -295,7 +295,7 @@ keycloakx: enabled: false extraInitContainers: | - name: theme-provider - image: renku/keycloak-theme:4.1.3 + image: renku/keycloak-theme:4.1.5 imagePullPolicy: IfNotPresent command: - sh @@ -858,10 +858,10 @@ dlf-chart: csi-rclone: {} # This section is only relevant if you are installing csi-rclone as part of Renku ## Name of the csi storage class to use for RClone/Cloudstorage. Should be unique per cluster. - # storageClassName: csi-rclone + # storageClassName: csi-rclone # csiNodepluginRclone: # nodeSelector: {} - # Set tolerations if you have taints on your user session nodes. The csi has to run on every node + # Set tolerations if you have taints on your user session nodes. The csi has to run on every node # where it is used. # tolerations: [] # affinity: {} From b973e4991c9c82c4fe42c2eb442a6b4b9b482456 Mon Sep 17 00:00:00 2001 From: Flora Thiebaut Date: Fri, 9 Feb 2024 16:40:06 +0100 Subject: [PATCH 06/23] fix(cypress): fix the checkWorkflows test (#3488) --- cypress-tests/cypress/e2e/checkWorkflows.cy.ts | 3 ++- cypress-tests/cypress/support/commands/general.ts | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cypress-tests/cypress/e2e/checkWorkflows.cy.ts b/cypress-tests/cypress/e2e/checkWorkflows.cy.ts index da6e0670b4..d649064d2f 100644 --- a/cypress-tests/cypress/e2e/checkWorkflows.cy.ts +++ b/cypress-tests/cypress/e2e/checkWorkflows.cy.ts @@ -103,7 +103,8 @@ describe("Workflows pages", () => { .contains("span", "m") .should("be.visible"); cy.getDataCy("workflow-details") - .get("a#icon-link-5") + .contains("tr", "Default value") + .find("a") .should("be.visible") .click(); cy.get("#file-card-header") diff --git a/cypress-tests/cypress/support/commands/general.ts b/cypress-tests/cypress/support/commands/general.ts index 5fe0f25abb..9876970640 100644 --- a/cypress-tests/cypress/support/commands/general.ts +++ b/cypress-tests/cypress/support/commands/general.ts @@ -19,7 +19,7 @@ export const getIframe = (selector: string) => { .then(cy.wrap); }; -function getDataCy(value: string, exist: true) { +function getDataCy(value: string, exist?: boolean) { if (exist) return cy.get(`[data-cy=${value}]`).should("exist"); return cy.get(`[data-cy=${value}]`); } @@ -33,8 +33,8 @@ declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace Cypress { interface Chainable { - getDataCy(value: string, exist?: boolean); - getIframe(selector: string): Chainable; + getDataCy: typeof getDataCy; + getIframe: typeof getIframe; } } } From 0f9058453eb4633d45d58752e87e184fcece2bae Mon Sep 17 00:00:00 2001 From: Ralf Grubenmann Date: Mon, 12 Feb 2024 10:13:42 +0100 Subject: [PATCH 07/23] chore: bump csi-rclone (#3492) --- helm-chart/renku/requirements.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm-chart/renku/requirements.yaml b/helm-chart/renku/requirements.yaml index f28bdc16d7..6b13e25c57 100644 --- a/helm-chart/renku/requirements.yaml +++ b/helm-chart/renku/requirements.yaml @@ -30,6 +30,6 @@ dependencies: condition: notebooks.cloudstorage.s3.installDatashim - name: csi-rclone repository: "https://swissdatasciencecenter.github.io/helm-charts/" - version: "0.1.5" + version: "0.1.6" condition: global.csi-rclone.install From b428de076621fbc847457b13b494139151c2b167 Mon Sep 17 00:00:00 2001 From: RenkuBot <53332360+RenkuBot@users.noreply.github.com> Date: Mon, 12 Feb 2024 14:38:55 +0100 Subject: [PATCH 08/23] Update from auto-update/renku-ui-3.20.1 (#3485) Update UI to 3.20.1 (bug fixes). --- CHANGELOG.rst | 4 ++++ helm-chart/renku/values.yaml | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index eaa81982f6..bfe0462263 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -24,6 +24,9 @@ User-Facing Changes (`#3014 `_). - **UI**: Hide button to add storage on deployments not supporting external storages (`#3001 `_). +- **UI**: Fix landing page parallax background (`#3010 `_). +- **UI**: Fix search bar styles (`#3019 `_). +- **UI**: Handle ``jsonrpc`` improper redirects (`#3017 `_, `#2966 `_). Internal Changes ~~~~~~~~~~~~~~~~ @@ -36,6 +39,7 @@ Internal Changes Individual components ~~~~~~~~~~~~~~~~~~~~~~ +- `renku-ui 3.20.1 `_ - `renku-ui 3.20.0 `_ diff --git a/helm-chart/renku/values.yaml b/helm-chart/renku/values.yaml index 910d81c5dd..f5f5e750b1 100644 --- a/helm-chart/renku/values.yaml +++ b/helm-chart/renku/values.yaml @@ -613,7 +613,7 @@ ui: replicaCount: 1 image: repository: renku/renku-ui - tag: "3.20.0" + tag: "3.20.1" pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -773,7 +773,7 @@ ui: keepCookies: [] image: repository: renku/renku-ui-server - tag: "3.20.0" + tag: "3.20.1" pullPolicy: IfNotPresent imagePullSecrets: [] nameOverride: "" From a74d47e68bb32249050d8a0fc711db3b5308364d Mon Sep 17 00:00:00 2001 From: Laura Kinkead Date: Thu, 15 Feb 2024 12:10:09 +0100 Subject: [PATCH 09/23] chore: prepare changelog --- CHANGELOG.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index bfe0462263..20226079a9 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,6 +3,9 @@ 0.48.0 ------ +Renku ``0.48.0`` introduces the ability to add a Terms of Use and Privacy Policy to +RenkuLab, as well as an asssortment of small improvements and bugfixes. + User-Facing Changes ~~~~~~~~~~~~~~~~~~~ From 9486dcc190dc182fd7b06fb9a9fd8b17ded9eeba Mon Sep 17 00:00:00 2001 From: Laura Kinkead Date: Thu, 15 Feb 2024 12:21:00 +0100 Subject: [PATCH 10/23] chore: fix spelling --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 20226079a9..2237a00aa2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,7 +4,7 @@ ------ Renku ``0.48.0`` introduces the ability to add a Terms of Use and Privacy Policy to -RenkuLab, as well as an asssortment of small improvements and bugfixes. +RenkuLab, as well as an assortment of small improvements and bug-fixes. User-Facing Changes ~~~~~~~~~~~~~~~~~~~ From 5cda99bc6513032b747239538b04110cb836271f Mon Sep 17 00:00:00 2001 From: Wes Johnson <515042+wesjdj@users.noreply.github.com> Date: Fri, 16 Feb 2024 16:43:29 +0100 Subject: [PATCH 11/23] docs: bump year to 2024 (#3497) --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 3d5e2786ac..9d6e29dfe9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -70,7 +70,7 @@ # General information about the project. project = "Renku" -copyright = "2017-2023, Swiss Data Science Center" +copyright = "2017-2024, Swiss Data Science Center" author = ( "The Renku team and other contributors (see individual repositories)" ) # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the From 677f17c950cbfed0765ce5daa33bdf8a0411592d Mon Sep 17 00:00:00 2001 From: Alessandro Degano <40891147+aledegano@users.noreply.github.com> Date: Fri, 16 Feb 2024 12:03:38 +0100 Subject: [PATCH 12/23] chore: remove Github action that opens PRs in `terraform-renku` to update Renkulab. (#3496) Going forward @yat will rely on Renovate to create a PR in `terraform-renku` that updates the version of Renkulab. --- .github/workflows/publish-helm-chart.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.github/workflows/publish-helm-chart.yml b/.github/workflows/publish-helm-chart.yml index 873d5b85a6..6a8aa913b7 100644 --- a/.github/workflows/publish-helm-chart.yml +++ b/.github/workflows/publish-helm-chart.yml @@ -40,16 +40,3 @@ jobs: if: always() outputs: chart-version: ${{ steps.vars.outputs.tag }} - rollout-renku-deployments: - runs-on: ubuntu-20.04 - needs: - - "publish-chart" - steps: - - uses: actions/checkout@v4.1.1 - with: - fetch-depth: 0 - - name: Rollout renku version - uses: SwissDataScienceCenter/renku-actions/rollout-renku-version@v1.10.0 - env: - CHART_VERSION: ${{ needs.publish-chart.outputs.chart-version }} - GITHUB_TOKEN: ${{ secrets.RENKUBOT_GITHUB_TOKEN }} From 3fe5c3e24045b3cbdb5d5e8daed9d029b159d78f Mon Sep 17 00:00:00 2001 From: Lorenzo Cavazzi <43481553+lorenzo-cavazzi@users.noreply.github.com> Date: Fri, 16 Feb 2024 15:11:43 +0100 Subject: [PATCH 13/23] fix: change the UI privacy configmap behavior (#3494) --- CHANGELOG.rst | 6 +++++ docs/how-to-guides/admin/privacycookie.rst | 27 ++++++++++--------- .../templates/ui/ui-client-configmap.yaml | 8 +++--- .../ui/ui-client-deployment-template.yaml | 14 +++++++--- helm-chart/renku/values.yaml | 11 ++++---- helm-chart/values.yaml.changelog.md | 11 ++++++++ 6 files changed, 52 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2237a00aa2..3c37c9b94e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,5 +1,11 @@ .. _changelog: +0.48.1 +------ + +Renku ``0.48.1`` only changes how the Terms of Use and Privacy Policy sections +can be customized by administrators. + 0.48.0 ------ diff --git a/docs/how-to-guides/admin/privacycookie.rst b/docs/how-to-guides/admin/privacycookie.rst index 6c9c904090..1e2472f7ed 100644 --- a/docs/how-to-guides/admin/privacycookie.rst +++ b/docs/how-to-guides/admin/privacycookie.rst @@ -9,19 +9,20 @@ Privacy page and Terms of Use The UI can be configured to show a `Privacy Policy` and `Terms of Use`. These are displayed under the `Help` section of the UI. -For each of these, the content is read from a ``ConfigMap``. You need to configure -the values in ``ui.client.privacy.page`` to enable the feature and set the reference -ConfigMap name and key. If ``ui.client.privacy.page.enabled`` is ``true``, then the privacy -policy and terms of use will be shown in the UI, with content taken from the ConfigMap -specified by ``ui.client.privacy.page.configMapName`` at the key -``ui.client.privacy.page.configMapPolicyKey`` for the privacy policy and -``ui.client.privacy.page.configMapTermsKey`` for the terms of use. - -.. note:: - - If you don't set the ConfigMap name and key, - `a sample `_ - will be used instead. You can start from it as a template to create your customized ConfigMap. +For each of these, the content is read from the ``privacy-and-terms`` ConfigMap. +You need to configure the values in ``ui.client.privacy.page`` to enable the feature. +If ``ui.client.privacy.page.enabled`` is ``true``, then the privacy +policy and terms of use will be shown in the UI. + +Mind that you need to customize the content by either changing the ``privacy_statement`` +and the ``terms`` keys in the ``privacy-and-terms`` ConfigMap, or assign a valid Markdown +text to ``ui.client.privacy.page.privacyPolicyContent`` and +``ui.client.privacy.page.termsContent``. + +If you don't customize the text, +`a sample `_ +will be used instead. You can start from it as a template to create your own +content. The `Markdown syntax `_ is fully supported for the privacy page content. diff --git a/helm-chart/renku/templates/ui/ui-client-configmap.yaml b/helm-chart/renku/templates/ui/ui-client-configmap.yaml index 75c0e3cfcd..89b46d1f0a 100644 --- a/helm-chart/renku/templates/ui/ui-client-configmap.yaml +++ b/helm-chart/renku/templates/ui/ui-client-configmap.yaml @@ -1,14 +1,14 @@ apiVersion: v1 kind: ConfigMap metadata: - name: {{ template "renku.fullname" . }}-privacy-sample + name: {{ template "renku.fullname" . }}-privacy-and-terms labels: app: ui chart: {{ template "renku.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} data: - privacy_statement: | + sample_privacy_statement: | # Privacy statement The content of this page is only a template. ## Information @@ -25,7 +25,7 @@ data: ## Apply the changes If you edit the ConfigMap content and you don't upgrade the deployment from helm, keep in mind that the ui pod needs to be manually re-deployed in order to apply the changes to the privacy page. - terms: | + sample_terms: | # Terms of Use The content of this page is only a template. ## Information @@ -41,3 +41,5 @@ data: ## Apply the changes If you edit the ConfigMap content and you don't upgrade the deployment from helm, keep in mind that the ui pod needs to be manually re-deployed in order to apply the changes to the terms page. + privacy_statement: {{ .Values.ui.client.privacy.page.privacyPolicyContent | default ("") | quote }} + terms: {{ .Values.ui.client.privacy.page.termsContent | default ("") | quote }} diff --git a/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml b/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml index ae58ef7a41..334660a7da 100644 --- a/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml +++ b/helm-chart/renku/templates/ui/ui-client-deployment-template.yaml @@ -29,11 +29,19 @@ spec: volumes: - name: privacy configMap: - name: {{ .Values.ui.client.privacy.page.configMapName | default (printf "%s-privacy-sample" (include "renku.fullname" .)) | quote }} + name: {{ printf "%s-privacy-and-terms" (include "renku.fullname" .) | quote }} items: - - key: {{ .Values.ui.client.privacy.page.configMapPolicyKey | default (printf "privacy_statement") | quote }} + {{- if .Values.ui.client.privacy.page.privacyPolicyContent }} + - key: "privacy_statement" + {{- else }} + - key: "sample_privacy_statement" + {{- end }} path: statement.md - - key: {{ .Values.ui.client.privacy.page.configMapTermsKey | default (printf "terms") | quote }} + {{- if .Values.ui.client.privacy.page.termsContent }} + - key: "terms" + {{- else }} + - key: "sample_terms" + {{- end }} path: terms.md {{- end }} diff --git a/helm-chart/renku/values.yaml b/helm-chart/renku/values.yaml index f5f5e750b1..b0ae4d8269 100644 --- a/helm-chart/renku/values.yaml +++ b/helm-chart/renku/values.yaml @@ -692,15 +692,14 @@ ui: dsn: "" environment: "" sampleRate: 0 # number between 0 and 1. (e.g., to send 20% of transactions, set 0.2.) - # If you want to enable the privacy page, please create also a configMap and set its name in the - # privacy.page.configMapName value. As a reference, you can use the sample configMap generated when - # enabling the feature. privacy: + # If you want to enable the Privacy Policy and Terms of Service pages, you shoud add your custom content + # in privacyPolicyContent and termsContent. Markdown is supported. + # As a reference, you can use the "ui-client-configmap" configMap content in the "sample" sections. page: enabled: false - #configMapName: privacy-page - #configMapPolicyKey: privacy_statement - #configMapTermsKey: terms + #privacyPolicyContent: "" + #termsContent: "" banner: enabled: false content: | diff --git a/helm-chart/values.yaml.changelog.md b/helm-chart/values.yaml.changelog.md index c4b2e1b961..41fdf5ee1d 100644 --- a/helm-chart/values.yaml.changelog.md +++ b/helm-chart/values.yaml.changelog.md @@ -5,6 +5,17 @@ For changes that require manual steps other than changing values, please check o Please follow this convention when adding a new row * ` - **:
` +## Upgrading to Renku 0.48.1 + +The handling of privacy policy and terms of service content has been fine tuned. + +* DELETE `ui.client.privacy.page.configMapName` has been removed. +* DELETE `ui.client.privacy.page.configMapPolicyKey` has been removed. +* DELETE `ui.client.privacy.page.configMapTermsKey` has been removed. +* NEW ``ui.client.privacy.page.privacyPolicyContent`` to customize the content of the Privacy Policy page (supports Markdown). +* NEW ``ui.client.privacy.page.termsContent`` to customize the content of the Terms of Use page (supports Markdown). + + ## Upgrading to Renku 0.48.0 The handling of privacy policy and terms of service content has been slightly changed to make From 4e2c677be764648f010a6ce977299561c318035b Mon Sep 17 00:00:00 2001 From: Ralf Grubenmann Date: Wed, 21 Feb 2024 12:30:25 +0100 Subject: [PATCH 14/23] chore: add check for open prs on release branches (#3505) --- .github/workflows/release-test.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/release-test.yml diff --git a/.github/workflows/release-test.yml b/.github/workflows/release-test.yml new file mode 100644 index 0000000000..11abe3672f --- /dev/null +++ b/.github/workflows/release-test.yml @@ -0,0 +1,28 @@ +name: Check release branch +on: + workflow_dispatch: + pull_request: + types: [opened,closed,synchronize,edited,review_requested,reopened] + branches: + - master + pull_request_review: + types: [submitted] +jobs: + check-open-prs: + if: startsWith(github.event.pull_request.head.ref, 'release-') + runs-on: ubuntu-latest + steps: + - name: Check unmerged PRs + uses: actions/github-script@v7 + with: + script: | + const prs = await github.rest.pulls.list({ + owner: context.repo.owner, + repo: context.repo.repo, + base: context.payload.pull_request.head.ref, + state: 'open' + }) + const prs_filtered = prs.data.filter((p)=>!p.draft) + if ( prs_filtered.length > 0 ) { + core.setFailed('There are umerged open PRs targetting this branch:\n'+prs_filtered.map((p)=>p.title + ' ( ' + p.html_url + ' )').join('\n')) + } From 8079be1e72eaaf9b5afe2c1ab03ca06972f6c897 Mon Sep 17 00:00:00 2001 From: Renku Bot Date: Wed, 7 Feb 2024 14:25:17 +0000 Subject: [PATCH 15/23] chore: create release 0.49.0 --- CHANGELOG.rst | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3c37c9b94e..3aeab33d30 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,5 +1,8 @@ .. _changelog: +0.49.0 +------ + 0.48.1 ------ @@ -51,7 +54,6 @@ Individual components - `renku-ui 3.20.1 `_ - `renku-ui 3.20.0 `_ - 0.47.1 ------ @@ -65,11 +67,11 @@ It doesn't bring any new features or bug fixes. This release expands Renku's cloud storage functionality in two key ways: First, mounted storages are now read **and write**, so you can use mounted storage as an active workspace for your data in a RenkuLab session. Second, we have expanded the cloud storage services you can integrate with RenkuLab. You can now -mount not only S3 buckets, but also WebDAV-based storages and Azure Blobs. - +mount not only S3 buckets, but also WebDAV-based storages and Azure Blobs. + If you use SSH sessions via the CLI, you can use cloud storage there too! Configure cloud storage for your project on RenkuLab.io, and those storages will be mounted in your remote session. Support for cloud -storage in local Renku sessions is still on our roadmap. +storage in local Renku sessions is still on our roadmap. This release also adds the ability to change which resource class your session uses when you unpause the session, in case the original resource class is now full. @@ -200,15 +202,15 @@ Internal Changes Individual components ~~~~~~~~~~~~~~~~~~~~~ -- `renku-python 2.8.2 `_ +- `renku-python 2.8.2 `_ - `renku-ui 3.17.2 `_ -- `renku-graph 2.48.2 `_ +- `renku-graph 2.48.2 `_ 0.45.1 ------ -This is a bugfix release that updates the helm chart to work with new -prometheus metrics in the renku core service, which was preventing it from +This is a bugfix release that updates the helm chart to work with new +prometheus metrics in the renku core service, which was preventing it from starting properly if metrics were enabled. In addition this release also addresses problems with expiring Gitlab access tokens when sessions are paused and resumed which caused resumed session to not be able to push to Gitlab @@ -219,8 +221,8 @@ Internal Changes **🐞 Bug Fixes** -- **Helm Chart**: update core-service deployment to allow service and rq - metrics to run side-by-side (`#3303 +- **Helm Chart**: update core-service deployment to allow service and rq + metrics to run side-by-side (`#3303 `_). - **Notebooks**: use a larger /dev/shm folder in sessions (`#1723 `_) From 89811a86bdf6f912c422cc50732b0ea8e449f31d Mon Sep 17 00:00:00 2001 From: Jakub Chrobasik Date: Mon, 19 Feb 2024 09:45:13 +0100 Subject: [PATCH 16/23] chore: logback update to 1.5.0 (#3500) --- acceptance-tests/build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acceptance-tests/build.sbt b/acceptance-tests/build.sbt index a3d00290a8..6781703f21 100644 --- a/acceptance-tests/build.sbt +++ b/acceptance-tests/build.sbt @@ -30,7 +30,7 @@ publishTo := Some(Resolver.file("Unused transient repository", file("target/unus val circeVersion = "0.14.6" -libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.4.14" +libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.5.0" libraryDependencies += "com.github.pureconfig" %% "pureconfig" % "0.17.5" % Test libraryDependencies += "eu.timepit" %% "refined" % "0.11.1" % Test libraryDependencies += "io.circe" %% "circe-core" % circeVersion % Test From 924369bfeaf04af002a96e632e9db7ee72454c54 Mon Sep 17 00:00:00 2001 From: Jakub Chrobasik Date: Tue, 20 Feb 2024 13:39:18 +0100 Subject: [PATCH 17/23] chore: scalafmt and selenium-java upgrades (#3504) * chore: scalafmt upgraded to 3.8.0 * chore: selenium-java upgraded to 4.18.1 --- acceptance-tests/.scalafmt.conf | 2 +- acceptance-tests/build.sbt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/acceptance-tests/.scalafmt.conf b/acceptance-tests/.scalafmt.conf index d37a95795b..0e06410bac 100644 --- a/acceptance-tests/.scalafmt.conf +++ b/acceptance-tests/.scalafmt.conf @@ -1,4 +1,4 @@ -version = "3.7.17" +version = "3.8.0" runner.dialect = "scala213" diff --git a/acceptance-tests/build.sbt b/acceptance-tests/build.sbt index 6781703f21..096bff56fc 100644 --- a/acceptance-tests/build.sbt +++ b/acceptance-tests/build.sbt @@ -43,7 +43,7 @@ libraryDependencies += "org.scalacheck" %% "scalacheck" libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.18" % Test libraryDependencies += "org.scalatestplus" %% "selenium-4-1" % "3.2.12.1" % Test libraryDependencies += "org.seleniumhq.selenium" % "selenium-http-jdk-client" % "4.13.0" % Test -libraryDependencies += "org.seleniumhq.selenium" % "selenium-java" % "4.17.0" % Test +libraryDependencies += "org.seleniumhq.selenium" % "selenium-java" % "4.18.1" % Test libraryDependencies += "org.slf4j" % "slf4j-log4j12" % "2.0.11" % Test libraryDependencies += "org.typelevel" %% "cats-effect" % "3.5.3" % Test libraryDependencies += "org.typelevel" %% "cats-effect-testing-scalatest" % "1.5.0" % Test From 5b83a5a31cadce3590fe15213df04b670f434110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rok=20Ro=C5=A1kar?= Date: Thu, 22 Feb 2024 09:40:25 +0100 Subject: [PATCH 18/23] chore: disable automatic PRs (#3510) --- .github/workflows/auto-reqs-update-pr.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/auto-reqs-update-pr.yml b/.github/workflows/auto-reqs-update-pr.yml index 11c63f40d4..379d95e369 100644 --- a/.github/workflows/auto-reqs-update-pr.yml +++ b/.github/workflows/auto-reqs-update-pr.yml @@ -1,8 +1,6 @@ name: Automatic requirements.yml update PR on: - push: - branches: - - 'auto-update/**' + workflow_dispatch jobs: auto-pull-request: runs-on: ubuntu-latest From 8ae46dce05bfe5bfa7a3ac3d49ed45e386e192b7 Mon Sep 17 00:00:00 2001 From: Jakub Chrobasik Date: Fri, 23 Feb 2024 09:17:15 +0100 Subject: [PATCH 19/23] chore: selenium tests libs upgrade (#3516) * chore: sbt upgrade to 1.9.9 * chore: pureconfig update to 0.17.6 --- acceptance-tests/build.sbt | 2 +- acceptance-tests/project/build.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/acceptance-tests/build.sbt b/acceptance-tests/build.sbt index 096bff56fc..4a1e4ea2c8 100644 --- a/acceptance-tests/build.sbt +++ b/acceptance-tests/build.sbt @@ -31,7 +31,7 @@ publishTo := Some(Resolver.file("Unused transient repository", file("target/unus val circeVersion = "0.14.6" libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.5.0" -libraryDependencies += "com.github.pureconfig" %% "pureconfig" % "0.17.5" % Test +libraryDependencies += "com.github.pureconfig" %% "pureconfig" % "0.17.6" % Test libraryDependencies += "eu.timepit" %% "refined" % "0.11.1" % Test libraryDependencies += "io.circe" %% "circe-core" % circeVersion % Test libraryDependencies += "io.circe" %% "circe-literal" % circeVersion % Test diff --git a/acceptance-tests/project/build.properties b/acceptance-tests/project/build.properties index abbbce5da4..04267b14af 100644 --- a/acceptance-tests/project/build.properties +++ b/acceptance-tests/project/build.properties @@ -1 +1 @@ -sbt.version=1.9.8 +sbt.version=1.9.9 From b8b7da0004cbe3021cd89cfce4e35af4bfd85a9a Mon Sep 17 00:00:00 2001 From: Flora Thiebaut Date: Fri, 23 Feb 2024 12:45:46 +0100 Subject: [PATCH 20/23] fix(cypress): make session actions more robust (#3513) --- cypress-tests/config.ts | 1 + .../cypress/e2e/rstudioSession.cy.ts | 1 + cypress-tests/cypress/e2e/useSession.cy.ts | 67 ++++++++++--------- .../cypress/support/commands/sessions.ts | 59 +++++++++------- 4 files changed, 74 insertions(+), 54 deletions(-) diff --git a/cypress-tests/config.ts b/cypress-tests/config.ts index 7ed77bf7bf..bfdea3399e 100644 --- a/cypress-tests/config.ts +++ b/cypress-tests/config.ts @@ -5,4 +5,5 @@ export const TIMEOUTS = { standard: 20_000, long: 60_000, vlong: 180_000, + vvlong: 300_000, }; diff --git a/cypress-tests/cypress/e2e/rstudioSession.cy.ts b/cypress-tests/cypress/e2e/rstudioSession.cy.ts index 341c5a7dbc..00a5fa12b9 100644 --- a/cypress-tests/cypress/e2e/rstudioSession.cy.ts +++ b/cypress-tests/cypress/e2e/rstudioSession.cy.ts @@ -63,6 +63,7 @@ describe("Basic rstudio functionality", () => { { defaultCommandTimeout: TIMEOUTS.long }, () => { // Waits for the image to build and launches a session + // Note: rstudio image may take a while to build cy.startSession(projectIdentifier); // Opens the session in an iframe diff --git a/cypress-tests/cypress/e2e/useSession.cy.ts b/cypress-tests/cypress/e2e/useSession.cy.ts index 6348d10584..95e129199a 100644 --- a/cypress-tests/cypress/e2e/useSession.cy.ts +++ b/cypress-tests/cypress/e2e/useSession.cy.ts @@ -9,11 +9,6 @@ const projectTestConfig = { shouldCreateProject: true, projectName: generatorProjectName("useSession"), }; -const workflowNameSalt = uuidv4().substring(0, 4); -const workflow = { - name: `dummyworkflow-${workflowNameSalt}`, - output: `o${workflowNameSalt}.txt`, // ? Keep the name short or it won't show up entirely in the file browser -}; // ? Modify the config -- useful for debugging // projectTestConfig.shouldCreateProject = false; @@ -66,6 +61,13 @@ describe("Basic public project functionality", () => { it("Start a new session on the project and interact with the terminal.", () => { cy.stopAllSessionsForProject(projectIdentifier); + // Define workflow object + const workflowNameSalt = uuidv4().substring(0, 4); + const workflow = { + name: `dummyworkflow-${workflowNameSalt}`, + output: `o${workflowNameSalt}.txt`, // ? Keep the name short or it won't show up entirely in the file browser + }; + // Start a session with options let serversInvoked = false; cy.intercept("/ui-server/api/notebooks/servers*", (req) => { @@ -83,9 +85,7 @@ describe("Basic public project functionality", () => { cy.get(".renku-container") .contains("A session gives you an environment") .should("exist"); - cy.get(".renku-container .badge.bg-success", { timeout: TIMEOUTS.vlong }) - .contains("available") - .should("exist"); + cy.waitForImageToBuild(); cy.get(".renku-container button.btn-secondary", { timeout: TIMEOUTS.long }) .contains("Start Session") .should("exist") @@ -142,7 +142,9 @@ describe("Basic public project functionality", () => { .contains("Saving Session", { timeout: TIMEOUTS.long }) .should("be.visible"); cy.get(".modal") - .contains("Your session has been saved successfully", { timeout: TIMEOUTS.long }) + .contains("Your session has been saved successfully", { + timeout: TIMEOUTS.long, + }) .should("be.visible"); cy.get(".modal .btn-close").should("be.visible").click(); @@ -191,13 +193,14 @@ describe("Basic public project functionality", () => { .first() .click(); cy.get(".alert-info").contains("As an anonymous user").should("be.visible"); + cy.waitForImageToBuild(); // Quickstart a session and check it spins up cy.getDataCy("go-back-button").click(); cy.quickstartSession(); // Stop the session -- mind that anonymous users cannot pause sessions - cy.deleteSession(true); + cy.deleteSession({ fromSessionPage: true }); }); it("Start a new session on a project without permissions.", () => { @@ -213,6 +216,7 @@ describe("Basic public project functionality", () => { cy.get(".alert-info") .contains("You have limited permissions for this project") .should("be.visible"); + cy.waitForImageToBuild(); // Quickstart a session and check it spins up cy.getDataCy("go-back-button").click(); @@ -248,7 +252,7 @@ describe("Basic public project functionality", () => { if (storages.find(({ storage }) => storage.name === "data_s3")) { return; } - + cy.getDataCy("cloud-storage-section") .find("button") .contains("Add Cloud Storage") @@ -257,7 +261,7 @@ describe("Basic public project functionality", () => { cy.getDataCy("cloud-storage-edit-header") .contains("Add Cloud Storage") .should("be.visible"); - + cy.getDataCy("cloud-storage-edit-schema") .contains("s3") .should("be.visible") @@ -269,7 +273,7 @@ describe("Basic public project functionality", () => { cy.getDataCy("cloud-storage-edit-next-button") .should("be.visible") .click(); - + cy.getDataCy("cloud-storage-edit-options").should("be.visible"); cy.get("#sourcePath").should("have.value", "").type("giab"); cy.get("#endpoint") @@ -278,19 +282,19 @@ describe("Basic public project functionality", () => { cy.getDataCy("cloud-storage-edit-next-button") .should("be.visible") .click(); - + cy.getDataCy("cloud-storage-edit-mount").should("be.visible"); cy.get("#name").should("have.value", "").type("data_s3"); cy.get("#mountPoint") .should("have.value", "external_storage/data_s3") .type("{selectAll}data_s3"); cy.get("#readOnly").should("not.be.checked").check(); - + cy.getDataCy("cloud-storage-edit-update-button") .should("be.visible") .contains("Add") .click(); - + cy.getDataCy("cloud-storage-edit-body").contains( "storage data_s3 has been succesfully added" ); @@ -298,23 +302,23 @@ describe("Basic public project functionality", () => { .should("be.visible") .click(); }); - + cy.getDataCy("more-menu").should("be.visible").click(); cy.getProjectPageLink(projectIdentifier, "sessions/new") .should("be.visible") .first() .click(); - + // Wait for the image to be ready and start a session cy.get(".renku-container") .contains("A session gives you an environment") .should("exist"); - cy.get(".renku-container .badge.bg-success", { timeout: TIMEOUTS.vlong }) - .contains("available") - .should("exist"); + cy.waitForImageToBuild(); cy.getDataCy("cloud-storage-item").contains("data_s3").should("exist"); cy.get("#cloud-storage-data_s3-active").should("be.checked"); - cy.get(".renku-container button.btn-secondary", { timeout: TIMEOUTS.long }) + cy.get(".renku-container button.btn-secondary", { + timeout: TIMEOUTS.long, + }) .contains("Start Session") .should("exist") .click(); @@ -325,10 +329,10 @@ describe("Basic public project functionality", () => { cy.get(".progress-box .progress-title") .contains("Starting Session") .should("exist"); - cy.get(".progress-box .progress-title", { timeout: TIMEOUTS.vlong }).should( - "not.exist" - ); - + cy.get(".progress-box .progress-title", { + timeout: TIMEOUTS.vlong, + }).should("not.exist"); + // Verify that the S3 data is mounted cy.getIframe("iframe#session-iframe").within(() => { cy.get(".jp-DirListing-content", { timeout: TIMEOUTS.long }).should( @@ -338,21 +342,22 @@ describe("Basic public project functionality", () => { .contains("data_s3") .should("be.visible") .dblclick(); - + cy.get(".jp-DirListing-item") .contains("README.s3_structure") .should("be.visible") .dblclick(); - - cy.get(".jp-FileEditor", { timeout: TIMEOUTS.long }).should("be.visible"); + + cy.get(".jp-FileEditor", { timeout: TIMEOUTS.long }).should( + "be.visible" + ); cy.get(".jp-FileEditor") .contains("The GIAB s3 bucket and URLs") .should("be.visible"); }); - + cy.pauseSession(); cy.deleteSession(); }); }); - }); diff --git a/cypress-tests/cypress/support/commands/sessions.ts b/cypress-tests/cypress/support/commands/sessions.ts index 14744147af..851b923e1d 100644 --- a/cypress-tests/cypress/support/commands/sessions.ts +++ b/cypress-tests/cypress/support/commands/sessions.ts @@ -5,7 +5,8 @@ import type { ProjectIdentifier } from "./projects"; function startSession(identifier: ProjectIdentifier) { const id = fullProjectIdentifier(identifier); cy.visit(`/projects/${id.namespace}/${id.name}/sessions/new`); - cy.get(".renku-container button.btn-secondary", { timeout: TIMEOUTS.vlong }) + cy.waitForImageToBuild(); + cy.get(".renku-container button.btn-secondary", { timeout: TIMEOUTS.long }) .contains("Start Session") .should("be.visible") .should("be.enabled") @@ -19,13 +20,13 @@ function startSession(identifier: ProjectIdentifier) { }).should("not.exist"); } -function waitForImageToBuild(identifier: ProjectIdentifier) { - const id = fullProjectIdentifier(identifier); - cy.visit(`/projects/${id.namespace}/${id.name}/sessions/new`); - cy.get(".renku-container button.btn-secondary", { timeout: TIMEOUTS.vlong }) - .contains("Start Session") +function waitForImageToBuild() { + cy.get(".renku-container .badge.bg-success", { timeout: TIMEOUTS.vvlong }) + .contains("available") .should("be.visible") - .should("be.enabled"); + .parent() + .contains("Docker image") + .should("be.visible"); } function stopAllSessionsForProject( @@ -53,7 +54,7 @@ function stopAllSessionsForProject( .should("be.visible") .click(); cy.getDataCy("session-container") - .find(`[data-cy=delete-session-button]`) + .find("[data-cy=delete-session-button]") .first() .should("be.visible") .click(); @@ -63,10 +64,25 @@ function stopAllSessionsForProject( cy.contains("No currently running sessions.", { timeout: TIMEOUTS.vlong }); } -function deleteSession(fromSessionPage = false) { - if (!fromSessionPage) - cy.getDataCy("more-menu").first().should("be.visible").click(); - cy.getDataCy("delete-session-button").first().should("be.visible").click(); +function deleteSession(args?: { fromSessionPage?: boolean }) { + const fromSessionPage = args?.fromSessionPage ?? false; + + if (fromSessionPage) { + cy.getDataCy("delete-session-button").first().should("be.visible").click(); + } else { + cy.wait(TIMEOUTS.minimal); // eslint-disable-line cypress/no-unnecessary-waiting + cy.getDataCy("session-container") + .find("[data-cy=more-menu]") + .first() + .should("be.visible") + .click(); + cy.getDataCy("session-container") + .find("[data-cy=delete-session-button]") + .first() + .should("be.visible") + .click(); + } + cy.getDataCy("delete-session-modal-button").should("be.visible").click(); cy.getDataCy("stopping-btn").should("be.visible"); cy.get(".renku-container", { timeout: TIMEOUTS.vlong }) @@ -74,17 +90,14 @@ function deleteSession(fromSessionPage = false) { .should("be.visible"); } -function pauseSession(fromSessionPage = true) { - if (!fromSessionPage) - cy.getDataCy("more-menu").first().should("be.visible").click(); - cy.getDataCy("pause-session-button").should("be.visible").click(); +function pauseSession() { + cy.getDataCy("pause-session-button").first().should("be.visible").click(); cy.getDataCy("pause-session-modal-button").should("be.visible").click(); cy.get(`[data-cy="session-container"]`, { timeout: TIMEOUTS.long }) .should("be.visible") .contains("Paused"); } - function quickstartSession() { cy.get(".start-session-button").should("not.be.disabled").click(); cy.get(".progress-box .progress-title").should("exist"); @@ -118,12 +131,12 @@ declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace Cypress { interface Chainable { - startSession(identifier: ProjectIdentifier); - waitForImageToBuild(identifier: ProjectIdentifier); - deleteSession(fromSessionPage?: boolean); - pauseSession(fromSessionPage?: boolean); - quickstartSession(); - stopAllSessionsForProject(identifier: ProjectIdentifier, loadPage?: boolean); + startSession: typeof startSession; + waitForImageToBuild: typeof waitForImageToBuild; + deleteSession: typeof deleteSession; + pauseSession: typeof pauseSession; + quickstartSession: typeof quickstartSession; + stopAllSessionsForProject: typeof stopAllSessionsForProject; } } } From 45ecfd5ee24fe187d0c3b2ae04e6b6cc65a417e4 Mon Sep 17 00:00:00 2001 From: RenkuBot <53332360+RenkuBot@users.noreply.github.com> Date: Fri, 23 Feb 2024 14:11:44 +0100 Subject: [PATCH 21/23] Update from auto-update/renku-core-2.9.2 (#3472) --- CHANGELOG.rst | 14 ++++++++++++++ docs/renku-python | 2 +- helm-chart/renku/values.yaml | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3aeab33d30..96bef26669 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,6 +3,20 @@ 0.49.0 ------ +This release contains bug fixes to renku core service related to project migration. + +User-Facing Changes +~~~~~~~~~~~~~~~~~~~ + +**🐞 Bug Fixes** + +- **Core Service**: Fix issue with having to run project migration twice to migrate the Dockerfile/project template. + +Individual Components +~~~~~~~~~~~~~~~~~~~~~ + +- `renku-python 2.9.2 `_ + 0.48.1 ------ diff --git a/docs/renku-python b/docs/renku-python index af89ce6ac1..74ccfb7149 160000 --- a/docs/renku-python +++ b/docs/renku-python @@ -1 +1 @@ -Subproject commit af89ce6ac12e00544158bacba87df82fdb03585f +Subproject commit 74ccfb714908c75747355d3ed27051b409c202b3 diff --git a/helm-chart/renku/values.yaml b/helm-chart/renku/values.yaml index b0ae4d8269..2062843433 100644 --- a/helm-chart/renku/values.yaml +++ b/helm-chart/renku/values.yaml @@ -62,7 +62,7 @@ global: fullnameOverride: "" image: repository: renku/renku-core - tag: "v2.9.1" + tag: "v2.9.2" pullPolicy: IfNotPresent uiserver: ## The client secret for the renku-ui client application registered in keycloak. @@ -1512,4 +1512,4 @@ affinity: {} versions: latest: image: - tag: v2.9.1 + tag: v2.9.2 From 61a1de49fbb43400cd248c005780161a99cbc286 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 13:24:20 +0100 Subject: [PATCH 22/23] chore(deps): bump python-keycloak in /scripts/init-realm (#3501) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [python-keycloak](https://github.com/marcospereirampj/python-keycloak) from 3.7.0 to 3.9.0. - [Changelog](https://github.com/marcospereirampj/python-keycloak/blob/master/CHANGELOG.md) - [Commits](https://github.com/marcospereirampj/python-keycloak/compare/v3.7.0...v3.9.0) --- updated-dependencies: - dependency-name: python-keycloak dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Rok Roőkar --- scripts/init-realm/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/init-realm/requirements.txt b/scripts/init-realm/requirements.txt index 1a933ca698..654eec35e0 100644 --- a/scripts/init-realm/requirements.txt +++ b/scripts/init-realm/requirements.txt @@ -1 +1 @@ -python-keycloak==3.7.0 +python-keycloak==3.9.0 From b7cf6b98b1c26ba8e6d7113d93b49d3ecb0d34e3 Mon Sep 17 00:00:00 2001 From: Jakub Chrobasik Date: Tue, 27 Feb 2024 14:01:02 +0100 Subject: [PATCH 23/23] chore: scala update to 2.13.13 (#3519) --- acceptance-tests/build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acceptance-tests/build.sbt b/acceptance-tests/build.sbt index 4a1e4ea2c8..6fdf9751d0 100644 --- a/acceptance-tests/build.sbt +++ b/acceptance-tests/build.sbt @@ -19,7 +19,7 @@ organization := "ch.renku" name := "renku-acceptance-tests" version := "0.1.0" -scalaVersion := "2.13.12" +scalaVersion := "2.13.13" Test / parallelExecution := false