From 2352521dfa34eb91b0d3d47929fd082364c317a0 Mon Sep 17 00:00:00 2001 From: Dave Fisher Date: Wed, 11 Sep 2024 11:38:04 -0700 Subject: [PATCH 01/13] Atfile environment variables with default values --- .../java/io/nosqlbench/nb/api/system/NBEnvironment.java | 7 ++++++- .../io/nosqlbench/engine/cli/atfiles/NBAtFileTest.java | 6 ++++++ .../resources/atfiles/environment_variable_default.yaml | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml diff --git a/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java b/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java index f44557289..092430fe3 100644 --- a/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java +++ b/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java @@ -217,15 +217,20 @@ public class NBEnvironment { * @return The interpolated value, after substitutions, or null if any lookup failed */ public Optional interpolate(String word, Map supplemental) { - Pattern envpattern = Pattern.compile("(\\$(?[a-zA-Z_][A-Za-z0-9_.]+)|\\$\\{(?[^}]+)\\})"); + Pattern envpattern = Pattern.compile("\\$(?[a-zA-Z_][A-Za-z0-9_.]+)|\\$\\{(?[a-zA-Z_][A-Za-z0-9_.]*)(:(?[a-zA-Z0-9_.]+))?\\}"); Matcher matcher = envpattern.matcher(word); StringBuilder sb = new StringBuilder(); while (matcher.find()) { String envvar = matcher.group("env1"); + String defaultValue = null; if (envvar == null) { envvar = matcher.group("env2"); + defaultValue = matcher.group("default"); } String value = peek(envvar,supplemental); + if (value == null) { + value = defaultValue; + } if (value == null) { if (logger != null) { logger.debug("no value found for '" + envvar + "', returning Optional.empty() for '" + word + "'"); diff --git a/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/atfiles/NBAtFileTest.java b/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/atfiles/NBAtFileTest.java index 5979472d7..55feeb374 100644 --- a/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/atfiles/NBAtFileTest.java +++ b/nb-engine/nb-engine-cli/src/test/java/io/nosqlbench/engine/cli/atfiles/NBAtFileTest.java @@ -97,6 +97,12 @@ class NBAtFileTest { assertThat(strings).containsExactly("My value environment"); } + @Test + public void testAtfileEnvironmentVariableDefault() { + LinkedList strings = NBAtFile.includeAt("@src/test/resources/atfiles/environment_variable_default.yaml"); + assertThat(strings).containsExactly("My default value environment"); + } + @Test public void testAtfileMissingEnvironmentVariable() { assertThrows(RuntimeException.class, () -> NBAtFile.includeAt("@src/test/resources/atfiles/environment_variable_missing.yaml:>:")); diff --git a/nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml b/nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml new file mode 100644 index 000000000..46127c618 --- /dev/null +++ b/nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml @@ -0,0 +1 @@ +- My ${MISSING_ENV_VAR:default value} environment From 8b6a348ed9bda1571d37d273507bece8b685af7d Mon Sep 17 00:00:00 2001 From: Dave Fisher Date: Wed, 11 Sep 2024 11:54:11 -0700 Subject: [PATCH 02/13] Allow additional characters in the default value --- .../main/java/io/nosqlbench/nb/api/system/NBEnvironment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java b/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java index 092430fe3..712446faa 100644 --- a/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java +++ b/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java @@ -217,7 +217,7 @@ public class NBEnvironment { * @return The interpolated value, after substitutions, or null if any lookup failed */ public Optional interpolate(String word, Map supplemental) { - Pattern envpattern = Pattern.compile("\\$(?[a-zA-Z_][A-Za-z0-9_.]+)|\\$\\{(?[a-zA-Z_][A-Za-z0-9_.]*)(:(?[a-zA-Z0-9_.]+))?\\}"); + Pattern envpattern = Pattern.compile("\\$(?[a-zA-Z_][A-Za-z0-9_.]+)|\\$\\{(?[a-zA-Z_][A-Za-z0-9_.]*)(:(?[a-zA-Z0-9_./\\- ]+))?\\}"); Matcher matcher = envpattern.matcher(word); StringBuilder sb = new StringBuilder(); while (matcher.find()) { From 1bceb00dacef5ce197f82eefe438f82a42bb6b36 Mon Sep 17 00:00:00 2001 From: Dave Fisher Date: Wed, 11 Sep 2024 12:20:02 -0700 Subject: [PATCH 03/13] Use :- format. --- .../main/java/io/nosqlbench/nb/api/system/NBEnvironment.java | 2 +- .../test/resources/atfiles/environment_variable_default.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java b/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java index 712446faa..6325c0a4f 100644 --- a/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java +++ b/nb-apis/nb-api/src/main/java/io/nosqlbench/nb/api/system/NBEnvironment.java @@ -217,7 +217,7 @@ public class NBEnvironment { * @return The interpolated value, after substitutions, or null if any lookup failed */ public Optional interpolate(String word, Map supplemental) { - Pattern envpattern = Pattern.compile("\\$(?[a-zA-Z_][A-Za-z0-9_.]+)|\\$\\{(?[a-zA-Z_][A-Za-z0-9_.]*)(:(?[a-zA-Z0-9_./\\- ]+))?\\}"); + Pattern envpattern = Pattern.compile("\\$(?[a-zA-Z_][A-Za-z0-9_.]+)|\\$\\{(?[a-zA-Z_][A-Za-z0-9_.]*)(:\\-(?[a-zA-Z0-9_./\\- ]+))?\\}"); Matcher matcher = envpattern.matcher(word); StringBuilder sb = new StringBuilder(); while (matcher.find()) { diff --git a/nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml b/nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml index 46127c618..08dc74558 100644 --- a/nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml +++ b/nb-engine/nb-engine-cli/src/test/resources/atfiles/environment_variable_default.yaml @@ -1 +1 @@ -- My ${MISSING_ENV_VAR:default value} environment +- My ${MISSING_ENV_VAR:-default value} environment From 09c457ed8cfe40f2167eb5cfe929fedeb52664a3 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 11 Sep 2024 15:21:54 -0500 Subject: [PATCH 04/13] update license file --- .../WeaviateBaseOpDispenser.java | 16 ++--- .../WeaviateBaseOpDispenser.java.new | 61 ------------------- 2 files changed, 4 insertions(+), 73 deletions(-) delete mode 100644 nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java.new diff --git a/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java b/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java index e2f220bd4..250a0b8de 100644 --- a/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java +++ b/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java @@ -1,5 +1,7 @@ +package io.nosqlbench.adapter.weaviate.opsdispensers; + /* - * Copyright (c) 2020-2024 nosqlbench + * Copyright (c) 2022 nosqlbench * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,7 +17,6 @@ * under the License. */ -package io.nosqlbench.adapter.weaviate.opsdispensers; import java.util.function.LongFunction; @@ -26,7 +27,6 @@ import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.templating.ParsedOp; import io.weaviate.client.WeaviateClient; -import io.weaviate.client.v1.auth.exception.AuthException; public abstract class WeaviateBaseOpDispenser extends BaseOpDispenser, WeaviateSpace> { @@ -38,15 +38,7 @@ public abstract class WeaviateBaseOpDispenser extends BaseOpDispenser targetF) { super((DriverAdapter) adapter, op); this.weaviateSpaceFunction = adapter.getSpaceFunc(op); - this.clientFunction = (long l) -> { - try { - return this.weaviateSpaceFunction.apply(l).getClient(); - } catch (AuthException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return null; - }; + this.clientFunction = (long l) -> this.weaviateSpaceFunction.apply(l).getClient(); this.paramF = getParamFunc(this.clientFunction, op, targetF); this.opF = createOpFunc(paramF, this.clientFunction, op, targetF); } diff --git a/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java.new b/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java.new deleted file mode 100644 index 250a0b8de..000000000 --- a/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java.new +++ /dev/null @@ -1,61 +0,0 @@ -package io.nosqlbench.adapter.weaviate.opsdispensers; - -/* - * Copyright (c) 2022 nosqlbench - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -import java.util.function.LongFunction; - -import io.nosqlbench.adapter.weaviate.WeaviateDriverAdapter; -import io.nosqlbench.adapter.weaviate.WeaviateSpace; -import io.nosqlbench.adapter.weaviate.ops.WeaviateBaseOp; -import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser; -import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; -import io.nosqlbench.adapters.api.templating.ParsedOp; -import io.weaviate.client.WeaviateClient; - -public abstract class WeaviateBaseOpDispenser extends BaseOpDispenser, WeaviateSpace> { - - protected final LongFunction weaviateSpaceFunction; - protected final LongFunction clientFunction; - private final LongFunction> opF; - private final LongFunction paramF; - - protected WeaviateBaseOpDispenser(WeaviateDriverAdapter adapter, ParsedOp op, LongFunction targetF) { - super((DriverAdapter) adapter, op); - this.weaviateSpaceFunction = adapter.getSpaceFunc(op); - this.clientFunction = (long l) -> this.weaviateSpaceFunction.apply(l).getClient(); - this.paramF = getParamFunc(this.clientFunction, op, targetF); - this.opF = createOpFunc(paramF, this.clientFunction, op, targetF); - } - - protected WeaviateDriverAdapter getDriverAdapter() { - return (WeaviateDriverAdapter) adapter; - } - - public abstract LongFunction getParamFunc(LongFunction clientF, ParsedOp op, - LongFunction targetF); - - public abstract LongFunction> createOpFunc(LongFunction paramF, - LongFunction clientF, ParsedOp op, LongFunction targetF); - - @Override - public WeaviateBaseOp getOp(long value) { - return opF.apply(value); - } - -} From cb02fd9f01b03603a1712bc9a55224301e4a8b96 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 11 Sep 2024 15:34:01 -0500 Subject: [PATCH 05/13] wrap checked exception --- .../opsdispensers/WeaviateBaseOpDispenser.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java b/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java index 250a0b8de..69f75e1cc 100644 --- a/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java +++ b/nb-adapters/adapter-weaviate/src/main/java/io/nosqlbench/adapter/weaviate/opsdispensers/WeaviateBaseOpDispenser.java @@ -2,13 +2,13 @@ package io.nosqlbench.adapter.weaviate.opsdispensers; /* * Copyright (c) 2022 nosqlbench - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -27,6 +27,7 @@ import io.nosqlbench.adapters.api.activityimpl.BaseOpDispenser; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.templating.ParsedOp; import io.weaviate.client.WeaviateClient; +import io.weaviate.client.v1.auth.exception.AuthException; public abstract class WeaviateBaseOpDispenser extends BaseOpDispenser, WeaviateSpace> { @@ -38,7 +39,13 @@ public abstract class WeaviateBaseOpDispenser extends BaseOpDispenser targetF) { super((DriverAdapter) adapter, op); this.weaviateSpaceFunction = adapter.getSpaceFunc(op); - this.clientFunction = (long l) -> this.weaviateSpaceFunction.apply(l).getClient(); + this.clientFunction = (long l) -> { + try { + return this.weaviateSpaceFunction.apply(l).getClient(); + } catch (AuthException e) { + throw new RuntimeException(e); + } + }; this.paramF = getParamFunc(this.clientFunction, op, targetF); this.opF = createOpFunc(paramF, this.clientFunction, op, targetF); } From c344ba4d44fcd18043a18179c130d2985664322f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 13:10:19 -0500 Subject: [PATCH 06/13] update dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6e738ef2e..184ba733f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM eclipse-temurin:21-jdk COPY nb5/target/nb5.jar nb5.jar -ENTRYPOINT ["java","-jar", "nb5.jar"] +ENTRYPOINT ["java","--enable-preview", "-jar", "nb5.jar"] RUN ln -s /bin/bash /bin/ash RUN ln -s nb5.jar nb.jar From b24c034e9d36127903a8c029cbe2a4e7eb760e82 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 13:13:01 -0500 Subject: [PATCH 07/13] fix docker entry point --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 184ba733f..e211f5808 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM eclipse-temurin:21-jdk COPY nb5/target/nb5.jar nb5.jar -ENTRYPOINT ["java","--enable-preview", "-jar", "nb5.jar"] +ENTRYPOINT ["java","--enable-preview", "-XX:+UseZGC", "-XX:+ZGenerational", "-jar", "nb5.jar"] RUN ln -s /bin/bash /bin/ash RUN ln -s nb5.jar nb.jar From 6eea6eb02fb9dac8ed548c1045d604739ed48865 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 13:30:55 -0500 Subject: [PATCH 08/13] make 5.21.* latest in docker hub --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c32ca772b..9419945fe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,7 +61,7 @@ jobs: RELEASE_VERSION_SHORT=$(scripts/get-release-version.sh -s) echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV echo "RELEASE_VERSION_NUMERIC=${RELEASE_VERSION_NUMERIC}" >> $GITHUB_ENV - echo "DOCKER_TAGS=nosqlbench/nosqlbench:${RELEASE_VERSION_NUMERIC},nosqlbench/nosqlbench:${RELEASE_VERSION_SHORT}-latest" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:${RELEASE_VERSION_NUMERIC},nosqlbench/nosqlbench:${RELEASE_VERSION_SHORT}-latest,latest" >> $GITHUB_ENV - name: build release revision run: | From ddc44af1d3b41800dad404017c1fb416268e7ef2 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 14:04:01 -0500 Subject: [PATCH 09/13] force build --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9419945fe..ad3a140b2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,6 +7,8 @@ name: release # If you want to replace a build, you can use -f and then # push the update to the tag like push -f origin , # although this should never be done! +# The build logic should only build what is necessary, but presently 'preview' +# and 'release' do extra work. This needs to be improved. on: push: From e403b5bfbc029da5cc6c0b7ff47e8d507eb19256 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 14:45:11 -0500 Subject: [PATCH 10/13] allow authenticated workflow dispatch --- .github/workflows/release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ad3a140b2..9934ad485 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,6 +14,9 @@ on: push: tags: - "[0-9]+.[0-9]+.[0-9]+-release" + workflow_dispatch: + + jobs: release-build: From 45118504506c736e18588575d38b15e4938c8d7f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 14:47:59 -0500 Subject: [PATCH 11/13] fix trigger --- .github/workflows/release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9934ad485..e88764e18 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,6 @@ on: push: tags: - "[0-9]+.[0-9]+.[0-9]+-release" - workflow_dispatch: From c7217c3cff895763b98d96123fcad2e84747263f Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 14:59:20 -0500 Subject: [PATCH 12/13] fix silly tag error --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e88764e18..4095548a4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -65,7 +65,7 @@ jobs: RELEASE_VERSION_SHORT=$(scripts/get-release-version.sh -s) echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV echo "RELEASE_VERSION_NUMERIC=${RELEASE_VERSION_NUMERIC}" >> $GITHUB_ENV - echo "DOCKER_TAGS=nosqlbench/nosqlbench:${RELEASE_VERSION_NUMERIC},nosqlbench/nosqlbench:${RELEASE_VERSION_SHORT}-latest,latest" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:${RELEASE_VERSION_NUMERIC},nosqlbench/nosqlbench:${RELEASE_VERSION_SHORT}-latest,nosqlbench/nosqlbench:latest" >> $GITHUB_ENV - name: build release revision run: | @@ -81,7 +81,7 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} - name: docker test build - uses: docker/build-push-action@v6.7.0 + uses: docker/build-push-action@v6 with: context: . file: Dockerfile @@ -122,7 +122,7 @@ jobs: scripts/bump-minor-version - name: docker push to hub - uses: docker/build-push-action@v6.7.0 + uses: docker/build-push-action@v6 with: context: . platforms: linux/amd64,linux/arm64 From 46965911ffb53b0cb048a166323e3bc90ae752bb Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 23 Sep 2024 15:05:08 -0500 Subject: [PATCH 13/13] update preview tag --- .github/workflows/preview.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 918d665e0..08bfeb29b 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -63,8 +63,8 @@ jobs: PREVIEW_VERSION=$(scripts/get-preview-version.sh) echo "PREVIEW_VERSION=${PREVIEW_VERSION}" >> $GITHUB_ENV echo "PREVIEW_VERSION=${PREVIEW_VERSION}" >> $GITHUB_OUTPUT - echo "DOCKER_TAGS=nosqlbench/nosqlbench:${PREVIEW_VERSION},nosqlbench/nosqlbench:preview" >> $GITHUB_ENV - echo "DOCKER_TAGS=nosqlbench/nosqlbench:${PREVIEW_VERSION},nosqlbench/nosqlbench:preview" >> $GITHUB_OUTPUT + echo "DOCKER_TAGS=nosqlbench/nosqlbench:${PREVIEW_VERSION},nosqlbench/nosqlbench:5.21-preview,nosqlbench/nosqlbench:preview" >> $GITHUB_ENV + echo "DOCKER_TAGS=nosqlbench/nosqlbench:${PREVIEW_VERSION},nosqlbench/nosqlbench:5.21-preview,nosqlbench/nosqlbench:preview" >> $GITHUB_OUTPUT - name: build preview revision run: |