From f9694727bdebc3a36c4bd0615effee9c0d0b4bbc Mon Sep 17 00:00:00 2001 From: dabico Date: Mon, 22 Jan 2024 10:18:44 +0100 Subject: [PATCH 1/7] Fix PEP issue --- build.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.py b/build.py index 520907e2..1899acb6 100755 --- a/build.py +++ b/build.py @@ -56,12 +56,12 @@ def build(repositories, output_path="libjava-tree-sitter", system=None, arch=Non repository_macro = f"TS_LANGUAGE_{repository_language.replace('-', '_').upper()}" compiler.define_macro(repository_macro, "1") match repository_name: - case "tree-sitter-dtd" |\ - "tree-sitter-markdown" |\ + case "tree-sitter-dtd" | \ + "tree-sitter-markdown" | \ "tree-sitter-xml": src_path = path(repository, repository_name, "src") - case "tree-sitter-ocaml" |\ - "tree-sitter-tsx" |\ + case "tree-sitter-ocaml" | \ + "tree-sitter-tsx" | \ "tree-sitter-typescript": src_path = path(repository, repository_language, "src") case _: From 4088fd2fd1fc5616f261ed4c1397efa1b637b0ca Mon Sep 17 00:00:00 2001 From: dabico Date: Mon, 22 Jan 2024 10:28:53 +0100 Subject: [PATCH 2/7] Replace usage of `system.cmd` with `subprocess.call` --- build.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/build.py b/build.py index 1899acb6..4baae46c 100755 --- a/build.py +++ b/build.py @@ -6,11 +6,12 @@ from distutils.log import set_verbosity as set_log_verbosity from glob import glob as find from os import environ -from os import system as cmd from os.path import basename, dirname, exists, getmtime, realpath from os.path import join as path from os.path import split as split_path from platform import system as os_name +from subprocess import DEVNULL +from subprocess import call as cmd from tempfile import TemporaryDirectory @@ -34,18 +35,16 @@ def build(repositories, output_path="libjava-tree-sitter", system=None, arch=Non output_extension = "dylib" if system == "Darwin" else "so" output_path = f"{output_path}.{output_extension}" - env = "" + env = {} if arch: - env += ( - f"CFLAGS='-arch {arch} -mmacosx-version-min=11.0' LDFLAGS='-arch {arch}'" - if system == "Darwin" - else f"CFLAGS='-m{arch}' LDFLAGS='-m{arch}'" - ) + env_macos = {"CFLAGS": f"-arch {arch} -mmacosx-version-min=11.0", "LDFLAGS": f"-arch {arch}"} + env_linux = {"CFLAGS": f"-m{arch}", "LDFLAGS": f"-m{arch}"} + env = env_macos if system == "Darwin" else env_linux tree_sitter = path(here, "tree-sitter") - redirect = "> /dev/null" if not verbose else "" - cmd(f"make -C \"{tree_sitter}\" clean {redirect}") - cmd(f"{env} make -C \"{tree_sitter}\" {redirect}") + redirect = DEVNULL if not verbose else None + cmd(["make", "-C", tree_sitter, "clean"], stdout=redirect) + cmd(["make", "-C", tree_sitter], stdout=redirect, env=env) source_paths = find(path(here, "lib", "*.cc")) From bd2c7b3737d0df9a5218e865047feb409918a041 Mon Sep 17 00:00:00 2001 From: dabico Date: Mon, 22 Jan 2024 10:35:55 +0100 Subject: [PATCH 3/7] Build will now fail fast if either `make` command fails --- build.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/build.py b/build.py index 4baae46c..b53e5b15 100755 --- a/build.py +++ b/build.py @@ -43,8 +43,12 @@ def build(repositories, output_path="libjava-tree-sitter", system=None, arch=Non tree_sitter = path(here, "tree-sitter") redirect = DEVNULL if not verbose else None - cmd(["make", "-C", tree_sitter, "clean"], stdout=redirect) - cmd(["make", "-C", tree_sitter], stdout=redirect, env=env) + code = cmd(["make", "-C", tree_sitter, "clean"], stdout=redirect) + if code != 0: + raise RuntimeError("Failed to clean tree-sitter library.") + code = cmd(["make", "-C", tree_sitter], stdout=redirect, env=env) + if code != 0: + raise RuntimeError("Failed to build tree-sitter library.") source_paths = find(path(here, "lib", "*.cc")) From b8847e65cc06ad13d5c558031ea6c0c621cfe501 Mon Sep 17 00:00:00 2001 From: dabico Date: Mon, 22 Jan 2024 14:55:55 +0100 Subject: [PATCH 4/7] Fix `alpine` image to specific version --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2c2dae76..b3576e5f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:latest AS build +FROM alpine:3.19.0 AS build LABEL maintainer="Ozren Dabić (dabico@usi.ch)" ENV IMAGE_NAME="seart-group/java-tree-sitter" \ From 38524f87f9f65432440d29fad10a3cb03f01b3ce Mon Sep 17 00:00:00 2001 From: dabico Date: Mon, 22 Jan 2024 14:56:49 +0100 Subject: [PATCH 5/7] Add `--quiet` flag to both `apk` commands --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b3576e5f..66bc2f06 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,8 +5,9 @@ ENV IMAGE_NAME="seart-group/java-tree-sitter" \ IMAGE_REPO_URL="https://github.com/${IMAGE_NAME}/" \ JAVA_HOME="/usr/lib/jvm/java-11-openjdk" -RUN apk update && \ - apk add --no-cache \ +RUN apk update --quiet && \ + apk add --quiet \ + --no-cache \ openjdk11 \ python3 \ py3-distutils-extra \ From 74783ee1092c9ddd0df27d53cd1ae7c7d92ccb11 Mon Sep 17 00:00:00 2001 From: dabico Date: Mon, 22 Jan 2024 15:11:04 +0100 Subject: [PATCH 6/7] Clean up package list --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 66bc2f06..468f4883 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,11 +8,11 @@ ENV IMAGE_NAME="seart-group/java-tree-sitter" \ RUN apk update --quiet && \ apk add --quiet \ --no-cache \ + alpine-sdk \ + make \ openjdk11 \ python3 \ - py3-distutils-extra \ - make \ - g++ + py3-distutils-extra WORKDIR /java-tree-sitter COPY . ./ From ef4f7a4c0940d45580b2ca5a9011b2d6fa40cebd Mon Sep 17 00:00:00 2001 From: dabico Date: Mon, 22 Jan 2024 15:20:47 +0100 Subject: [PATCH 7/7] Update .dockerignore --- .dockerignore | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.dockerignore b/.dockerignore index a506ccb3..f7b1f9f1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,14 @@ +# Ignore everything... * + +# ...except these files and directories... !/lib !/include !/tree-sitter* !/build.py + +# ...on second thought, ignore these files too. +**/*.so +**/*.dylib +**/*.o +**/*.a