Warning, /sdk/codevis/packaging/appimage/Dockerfile is written in an unsupported language. File is not indexed.
0001 FROM ubuntu:22.04 AS base
0002
0003 # it is an arg so it doesn't persist
0004 ARG DEBIAN_FRONTEND=noninteractive
0005
0006 # Before installing the "real" dependencies we need new apt keys
0007 # Note: wget is also used later in build-package.sh
0008 RUN apt-get update && apt-get -qq install wget gnupg
0009 RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
0010
0011 # standardise build so everything uses llvm-14
0012 RUN echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-14 main" >> /etc/apt/sources.list.d/llvm14.list
0013
0014 RUN apt-get update && apt-get -qq install \
0015 bison \
0016 build-essential \
0017 catch2 \
0018 clang-14 \
0019 clang-format \
0020 clang-tidy-14 \
0021 clang-tools-14 \
0022 cmake \
0023 cppcheck \
0024 flex \
0025 git \
0026 lcov \
0027 libclang-14-dev \
0028 libqt5core5a \
0029 libsqlite3-dev \
0030 llvm-14-dev \
0031 moreutils \
0032 python3-dev \
0033 qtbase5-dev \
0034 qtwebengine5-dev \
0035 libqt5svg5-dev \
0036 shellcheck \
0037 sqlite3
0038
0039 FROM base as dependencies
0040
0041 FROM dependencies as build-pre
0042
0043 ARG INSTALL_PREFIX="/usr/local/diagram-server"
0044 COPY . /root/diagram-server
0045 WORKDIR /root/diagram-server
0046 RUN git submodule init
0047 RUN git submodule update --recursive
0048 WORKDIR /root/diagram-server/build
0049 RUN cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" ..
0050
0051 FROM build-pre as pre-analysis
0052
0053 WORKDIR /root/diagram-server
0054 RUN shellcheck scripts/**/*.sh lvtclp/run_tests.sh
0055 RUN ./scripts/clang-format.sh --diff
0056
0057 FROM build-pre as build-qt
0058
0059 WORKDIR /root/diagram-server/build
0060 RUN make -j`nproc` && make install
0061
0062 FROM build-qt as post-analysis
0063
0064 RUN apt-get update && apt-get -qq install \
0065 clazy
0066
0067 WORKDIR /root/diagram-server
0068
0069 ENV REPORT_DIR=cppcheck-report
0070 ENV ARCHIVE=cppcheck-report.tar.gz
0071 RUN ./scripts/ci/cppcheck.sh
0072 RUN ./scripts/clang-tidy.sh lvt* desktopapp
0073 RUN ./scripts/clazy.sh lvt* desktopapp
0074
0075 FROM build-qt as tests
0076
0077 RUN apt-get update && apt-get -qq install \
0078 python3-jinja2
0079
0080 WORKDIR /root/diagram-server/build
0081
0082 # Move the database schema files to XDG_DATA_DIRS
0083 RUN mkdir -p /root/.local/share/codevis/database-spec/ \
0084 && cp /root/diagram-server/database-spec/codebase_db.sql /root/.local/share/codevis/database-spec/ \
0085 && cp /root/diagram-server/database-spec/cad_db.sql /root/.local/share/codevis/database-spec/
0086
0087 ENV LAKOSDIAGRAM_PYSCRIPTS_PATH="/root/diagram-server/python/codegeneration/"
0088 ENV TEST_PRJ_PATH="/root/diagram-server/lvtclp/systemtests/"
0089 ENV QT_QPA_PLATFORM="offscreen"
0090 RUN ctest -VV
0091
0092 # Appimage does not include glibc in the bundled app. The app will use the host
0093 # system's glibc. glibc is generally backwards but not forwards compatible so we
0094 # should link against the oldest glibc we can.
0095 FROM debian:buster as appimage
0096
0097 # it is an arg so it doesn't persist
0098 ARG DEBIAN_FRONTEND=noninteractive
0099
0100 # Before installing the "real" dependencies we need new apt keys
0101 # Note: wget is also used later in build-package.sh
0102 RUN apt-get update && apt-get -qq install wget gnupg
0103 RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
0104
0105 # lvtclp depends upon modern clang libraries
0106 RUN echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-14 main" >> /etc/apt/sources.list.d/llvm14.list
0107
0108 RUN apt-get update && apt-get -qq install \
0109 bison \
0110 # Note: Catch2 is missing because there is no such package available at this point.
0111 # compilation must be configured with no tests.
0112 clang-14 \
0113 clang-tools-14 \
0114 clang-format \
0115 clang-tidy-14 \
0116 cmake \
0117 cppcheck \
0118 flex \
0119 git \
0120 libclang-14-dev \
0121 libqt5core5a \
0122 libsqlite3-dev \
0123 llvm-14-dev \
0124 python-jinja2 \
0125 qt5-default \
0126 qt5-qmake \
0127 qtbase5-dev \
0128 qtwebengine5-dev \
0129 libqt5svg5-dev \
0130 shellcheck \
0131 sqlite3
0132
0133 # we installed new clang for the clang c++ parser libraries, as we have it, we
0134 # may as well build with a modern compiler
0135 ENV CXX=/usr/bin/clang++-14
0136 ENV CC=/usr/bin/clang-14
0137
0138 COPY . /root/diagram-server
0139
0140 # FUSE doesn't work inside docker. This works around that so appimages can still run
0141 ENV APPIMAGE_EXTRACT_AND_RUN=1
0142
0143 WORKDIR /root/diagram-server
0144 RUN git submodule init
0145 RUN git submodule update --recursive
0146
0147 ENV OUTDIR=/tmp/lvt-appimage
0148 RUN mkdir -p "${OUTDIR}"
0149 CMD scripts/packaging/build-package.sh --outdir "${OUTDIR}"
0150
0151 FROM appimage as deploy-cli-tools
0152
0153 WORKDIR /root/diagram-server
0154 ENV OUTDIR=/tmp/package
0155 ENV EXTERNAL_SO_DEPENDENCIES=/tmp/externaldeps
0156 RUN scripts/packaging/build-package.sh --no-deploy
0157 RUN mkdir -p "${EXTERNAL_SO_DEPENDENCIES}" \
0158 && cp "/usr/lib/x86_64-linux-gnu/libQt5Core.so.5" "${EXTERNAL_SO_DEPENDENCIES}" \
0159 && cp "/usr/lib/llvm-14/lib/libclang-cpp.so.14" "${EXTERNAL_SO_DEPENDENCIES}" \
0160 && cp "/usr/lib/llvm-14/lib/libLLVM-14.so.1" "${EXTERNAL_SO_DEPENDENCIES}" \
0161 && cp "/usr/lib/x86_64-linux-gnu/libsqlite3.so.0" "${EXTERNAL_SO_DEPENDENCIES}" \
0162 && cp "/usr/lib/x86_64-linux-gnu/libicui18n.so.63" "${EXTERNAL_SO_DEPENDENCIES}" \
0163 && cp "/usr/lib/x86_64-linux-gnu/libicuuc.so.63" "${EXTERNAL_SO_DEPENDENCIES}" \
0164 && cp "/usr/lib/x86_64-linux-gnu/libpcre2-16.so.0" "${EXTERNAL_SO_DEPENDENCIES}" \
0165 && cp "/usr/lib/x86_64-linux-gnu/libffi.so.6" "${EXTERNAL_SO_DEPENDENCIES}" \
0166 && cp "/usr/lib/x86_64-linux-gnu/libxml2.so.2" "${EXTERNAL_SO_DEPENDENCIES}" \
0167 && cp "/usr/lib/x86_64-linux-gnu/libicudata.so.63" "${EXTERNAL_SO_DEPENDENCIES}" \
0168 && cp "/lib/x86_64-linux-gnu/libpcre.so.3" "${EXTERNAL_SO_DEPENDENCIES}" \
0169 && cp "/usr/lib/x86_64-linux-gnu/libdouble-conversion.so.1" "${EXTERNAL_SO_DEPENDENCIES}" \
0170 && mkdir -p "${OUTDIR}"
0171 CMD scripts/packaging/build-cli-package.sh --outdir "${OUTDIR}" --buildfolder "/root/diagram-server/build/lvt/" --externaldepsfolder "${EXTERNAL_SO_DEPENDENCIES}"
0172
0173 FROM build-qt as generate-diagrams
0174
0175 RUN apt-get update && apt-get -qq install python3-jinja2
0176
0177 WORKDIR /root/
0178 ENV OUTDIR=/tmp/results
0179 ENV BUILD_PATH=/root/diagram-server/build/
0180 ENV SEMRULES_PATH="/root/diagram-server/semrules/"
0181
0182 # Move the database schema files to XDG_DATA_DIRS
0183 RUN mkdir -p /root/.local/share/codevis/database-spec/ \
0184 && cp /root/diagram-server/database-spec/codebase_db.sql /root/.local/share/codevis/database-spec/ \
0185 && cp /root/diagram-server/database-spec/cad_db.sql /root/.local/share/codevis/database-spec/
0186
0187 RUN mkdir -p "${OUTDIR}"
0188 CMD "${BUILD_PATH}/lvtclp/create_codebase_db" \
0189 --source-path "/root/diagram-server/" \
0190 --silent \
0191 -j6 \
0192 --ignore *.t.cpp \
0193 --ignore *.m.cpp \
0194 --ignore *moc_* \
0195 --ignore *mocs_* \
0196 --ignore *ui_* \
0197 --replace \
0198 -o "${OUTDIR}/codevis.db" \
0199 --compile-commands-json "${BUILD_PATH}/compile_commands.json" \
0200 && \
0201 "${BUILD_PATH}/lvtprj/create_prj_from_db" \
0202 --source-path "/root/diagram-server/" \
0203 "${OUTDIR}/codevis.db" \
0204 "${OUTDIR}/codevis.lks"
0205
0206
0207 FROM dependencies as code-coverage
0208
0209 COPY . /root/diagram-server
0210 WORKDIR /root/diagram-server
0211 RUN apt-get update && apt-get -qq install python3-jinja2 gcovr
0212 RUN git submodule init
0213 RUN git submodule update --recursive
0214
0215 # Move the database schema files to XDG_DATA_DIRS
0216 RUN mkdir -p /root/.local/share/codevis/database-spec/ \
0217 && cp /root/diagram-server/database-spec/codebase_db.sql /root/.local/share/codevis/database-spec/ \
0218 && cp /root/diagram-server/database-spec/cad_db.sql /root/.local/share/codevis/database-spec/
0219
0220 WORKDIR /root/diagram-server/build
0221 RUN cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DENABLE_CODE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug ..
0222 RUN cmake --build . -j$(nproc)
0223 ENV LAKOSDIAGRAM_PYSCRIPTS_PATH="/root/diagram-server/python/codegeneration/"
0224 ENV TEST_PRJ_PATH="/root/diagram-server/lvtclp/systemtests/"
0225 ENV QT_QPA_PLATFORM="offscreen"
0226
0227 CMD ctest . -VV -j$(nproc) && make coverage