Skip to content

Commit bad8d31

Browse files
authored
Add Dockerfile for Ubuntu 26.04 (#37)
1 parent d360fad commit bad8d31

2 files changed

Lines changed: 314 additions & 0 deletions

File tree

.github/workflows/build-and-push.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ jobs:
2929
image-name: chatterino2-build-ubuntu-22.04
3030
- os: ubuntu-24.04
3131
image-name: chatterino2-build-ubuntu-24.04
32+
- os: ubuntu-26.04
33+
image-name: chatterino2-build-ubuntu-26.04
3234
env:
3335
C2_PLUGINS: "ON"
3436
C2_BUILD_WITH_QT6: "ON"
Lines changed: 312 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,312 @@
1+
# cmake
2+
FROM ubuntu:26.04 AS build-cmake
3+
4+
ARG CMAKE_VERSION=4.3.2
5+
ARG CMAKE_SHA256SUM=b0231eb39b3c3cabdc568c619df78208a7bd95ea10c9b2236d61218bac1b367d
6+
7+
ARG NUM_JOBS=26
8+
9+
ENV DEBIAN_FRONTEND=noninteractive
10+
ENV LC_ALL=en_US.UTF-8
11+
ENV LANG=en_US.UTF-8
12+
ENV LANGUAGE=en_US.UTF-8
13+
14+
RUN <<EOF
15+
set -e
16+
17+
apt-get update
18+
19+
apt-get install -y --no-install-recommends \
20+
build-essential \
21+
ca-certificates \
22+
libssl-dev \
23+
locales \
24+
locales-all \
25+
curl
26+
27+
apt-get clean
28+
EOF
29+
30+
# Install CMake
31+
RUN <<EOF
32+
set -e
33+
mkdir /tmp/cmake
34+
cd /tmp/cmake
35+
curl --location --output cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz
36+
echo "${CMAKE_SHA256SUM} cmake.tar.gz" | sha256sum --check --status
37+
tar xzf cmake.tar.gz
38+
cd cmake-${CMAKE_VERSION}
39+
./bootstrap --prefix=/usr/local-cmake
40+
make -j${NUM_JOBS}
41+
make install
42+
rm -rf /tmp/cmake
43+
EOF
44+
45+
46+
47+
# boost
48+
FROM ubuntu:26.04 AS build-boost
49+
50+
ARG BOOST_VERSION=1.84.0
51+
ARG BOOST_SHA256SUM=cc4b893acf645c9d4b698e9a0f08ca8846aa5d6c68275c14c3e7949c24109454
52+
53+
ARG NUM_JOBS=26
54+
55+
ENV DEBIAN_FRONTEND=noninteractive
56+
ENV LC_ALL=en_US.UTF-8
57+
ENV LANG=en_US.UTF-8
58+
ENV LANGUAGE=en_US.UTF-8
59+
60+
# COPY --from=build-cmake /usr/local-cmake /usr/local-cmake
61+
62+
RUN <<EOF
63+
set -e
64+
65+
apt-get update
66+
67+
apt-get install -y --no-install-recommends \
68+
build-essential \
69+
ca-certificates \
70+
libssl-dev \
71+
locales \
72+
locales-all \
73+
curl
74+
75+
apt-get clean
76+
EOF
77+
78+
RUN <<EOF
79+
set -e
80+
mkdir /tmp/boost
81+
cd /tmp/boost
82+
BOOST_VERSION_MOD=$(echo $BOOST_VERSION | tr . _)
83+
curl --location --output boost.tar.bz2 https://archives.boost.io/release/${BOOST_VERSION}/source/boost_${BOOST_VERSION_MOD}.tar.bz2
84+
echo "$BOOST_SHA256SUM boost.tar.bz2" | sha256sum --check --status
85+
tar --bzip2 -xf boost.tar.bz2
86+
cd boost_${BOOST_VERSION_MOD}
87+
./bootstrap.sh --prefix=/usr/local-boost
88+
./b2 install
89+
rm -rf /tmp/boost
90+
EOF
91+
92+
93+
94+
# Qt
95+
FROM ubuntu:26.04 AS build-qt
96+
97+
ARG QT_TAG=v6.11.1
98+
99+
ARG NUM_JOBS=26
100+
101+
COPY --from=build-cmake /usr/local-cmake /usr/local-cmake
102+
103+
ENV DEBIAN_FRONTEND=noninteractive
104+
ENV LC_ALL=en_US.UTF-8
105+
ENV LANG=en_US.UTF-8
106+
ENV LANGUAGE=en_US.UTF-8
107+
ENV PATH="/usr/local-cmake/bin:${PATH}"
108+
109+
RUN <<EOF
110+
set -e
111+
112+
apt-get update
113+
114+
apt-get install -y --no-install-recommends \
115+
build-essential \
116+
ca-certificates \
117+
libssl-dev \
118+
locales \
119+
locales-all \
120+
curl \
121+
ninja-build \
122+
git
123+
124+
apt-get install -y --no-install-recommends \
125+
libgl-dev \
126+
libz3-dev \
127+
zlib1g-dev \
128+
libjpeg-dev \
129+
libpng-dev \
130+
libfreetype-dev \
131+
libpcre2-dev \
132+
libharfbuzz-dev \
133+
libx11-xcb-dev \
134+
libxcb-glx0-dev \
135+
libxcb-cursor-dev \
136+
libxcb-icccm4-dev \
137+
libxcb-image0-dev \
138+
libxcb-keysyms1-dev \
139+
libxcb-randr0-dev \
140+
libxcb-render0-dev \
141+
libxcb-render-util0-dev \
142+
libxcb-shape0-dev \
143+
libxcb-shm0-dev \
144+
libxcb-sync-dev \
145+
libxcb-xfixes0-dev \
146+
libxcb-xkb-dev \
147+
libxcb-xinput-dev \
148+
libegl1-mesa-dev \
149+
libxkbcommon-dev \
150+
libxkbcommon-x11-dev \
151+
libfontconfig1-dev \
152+
pkg-config \
153+
libxcb1-dev \
154+
libxcb-util-dev \
155+
libwebp-dev
156+
157+
apt-get clean
158+
EOF
159+
160+
# CLONE QT
161+
RUN <<EOF
162+
set -e
163+
164+
mkdir /tmp/qt
165+
cd /tmp/qt
166+
git clone https://github.com/qt/qt5
167+
cd qt5
168+
git checkout ${QT_TAG}
169+
170+
EOF
171+
172+
# INIT QT REPOSITORY
173+
RUN <<EOF
174+
set -e
175+
176+
cd /tmp/qt/qt5
177+
178+
./init-repository --module-subset=qtbase,qtimageformats,qt5compat,qtsvg
179+
180+
EOF
181+
182+
# CONFIGURE & BUILD QT
183+
RUN <<EOF
184+
set -e
185+
186+
cd /tmp/qt/qt5
187+
188+
./configure \
189+
-static \
190+
-prefix /usr/local-qt \
191+
-xcb \
192+
-xkbcommon \
193+
-qpa xcb \
194+
-opensource \
195+
-system-zlib \
196+
-system-libjpeg \
197+
-system-libpng \
198+
-system-freetype \
199+
-system-pcre \
200+
-system-harfbuzz \
201+
-system-webp \
202+
-confirm-license \
203+
-nomake examples \
204+
-nomake tests
205+
206+
cmake --build .
207+
cmake --install .
208+
EOF
209+
210+
211+
212+
# Chatterino2
213+
FROM ubuntu:26.04
214+
215+
COPY --from=build-cmake /usr/local-cmake /usr/local-cmake
216+
COPY --from=build-boost /usr/local-boost /usr/local-boost
217+
COPY --from=build-qt /usr/local-qt /usr/local-qt
218+
219+
ENV DEBIAN_FRONTEND=noninteractive
220+
ENV LC_ALL=en_US.UTF-8
221+
ENV LANG=en_US.UTF-8
222+
ENV LANGUAGE=en_US.UTF-8
223+
ENV QT_QPA_PLATFORM=minimal
224+
ENV PATH="/usr/local-cmake/bin:${PATH}"
225+
ENV Qt6_DIR="/usr/local-qt"
226+
ENV Boost_DIR="/usr/local-boost"
227+
228+
RUN <<EOF
229+
set -e
230+
231+
apt-get update
232+
233+
apt-get install -y --no-install-recommends \
234+
build-essential \
235+
ca-certificates \
236+
libssl-dev \
237+
locales \
238+
locales-all \
239+
curl \
240+
libbenchmark-dev \
241+
git
242+
243+
apt-get install -y --no-install-recommends \
244+
libgl-dev \
245+
libz3-dev \
246+
zlib1g-dev \
247+
libjpeg-dev \
248+
libpng-dev \
249+
libfreetype-dev \
250+
libpcre2-dev \
251+
libwebp-dev \
252+
libharfbuzz-dev
253+
254+
apt-get install -y --no-install-recommends \
255+
libsecret-1-dev
256+
257+
apt-get install -y --no-install-recommends \
258+
libgl-dev \
259+
libz3-dev \
260+
zlib1g-dev \
261+
libjpeg-dev \
262+
libpng-dev \
263+
libfreetype-dev \
264+
libpcre2-dev \
265+
libharfbuzz-dev \
266+
libx11-xcb-dev \
267+
libxcb-glx0-dev \
268+
libxcb-cursor-dev \
269+
libxcb-icccm4-dev \
270+
libxcb-image0-dev \
271+
libxcb-keysyms1-dev \
272+
libxcb-randr0-dev \
273+
libxcb-render0-dev \
274+
libxcb-render-util0-dev \
275+
libxcb-shape0-dev \
276+
libxcb-shm0-dev \
277+
libxcb-sync-dev \
278+
libxcb-xfixes0-dev \
279+
libxcb-xkb-dev \
280+
libxcb-xinput-dev \
281+
libegl1-mesa-dev \
282+
libxkbcommon-dev \
283+
libxkbcommon-x11-dev \
284+
libfontconfig1-dev \
285+
pkg-config \
286+
libxcb1-dev \
287+
libxcb-util-dev \
288+
libwebp-dev
289+
290+
# Use system RapidJSON instead of Chatterino submodule
291+
apt-get install -y --no-install-recommends \
292+
rapidjson-dev
293+
294+
# For builds with desktop notification support (default)
295+
apt-get install -y --no-install-recommends \
296+
libnotify4 \
297+
libnotify-dev
298+
299+
# Necessary for GitHub actions
300+
apt-get install -y --no-install-recommends \
301+
sudo
302+
303+
# Necessary for AppImage creation
304+
apt-get install -y --no-install-recommends \
305+
file
306+
307+
# Necessary for deb creation
308+
apt-get install -y --no-install-recommends \
309+
lsb-release
310+
311+
apt-get clean
312+
EOF

0 commit comments

Comments
 (0)