-
Notifications
You must be signed in to change notification settings - Fork 56
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix Docker builds and add ARM support
- Loading branch information
1 parent
d08e085
commit ed57cc3
Showing
6 changed files
with
99 additions
and
124 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# current Debian oldstable as of Dec 2023 | ||
# we use Debian because they still provide i386 builds | ||
# (also, they ship Qt 5.15.2, so we no longer have to rely on third-party builds) | ||
# and it provides a C++17 compatible compiler out of the box! | ||
FROM debian:bullseye | ||
|
||
ARG ARCH | ||
ARG DOCKER_ARCH | ||
ARG CMAKE_ARCH | ||
ENV ARCH=${ARCH} DOCKER_ARCH=${DOCKER_ARCH} CMAKE_ARCH=${CMAKE_ARCH} | ||
|
||
ENV DEBIAN_FRONTEND=noninteractive | ||
|
||
RUN apt-get update && \ | ||
apt-get install -y qtbase5-dev qttools5-dev-tools qtwayland5-dev-tools qtwayland5-private-dev \ | ||
libgl1 libdrm-dev mesa-common-dev \ | ||
build-essential libssl-dev autoconf automake libtool \ | ||
wget vim-common desktop-file-utils pkgconf libgpgme-dev \ | ||
libglib2.0-dev libcairo2-dev librsvg2-dev libfuse-dev git libcurl4-openssl-dev argagg-dev libgcrypt20-dev libboost-dev \ | ||
liblzma-dev libzstd-dev zlib1g-dev libarchive-dev | ||
|
||
RUN wget -qO- https://artifacts.assassinate-you.net/prebuilt-cmake/cmake-v3.28.0-debian-bullseye-"${CMAKE_ARCH}".tar.gz | \ | ||
tar xzv -C/usr --strip-components=1 | ||
|
||
COPY ./install-gtest.sh / | ||
RUN bash /install-gtest.sh | ||
|
||
COPY pkgconfig/*.pc / | ||
RUN mv /*.pc /usr/lib/*-linux-gnu*/pkgconfig/ | ||
|
||
ENV APPIMAGE_EXTRACT_AND_RUN=1 | ||
|
||
ENV DOCKER=1 | ||
|
||
#RUN git clone https://github.com/nlohmann/json.git -b v3.11.2 --depth=1 && \ | ||
# cd json && \ | ||
# mkdir build && \ | ||
# cd build && \ | ||
# cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local && \ | ||
# make -j "$(nproc --ignore=1)" install && \ | ||
# cd ../.. && \ | ||
# rm -rf json/ | ||
|
||
RUN apt-get update && apt-get install -y nlohmann-json3-dev | ||
|
||
# work around bug in FindCURL.cmake, which does not parse the pkg-config provided protocols and features into lists causing | ||
# the comparison in the loop to yield false negative results | ||
# this makes it use curl-config which works much better | ||
RUN rm /usr/lib/*-linux-gnu*/pkgconfig/libcurl.pc |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,67 @@ | ||
#! /bin/bash | ||
|
||
if [[ "$DIST" == "" ]] || [[ "$ARCH" == "" ]]; then | ||
echo "Usage: env ARCH=... DIST=... bash $0" | ||
if [[ "$ARCH" == "" ]]; then | ||
echo "Usage: env ARCH=... bash $0" | ||
exit 1 | ||
fi | ||
|
||
set -e | ||
set -x | ||
set -euxo pipefail | ||
|
||
case "$ARCH" in | ||
x86_64) | ||
docker_platform=linux/amd64 | ||
;; | ||
i686) | ||
CMAKE_ARCH=i386 | ||
docker_platform=linux/386 | ||
;; | ||
armhf) | ||
docker_platform=linux/arm/v7 | ||
;; | ||
aarch64) | ||
docker_platform=linux/arm64/v8 | ||
;; | ||
*) | ||
echo "Unsupported architecture: $ARCH" | ||
exit 2 | ||
esac | ||
|
||
CMAKE_ARCH="${CMAKE_ARCH:-"$ARCH"}" | ||
|
||
cwd="$PWD" | ||
repo_root="$(readlink -f "$(dirname "$0")"/..)" | ||
|
||
# needed to keep user ID in and outside Docker in sync to be able to write to workspace directory | ||
image=appimageupdate-build:"$DIST"-"$ARCH" | ||
dockerfile=Dockerfile."$ARCH" | ||
|
||
if [ ! -f "$repo_root"/ci/"$dockerfile" ]; then | ||
echo "Error: $dockerfile could not be found" | ||
exit 1 | ||
fi | ||
image=appimageupdate-build | ||
|
||
# building local image to "cache" installed dependencies for subsequent builds | ||
docker build -t "$image" -f "$repo_root"/ci/"$dockerfile" --build-arg DIST="$DIST" "$repo_root"/ci | ||
docker build \ | ||
--platform "$docker_platform" \ | ||
-t "$image" \ | ||
--build-arg ARCH="$ARCH" \ | ||
--build-arg CMAKE_ARCH="$CMAKE_ARCH" \ | ||
"$repo_root"/ci | ||
|
||
# run the build with the current user to | ||
# a) make sure root is not required for builds | ||
# b) allow the build scripts to "mv" the binaries into the /out directory | ||
uid="$(id -u)" | ||
|
||
tty_args=() | ||
if [ -t 0 ]; then tty_args+=("-t"); fi | ||
|
||
# mount workspace read-only, trying to make sure the build doesn't ever touch the source code files | ||
# of course, this only works reliably if you don't run this script from that directory | ||
# but it's still not the worst idea to do so | ||
docker run --platform "$ARCH" \ | ||
--user "$uid" --rm -i -e ARCH -e GITHUB_RUN_NUMBER -e CI=1 -v "$repo_root":/ws:ro -v "$cwd":/out "$image" \ | ||
bash -xec 'cd /out && bash -xe /ws/ci/build-appimages.sh' | ||
docker run \ | ||
--rm \ | ||
-i \ | ||
"${tty_args[@]}" \ | ||
-e CI=1 \ | ||
-e GITHUB_RUN_NUMBER \ | ||
-v "$repo_root":/ws:ro \ | ||
-v "$cwd":/out \ | ||
-w /out \ | ||
--user "$uid" \ | ||
"$image" \ | ||
bash /ws/ci/build-appimages.sh |
This file was deleted.
Oops, something went wrong.