js8call/docker/Dockerfile
2025-06-27 17:11:02 -04:00

76 lines
No EOL
2.4 KiB
Docker

# Optimized multi-stage Dockerfile for JS8Call
# Uses pre-built base and hamlib images for faster builds
# Build JS8Call using cached base image
FROM js8call-hamlib:latest AS js8call-builder
# Copy source files for building
WORKDIR /js8call-prefix/src
# Copy everything except what's in .dockerignore
# This is simpler and matches the original working Dockerfile
COPY --link . .
# Build JS8Call with ccache
WORKDIR /js8call-prefix/build
RUN --mount=type=cache,target=/ccache \
cmake -D CMAKE_PREFIX_PATH=/hamlib-prefix \
-D CMAKE_INSTALL_PREFIX=/js8call-prefix \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_C_COMPILER_LAUNCHER=ccache \
-D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
../src \
&& make -j$(nproc)
# Create debian package
RUN make package
# Stage for AppImage creation
FROM js8call-builder AS appimage-builder
# Create AppDir structure
WORKDIR /appimage
RUN mkdir -p AppDir
# Install JS8Call to AppDir
WORKDIR /js8call-prefix/build
RUN make DESTDIR=/appimage/AppDir install
# Copy desktop file and icon if needed
RUN test -f /appimage/AppDir/usr/share/applications/js8call.desktop || \
cp /js8call-prefix/src/js8call.desktop /appimage/AppDir/usr/share/applications/ && \
if [ ! -f /appimage/AppDir/usr/share/icons/hicolor/128x128/apps/js8call_icon.png ]; then \
mkdir -p /appimage/AppDir/usr/share/icons/hicolor/128x128/apps && \
convert /js8call-prefix/src/artwork/js8call_icon.png -resize 128x128 \
/appimage/AppDir/usr/share/icons/hicolor/128x128/apps/js8call_icon.png; \
fi
# Create AppImage
WORKDIR /appimage
RUN EXEC_PATH=$(find AppDir -type f -name "js8call" -executable | head -1) && \
echo "Found executable at: $EXEC_PATH" && \
linuxdeploy --appdir AppDir \
--executable "$EXEC_PATH" \
--plugin qt \
--output appimage \
--desktop-file AppDir/usr/share/applications/js8call.desktop \
--icon-file AppDir/usr/share/icons/hicolor/128x128/apps/js8call_icon.png
# Final output stage - using minimal image with shell for extraction
FROM busybox:latest AS output
COPY --from=js8call-builder /js8call-prefix/build/*.deb /
COPY --from=appimage-builder /appimage/*.AppImage /
# Development stage with source mounted
FROM js8call-hamlib:latest AS development
# Install additional development tools
RUN apt-get update && apt-get install -y \
gdb \
valgrind \
clang-format \
vim \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /js8call-prefix
CMD ["/bin/bash"]