diff --git a/hail/.gitignore b/hail/.gitignore index dd789fc04b0..e6cf691e326 100644 --- a/hail/.gitignore +++ b/hail/.gitignore @@ -5,9 +5,10 @@ src/main/c/libsimdpp-2* src/main/c/headers src/main/c/lib src/main/resources/build-info.properties +python/hail/_generated_version_info.py src/test/resources/example.v11.bgen.idx* src/test/resources/example.8bits.bgen.idx* src/test/resources/random.bgen.idx* src/test/resources/random.bgen-*.bgen.idx* src/test/resources/skip_invalid_loci.bgen.idx* -src/test/resources/parallelBgenExport.bgen/part-00000.idx* \ No newline at end of file +src/test/resources/parallelBgenExport.bgen/part-00000.idx* diff --git a/hail/build.gradle b/hail/build.gradle index c49c823004b..aade534b6a3 100644 --- a/hail/build.gradle +++ b/hail/build.gradle @@ -136,7 +136,7 @@ compileJava { } task generateBuildInfo(type: Exec) { - commandLine 'sh', 'generate-build-info.sh', sparkVersion, hailVersion + commandLine 'bash', 'generate-build-info.sh', sparkVersion, hailVersion outputs.upToDateWhen { false } } @@ -419,7 +419,7 @@ task testJar(type: Jar) { from sourceSets.test.output } -task archiveZip(type: Zip) { +task archiveZip(type: Zip, dependsOn: generateBuildInfo) { from fileTree('python') classifier = 'python' } diff --git a/hail/generate-build-info.sh b/hail/generate-build-info.sh index 5d6980398a5..31c4a5bd956 100644 --- a/hail/generate-build-info.sh +++ b/hail/generate-build-info.sh @@ -2,16 +2,25 @@ set -e +REVISION=$(git rev-parse HEAD) +DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) +DATE=$(git rev-parse --abbrev-ref HEAD) +URL=$(git config --get remote.origin.url) +SPARK_VERSION=$1 +HAIL_VERSION=$2 + echo_build_properties() { + echo "[Build Metadata]" echo user=$USER - echo revision=$(git rev-parse HEAD) - echo branch=$(git rev-parse --abbrev-ref HEAD) - echo date=$(date -u +%Y-%m-%dT%H:%M:%SZ) - echo url=$(git config --get remote.origin.url) - echo sparkVersion=$1 - echo hailVersion=$2 + echo revision=$REVISION + echo branch=$BRANCH + echo date=$DATE + echo url=$URL + echo sparkVersion=$SPARK_VERSION + echo hailVersion=$HAIL_VERSION } mkdir -p src/main/resources/ echo_build_properties $1 $2 > "src/main/resources/build-info.properties" +echo "hail_version = \"${HAIL_VERSION}-${REVISION:0:12}\"" > python/hail/_generated_version_info.py diff --git a/hail/python/hail/context.py b/hail/python/hail/context.py index 191ab7c3887..f6fdf9214c8 100644 --- a/hail/python/hail/context.py +++ b/hail/python/hail/context.py @@ -8,7 +8,7 @@ from hail.utils.java import Env, joption, FatalError, connect_logger, install_exception_handler, uninstall_exception_handler import sys - +import os class HailContext(object): @typecheck_method(sc=nullable(SparkContext), @@ -83,6 +83,13 @@ def __init__(self, sc=None, app_name="Hail", master=None, local='local[*]', version = self._jhc.version() hail.__version__ = version + if not os.getenv('HAIL_IGNORE_PYTHON_VERSION'): + py_version = read_version_info() + if py_version != version: + raise RuntimeError(f"Hail version mismatch between JAR and Python library\n" + f" JAR: {version}\n" + f" Python: {py_version}") + if not quiet: sys.stderr.write('Running on Apache Spark version {}\n'.format(self.sc.version)) if self._jsc.uiWebUrl().isDefined(): @@ -252,3 +259,8 @@ def set_global_seed(seed): """ Env.set_seed(seed) + + +def read_version_info() -> str: + from ._generated_version_info import hail_version + return hail_version