Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
195 changes: 195 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,70 @@ on:
types: [opened, reopened, synchronize]
paths-ignore:
- '**.md'
workflow_dispatch:
permissions:
contents: read
pull-requests: read

jobs:
detect-raft-changes:
name: "detect-raft-changes"
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
outputs:
raft: ${{ steps.filter.outputs.raft }}
steps:
- name: "Detect raft-related changes"
id: filter
env:
GITHUB_TOKEN: ${{ github.token }}
GITHUB_API_URL: ${{ github.api_url }}
GITHUB_REPOSITORY: ${{ github.repository }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
python <<'PY'
import json
import os
import urllib.request

api_url = os.environ["GITHUB_API_URL"]
repository = os.environ["GITHUB_REPOSITORY"]
pr_number = os.environ["PR_NUMBER"]
token = os.environ["GITHUB_TOKEN"]
output_path = os.environ["GITHUB_OUTPUT"]
prefixes = (
"server/",
"discovery/",
"distribution/",
"test-suite/",
"script/",
".github/workflows/",
)

page = 1
raft_changed = False
while True:
request = urllib.request.Request(
f"{api_url}/repos/{repository}/pulls/{pr_number}/files?per_page=100&page={page}",
headers={
"Accept": "application/vnd.github+json",
"Authorization": f"Bearer {token}",
"X-GitHub-Api-Version": "2022-11-28",
},
)
with urllib.request.urlopen(request) as response:
files = json.load(response)
if not files:
break
if any(file_info["filename"].startswith(prefixes) for file_info in files):
raft_changed = True
break
page += 1

with open(output_path, "a", encoding="utf-8") as output:
output.write(f"raft={'true' if raft_changed else 'false'}\n")
PY

# job 1: Test based on java 8, 17, 21 and 25.
build:
name: "build"
Expand Down Expand Up @@ -153,3 +215,136 @@ jobs:
-Prelease-seata \
-DskipTests \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn

raft-current-server-current-client:
name: "raft-current-server-current-client"
needs: detect-raft-changes
if: ${{ github.event_name == 'pull_request' && needs.detect-raft-changes.outputs.raft == 'true' }}
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v3
- name: "Set raft workspace"
run: echo "RAFT_WORKSPACE=${RUNNER_TEMP}/raft-current-server-current-client" >> "$GITHUB_ENV"
- name: "Set up Java JDK 25"
uses: actions/setup-java@v3.12.0
with:
distribution: 'zulu'
java-version: 25
cache: 'maven'
- name: "Prepare scripts"
run: chmod +x ./script/ci/raft-cluster.sh
- name: "Build current server-only distribution"
run: |
./mvnw -pl distribution -am -Prelease-seata-server -DskipTests package \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
echo "SEATA_CURRENT_SERVER_ARCHIVE=$(ls distribution/target/apache-seata-server-*-bin.tar.gz | head -n 1)" >> "$GITHUB_ENV"
- name: "Start current raft cluster"
run: |
./script/ci/raft-cluster.sh start \
--distribution "$SEATA_CURRENT_SERVER_ARCHIVE" \
--workspace "$RAFT_WORKSPACE" \
--env-file "$GITHUB_ENV"
- name: "Run current client raft compatibility test"
run: |
./mvnw -pl test-suite/test-new-version -am \
-DfailIfNoTests=false -Dtest=ExternalRaftClusterIT test \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
- name: "Stop current raft cluster"
if: always()
run: ./script/ci/raft-cluster.sh stop --workspace "$RAFT_WORKSPACE"
- name: "Upload current/current raft logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: raft-current-server-current-client-logs
path: ${{ env.RAFT_WORKSPACE }}
if-no-files-found: ignore

raft-previous-server-current-client:
name: "raft-previous-server-current-client"
needs: detect-raft-changes
if: ${{ github.event_name == 'pull_request' && needs.detect-raft-changes.outputs.raft == 'true' }}
runs-on: ubuntu-latest
env:
SEATA_PREVIOUS_RAFT_VERSION: 2.6.0
steps:
- name: "Checkout"
uses: actions/checkout@v3
- name: "Set raft workspace"
run: echo "RAFT_WORKSPACE=${RUNNER_TEMP}/raft-previous-server-current-client" >> "$GITHUB_ENV"
- name: "Set up Java JDK 25"
uses: actions/setup-java@v3.12.0
with:
distribution: 'zulu'
java-version: 25
cache: 'maven'
- name: "Prepare scripts"
run: chmod +x ./script/ci/raft-cluster.sh
- name: "Start previous stable raft cluster"
run: |
./script/ci/raft-cluster.sh start \
--distribution "$SEATA_PREVIOUS_RAFT_VERSION" \
--workspace "$RAFT_WORKSPACE" \
--readiness-mode tcp \
--env-file "$GITHUB_ENV"
- name: "Run current client against previous raft server"
run: |
./mvnw -pl test-suite/test-new-version -am \
-DfailIfNoTests=false -Dtest=PreviousServerCurrentClientCompatibilityIT test \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
- name: "Stop previous raft cluster"
if: always()
run: ./script/ci/raft-cluster.sh stop --workspace "$RAFT_WORKSPACE"
- name: "Upload previous/current raft logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: raft-previous-server-current-client-logs
path: ${{ env.RAFT_WORKSPACE }}
if-no-files-found: ignore

raft-current-server-previous-client:
name: "raft-current-server-previous-client"
needs: detect-raft-changes
if: ${{ github.event_name == 'pull_request' && needs.detect-raft-changes.outputs.raft == 'true' }}
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v3
- name: "Set raft workspace"
run: echo "RAFT_WORKSPACE=${RUNNER_TEMP}/raft-current-server-previous-client" >> "$GITHUB_ENV"
- name: "Set up Java JDK 25"
uses: actions/setup-java@v3.12.0
with:
distribution: 'zulu'
java-version: 25
cache: 'maven'
- name: "Prepare scripts"
run: chmod +x ./script/ci/raft-cluster.sh
- name: "Build current server-only distribution"
run: |
./mvnw -pl distribution -am -Prelease-seata-server -DskipTests package \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
echo "SEATA_CURRENT_SERVER_ARCHIVE=$(ls distribution/target/apache-seata-server-*-bin.tar.gz | head -n 1)" >> "$GITHUB_ENV"
- name: "Start current raft cluster"
run: |
./script/ci/raft-cluster.sh start \
--distribution "$SEATA_CURRENT_SERVER_ARCHIVE" \
--workspace "$RAFT_WORKSPACE" \
--env-file "$GITHUB_ENV"
- name: "Run previous stable client against current raft server"
run: |
./mvnw -pl test-suite/test-previous-version -am \
-DfailIfNoTests=false -Dtest=PreviousVersionRaftCompatibilityIT test \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
- name: "Stop current raft cluster"
if: always()
run: ./script/ci/raft-cluster.sh stop --workspace "$RAFT_WORKSPACE"
- name: "Upload current/previous raft logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: raft-current-server-previous-client-logs
path: ${{ env.RAFT_WORKSPACE }}
if-no-files-found: ignore
160 changes: 160 additions & 0 deletions .github/workflows/raft-compatibility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#
name: "raft-compatibility"

on:
push:
branches: [ 2.x, develop, master ]
paths:
- 'server/**'
- 'discovery/**'
- 'distribution/**'
- 'test-suite/**'
- 'script/**'
- '.github/workflows/**'
workflow_dispatch:

env:
SEATA_PREVIOUS_RAFT_VERSION: 2.6.0
permissions:
contents: read

jobs:
raft-current-server-current-client:
name: "raft-current-server-current-client"
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v3
- name: "Set raft workspace"
run: echo "RAFT_WORKSPACE=${RUNNER_TEMP}/raft-current-server-current-client" >> "$GITHUB_ENV"
- name: "Set up Java JDK 25"
uses: actions/setup-java@v3.12.0
with:
distribution: 'zulu'
java-version: 25
cache: 'maven'
- name: "Prepare scripts"
run: chmod +x ./script/ci/raft-cluster.sh
- name: "Build current server-only distribution"
run: |
./mvnw -pl distribution -am -Prelease-seata-server -DskipTests package \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
echo "SEATA_CURRENT_SERVER_ARCHIVE=$(ls distribution/target/apache-seata-server-*-bin.tar.gz | head -n 1)" >> "$GITHUB_ENV"
- name: "Start current raft cluster"
run: |
./script/ci/raft-cluster.sh start \
--distribution "$SEATA_CURRENT_SERVER_ARCHIVE" \
--workspace "$RAFT_WORKSPACE" \
--env-file "$GITHUB_ENV"
- name: "Run current client raft compatibility test"
run: |
./mvnw -pl test-suite/test-new-version -am \
-DfailIfNoTests=false -Dtest=ExternalRaftClusterIT test \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
- name: "Stop current raft cluster"
if: always()
run: ./script/ci/raft-cluster.sh stop --workspace "$RAFT_WORKSPACE"
- name: "Upload current/current raft logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: raft-current-server-current-client-logs
path: ${{ env.RAFT_WORKSPACE }}
if-no-files-found: ignore

raft-previous-server-current-client:
name: "raft-previous-server-current-client"
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v3
- name: "Set raft workspace"
run: echo "RAFT_WORKSPACE=${RUNNER_TEMP}/raft-previous-server-current-client" >> "$GITHUB_ENV"
- name: "Set up Java JDK 25"
uses: actions/setup-java@v3.12.0
with:
distribution: 'zulu'
java-version: 25
cache: 'maven'
- name: "Prepare scripts"
run: chmod +x ./script/ci/raft-cluster.sh
- name: "Start previous stable raft cluster"
run: |
./script/ci/raft-cluster.sh start \
--distribution "$SEATA_PREVIOUS_RAFT_VERSION" \
--workspace "$RAFT_WORKSPACE" \
--readiness-mode tcp \
--env-file "$GITHUB_ENV"
- name: "Run current client against previous raft server"
run: |
./mvnw -pl test-suite/test-new-version -am \
-DfailIfNoTests=false -Dtest=PreviousServerCurrentClientCompatibilityIT test \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
- name: "Stop previous raft cluster"
if: always()
run: ./script/ci/raft-cluster.sh stop --workspace "$RAFT_WORKSPACE"
- name: "Upload previous/current raft logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: raft-previous-server-current-client-logs
path: ${{ env.RAFT_WORKSPACE }}
if-no-files-found: ignore

raft-current-server-previous-client:
name: "raft-current-server-previous-client"
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v3
- name: "Set raft workspace"
run: echo "RAFT_WORKSPACE=${RUNNER_TEMP}/raft-current-server-previous-client" >> "$GITHUB_ENV"
- name: "Set up Java JDK 25"
uses: actions/setup-java@v3.12.0
with:
distribution: 'zulu'
java-version: 25
cache: 'maven'
- name: "Prepare scripts"
run: chmod +x ./script/ci/raft-cluster.sh
- name: "Build current server-only distribution"
run: |
./mvnw -pl distribution -am -Prelease-seata-server -DskipTests package \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
echo "SEATA_CURRENT_SERVER_ARCHIVE=$(ls distribution/target/apache-seata-server-*-bin.tar.gz | head -n 1)" >> "$GITHUB_ENV"
- name: "Start current raft cluster"
run: |
./script/ci/raft-cluster.sh start \
--distribution "$SEATA_CURRENT_SERVER_ARCHIVE" \
--workspace "$RAFT_WORKSPACE" \
--env-file "$GITHUB_ENV"
- name: "Run previous stable client against current raft server"
run: |
./mvnw -pl test-suite/test-previous-version -am \
-DfailIfNoTests=false -Dtest=PreviousVersionRaftCompatibilityIT test \
-e -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
- name: "Stop current raft cluster"
if: always()
run: ./script/ci/raft-cluster.sh stop --workspace "$RAFT_WORKSPACE"
- name: "Upload current/previous raft logs"
if: always()
uses: actions/upload-artifact@v4
with:
name: raft-current-server-previous-client-logs
path: ${{ env.RAFT_WORKSPACE }}
if-no-files-found: ignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.ResourceLock;
import org.junit.jupiter.api.parallel.Resources;

@ResourceLock(Resources.SYSTEM_PROPERTIES)
@ResourceLock("ConfigurationFactory")
class ProConfigurationFactoryTest {

@Test
Expand All @@ -28,13 +32,13 @@ void getInstance() {
System.setProperty(ConfigProperty.SYSTEM_PROPERTY_SEATA_CONFIG_NAME, ConfigProperty.REGISTRY_CONF_DEFAULT);
ConfigurationFactory.reload();
Assertions.assertEquals(
ConfigurationFactory.CURRENT_FILE_INSTANCE.getConfig("config.file.name"), "file-test-pro.conf");
"file-test-pro.conf", ConfigurationFactory.CURRENT_FILE_INSTANCE.getConfig("config.file.name"));
Assertions.assertEquals(ConfigurationFactory.CURRENT_FILE_INSTANCE.getConfig("config.file.testBlank"), "");
Assertions.assertNull(ConfigurationFactory.CURRENT_FILE_INSTANCE.getConfig("config.file.testNull"));
Assertions.assertNull(ConfigurationFactory.CURRENT_FILE_INSTANCE.getConfig("config.file.testExist"));
Configuration instance = ConfigurationFactory.getInstance();
Assertions.assertEquals(instance.getConfig("client.undo.compress.enable"), "true");
Assertions.assertEquals(instance.getConfig("service.default.grouplist"), "127.0.0.1:8092");
Assertions.assertEquals("true", instance.getConfig("client.undo.compress.enable"));
Assertions.assertEquals("127.0.0.1:8092", instance.getConfig("service.default.grouplist"));
}

@AfterAll
Expand Down
Loading
Loading