Skip to content

Commit 4c5ad65

Browse files
authored
Merge pull request #54 from srcML/docker
Docker
2 parents ee859a8 + ef39068 commit 4c5ad65

2 files changed

Lines changed: 89 additions & 26 deletions

File tree

Dockerfile

Lines changed: 52 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,22 @@
1-
FROM ubuntu:24.04
2-
ARG TARGETARCH
1+
FROM ubuntu:24.04 AS builder
2+
ARG TARGETARCH
33

4-
# 1. Install EVERYTHING (Build tools + Runtime tools)
4+
# Install build tools
55
RUN apt-get update && apt-get install -y --no-install-recommends \
66
build-essential \
77
cmake \
88
ninja-build \
99
wget \
1010
ca-certificates \
11-
python3 \
12-
nano \
13-
less \
14-
git \
15-
libxml2 \
1611
libxml2-dev \
1712
&& apt-get clean \
1813
&& rm -rf /var/lib/apt/lists/*
1914

20-
# 2. Install srcML (Runtime and Dev headers together)
21-
RUN if [ "$TARGETARCH" = "amd64" ]; then \
22-
wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_amd64.deb \
23-
&& wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml-dev_1.1.0-1_ubuntu24.04_amd64.deb; \
24-
elif [ "$TARGETARCH" = "arm64" ]; then \
25-
wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_arm64.deb \
26-
&& wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml-dev_1.1.0-1_ubuntu22.04_arm64.deb; \
27-
else \
28-
echo "Unsupported arch: $TARGETARCH" && exit 1; \
29-
fi && \
30-
apt-get update && apt-get install -y ./*.deb && rm -f ./*.deb
31-
32-
# 3. Build and install srcSAX (Force standard paths so nameCollector finds it)
33-
COPY srcSAX /srcSAX
15+
# Build and install srcSAX
16+
RUN mkdir -p /srcSAX \
17+
&& wget -O /tmp/srcSAX.tar.gz https://github.com/srcML/srcSAX/archive/refs/heads/master.tar.gz \
18+
&& tar -xzf /tmp/srcSAX.tar.gz -C /srcSAX --strip-components=1 \
19+
&& rm /tmp/srcSAX.tar.gz
3420
WORKDIR /srcSAX
3521
RUN cmake -B build -G Ninja \
3622
-DCMAKE_INSTALL_PREFIX=/usr/local \
@@ -39,10 +25,50 @@ RUN cmake -B build -G Ninja \
3925
&& cd build \
4026
&& ninja install
4127

42-
# 4. Build nameCollector
43-
COPY nameCollector /nameCollector
28+
# Build nameCollector
29+
RUN mkdir -p /nameCollector \
30+
&& wget -O /tmp/nameCollector.tar.gz https://github.com/srcML/nameCollector/archive/refs/heads/main.tar.gz \
31+
&& tar -xzf /tmp/nameCollector.tar.gz -C /nameCollector --strip-components=1 \
32+
&& rm /tmp/nameCollector.tar.gz
4433
WORKDIR /nameCollector
4534
RUN cmake -B build -G Ninja && cd build && ninja
4635

47-
# 5. Set default directory straight to the compiled binary
48-
WORKDIR /nameCollector/build/bin
36+
FROM ubuntu:24.04
37+
ARG TARGETARCH
38+
39+
# Install runtime deps only
40+
RUN apt-get update && apt-get install -y --no-install-recommends \
41+
wget \
42+
ca-certificates \
43+
libxml2 \
44+
nano \
45+
&& apt-get clean \
46+
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf/*-old /var/log/dpkg.log /var/log/apt/*
47+
48+
# Install srcML
49+
RUN if [ "$TARGETARCH" = "amd64" ]; then \
50+
wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_amd64.deb; \
51+
elif [ "$TARGETARCH" = "arm64" ]; then \
52+
wget https://github.com/srcML/srcML/releases/download/v1.1.0/srcml_1.1.0-1_ubuntu24.04_arm64.deb; \
53+
else \
54+
echo "Unsupported arch: $TARGETARCH" && exit 1; \
55+
fi && \
56+
apt-get update && apt-get install -y ./*.deb && rm -f ./*.deb \
57+
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf/*-old /var/log/dpkg.log /var/log/apt/*
58+
59+
# Copy srcSAX shared libs from builder
60+
COPY --from=builder /usr/local/lib/ /usr/local/lib/
61+
RUN ldconfig
62+
63+
# Copy nameCollector binary from builder
64+
COPY --from=builder /nameCollector/build/bin/nameCollector /usr/local/bin/nameCollector
65+
66+
# Install examples
67+
WORKDIR /examples
68+
ARG CACHEBUST=1
69+
RUN wget -qO- https://api.github.com/repos/srcML/nameCollector/releases/tags/v1.0.0 \
70+
| grep -oE '"browser_download_url": *"[^"]*"' \
71+
| sed -E 's/.*"(https:[^"]+)".*/\1/' \
72+
| wget -i - \
73+
&& apt-get remove -y wget && apt-get autoremove -y \
74+
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf/*-old /var/log/dpkg.log /var/log/apt/*

docker-bake.hcl

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
variable "REGISTRY" {
2+
default = "docker.io/srcml"
3+
}
4+
5+
variable "IMAGE" {
6+
default = "namecollector"
7+
}
8+
9+
variable "TAG" {
10+
default = "latest"
11+
}
12+
13+
group "default" {
14+
targets = ["namecollector"]
15+
}
16+
17+
target "namecollector" {
18+
context = "."
19+
dockerfile = "Dockerfile"
20+
platforms = ["linux/amd64", "linux/arm64"]
21+
args = {
22+
CACHEBUST = "${timestamp()}"
23+
}
24+
tags = [
25+
"${REGISTRY}/${IMAGE}:1.0.0",
26+
"${REGISTRY}/${IMAGE}:1.0",
27+
"${REGISTRY}/${IMAGE}:1",
28+
"${REGISTRY}/${IMAGE}:latest",
29+
]
30+
}
31+
32+
target "local" {
33+
inherits = ["namecollector"]
34+
platforms = ["linux/amd64"]
35+
output = ["type=docker"]
36+
tags = ["${IMAGE}:${TAG}"]
37+
}

0 commit comments

Comments
 (0)