diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 3c37c9b94e..65f69389d8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,5 +1,23 @@ .. _changelog: +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. + (`#3690 `__) + +Individual Components +~~~~~~~~~~~~~~~~~~~~~ + +- `renku-python 2.9.2 `_ + 0.48.1 ------ @@ -12,9 +30,6 @@ can be customized by administrators. Renku ``0.48.0`` introduces the ability to add a Terms of Use and Privacy Policy to RenkuLab, as well as an assortment of small improvements and bug-fixes. -User-Facing Changes -~~~~~~~~~~~~~~~~~~~ - **🌟 New Features** - 📜 **UI**: Show terms of use and privacy policy in the help section @@ -51,7 +66,6 @@ Individual components - `renku-ui 3.20.1 `_ - `renku-ui 3.20.0 `_ - 0.47.1 ------ @@ -65,11 +79,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 +214,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 +233,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 `_) 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 a3d00290a8..096bff56fc 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 @@ -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 diff --git a/cypress-tests/cypress/e2e/useSession.cy.ts b/cypress-tests/cypress/e2e/useSession.cy.ts index 6348d10584..e402654566 100644 --- a/cypress-tests/cypress/e2e/useSession.cy.ts +++ b/cypress-tests/cypress/e2e/useSession.cy.ts @@ -233,74 +233,87 @@ describe("Basic public project functionality", () => { return; } - cy.stopAllSessionsForProject(projectIdentifier); - cy.intercept("/ui-server/api/data/storage*").as("getProjectCloudStorage"); + cy.getDataCy("cloud-storage-section") + .find("button") + .contains("Add Cloud Storage") + .should("be.visible") + .click(); + cy.getDataCy("cloud-storage-edit-header") + .contains("Add Cloud Storage") + .should("be.visible"); - cy.getProjectSection("Settings").click(); - cy.getDataCy("settings-navbar") - .contains("a.nav-link", "Cloud Storage") + cy.getDataCy("cloud-storage-edit-schema") + .contains("s3") + .should("be.visible") + .click(); + cy.getDataCy("cloud-storage-edit-providers") + .contains("AWS") + .should("be.visible") + .click(); + 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") + .should("have.value", "") + .type("http://s3.amazonaws.com"); + 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(); - // Add a S3 storage configuration if it doesn't exist - cy.wait("@getProjectCloudStorage").then(({ response }) => { - const storages = response.body as { storage: { name: string } }[]; - if (storages.find(({ storage }) => storage.name === "data_s3")) { - return; - } - - cy.getDataCy("cloud-storage-section") - .find("button") - .contains("Add Cloud Storage") - .should("be.visible") - .click(); - cy.getDataCy("cloud-storage-edit-header") - .contains("Add Cloud Storage") - .should("be.visible"); - - cy.getDataCy("cloud-storage-edit-schema") - .contains("s3") - .should("be.visible") - .click(); - cy.getDataCy("cloud-storage-edit-providers") - .contains("AWS") - .should("be.visible") - .click(); - 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") - .should("have.value", "") - .type("http://s3.amazonaws.com"); - 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" - ); - cy.getDataCy("cloud-storage-edit-close-button") - .should("be.visible") - .click(); - }); - - cy.getDataCy("more-menu").should("be.visible").click(); - cy.getProjectPageLink(projectIdentifier, "sessions/new") + cy.getDataCy("cloud-storage-edit-body").contains( + "storage data_s3 has been succesfully added" + ); + cy.getDataCy("cloud-storage-edit-close-button") + .should("be.visible") + .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.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 }) + .contains("Start Session") + .should("exist") + .click(); + cy.get(".progress-box .progress-title").should("exist"); //.contains("Step 2 of 2"); + cy.get("button") + .contains(projectTestConfig.projectName) + .should("be.visible"); + cy.get(".progress-box .progress-title") + .contains("Starting Session") + .should("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( + "be.visible" + ); + cy.get(".jp-DirListing-item") + .contains("data_s3") + .should("be.visible") + .dblclick(); + + cy.get(".jp-DirListing-item") + .contains("README.s3_structure") .should("be.visible") .first() .click(); 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