This is an automated email from the ASF dual-hosted git repository.
imbajin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hugegraph.git
The following commit(s) were added to refs/heads/master by this push:
new de8781e18 chore(ci): optimize rerun workflow and add macOS RocksDB
coverage (#3010)
de8781e18 is described below
commit de8781e18255aa05a3385af30e7883e75f5ca18e
Author: contrueCT <[email protected]>
AuthorDate: Fri May 8 15:46:33 2026 +0800
chore(ci): optimize rerun workflow and add macOS RocksDB coverage (#3010)
- Resolve Travis helper directory to an absolute path
- Use the script directory directly for JaCoCo agent lookup
- Avoid nesting absolute paths under the repository root
---------
Co-authored-by: imbajin <[email protected]>
---
.github/workflows/rerun-ci.yml | 10 ++-
.github/workflows/server-ci.yml | 73 ++++++++++++++++++++++
.../src/assembly/travis/build-report.sh | 39 ++++++++++--
.../src/assembly/travis/run-api-test.sh | 49 +++++++++++++--
.../src/assembly/travis/start-server.sh | 55 +++++++++++-----
5 files changed, 196 insertions(+), 30 deletions(-)
diff --git a/.github/workflows/rerun-ci.yml b/.github/workflows/rerun-ci.yml
index d2282e009..3fdd4c0f5 100644
--- a/.github/workflows/rerun-ci.yml
+++ b/.github/workflows/rerun-ci.yml
@@ -18,6 +18,7 @@ env:
jobs:
decide-rerun-action:
+ if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
outputs:
action: ${{ steps.decision.outputs.action }}
@@ -28,19 +29,16 @@ jobs:
WORKFLOW_NAME: ${{ github.event.workflow_run.name }}
RUN_ID: ${{ github.event.workflow_run.id }}
RUN_ATTEMPT: ${{ github.event.workflow_run.run_attempt }}
- CONCLUSION: ${{ github.event.workflow_run.conclusion }}
EVENT_NAME: ${{ github.event.workflow_run.event }}
HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
run: |
set -euo pipefail
action="skip"
- reason="non-failure"
+ reason="unsupported event: $EVENT_NAME"
- if [[ "$CONCLUSION" == "failure" ]]; then
- if [[ "$EVENT_NAME" != "push" && "$EVENT_NAME" != "pull_request"
]]; then
- reason="unsupported event: $EVENT_NAME"
- elif (( RUN_ATTEMPT > MAX_RERUNS )); then
+ if [[ "$EVENT_NAME" == "push" || "$EVENT_NAME" == "pull_request" ]];
then
+ if (( RUN_ATTEMPT > MAX_RERUNS )); then
reason="retry limit reached"
else
action="rerun"
diff --git a/.github/workflows/server-ci.yml b/.github/workflows/server-ci.yml
index f91bd809a..266e70feb 100644
--- a/.github/workflows/server-ci.yml
+++ b/.github/workflows/server-ci.yml
@@ -100,3 +100,76 @@ jobs:
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ${{ env.REPORT_DIR }}/*.xml
+
+ build-server-macos-rocksdb:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - os: macos-15-intel
+ server_java_options: ''
+ - os: macos-15
+ server_java_options: '-Xms512m -Xmx2g'
+ env:
+ USE_STAGE: 'false' # Whether to include the stage repository.
+ TRAVIS_DIR: hugegraph-server/hugegraph-dist/src/assembly/travis
+ REPORT_DIR: target/site/jacoco
+ BACKEND: rocksdb
+ JAVA_VERSION: '11'
+ SERVER_JAVA_OPTIONS: ${{ matrix.server_java_options }}
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 5
+
+ - name: Install Java ${{ env.JAVA_VERSION }}
+ uses: actions/setup-java@v4
+ with:
+ java-version: ${{ env.JAVA_VERSION }}
+ distribution: 'zulu'
+
+ - name: Cache Maven packages
+ uses: actions/cache@v4
+ with:
+ path: ~/.m2
+ key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+ restore-keys: ${{ runner.os }}-m2
+
+ - name: Use staged maven repo settings
+ if: ${{ env.USE_STAGE == 'true' }}
+ run: |
+ cp $HOME/.m2/settings.xml /tmp/settings.xml
+ cp -vf .github/configs/settings.xml $HOME/.m2/settings.xml && cat
$HOME/.m2/settings.xml
+
+ - name: Compile
+ run: |
+ mvn clean compile -pl hugegraph-server/hugegraph-test -am -U
-Dmaven.javadoc.skip=true -ntp
+
+ - name: Run RocksDB core test
+ run: |
+ $TRAVIS_DIR/run-core-test.sh $BACKEND
+
+ - name: Run RocksDB API test
+ run: |
+ $TRAVIS_DIR/run-api-test.sh $BACKEND $REPORT_DIR
+
+ - name: Show server log on failure
+ if: failure()
+ run: |
+ VERSION=$(mvn help:evaluate -Dexpression=project.version -q
-DforceStdout)
+ SERVER_DIR=hugegraph-server/apache-hugegraph-server-$VERSION/
+ if [ -f "$SERVER_DIR/logs/hugegraph-server.log" ]; then
+ tail -n 200 "$SERVER_DIR/logs/hugegraph-server.log"
+ fi
+
+ - name: Stop RocksDB server
+ if: always()
+ run: |
+ VERSION=$(mvn help:evaluate -Dexpression=project.version -q
-DforceStdout)
+ SERVER_DIR=hugegraph-server/apache-hugegraph-server-$VERSION/
+ if [ -f "$SERVER_DIR/bin/pid" ]; then
+ $TRAVIS_DIR/stop-server.sh $SERVER_DIR || true
+ fi
diff --git
a/hugegraph-server/hugegraph-dist/src/assembly/travis/build-report.sh
b/hugegraph-server/hugegraph-dist/src/assembly/travis/build-report.sh
index 0e17491dd..920914267 100755
--- a/hugegraph-server/hugegraph-dist/src/assembly/travis/build-report.sh
+++ b/hugegraph-server/hugegraph-dist/src/assembly/travis/build-report.sh
@@ -21,22 +21,53 @@ BACKEND=$1
JACOCO_PORT=$2
JACOCO_REPORT_FILE=$3
+TRAVIS_DIR=$(cd "$(dirname "$0")" && pwd)
+REPO_ROOT=$(cd "$TRAVIS_DIR/../../../../.." && pwd)
+
+function command_available() {
+ local cmd=$1
+ [[ -x "$(command -v "$cmd")" ]]
+}
+
+function download_to_dir() {
+ local dir=$1
+ local url=$2
+ local file="$dir/$(basename "$url")"
+
+ mkdir -p "$dir"
+ if command_available "curl"; then
+ curl -fL "$url" -o "$file"
+ elif command_available "wget"; then
+ wget -P "$dir" "$url"
+ else
+ echo "Required curl or wget but they are unavailable"
+ exit 1
+ fi
+}
+
OPTION_CLASS_FILES_BACKEND="--classfiles
hugegraph-$BACKEND/target/classes/org/apache/hugegraph"
if [ "$BACKEND" == "memory" ]; then
# hugegraph-memory is the same as hugegraph-core
OPTION_CLASS_FILES_BACKEND=""
fi
-cd hugegraph-server/hugegraph-test
+case "$JACOCO_REPORT_FILE" in
+ /*) REPORT_FILE=$JACOCO_REPORT_FILE ;;
+ *) REPORT_FILE="$REPO_ROOT/$JACOCO_REPORT_FILE" ;;
+esac
+mkdir -p "$(dirname "$REPORT_FILE")"
+
+cd "$REPO_ROOT/hugegraph-server/hugegraph-test"
mvn jacoco:dump@pull-test-data -Dapp.host=localhost -Dapp.port=$JACOCO_PORT
-Dskip.dump=false
-cd ../
+cd "$REPO_ROOT/hugegraph-server"
if [[ ! -e "${TRAVIS_DIR}/jacococli.jar" ]]; then
- wget -P "${TRAVIS_DIR}"
https://github.com/apache/hugegraph-doc/raw/binary-1.0/dist/server/jacococli.jar
+ download_to_dir "${TRAVIS_DIR}" \
+
"https://github.com/apache/hugegraph-doc/raw/binary-1.0/dist/server/jacococli.jar"
fi
java -jar $TRAVIS_DIR/jacococli.jar report
hugegraph-test/target/jacoco-it.exec \
--classfiles hugegraph-dist/target/classes/org/apache/hugegraph \
--classfiles hugegraph-api/target/classes/org/apache/hugegraph \
--classfiles hugegraph-core/target/classes/org/apache/hugegraph \
- ${OPTION_CLASS_FILES_BACKEND} --xml "${JACOCO_REPORT_FILE}"
+ ${OPTION_CLASS_FILES_BACKEND} --xml "${REPORT_FILE}"
diff --git
a/hugegraph-server/hugegraph-dist/src/assembly/travis/run-api-test.sh
b/hugegraph-server/hugegraph-dist/src/assembly/travis/run-api-test.sh
index 14ea65952..2edeb9ce6 100755
--- a/hugegraph-server/hugegraph-dist/src/assembly/travis/run-api-test.sh
+++ b/hugegraph-server/hugegraph-dist/src/assembly/travis/run-api-test.sh
@@ -21,7 +21,42 @@ BACKEND=$1
REPORT_DIR=$2
REPORT_FILE=$REPORT_DIR/jacoco-api-test-for-raft.xml
-TRAVIS_DIR=$(dirname $0)
+TRAVIS_DIR=$(cd "$(dirname "$0")" && pwd)
+REPO_ROOT=$(cd "$TRAVIS_DIR/../../../../.." && pwd)
+
+function command_available() {
+ local cmd=$1
+ [[ -x "$(command -v "$cmd")" ]]
+}
+
+function sed_in_place() {
+ local expression=$1
+ local file=$2
+
+ case "$(uname)" in
+ Darwin) sed -i '' "$expression" "$file" ;;
+ *) sed -i "$expression" "$file" ;;
+ esac
+}
+
+function download_to_dir() {
+ local dir=$1
+ local url=$2
+ local file="$dir/$(basename "$url")"
+
+ mkdir -p "$dir"
+ if command_available "curl"; then
+ curl -fL "$url" -o "$file"
+ elif command_available "wget"; then
+ wget -P "$dir" "$url"
+ else
+ echo "Required curl or wget but they are unavailable"
+ exit 1
+ fi
+}
+
+cd "$REPO_ROOT"
+
VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
SERVER_DIR=hugegraph-server/apache-hugegraph-server-$VERSION/
CONF=$SERVER_DIR/conf/graphs/hugegraph.properties
@@ -32,20 +67,22 @@ JACOCO_PORT=36320
mvn package -Dmaven.test.skip=true -ntp
# add mysql dependency
-wget -P $SERVER_DIR/lib/
https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar
+download_to_dir "$SERVER_DIR/lib/" \
+
"https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar"
if [[ ! -e "$SERVER_DIR/lib/ikanalyzer-2012_u6.jar" ]]; then
- wget -P $SERVER_DIR/lib/
https://raw.githubusercontent.com/apache/hugegraph-doc/ik_binary/dist/server/ikanalyzer-2012_u6.jar
+ download_to_dir "$SERVER_DIR/lib/" \
+
"https://raw.githubusercontent.com/apache/hugegraph-doc/ik_binary/dist/server/ikanalyzer-2012_u6.jar"
fi
# config rest-server
-sed -i '/^#*auth\.authenticator=/d' $REST_SERVER_CONF
-sed -i '/^#*auth\.admin_token=/d' $REST_SERVER_CONF
+sed_in_place '/^#*auth\.authenticator=/d' "$REST_SERVER_CONF"
+sed_in_place '/^#*auth\.admin_token=/d' "$REST_SERVER_CONF"
echo "auth.authenticator=org.apache.hugegraph.auth.StandardAuthenticator" >>
$REST_SERVER_CONF
echo "auth.admin_token=pa" >> $REST_SERVER_CONF
# config hugegraph.properties
-sed -i
's/gremlin.graph=.*/gremlin.graph=org.apache.hugegraph.auth.HugeFactoryAuthProxy/'
$CONF
+sed_in_place
's/gremlin.graph=.*/gremlin.graph=org.apache.hugegraph.auth.HugeFactoryAuthProxy/'
"$CONF"
# config gremlin-server
echo "
diff --git
a/hugegraph-server/hugegraph-dist/src/assembly/travis/start-server.sh
b/hugegraph-server/hugegraph-dist/src/assembly/travis/start-server.sh
index 7846b0451..b7b70e8cc 100755
--- a/hugegraph-server/hugegraph-dist/src/assembly/travis/start-server.sh
+++ b/hugegraph-server/hugegraph-dist/src/assembly/travis/start-server.sh
@@ -17,13 +17,12 @@
#
set -ev
-HOME_DIR=$(pwd)
-TRAVIS_DIR=$(dirname $0)
+TRAVIS_DIR=$(cd "$(dirname "$0")" && pwd)
BASE_DIR=$1
BACKEND=$2
JACOCO_PORT=$3
-JACOCO_DIR=${HOME_DIR}/${TRAVIS_DIR}
+JACOCO_DIR=${TRAVIS_DIR}
JACOCO_JAR=${JACOCO_DIR}/jacocoagent.jar
BIN=$BASE_DIR/bin
@@ -33,27 +32,46 @@ GREMLIN_CONF=$BASE_DIR/conf/gremlin-server.yaml
. "${BIN}"/util.sh
-declare -A backend_serializer_map=(["memory"]="text" \
- ["hbase"]="hbase" \
- ["rocksdb"]="binary" \
- ["hstore"]="binary")
+function sed_in_place() {
+ local expression=$1
+ local file=$2
-SERIALIZER=${backend_serializer_map[$BACKEND]}
+ case "$(uname)" in
+ Darwin) sed -i '' "$expression" "$file" ;;
+ *) sed -i "$expression" "$file" ;;
+ esac
+}
+
+case "$BACKEND" in
+ memory)
+ SERIALIZER=text
+ ;;
+ hbase)
+ SERIALIZER=hbase
+ ;;
+ rocksdb|hstore)
+ SERIALIZER=binary
+ ;;
+ *)
+ echo "Unsupported backend: $BACKEND"
+ exit 1
+ ;;
+esac
# Set backend and serializer
-sed -i "s/backend=.*/backend=$BACKEND/" $CONF
-sed -i "s/serializer=.*/serializer=$SERIALIZER/" $CONF
+write_property "$CONF" "backend" "$BACKEND"
+write_property "$CONF" "serializer" "$SERIALIZER"
# Set timeout for hbase
if [ "$BACKEND" == "hbase" ]; then
- sed -i '$arestserver.request_timeout=200' $REST_CONF
- sed -i '$agremlinserver.timeout=200' $REST_CONF
- sed -i 's/evaluationTimeout.*/evaluationTimeout: 200000/' $GREMLIN_CONF
+ echo "restserver.request_timeout=200" >> $REST_CONF
+ echo "gremlinserver.timeout=200" >> $REST_CONF
+ sed_in_place 's/evaluationTimeout.*/evaluationTimeout: 200000/'
"$GREMLIN_CONF"
fi
# Set usePD=true for hstore
if [ "$BACKEND" == "hstore" ]; then
- sed -i '$ausePD=true' $REST_CONF
+ echo "usePD=true" >> $REST_CONF
fi
# Append schema.sync_deletion=true to config file
@@ -67,5 +85,14 @@ if [ -n "$JACOCO_PORT" ]; then
JACOCO_OPTION="-javaagent:${JACOCO_JAR}=includes=*,port=${JACOCO_PORT},destfile=jacoco-it.exec,output=tcpserver"
fi
+SERVER_JAVA_OPTIONS="${SERVER_JAVA_OPTIONS:-}"
+if [ -n "$SERVER_JAVA_OPTIONS" ]; then
+ if [ -n "$JACOCO_OPTION" ]; then
+ JACOCO_OPTION="${JACOCO_OPTION} ${SERVER_JAVA_OPTIONS}"
+ else
+ JACOCO_OPTION="${SERVER_JAVA_OPTIONS}"
+ fi
+fi
+
echo -e "pa" | $BIN/init-store.sh
$BIN/start-hugegraph.sh -j "$JACOCO_OPTION" -t 60