You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hugegraph.apache.org by ji...@apache.org on 2026/10/08 17:46:57 UTC
(hugegraph-toolchain) 01/01: fix: validate 1.8.0 release SDK packages
This is an automated email from the ASF dual-hosted git repository.
imbajin pushed a commit to branch fix/release-sdk-180
in repository https://gitbox.apache.org/repos/asf/hugegraph-toolchain.git
commit fb795295399c6d231ec50c570db2d2ef0bd2d61d
Author: imbajin <ji...@apache.org>
AuthorDate: Fri Oct 9 01:45:17 2026 +0800
fix: validate 1.8.0 release SDK packages
- align normal SDK dependencies and release validation with 1.8.0
- preserve locked candidate builds with explicit mode and version
- retain source archive build scripts and verify packaged SDK bytes
- cover missing libraries, metadata and symlink failures
---
.gitattributes | 3 +-
.github/actions/setup-candidate-sdk/action.yml | 4 +-
.github/scripts/test_candidate_sdk.py | 100 +++++++++++++++++++++++++
.github/scripts/verify_candidate_image_sdk.py | 88 ++++++++++++++++++++--
README.md | 13 +++-
docs/java17-migration.md | 28 ++++++-
hugegraph-dist/pom.xml | 12 +++
hugegraph-hubble/Dockerfile | 8 +-
hugegraph-hubble/hubble-dist/pom.xml | 4 +
hugegraph-loader/Dockerfile | 4 +-
hugegraph-loader/pom.xml | 4 +
hugegraph-tools/pom.xml | 4 +
pom.xml | 6 +-
13 files changed, 257 insertions(+), 21 deletions(-)
diff --git a/.gitattributes b/.gitattributes
index ef04141f9..2638b09a5 100755
--- a/.gitattributes
+++ b/.gitattributes
@@ -8,7 +8,8 @@ apache-release.sh export-ignore
.licenserc.yaml export-ignore
# ignored directory
-.github/ export-ignore
+.github/workflows/ export-ignore
+.github/outdated/ export-ignore
hugegraph-dist/scripts/ export-ignore
.serena/ export-ignore
# only exclude the root
diff --git a/.github/actions/setup-candidate-sdk/action.yml b/.github/actions/setup-candidate-sdk/action.yml
index 02a52e556..36cb3b102 100644
--- a/.github/actions/setup-candidate-sdk/action.yml
+++ b/.github/actions/setup-candidate-sdk/action.yml
@@ -83,8 +83,8 @@ runs:
printf 'manifest-artifact-id=%s\n' "$manifest_artifact_id" >> "$GITHUB_OUTPUT"
# Keep subprocess Maven repository isolation aligned with CLI arguments.
{
- printf 'MAVEN_OPTS=%s -Dmaven.repo.local=%s\n' "${MAVEN_OPTS:-}" "$candidate_repo"
- printf 'MAVEN_ARGS=%s -Dmaven.repo.local=%s\n' "${MAVEN_ARGS:-}" "$candidate_repo"
+ printf 'MAVEN_OPTS=%s -Dmaven.repo.local=%s -Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate\n' "${MAVEN_OPTS:-}" "$candidate_repo"
+ printf 'MAVEN_ARGS=%s -Dmaven.repo.local=%s -Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate\n' "${MAVEN_ARGS:-}" "$candidate_repo"
printf 'CANDIDATE_SOURCE_COMMIT=%s\n' "$SERVER_COMMIT"
} >> "$GITHUB_ENV"
printf 'archive=%s\nmaven-repo=%s\n' "${archives[0]}" "$candidate_repo" >> "$GITHUB_OUTPUT"
diff --git a/.github/scripts/test_candidate_sdk.py b/.github/scripts/test_candidate_sdk.py
index 1621defeb..01a46b329 100644
--- a/.github/scripts/test_candidate_sdk.py
+++ b/.github/scripts/test_candidate_sdk.py
@@ -335,5 +335,105 @@ class CandidateDistributionTest(unittest.TestCase):
self.assertNotIn("secret", result.stderr)
+class ReleaseDistributionTest(unittest.TestCase):
+ def fixture(self, root):
+ repository, directory = root / "m2", root / "distribution"
+ library = directory / "lib"
+ library.mkdir(parents=True)
+ for artifact in ("hugegraph-common", "hg-pd-common", "hg-pd-client", "hg-pd-grpc", "hugegraph-core"):
+ parent = repository / "org/apache/hugegraph" / artifact / "1.8.0"
+ parent.mkdir(parents=True)
+ pom = ('<project xmlns="http://maven.apache.org/POM/4.0.0"><parent>'
+ '<groupId>org.apache.hugegraph</groupId><artifactId>hugegraph</artifactId>'
+ '<version>1.8.0</version></parent><artifactId>' + artifact + '</artifactId></project>')
+ (parent / (artifact + "-1.8.0.pom")).write_text(pom)
+ jar = parent / (artifact + "-1.8.0.jar")
+ jar.write_bytes(artifact.encode())
+ shutil.copyfile(jar, library / jar.name)
+ (library / "hugegraph-client-1.8.0.jar").write_bytes(b"Toolchain output")
+ return repository, directory
+
+ def test_release_uses_exact_maven_artifacts_without_a_candidate_manifest(self):
+ with tempfile.TemporaryDirectory() as temporary:
+ repository, directory = self.fixture(Path(temporary))
+ for module in ("loader", "tools", "hubble"):
+ self.assertEqual(5, len(sdk.validate_release_sdk(repository, "1.8.0", directory, module)))
+ command = ["python3", str(Path(sdk.__file__)), str(repository), "--mode", "release",
+ "--version", "1.8.0", "--distribution", str(directory), "--module", "hubble"]
+ result = subprocess.run(command, capture_output=True, text=True, timeout=5)
+ self.assertEqual(0, result.returncode, result.stderr)
+ self.assertIn("release SDK 1.8.0", result.stdout)
+
+ def test_release_rejects_missing_mixed_and_replaced_sdk_inputs(self):
+ scenarios = ("missing_jar", "missing_pom", "missing_library", "mixed_version", "duplicate_version",
+ "replaced_library", "stale_repo_manifest", "stale_package_manifest", "wrong_pom_version",
+ "invalid_pom", "repository_symlink", "package_symlink", "library_directory_symlink")
+ for scenario in scenarios:
+ with self.subTest(scenario=scenario), tempfile.TemporaryDirectory() as temporary:
+ root = Path(temporary)
+ repository, directory = self.fixture(root)
+ common = repository / "org/apache/hugegraph/hugegraph-common/1.8.0/hugegraph-common-1.8.0.jar"
+ packaged = directory / "lib" / common.name
+ pom = common.with_suffix(".pom")
+ if scenario == "missing_jar":
+ common.unlink()
+ elif scenario == "missing_pom":
+ pom.unlink()
+ elif scenario == "missing_library":
+ packaged.unlink()
+ elif scenario in ("mixed_version", "duplicate_version"):
+ old = packaged.with_name("hugegraph-common-1.7.0.jar")
+ shutil.copyfile(packaged, old)
+ if scenario == "mixed_version":
+ packaged.unlink()
+ elif scenario == "replaced_library":
+ packaged.write_bytes(b"Other repository's same GAV")
+ elif scenario in ("stale_repo_manifest", "stale_package_manifest"):
+ target = repository if scenario == "stale_repo_manifest" else directory
+ (target / "candidate-sdk-manifest.json").write_text("{}")
+ elif scenario == "wrong_pom_version":
+ pom.write_text(pom.read_text().replace("1.8.0", "1.7.0"))
+ elif scenario == "invalid_pom":
+ pom.write_text("<project>")
+ elif scenario == "repository_symlink":
+ common.unlink()
+ common.symlink_to(packaged)
+ elif scenario == "library_directory_symlink":
+ external = root / "external-library"
+ (directory / "lib").rename(external)
+ (directory / "lib").symlink_to(external, target_is_directory=True)
+ else:
+ packaged.unlink()
+ packaged.symlink_to(common)
+ with self.assertRaises(RuntimeError):
+ sdk.validate_release_sdk(repository, "1.8.0", directory, "loader")
+
+ def test_release_hubble_requires_core_but_loader_does_not(self):
+ with tempfile.TemporaryDirectory() as temporary:
+ repository, directory = self.fixture(Path(temporary))
+ (directory / "lib/hugegraph-core-1.8.0.jar").unlink()
+ sdk.validate_release_sdk(repository, "1.8.0", directory, "loader")
+ with self.assertRaisesRegex(RuntimeError, "hugegraph-core"):
+ sdk.validate_release_sdk(repository, "1.8.0", directory, "hubble")
+
+ def test_release_requires_transitive_pd_common_library(self):
+ with tempfile.TemporaryDirectory() as temporary:
+ repository, directory = self.fixture(Path(temporary))
+ (directory / "lib/hg-pd-common-1.8.0.jar").unlink()
+ for module in ("loader", "tools", "hubble"):
+ with self.subTest(module=module), self.assertRaisesRegex(RuntimeError, "hg-pd-common"):
+ sdk.validate_release_sdk(repository, "1.8.0", directory, module)
+
+ def test_release_rejects_snapshot_and_unspecified_versions(self):
+ with tempfile.TemporaryDirectory() as temporary:
+ repository, directory = self.fixture(Path(temporary))
+ with self.assertRaisesRegex(RuntimeError, "concrete release version"):
+ sdk.validate_release_sdk(repository, "1.8.0-SNAPSHOT", directory, "loader")
+ result = subprocess.run(["python3", str(Path(sdk.__file__)), str(repository), "--mode", "release"],
+ capture_output=True, text=True, timeout=5)
+ self.assertNotEqual(0, result.returncode)
+ self.assertIn("--version is required", result.stderr)
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/.github/scripts/verify_candidate_image_sdk.py b/.github/scripts/verify_candidate_image_sdk.py
index 291ae46d6..1503971b3 100644
--- a/.github/scripts/verify_candidate_image_sdk.py
+++ b/.github/scripts/verify_candidate_image_sdk.py
@@ -15,13 +15,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-"""Validate the locked SDK and the actual libraries in a candidate distribution."""
+"""Validate SDK libraries against a locked candidate or the release Maven repository."""
import argparse
import hashlib
import json
import os
import re
+import xml.etree.ElementTree as ET
from pathlib import Path
REPOSITORY = "apache/hugegraph"
@@ -140,9 +141,7 @@ def validate_distribution(repository, directory, module):
type(error).__name__ + ")") from None
if packaged != manifest:
raise RuntimeError("Packaged SDK manifest differs from the build repository")
- required = {"hugegraph-common", "hg-pd-client", "hg-pd-grpc"}
- if module == "hubble":
- required.add("hugegraph-core")
+ required = required_libraries(module)
actual = {}
# Check only distribution libraries, never runtime data or user plugins.
for path in (directory / "lib").glob("*.jar"):
@@ -160,18 +159,91 @@ def validate_distribution(repository, directory, module):
return actual
+def required_libraries(module):
+ required = {"hugegraph-common", "hg-pd-common", "hg-pd-client", "hg-pd-grpc"}
+ if module == "hubble":
+ required.add("hugegraph-core")
+ return required
+
+
+def release_artifact(repository, artifact, version):
+ directory = repository / "org/apache/hugegraph" / artifact / version
+ paths = [directory / f"{artifact}-{version}.{extension}" for extension in ("pom", "jar")]
+ for path in paths:
+ if path.is_symlink() or not path.is_file() or not path.resolve().is_relative_to(repository.resolve()):
+ raise RuntimeError("Missing or invalid release SDK artifact: " + path.name)
+ try:
+ pom = ET.parse(paths[0]).getroot()
+ namespace = "{http://maven.apache.org/POM/4.0.0}"
+ group = pom.findtext(namespace + "groupId") or pom.findtext(namespace + "parent/" + namespace + "groupId")
+ revision = pom.findtext(namespace + "version") or pom.findtext(namespace + "parent/" + namespace + "version")
+ if (group, pom.findtext(namespace + "artifactId"), revision) != ("org.apache.hugegraph", artifact, version):
+ raise RuntimeError("Unexpected release SDK POM coordinates: " + paths[0].name)
+ except (OSError, ET.ParseError):
+ raise RuntimeError("Invalid release SDK POM: " + paths[0].name) from None
+ return digest(paths[1])
+
+
+def validate_release_sdk(repository, version, directory=None, module=None):
+ repository = Path(repository)
+ if not re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+", version):
+ raise RuntimeError("Release SDK requires a concrete release version")
+ if (repository / "candidate-sdk-manifest.json").exists():
+ raise RuntimeError("Candidate SDK manifest is not allowed in a release repository")
+ required = required_libraries(module)
+ expected = {f"{artifact}-{version}.jar": release_artifact(repository, artifact, version)
+ for artifact in required}
+ if directory is None:
+ return expected
+ directory = Path(directory)
+ if (directory / "candidate-sdk-manifest.json").exists():
+ raise RuntimeError("Candidate SDK manifest is not allowed in a release distribution")
+ library = directory / "lib"
+ if library.is_symlink() or not library.is_dir():
+ raise RuntimeError("Missing or invalid release SDK library directory")
+ actual = {}
+ for path in library.glob("*.jar"):
+ if path.name.startswith(("hugegraph-client-", "hugegraph-loader-", "hugegraph-tools-")):
+ continue
+ if not path.name.startswith(("hugegraph-", "hg-")):
+ continue
+ if (path.is_symlink() or not path.resolve().is_relative_to(directory.resolve()) or
+ not path.name.endswith(f"-{version}.jar")):
+ raise RuntimeError("Unexpected release SDK library version: " + path.name)
+ artifact = path.name[:-len(f"-{version}.jar")]
+ expected_hash = release_artifact(repository, artifact, version)
+ if digest(path) != expected_hash:
+ raise RuntimeError("Changed packaged release SDK library: " + path.name)
+ actual[path.name] = expected_hash
+ for name in expected:
+ if name not in actual:
+ raise RuntimeError("Missing packaged release SDK library: " + name)
+ return actual
+
+
if __name__ == "__main__":
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("repository", type=Path)
parser.add_argument("--distribution", type=Path)
parser.add_argument("--module", choices=("loader", "tools", "hubble"))
+ parser.add_argument("--mode", choices=("candidate", "release"), default="candidate")
+ parser.add_argument("--version", help="Expected release SDK version (required in release mode)")
args = parser.parse_args()
if bool(args.distribution) != bool(args.module):
parser.error("--distribution and --module must be used together")
+ if args.mode == "release" and not args.version:
+ parser.error("--version is required in release mode")
try:
- manifest, jars = validate_sdk(args.repository)
- if args.distribution:
- validate_distribution(args.repository, args.distribution, args.module)
+ if args.mode == "release":
+ jars = validate_release_sdk(args.repository, args.version, args.distribution, args.module)
+ identity = "release SDK " + args.version
+ else:
+ if args.version and args.version != "1.7.0":
+ raise RuntimeError("Candidate mode requires the locked SDK version 1.7.0")
+ manifest, jars = validate_sdk(args.repository)
+ if args.distribution:
+ validate_distribution(args.repository, args.distribution, args.module)
+ identity = f"{manifest['repository']}@{manifest['commit'][:6]}"
except RuntimeError as error:
parser.exit(1, str(error) + "\n")
- print(f"Verified {manifest['repository']}@{manifest['commit'][:6]}: {len(jars)} candidate JARs")
+ print(f"Verified {identity}: {len(jars)} SDK JARs")
diff --git a/README.md b/README.md
index a40b242c2..8d1aedd05 100644
--- a/README.md
+++ b/README.md
@@ -364,16 +364,23 @@ Check [Maven Central](https://mvnrepository.com/artifact/org.apache.hugegraph) f
### Full Build
-Follow the [Java 17 bootstrap instructions](docs/java17-migration.md#build-the-locked-candidate) to install the locked SDK into an isolated Maven repository, then build with that repository:
+Normal builds use the 1.8.0 SDK and release packaging checks. Select the staging repository in Maven settings and use an isolated local repository:
```bash
-mvn -Dmaven.repo.local="$candidate_dir/m2" clean install -DskipTests -Dmaven.javadoc.skip=true -ntp
+mvn --settings "$release_settings" -Dmaven.repo.local="$release_repository" clean install \
+ -DskipTests -Dmaven.javadoc.skip=true -ntp
```
-Distribution packaging requires Python 3.9 or newer and verifies the SDK manifest and bundled libraries before producing archives. Ordinary `compile` and `test` remain available with published dependencies; those checks do not validate a candidate distribution. Use the same `-Dmaven.repo.local` option in the module commands below when building candidates.
+Distribution packaging requires Python 3.9 or newer. Release mode checks required SDK POM/JARs and packaged library versions and bytes, and rejects
+candidate manifests. Add `-Papache-release` for the Apache release profile; see [release packaging](docs/java17-migration.md#release-packaging).
+To build the older locked candidate instead, follow [the bootstrap instructions](docs/java17-migration.md#build-the-locked-candidate) and supply
+`-Dmaven.repo.local="$candidate_dir/m2" -Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate` to every module build.
### Module-Specific Builds
+Until the 1.8.0 SDK is available in Maven Central, apply the same `--settings "$release_settings"` and
+`-Dmaven.repo.local="$release_repository"` options from Full Build to each Maven command below.
+
| Module | Build Command |
|--------|---------------|
| Client | `mvn -e compile -pl hugegraph-client -Dmaven.javadoc.skip=true -ntp` |
diff --git a/docs/java17-migration.md b/docs/java17-migration.md
index cb0353625..cf8656c56 100644
--- a/docs/java17-migration.md
+++ b/docs/java17-migration.md
@@ -6,7 +6,10 @@ Toolchain builds, tests and applications use Java 17. The released Server 1.7 co
## Build the locked candidate
-The ASF Server master uses Java 17 and TinkerPop 3.8.1 while retaining the Maven version `1.7.0`. Its Common, PD, gRPC and Store artifacts must come from the same source commit; Maven Central artifacts with that version are not interchangeable with the candidate. CI uses the verified `apache/hugegraph` master baseline (shown as `e62c96` here), storing and fetching its complete immutable commit identity. Update the SDK action, verifier, Docker defaults and CI baseline together when advanc [...]
+The locked Java 17 Server candidate uses TinkerPop 3.8.1 and Maven version `1.7.0`. Its Common, PD, gRPC and Store artifacts must come from the
+same source commit; Maven Central artifacts with that version are not interchangeable with the candidate. Candidate CI uses the verified
+`apache/hugegraph` baseline (shown as `e62c96` here), storing and fetching its complete immutable commit identity. Update the SDK action, verifier,
+Docker defaults and CI baseline together when advancing that commit; moving master alone must not silently change packaged SDK provenance.
Use an explicit JDK directory and check both Java and Maven. On systems where Java 17 is not registered, a system JDK selector can return another installed version. Checking the generated class version alone does not identify the JVM that built or tested it.
@@ -30,7 +33,7 @@ PY_COMMIT
bash "$toolchain_root/hugegraph-client/assembly/travis/install-candidate-sdk.sh" \
"$server_commit" "$candidate_dir/server" "$candidate_dir/m2"
-mvn -Dmaven.repo.local="$candidate_dir/m2" clean install \
+mvn -Dmaven.repo.local="$candidate_dir/m2" -Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate clean install \
-DskipTests -Dmaven.javadoc.skip=true -ntp
```
@@ -38,7 +41,26 @@ The SDK helper installs the locked Server distribution, PD client, Store client
Distribution packaging also requires Python 3.9 or newer. Before each module archive is written, the existing SDK verifier checks the locked source, required POM/JAR hashes and local installation origins, then checks the distribution's manifest and actual SDK libraries. The combined archive rechecks all three module directories before moving them. Source checks lock Server SDK artifacts; Toolchain artifacts such as the Client, Loader and Hubble backend are outputs of this reactor and may [...]
-These isolated builds reuse `1.7.0` coordinates only for source validation. Before proposing a release candidate or deploying Toolchain Maven artifacts for external consumers, every Java 17 SDK dependency must have coordinates that distinguish it from the previously released `1.7.0` artifacts and are available to those consumers. Update the Toolchain dependencies and rerun the module dependency and runtime matrices against those publishable identities. Server versioning and publication a [...]
+These isolated builds reuse `1.7.0` coordinates only for source validation. The normal SDK dependency version is `1.8.0` and packaging defaults to
+release checks. Candidate CI and Docker builds explicitly select `-Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate`. Always apply both
+options together with the candidate Maven repository.
+
+## Release packaging
+
+Build 1.8.0 release packages with Java 17, Python 3.9 or newer, and `-Papache-release`. Use a fresh Maven repository and settings that resolve the
+chosen Apache staging repository. The existing `stage` profile selects Apache's staging group; specific repository selection belongs in Maven
+settings. Do not preinstall local Server artifacts when validating remote staging dependencies.
+
+```bash
+mvn --settings "$release_settings" -Dmaven.repo.local="$release_repository" -Papache-release \
+ clean install -DskipTests -Dmaven.javadoc.skip=true -ntp
+```
+
+Release mode requires the Common and PD Common/Client/gRPC 1.8.0 POM/JARs, plus Core for Hubble. Every bundled Server SDK library must have the selected
+version and match the JAR bytes in the build repository; missing, mixed or replaced libraries fail packaging. Candidate manifests in the Maven
+repository or distribution are rejected. This verifies dependency/package consistency, while staging origin is established separately by fresh
+resolution and retained build logs. For unsigned source prevalidation only, add `-Dgpg.skip=true` and record the local dependency origin explicitly.
+Passing that build does not establish RC signatures or constitute an ASF release. Staging upload and formal publication remain separate actions.
## Upgrade the core tools
diff --git a/hugegraph-dist/pom.xml b/hugegraph-dist/pom.xml
index f5efcbbde..a2ed0dcd3 100644
--- a/hugegraph-dist/pom.xml
+++ b/hugegraph-dist/pom.xml
@@ -76,6 +76,10 @@
<exec executable="python3" failonerror="true">
<arg value="${project.basedir}/../.github/scripts/verify_candidate_image_sdk.py"/>
<arg value="${settings.localRepository}"/>
+ <arg value="--mode"/>
+ <arg value="${sdk.validation.mode}"/>
+ <arg value="--version"/>
+ <arg value="${hugegraph.version}"/>
<arg value="--distribution"/>
<arg value="${project.basedir}/../hugegraph-loader/apache-hugegraph-loader-${project.version}"/>
<arg value="--module"/>
@@ -84,6 +88,10 @@
<exec executable="python3" failonerror="true">
<arg value="${project.basedir}/../.github/scripts/verify_candidate_image_sdk.py"/>
<arg value="${settings.localRepository}"/>
+ <arg value="--mode"/>
+ <arg value="${sdk.validation.mode}"/>
+ <arg value="--version"/>
+ <arg value="${hugegraph.version}"/>
<arg value="--distribution"/>
<arg value="${project.basedir}/../hugegraph-tools/apache-hugegraph-tools-${project.version}"/>
<arg value="--module"/>
@@ -92,6 +100,10 @@
<exec executable="python3" failonerror="true">
<arg value="${project.basedir}/../.github/scripts/verify_candidate_image_sdk.py"/>
<arg value="${settings.localRepository}"/>
+ <arg value="--mode"/>
+ <arg value="${sdk.validation.mode}"/>
+ <arg value="--version"/>
+ <arg value="${hugegraph.version}"/>
<arg value="--distribution"/>
<arg value="${project.basedir}/../hugegraph-hubble/apache-hugegraph-hubble-${project.version}"/>
<arg value="--module"/>
diff --git a/hugegraph-hubble/Dockerfile b/hugegraph-hubble/Dockerfile
index a57653ef0..bc92b8774 100644
--- a/hugegraph-hubble/Dockerfile
+++ b/hugegraph-hubble/Dockerfile
@@ -47,9 +47,13 @@ RUN mkdir -p /opt/candidate-m2 \
COPY . /pkg
RUN set -x \
- && mvn install $MAVEN_ARGS -Dmaven.repo.local=/opt/candidate-m2 -pl hugegraph-client,hugegraph-loader -am -Dmaven.javadoc.skip=true -DskipTests -ntp \
+ && mvn install $MAVEN_ARGS -Dmaven.repo.local=/opt/candidate-m2 \
+ -Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate \
+ -pl hugegraph-client,hugegraph-loader -am -Dmaven.javadoc.skip=true -DskipTests -ntp \
&& cd /pkg/hugegraph-hubble/ \
- && mvn package $MAVEN_ARGS -Dmaven.repo.local=/opt/candidate-m2 -e -B -ntp -DskipTests -Dmaven.javadoc.skip=true \
+ && mvn package $MAVEN_ARGS -Dmaven.repo.local=/opt/candidate-m2 \
+ -Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate \
+ -e -B -ntp -DskipTests -Dmaven.javadoc.skip=true \
&& python3 /pkg/.github/scripts/verify_candidate_image_sdk.py /opt/candidate-m2 \
&& set -- /pkg/hugegraph-hubble/target/apache-hugegraph-hubble-*.tar.gz \
&& test "$#" -eq 1 \
diff --git a/hugegraph-hubble/hubble-dist/pom.xml b/hugegraph-hubble/hubble-dist/pom.xml
index 9c9104ad0..1902d606b 100644
--- a/hugegraph-hubble/hubble-dist/pom.xml
+++ b/hugegraph-hubble/hubble-dist/pom.xml
@@ -162,6 +162,10 @@
<exec executable="python3" failonerror="true">
<arg value="${repo.root.dir}/.github/scripts/verify_candidate_image_sdk.py"/>
<arg value="${settings.localRepository}"/>
+ <arg value="--mode"/>
+ <arg value="${sdk.validation.mode}"/>
+ <arg value="--version"/>
+ <arg value="${hugegraph.version}"/>
<arg value="--distribution"/>
<arg value="${top.level.dir}/${final.name}"/>
<arg value="--module"/>
diff --git a/hugegraph-loader/Dockerfile b/hugegraph-loader/Dockerfile
index 1985afe64..837c49356 100644
--- a/hugegraph-loader/Dockerfile
+++ b/hugegraph-loader/Dockerfile
@@ -43,7 +43,9 @@ RUN mkdir -p /opt/candidate-m2 \
COPY . /pkg
RUN set -x \
- && mvn clean package $MAVEN_ARGS -Dmaven.repo.local=/opt/candidate-m2 -pl hugegraph-client,hugegraph-loader -am \
+ && mvn clean package $MAVEN_ARGS -Dmaven.repo.local=/opt/candidate-m2 \
+ -Dhugegraph.version=1.7.0 -Dsdk.validation.mode=candidate \
+ -pl hugegraph-client,hugegraph-loader -am \
-Dmaven.javadoc.skip=true -DskipTests -ntp \
&& python3 /pkg/.github/scripts/verify_candidate_image_sdk.py /opt/candidate-m2
diff --git a/hugegraph-loader/pom.xml b/hugegraph-loader/pom.xml
index ed2d7183c..6cbce2226 100644
--- a/hugegraph-loader/pom.xml
+++ b/hugegraph-loader/pom.xml
@@ -734,6 +734,10 @@
<exec executable="python3" failonerror="true">
<arg value="${project.basedir}/../.github/scripts/verify_candidate_image_sdk.py"/>
<arg value="${settings.localRepository}"/>
+ <arg value="--mode"/>
+ <arg value="${sdk.validation.mode}"/>
+ <arg value="--version"/>
+ <arg value="${hugegraph.version}"/>
<arg value="--distribution"/>
<arg value="${project.basedir}/${final.name}"/>
<arg value="--module"/>
diff --git a/hugegraph-tools/pom.xml b/hugegraph-tools/pom.xml
index f403a471c..101e1c22e 100644
--- a/hugegraph-tools/pom.xml
+++ b/hugegraph-tools/pom.xml
@@ -213,6 +213,10 @@
<exec executable="python3" failonerror="true">
<arg value="${project.basedir}/../.github/scripts/verify_candidate_image_sdk.py"/>
<arg value="${settings.localRepository}"/>
+ <arg value="--mode"/>
+ <arg value="${sdk.validation.mode}"/>
+ <arg value="--version"/>
+ <arg value="${hugegraph.version}"/>
<arg value="--distribution"/>
<arg value="${project.basedir}/${final.name}"/>
<arg value="--module"/>
diff --git a/pom.xml b/pom.xml
index fb949e21f..77a81b335 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,7 +100,8 @@
<properties>
<revision>1.8.0</revision>
<!-- Unified release line for HugeGraph common, server/core, PD and store artifacts -->
- <hugegraph.version>1.7.0</hugegraph.version>
+ <hugegraph.version>1.8.0</hugegraph.version>
+ <sdk.validation.mode>release</sdk.validation.mode>
<release.name>${project.artifactId}</release.name>
<final.name>apache-${release.name}-${project.version}</final.name>
<assembly.dir>${project.basedir}/assembly</assembly.dir>
@@ -340,6 +341,9 @@
<profiles>
<profile>
<id>apache-release</id>
+ <properties>
+ <sdk.validation.mode>release</sdk.validation.mode>
+ </properties>
<build>
<pluginManagement>
<plugins>