diff --git a/.github/workflows/test_build_docker.yml b/.github/workflows/test_build_docker.yml index 46368d50e..cd1e30250 100644 --- a/.github/workflows/test_build_docker.yml +++ b/.github/workflows/test_build_docker.yml @@ -18,5 +18,10 @@ jobs: - name: Build Docker image run: | - docker build . - docker build --build-arg NEPTUNE_NOTEBOOK=true . + docker build -t test-image . + docker build -t test-image-neptune --build-arg NEPTUNE_NOTEBOOK=true . + + - name: Ensure openSSL is installed + run: | + docker run --rm --entrypoint="" test-image openssl --version + docker run --rm --entrypoint="" test-image-neptune openssl --version diff --git a/Changelog.md b/Changelog.md index 0bb901206..fced9cfb3 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,23 @@ # Graph Explorer Change Log +## Release v2.3.1 + +This release resolves a few important issues from the previous release. + +### All changes + +- Remove past roadmap items by @kmcginnes in + https://github.com/aws/graph-explorer/pull/1116 +- Add OpenSSL back to Docker by @kmcginnes in + https://github.com/aws/graph-explorer/pull/1137 +- Bump version to 2.3.1 for patch by @kmcginnes in + https://github.com/aws/graph-explorer/pull/1138 +- Fix expand neighbor query when edge ID is UUID by @kmcginnes in + https://github.com/aws/graph-explorer/pull/1140 + +**Full Changelog**: +https://github.com/aws/graph-explorer/compare/v2.3.0...v2.3.1 + ## Release v2.3 This release improves the accuracy when rendering query results by preserving diff --git a/Dockerfile b/Dockerfile index c6d5335d7..3ec2186a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM amazonlinux:2023 AS base ENV NODE_VERSION=24.4.0 RUN yum update -y && \ - yum install -y tar xz && \ + yum install -y tar xz openssl && \ ARCH=$(uname -m) && \ if [ "$ARCH" = "x86_64" ]; then NODE_ARCH="x64"; \ elif [ "$ARCH" = "aarch64" ]; then NODE_ARCH="arm64"; \ diff --git a/ROADMAP.md b/ROADMAP.md index bafbcd791..bbb42ffeb 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -9,15 +9,6 @@ issues linked below. > [!IMPORTANT] > These items are subject to change. -## Q1 2025 - -- [URL Sharing](https://github.com/aws/graph-explorer/issues/684) - -## Q2 2025 - -- [Query editor for Gremlin](https://github.com/aws/graph-explorer/issues/686) -- [Query editor for openCypher](https://github.com/aws/graph-explorer/issues/687) - ## Q3 2025 - [Query editor for SPARQL](https://github.com/aws/graph-explorer/issues/688) diff --git a/package.json b/package.json index 573a98a20..932615b46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "graph-explorer", - "version": "2.3.0", + "version": "2.3.1", "description": "Graph Explorer", "author": "amazon", "license": "Apache-2.0", diff --git a/packages/graph-explorer-proxy-server/package.json b/packages/graph-explorer-proxy-server/package.json index 34d1f4055..31b18cf7b 100644 --- a/packages/graph-explorer-proxy-server/package.json +++ b/packages/graph-explorer-proxy-server/package.json @@ -1,6 +1,6 @@ { "name": "graph-explorer-proxy-server", - "version": "2.3.0", + "version": "2.3.1", "description": "Server to facilitate communication between the browser and the supported graph database.", "main": "dist/node-server.js", "type": "module", diff --git a/packages/graph-explorer/package.json b/packages/graph-explorer/package.json index 6da3d0f04..709baff71 100644 --- a/packages/graph-explorer/package.json +++ b/packages/graph-explorer/package.json @@ -1,6 +1,6 @@ { "name": "graph-explorer", - "version": "2.3.0", + "version": "2.3.1", "description": "Graph Explorer", "engines": { "node": ">=24.4.0" diff --git a/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.test.ts b/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.test.ts index dd4d9ca03..91b3c5c82 100644 --- a/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.test.ts +++ b/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.test.ts @@ -19,18 +19,18 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toEqual( normalize(` - g.V("124") + g.V("124").as("start") .both() .hasLabel("airport").and(has("longest",gt(10000)), has("country",containing("ES"))) .filter(__.not(__.hasId("256"))) .dedup() .range(0, 10) - .as("v") + .as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is("124")) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) @@ -44,13 +44,13 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toBe( normalize(` - g.V("12") - .both().dedup().as("v") + g.V("12").as("start") + .both().dedup().as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is("12")) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) @@ -65,15 +65,15 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toBe( normalize(` - g.V("12") + g.V("12").as("start") .both() .filter(__.not(__.hasId("256", "512"))) - .dedup().as("v") + .dedup().as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is("12")) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) @@ -87,13 +87,13 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toBe( normalize(` - g.V(12L) - .both().dedup().as("v") + g.V(12L).as("start") + .both().dedup().as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is(12L)) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) @@ -109,13 +109,13 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toBe( normalize(` - g.V("12") - .both().dedup().range(5, 10).as("v") + g.V("12").as("start") + .both().dedup().range(5, 10).as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is("12")) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) @@ -132,13 +132,13 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toBe( normalize(` - g.V("12") - .both().hasLabel("country").dedup().range(5, 15).as("v") + g.V("12").as("start") + .both().hasLabel("country").dedup().range(5, 15).as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is("12")) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) @@ -155,13 +155,13 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toBe( normalize(` - g.V("12") - .both().hasLabel("country", "airport", "continent").dedup().range(5, 15).as("v") + g.V("12").as("start") + .both().hasLabel("country", "airport", "continent").dedup().range(5, 15).as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is("12")) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) @@ -182,15 +182,15 @@ describe("Gremlin > oneHopTemplate", () => { expect(normalize(template)).toBe( normalize(` - g.V("12") + g.V("12").as("start") .both().hasLabel("country") .and(has("longest",gte(10000)),has("country",containing("ES"))) - .dedup().range(5, 15).as("v") + .dedup().range(5, 15).as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE() - .where(otherV().id().is("12")) + __.select("start").bothE() + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `) diff --git a/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.ts b/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.ts index 13c1b4d6d..933a961e4 100644 --- a/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.ts +++ b/packages/graph-explorer/src/connector/gremlin/fetchNeighbors/oneHopTemplate.ts @@ -117,21 +117,20 @@ function criterionTemplate(criterion: Criterion): string { * limit = 10 * offset = 0 * - * g.V("124") - * .both() - * .hasLabel("airport").and(has("longest",gt(10000)), has("country",containing("ES"))) - * .filter(__.not(__.hasId("256"))) - * .dedup() - * .order().by(id()) - * .range(0, 10) - * .as("v") - * .project("vertex", "edges") - * .by() - * .by( - * __.select("v").bothE() - * .where(otherV().id().is("124")) - * .dedup().fold() - * ) + * g.V("124").as("start") + * .both() + * .hasLabel("airport").and(has("longest",gt(10000)), has("country",containing("ES"))) + * .filter(__.not(__.hasId("256"))) + * .dedup() + * .range(0, 10) + * .as("neighbor") + * .project("vertex", "edges") + * .by() + * .by( + * __.select("start").bothE() + * .where(otherV().where(eq("neighbor"))) + * .dedup().fold() + * ) */ export default function oneHopTemplate({ vertexId, @@ -175,18 +174,18 @@ export default function oneHopTemplate({ : ``; return query` - g.V(${idTemplate}) + g.V(${idTemplate}).as("start") .both() ${nodeFiltersTemplate} ${excludedTemplate} .dedup() ${range} - .as("v") + .as("neighbor") .project("vertex", "edges") .by() .by( - __.select("v").bothE(${edgeTypesTemplate}) - .where(otherV().id().is(${idTemplate})) + __.select("start").bothE(${edgeTypesTemplate}) + .where(otherV().where(eq("neighbor"))) .dedup().fold() ) `; diff --git a/packages/shared/package.json b/packages/shared/package.json index 05196427d..13ecad385 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@graph-explorer/shared", - "version": "2.3.0", + "version": "2.3.1", "description": "Shared types and functions across client and server.", "author": "amazon", "license": "Apache-2.0",