From b3a15a9eb9e7a9bfc59ddeb8b97870341afd31ce Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 9 Apr 2026 10:09:04 +0100 Subject: [PATCH 1/2] Centralise `setup-[client/server]-matrix` jobs We should avoid repeating boilerplate and call centralised action(s). Of note - different workflows used different version of Python in conjunction with `setup-python`. The runner comes bundled with a version of Python sufficient to run this simple script - no installation was even required, removed. --- .github/workflows/server_compatibility.yaml | 50 ++++++++++----------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/server_compatibility.yaml b/.github/workflows/server_compatibility.yaml index af499291..4a61ecd2 100644 --- a/.github/workflows/server_compatibility.yaml +++ b/.github/workflows/server_compatibility.yaml @@ -221,28 +221,28 @@ jobs: compare-to: 5.5.0 - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-tests path: jars - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-sql path: jars - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast path: jars - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise path: jars @@ -293,7 +293,7 @@ jobs: with: python-version: 3.9 - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@v2 with: node-version: 14 - name: Read Java Config @@ -331,31 +331,31 @@ jobs: cp -a $GITHUB_WORKSPACE/tag/lib $GITHUB_WORKSPACE/master/lib cp -a $GITHUB_WORKSPACE/tag/package.json $GITHUB_WORKSPACE/master/package.json - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-tests path: jars - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-sql path: jars - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast path: jars - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise path: jars - name: Download Hazelcast Enterprise tests JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise-tests path: jars @@ -434,35 +434,35 @@ jobs: sparse-checkout-cone-mode: false - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-tests path: tag/temp/lib - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-sql path: tag/temp/lib - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast path: tag/temp/lib - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise path: tag/temp/lib - name: Download Hazelcast Enterprise tests JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise-tests path: tag/temp/lib @@ -612,31 +612,31 @@ jobs: rm -rf tag/scripts cp -R master/scripts tag/ - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-tests path: tag - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-sql path: tag - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast path: tag - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise path: tag - name: Download Hazelcast Enterprise tests JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise-tests path: tag @@ -690,28 +690,28 @@ jobs: sparse-checkout-cone-mode: false - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-tests path: client - name: Download Hazelcast JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast path: client - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-sql path: client - name: Download Hazelcast Enterprise JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise path: client - name: Download Hazelcast Enterprise tests JAR - uses: actions/download-artifact@v8 + uses: actions/download-artifact@v7 with: name: hazelcast-enterprise-tests path: client From 172aa7a404e2b34209c67a2465c04b134e15d143 Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 9 Apr 2026 11:22:24 +0100 Subject: [PATCH 2/2] Remove hardcoded supported server version --- .github/workflows/get-server-matrix.yaml | 5 +++ .github/workflows/server_compatibility.yaml | 50 ++++++++++----------- get_server_matrix.py | 17 ++++--- util.py | 7 ++- 4 files changed, 45 insertions(+), 34 deletions(-) diff --git a/.github/workflows/get-server-matrix.yaml b/.github/workflows/get-server-matrix.yaml index 5bc94c22..caceed68 100644 --- a/.github/workflows/get-server-matrix.yaml +++ b/.github/workflows/get-server-matrix.yaml @@ -13,6 +13,10 @@ jobs: outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: + - id: get-maintenance-versions + uses: hazelcast/hazelcast/.github/actions/get-supported-maintenance-versions@master + - id: calculate-minimum-supported-version + run: echo "VERSION=$(echo '${{ steps.get-maintenance-versions.outputs.versions }}' | jq '.[0]')" >> ${GITHUB_OUTPUT} - name: Checkout to scripts uses: actions/checkout@v6 - name: Set server matrix @@ -21,4 +25,5 @@ jobs: echo "matrix=$( python \ get_server_matrix.py \ + --minimum-version ${{ steps.calculate-minimum-supported-version.outputs.VERSION }} \ )" >> ${GITHUB_OUTPUT} diff --git a/.github/workflows/server_compatibility.yaml b/.github/workflows/server_compatibility.yaml index 4a61ecd2..af499291 100644 --- a/.github/workflows/server_compatibility.yaml +++ b/.github/workflows/server_compatibility.yaml @@ -221,28 +221,28 @@ jobs: compare-to: 5.5.0 - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-tests path: jars - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-sql path: jars - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast path: jars - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise path: jars @@ -293,7 +293,7 @@ jobs: with: python-version: 3.9 - name: Setup Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v6 with: node-version: 14 - name: Read Java Config @@ -331,31 +331,31 @@ jobs: cp -a $GITHUB_WORKSPACE/tag/lib $GITHUB_WORKSPACE/master/lib cp -a $GITHUB_WORKSPACE/tag/package.json $GITHUB_WORKSPACE/master/package.json - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-tests path: jars - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-sql path: jars - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast path: jars - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise path: jars - name: Download Hazelcast Enterprise tests JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise-tests path: jars @@ -434,35 +434,35 @@ jobs: sparse-checkout-cone-mode: false - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-tests path: tag/temp/lib - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-sql path: tag/temp/lib - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast path: tag/temp/lib - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise path: tag/temp/lib - name: Download Hazelcast Enterprise tests JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise-tests path: tag/temp/lib @@ -612,31 +612,31 @@ jobs: rm -rf tag/scripts cp -R master/scripts tag/ - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-tests path: tag - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-sql path: tag - name: Download Hazelcast JAR if: ${{ matrix.server_kind == 'os' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast path: tag - name: Download Hazelcast Enterprise JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise path: tag - name: Download Hazelcast Enterprise tests JAR if: ${{ matrix.server_kind == 'enterprise' }} - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise-tests path: tag @@ -690,28 +690,28 @@ jobs: sparse-checkout-cone-mode: false - name: Download Hazelcast tests JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-tests path: client - name: Download Hazelcast JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast path: client - name: Download Hazelcast SQL JAR (if exists) continue-on-error: true - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-sql path: client - name: Download Hazelcast Enterprise JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise path: client - name: Download Hazelcast Enterprise tests JAR - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 with: name: hazelcast-enterprise-tests path: client diff --git a/get_server_matrix.py b/get_server_matrix.py index f19e38ae..9439b0b8 100644 --- a/get_server_matrix.py +++ b/get_server_matrix.py @@ -5,10 +5,8 @@ from util import ( MajorMinorVersionFilter, ServerReleaseParser, - SupportedReleaseFilter, get_latest_patch_releases, - ReleaseFilter, - Version + ReleaseFilter ) @@ -17,13 +15,22 @@ def parse_args() -> argparse.Namespace: description="Returns the server version matrix as a JSON array" ) + parser.add_argument( + "--minimum-version", + dest="minimum_version", + action="store", + type=str, + required=True, + help="Minimum server version", + ) + return parser.parse_args() if __name__ == "__main__": args = parse_args() - unsupported_versions = [] - filters: List[ReleaseFilter] = [MajorMinorVersionFilter((5, 2)), SupportedReleaseFilter(unsupported_versions)] + minimum_major_version, minimum_minor_version = map(int, args.minimum_version.split(".")) + filters: List[ReleaseFilter] = [MajorMinorVersionFilter((minimum_major_version, minimum_minor_version))] server_release_parser = ServerReleaseParser(filters) releases = server_release_parser.get_all_releases() latest_patch_releases = get_latest_patch_releases(releases) diff --git a/util.py b/util.py index 120982c3..efbc308e 100644 --- a/util.py +++ b/util.py @@ -44,7 +44,6 @@ IMDG_CLIENTS = ( "https://raw.githubusercontent.com/hazelcast/rel-scripts/master/imdg-clients.txt" ) -IMDG_SERVERS = "https://raw.githubusercontent.com/hazelcast/rel-scripts/master/imdg-enterprise.txt" HAZELCAST_SERVERS = "https://raw.githubusercontent.com/hazelcast/rel-scripts/master/hazelcast-enterprise.txt" CLIENT_HEADER = "======= %s Client\n---\n(.*?)\n---\n===" @@ -236,21 +235,21 @@ def parse_version_and_tag(release_info: str) -> Optional[Tuple[str, str]]: class ServerReleaseParser(AbstractReleaseParser): def get_source_urls(self) -> List[str]: - return [IMDG_SERVERS, HAZELCAST_SERVERS] + return [HAZELCAST_SERVERS] def parse_raw_data(self, raw_data: str) -> List[Release]: stable_match = re.search(CURRENT_STABLE_SERVER_PATTERN, raw_data) if not stable_match: raise ValueError( "Cannot find a match on the server data " - "located at %s for the current stable version." % IMDG_SERVERS + "located at %s for the current stable version." % HAZELCAST_SERVERS ) previous_match = re.search(PREVIOUS_STABLE_SERVER_PATTERN, raw_data) if not previous_match: raise ValueError( "Cannot find a match on the server data " - "located at %s for the previous stable versions." % IMDG_SERVERS + "located at %s for the previous stable versions." % HAZELCAST_SERVERS ) all_releases = []