This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch auto_update_cpp_py_version in repository https://gitbox.apache.org/repos/asf/tsfile.git
commit 076448e7d7e1bfec1b9ef6e9c0098a43791323ee Author: HTHou <[email protected]> AuthorDate: Tue Nov 19 21:35:48 2024 +0800 Auto update cpp&py project version when build with maven --- cpp/CMakeLists.txt | 5 ++--- cpp/VersionUpdater.groovy | 42 +++++++++++++++++++++++++++++++++++++ cpp/pom.xml | 50 ++++++++++++++++++++++---------------------- cpp/src/CMakeLists.txt | 4 ++-- pom.xml | 1 + python/VersionUpdater.groovy | 41 ++++++++++++++++++++++++++++++++++++ python/pom.xml | 26 ++++++++++++++++++++++- python/setup.py | 40 +++++++++++++++++++---------------- 8 files changed, 160 insertions(+), 49 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 5b96da35..1ba39325 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -20,8 +20,7 @@ cmake_minimum_required(VERSION 3.11) project(TsFile_CPP) cmake_policy(SET CMP0079 NEW) -set(TsFile_CPP_VERSION_MAJOR 0) -set(TsFile_CPP_VERSION_MINOR 1) +set(TsFile_CPP_VERSION 1.2.0.dev) set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -Wall -Werror") message("cmake using: USE_CPP11=${USE_CPP11}") @@ -68,7 +67,7 @@ endif() message("CMAKE DEBUG: CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}") set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} +set(PROJECT_INCLUDE_DIR ${PROJECT_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src ${PROJECT_SOURCE_DIR}/third_party/lz4 ${PROJECT_SOURCE_DIR}/third_party/lzokay diff --git a/cpp/VersionUpdater.groovy b/cpp/VersionUpdater.groovy new file mode 100644 index 00000000..49cbc650 --- /dev/null +++ b/cpp/VersionUpdater.groovy @@ -0,0 +1,42 @@ +/* + * 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. + */ + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Synchronize the version in CMakeLists.txt and the one used in the maven pom. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +def cppProjectFile = new File(project.basedir, "CMakeLists.txt") +def currentMavenVersion = project.version as String +def currentCppVersion = currentMavenVersion +if(currentMavenVersion.contains("-SNAPSHOT")) { + currentCppVersion = currentMavenVersion.split("-SNAPSHOT")[0] + ".dev" +} +println "Current Project Version in Maven: " + currentMavenVersion + +def match = cppProjectFile.text =~ /set\(TsFile_CPP_VERSION\s+(.+?)\)/ +def cppProjectFileVersion = match[0][1] +println "Current Project Version in CMake: " + cppProjectFileVersion + +if (cppProjectFileVersion != currentCppVersion) { + cppProjectFile.text = cppProjectFile.text.replace("set(TsFile_CPP_VERSION " + cppProjectFileVersion + ")", "set(TsFile_CPP_VERSION " + currentCppVersion + ")") + println "Version in CMakeLists.txt updated from " + cppProjectFileVersion + " to " + currentCppVersion + // TODO: When releasing, we might need to manually add this file to the release preparation commit. +} else { + println "Version in CMakeLists.txt is up to date" +} diff --git a/cpp/pom.xml b/cpp/pom.xml index 65324616..c3699735 100644 --- a/cpp/pom.xml +++ b/cpp/pom.xml @@ -28,7 +28,6 @@ <packaging>pom</packaging> <name>TsFile: C++</name> <properties> - <groovy.version>4.0.22</groovy.version> <!-- Tell Sonar where to find the sources --> <sonar.sources>common,examples,tsfile</sonar.sources> <sonar.cfamily.build-wrapper-output>${project.build.directory}/build-wrapper-output</sonar.cfamily.build-wrapper-output> @@ -120,6 +119,31 @@ <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> </plugin> + <plugin> + <groupId>org.codehaus.gmaven</groupId> + <artifactId>groovy-maven-plugin</artifactId> + <version>2.1.1</version> + <executions> + <!-- rename the cmake binary and generate a script that adds the sonar build-wrapper --> + <execution> + <id>sync-project-version</id> + <phase>process-sources</phase> + <goals> + <goal>execute</goal> + </goals> + <configuration> + <source>${project.basedir}/VersionUpdater.groovy</source> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>org.apache.groovy</groupId> + <artifactId>groovy</artifactId> + <version>${groovy.version}</version> + </dependency> + </dependencies> + </plugin> </plugins> </build> <profiles> @@ -159,30 +183,6 @@ </execution> </executions> </plugin> - <plugin> - <groupId>org.codehaus.gmaven</groupId> - <artifactId>groovy-maven-plugin</artifactId> - <executions> - <!-- rename the cmake binary and generate a script that adds the sonar build-wrapper --> - <execution> - <id>modify-cmake</id> - <phase>process-test-sources</phase> - <goals> - <goal>execute</goal> - </goals> - <configuration> - <source>${project.basedir}/SonarcloudBuildWrapperHack.groovy</source> - </configuration> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>org.apache.groovy</groupId> - <artifactId>groovy</artifactId> - <version>${groovy.version}</version> - </dependency> - </dependencies> - </plugin> </plugins> </build> </profile> diff --git a/cpp/src/CMakeLists.txt b/cpp/src/CMakeLists.txt index ce0e21ef..643e70a1 100644 --- a/cpp/src/CMakeLists.txt +++ b/cpp/src/CMakeLists.txt @@ -38,8 +38,8 @@ else() target_link_libraries(tsfile common_obj compress_obj cwrapper_obj file_obj read_obj write_obj) endif() -set(LIBTSFILE_PROJECT_VERSION 1.0) -set(LIBTSFILE_SO_VERSION 1.0) +set(LIBTSFILE_PROJECT_VERSION ${TsFile_CPP_VERSION}) +set(LIBTSFILE_SO_VERSION ${TsFile_CPP_VERSION}) set_target_properties(tsfile PROPERTIES VERSION ${LIBTSFILE_PROJECT_VERSION}) set_target_properties(tsfile PROPERTIES SOVERSION ${LIBTSFILE_SO_VERSION}) diff --git a/pom.xml b/pom.xml index d58b2b09..0b668e5d 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ <spotless.version>2.43.0</spotless.version> <google.java.format.version>1.22.0</google.java.format.version> <drill.freemarker.maven.plugin.version>1.21.1</drill.freemarker.maven.plugin.version> + <groovy.version>4.0.22</groovy.version> </properties> <build> <pluginManagement> diff --git a/python/VersionUpdater.groovy b/python/VersionUpdater.groovy new file mode 100644 index 00000000..ee3eab2b --- /dev/null +++ b/python/VersionUpdater.groovy @@ -0,0 +1,41 @@ +/* + * 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. + */ + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Synchronize the version in setup.py and the one used in the maven pom. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +def pyProjectFile = new File(project.basedir, "setup.py") +def currentMavenVersion = project.version as String +def currentPyVersion = currentMavenVersion +if(currentMavenVersion.contains("-SNAPSHOT")) { + currentPyVersion = currentMavenVersion.split("-SNAPSHOT")[0] + ".dev" +} +println "Current Project Version in Maven: " + currentMavenVersion +def match = pyProjectFile.text =~ /version\s*=\s*"(.*?)"/ +def pyProjectFileVersion = match[0][1] +println "Current Project Version in setup.py: " + pyProjectFileVersion + +if (pyProjectFileVersion != currentPyVersion) { + pyProjectFile.text = pyProjectFile.text.replace("version = \"" + pyProjectFileVersion + "\"", "version = \"" + currentPyVersion + "\"") + println "Version in setup.py updated from " + pyProjectFileVersion + " to " + currentPyVersion + // TODO: When releasing, we might need to manually add this file to the release preparation commit. +} else { + println "Version in setup.py is up to date" +} diff --git a/python/pom.xml b/python/pom.xml index 4e576af6..cdec6946 100644 --- a/python/pom.xml +++ b/python/pom.xml @@ -29,7 +29,6 @@ <name>TsFile: Python</name> <properties> <unity.version>2.6.0</unity.version> - <groovy.version>4.0.21</groovy.version> <!-- Tell Sonar where to find the sources --> <sonar.sources>tsfile</sonar.sources> <sonar.cfamily.build-wrapper-output>${project.build.directory}/build-wrapper-output</sonar.cfamily.build-wrapper-output> @@ -177,6 +176,31 @@ </filesets> </configuration> </plugin> + <plugin> + <groupId>org.codehaus.gmaven</groupId> + <artifactId>groovy-maven-plugin</artifactId> + <version>2.1.1</version> + <executions> + <!-- rename the cmake binary and generate a script that adds the sonar build-wrapper --> + <execution> + <id>sync-project-version</id> + <phase>process-sources</phase> + <goals> + <goal>execute</goal> + </goals> + <configuration> + <source>${project.basedir}/VersionUpdater.groovy</source> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>org.apache.groovy</groupId> + <artifactId>groovy</artifactId> + <version>${groovy.version}</version> + </dependency> + </dependencies> + </plugin> </plugins> </build> </project> diff --git a/python/setup.py b/python/setup.py index 01120060..96b66f81 100644 --- a/python/setup.py +++ b/python/setup.py @@ -24,6 +24,7 @@ import platform import shutil import os +version = "1.2.0.dev" system = platform.system() @@ -52,19 +53,6 @@ def copy_header(source, target): shutil.copyfile(source, target) -class BuildExt(build_ext): - def build_extensions(self): - numpy_include = np.get_include() - for ext in self.extensions: - ext.include_dirs.append(numpy_include) - super().build_extensions() - - def finalize_options(self): - if platform.system() == "Windows": - self.compiler = 'mingw32' - super().finalize_options() - - project_dir = os.path.dirname(os.path.abspath(__file__)) libtsfile_shard_dir = os.path.join(project_dir, "..", "cpp", "target", "build", "lib") @@ -79,9 +67,9 @@ target_include_dir = os.path.join(project_dir, "tsfile", "TsFile-cwrapper.h") copy_header(source_include_dir, target_include_dir) if system == "Darwin": - copy_lib_files(libtsfile_shard_dir, libtsfile_dir, "1.0.dylib") + copy_lib_files(libtsfile_shard_dir, libtsfile_dir, version + ".dylib") elif system == "Linux": - copy_lib_files(libtsfile_shard_dir, libtsfile_dir, "so.1.0") + copy_lib_files(libtsfile_shard_dir, libtsfile_dir, "so." + version) else: copy_lib_files(libtsfile_shard_dir, libtsfile_dir, "dll") @@ -92,15 +80,31 @@ ext_modules_tsfile = [ libraries=["tsfile"], library_dirs=[libtsfile_dir], include_dirs=[include_dir, np.get_include()], - runtime_library_dirs=[libtsfile_dir] if platform.system() != "Windows" else None, - extra_compile_args=["-std=c++11"] if platform.system() != "Windows" else ["-std=c++11", "-DMS_WIN64"], + runtime_library_dirs=[libtsfile_dir] if system != "Windows" else None, + extra_compile_args=( + ["-std=c++11"] if system != "Windows" else ["-std=c++11", "-DMS_WIN64"] + ), language="c++", ) ] + +class BuildExt(build_ext): + def build_extensions(self): + numpy_include = np.get_include() + for ext in self.extensions: + ext.include_dirs.append(numpy_include) + super().build_extensions() + + def finalize_options(self): + if system == "Windows": + self.compiler = "mingw32" + super().finalize_options() + + setup( name="tsfile", - version="1.2.0.dev0", + version=version, description="Tsfile reader and writer for python", url="https://tsfile.apache.org", author='"Apache TsFile"',
