From aa78aafd005b48b22f26c665c65223818df13bfc Mon Sep 17 00:00:00 2001 From: "Michael L. Collard" Date: Thu, 28 May 2026 08:09:58 -0400 Subject: [PATCH 1/7] Convert from local copy to GitHub tar.gz download for srcSAX --- Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index eb921c4..b4cd008 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,10 @@ RUN if [ "$TARGETARCH" = "amd64" ]; then \ apt-get update && apt-get install -y ./*.deb && rm -f ./*.deb # 3. Build and install srcSAX (Force standard paths so nameCollector finds it) -COPY srcSAX /srcSAX +RUN mkdir -p /srcSAX \ + && wget -O /tmp/srcSAX.tar.gz https://github.com/srcML/srcSAX/archive/refs/heads/master.tar.gz \ + && tar -xzf /tmp/srcSAX.tar.gz -C /srcSAX --strip-components=1 \ + && rm /tmp/srcSAX.tar.gz WORKDIR /srcSAX RUN cmake -B build -G Ninja \ -DCMAKE_INSTALL_PREFIX=/usr/local \ From 0151f450bfb781c5dfa14792c652e97453ac8151 Mon Sep 17 00:00:00 2001 From: "Michael L. Collard" Date: Thu, 28 May 2026 08:10:14 -0400 Subject: [PATCH 2/7] Convert from local copy to GitHub tar.gz download for nameCollector --- Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b4cd008..06f0f1c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,7 +43,10 @@ RUN cmake -B build -G Ninja \ && ninja install # 4. Build nameCollector -COPY nameCollector /nameCollector +RUN mkdir -p /nameCollector \ + && wget -O /tmp/nameCollector.tar.gz https://github.com/srcML/nameCollector/archive/refs/heads/main.tar.gz \ + && tar -xzf /tmp/nameCollector.tar.gz -C /nameCollector --strip-components=1 \ + && rm /tmp/nameCollector.tar.gz WORKDIR /nameCollector RUN cmake -B build -G Ninja && cd build && ninja From 23ed58cd114e62b9c59ac5562343e701e0141a8a Mon Sep 17 00:00:00 2001 From: "Michael L. Collard" Date: Thu, 28 May 2026 08:17:51 -0400 Subject: [PATCH 3/7] Split Dockerfile into two stages --- Dockerfile | 51 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index 06f0f1c..436285a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,18 @@ -FROM ubuntu:24.04 -ARG TARGETARCH +FROM ubuntu:24.04 AS builder +ARG TARGETARCH -# 1. Install EVERYTHING (Build tools + Runtime tools) +# Install build tools RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ ninja-build \ wget \ ca-certificates \ - python3 \ - nano \ - less \ - git \ - libxml2 \ libxml2-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -# 2. Install srcML (Runtime and Dev headers together) +# Install srcML (runtime + dev headers) RUN if [ "$TARGETARCH" = "amd64" ]; then \ wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_amd64.deb \ && wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml-dev_1.1.0-1_ubuntu24.04_amd64.deb; \ @@ -29,7 +24,7 @@ RUN if [ "$TARGETARCH" = "amd64" ]; then \ fi && \ apt-get update && apt-get install -y ./*.deb && rm -f ./*.deb -# 3. Build and install srcSAX (Force standard paths so nameCollector finds it) +# Build and install srcSAX RUN mkdir -p /srcSAX \ && wget -O /tmp/srcSAX.tar.gz https://github.com/srcML/srcSAX/archive/refs/heads/master.tar.gz \ && tar -xzf /tmp/srcSAX.tar.gz -C /srcSAX --strip-components=1 \ @@ -42,7 +37,7 @@ RUN cmake -B build -G Ninja \ && cd build \ && ninja install -# 4. Build nameCollector +# Build nameCollector RUN mkdir -p /nameCollector \ && wget -O /tmp/nameCollector.tar.gz https://github.com/srcML/nameCollector/archive/refs/heads/main.tar.gz \ && tar -xzf /tmp/nameCollector.tar.gz -C /nameCollector --strip-components=1 \ @@ -50,5 +45,35 @@ RUN mkdir -p /nameCollector \ WORKDIR /nameCollector RUN cmake -B build -G Ninja && cd build && ninja -# 5. Set default directory straight to the compiled binary -WORKDIR /nameCollector/build/bin \ No newline at end of file + +FROM ubuntu:24.04 +ARG TARGETARCH + +# Install runtime deps only +RUN apt-get update && apt-get install -y --no-install-recommends \ + wget \ + ca-certificates \ + libxml2 \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Install srcML +RUN if [ "$TARGETARCH" = "amd64" ]; then \ + wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_amd64.deb; \ + elif [ "$TARGETARCH" = "arm64" ]; then \ + wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_arm64.deb; \ + else \ + echo "Unsupported arch: $TARGETARCH" && exit 1; \ + fi && \ + apt-get update && apt-get install -y ./*.deb && rm -f ./*.deb \ + && apt-get remove -y wget && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +# Copy srcSAX shared libs from builder +COPY --from=builder /usr/local/lib/ /usr/local/lib/ +RUN ldconfig + +# Copy nameCollector binary from builder +COPY --from=builder /nameCollector/build/bin/ /usr/local/bin/nameCollector + +WORKDIR /nameCollector/build/bin From b2f5afd0ebe70737643166c9a37adf752d75bbfd Mon Sep 17 00:00:00 2001 From: "Michael L. Collard" Date: Thu, 28 May 2026 08:26:49 -0400 Subject: [PATCH 4/7] Copy nameCollector executable into /usr/local/bin --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 436285a..5427d70 100644 --- a/Dockerfile +++ b/Dockerfile @@ -74,6 +74,6 @@ COPY --from=builder /usr/local/lib/ /usr/local/lib/ RUN ldconfig # Copy nameCollector binary from builder -COPY --from=builder /nameCollector/build/bin/ /usr/local/bin/nameCollector +COPY --from=builder /nameCollector/build/bin/nameCollector /usr/local/bin/nameCollector -WORKDIR /nameCollector/build/bin +WORKDIR /examples From 3d425dcc75273b65d2b7196ee8cf4e2470ed22cf Mon Sep 17 00:00:00 2001 From: "Michael L. Collard" Date: Thu, 28 May 2026 08:36:07 -0400 Subject: [PATCH 5/7] Remove srcml from build stage --- Dockerfile | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5427d70..cae6bd0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,18 +12,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -# Install srcML (runtime + dev headers) -RUN if [ "$TARGETARCH" = "amd64" ]; then \ - wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_amd64.deb \ - && wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml-dev_1.1.0-1_ubuntu24.04_amd64.deb; \ - elif [ "$TARGETARCH" = "arm64" ]; then \ - wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_arm64.deb \ - && wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml-dev_1.1.0-1_ubuntu22.04_arm64.deb; \ - else \ - echo "Unsupported arch: $TARGETARCH" && exit 1; \ - fi && \ - apt-get update && apt-get install -y ./*.deb && rm -f ./*.deb - # Build and install srcSAX RUN mkdir -p /srcSAX \ && wget -O /tmp/srcSAX.tar.gz https://github.com/srcML/srcSAX/archive/refs/heads/master.tar.gz \ From b117e952c73bc95a8671c150ad0953509bb9e4c6 Mon Sep 17 00:00:00 2001 From: "Michael L. Collard" Date: Thu, 28 May 2026 08:36:30 -0400 Subject: [PATCH 6/7] Add docker bake configuration --- docker-bake.hcl | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docker-bake.hcl diff --git a/docker-bake.hcl b/docker-bake.hcl new file mode 100644 index 0000000..ff233a3 --- /dev/null +++ b/docker-bake.hcl @@ -0,0 +1,31 @@ +variable "REGISTRY" { + default = "docker.io/srcml" +} + +variable "IMAGE" { + default = "namecollector" +} + +variable "TAG" { + default = "latest" +} + +group "default" { + targets = ["namecollector"] +} + +target "namecollector" { + context = "." + dockerfile = "Dockerfile" + platforms = ["linux/amd64", "linux/arm64"] + tags = [ + "${REGISTRY}/${IMAGE}:${TAG}", + ] +} + +target "local" { + inherits = ["namecollector"] + platforms = ["linux/amd64"] + output = ["type=docker"] + tags = ["${IMAGE}:${TAG}"] +} From ef39068d58e138d63754007bb3ddd7d7f5731fea Mon Sep 17 00:00:00 2001 From: "Michael L. Collard" Date: Thu, 28 May 2026 10:03:49 -0400 Subject: [PATCH 7/7] Add examples --- Dockerfile | 15 +++++++++++---- docker-bake.hcl | 8 +++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index cae6bd0..63b7303 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,7 +33,6 @@ RUN mkdir -p /nameCollector \ WORKDIR /nameCollector RUN cmake -B build -G Ninja && cd build && ninja - FROM ubuntu:24.04 ARG TARGETARCH @@ -42,8 +41,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ ca-certificates \ libxml2 \ + nano \ && apt-get clean \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* /var/cache/debconf/*-old /var/log/dpkg.log /var/log/apt/* # Install srcML RUN if [ "$TARGETARCH" = "amd64" ]; then \ @@ -54,8 +54,7 @@ RUN if [ "$TARGETARCH" = "amd64" ]; then \ echo "Unsupported arch: $TARGETARCH" && exit 1; \ fi && \ apt-get update && apt-get install -y ./*.deb && rm -f ./*.deb \ - && apt-get remove -y wget && apt-get autoremove -y \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* /var/cache/debconf/*-old /var/log/dpkg.log /var/log/apt/* # Copy srcSAX shared libs from builder COPY --from=builder /usr/local/lib/ /usr/local/lib/ @@ -64,4 +63,12 @@ RUN ldconfig # Copy nameCollector binary from builder COPY --from=builder /nameCollector/build/bin/nameCollector /usr/local/bin/nameCollector +# Install examples WORKDIR /examples +ARG CACHEBUST=1 +RUN wget -qO- https://api.github.com/repos/srcML/nameCollector/releases/tags/v1.0.0 \ + | grep -oE '"browser_download_url": *"[^"]*"' \ + | sed -E 's/.*"(https:[^"]+)".*/\1/' \ + | wget -i - \ + && apt-get remove -y wget && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* /var/cache/debconf/*-old /var/log/dpkg.log /var/log/apt/* diff --git a/docker-bake.hcl b/docker-bake.hcl index ff233a3..ff27586 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -18,8 +18,14 @@ target "namecollector" { context = "." dockerfile = "Dockerfile" platforms = ["linux/amd64", "linux/arm64"] + args = { + CACHEBUST = "${timestamp()}" + } tags = [ - "${REGISTRY}/${IMAGE}:${TAG}", + "${REGISTRY}/${IMAGE}:1.0.0", + "${REGISTRY}/${IMAGE}:1.0", + "${REGISTRY}/${IMAGE}:1", + "${REGISTRY}/${IMAGE}:latest", ] }