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