From be32f7b94e47d2958995117c23036027416e3852 Mon Sep 17 00:00:00 2001 From: "alexey.afanasiev" Date: Fri, 22 Nov 2024 02:13:40 +0100 Subject: [PATCH] QD-10347 Add Dockerfiles to 2024.3 image builds --- 2024.3/android-community/Dockerfile | 105 +++++++++++++++++++++ 2024.3/android/Dockerfile | 105 +++++++++++++++++++++ 2024.3/cpp/Dockerfile | 109 ++++++++++++++++++++++ 2024.3/dotnet-community/Dockerfile | 91 ++++++++++++++++++ 2024.3/dotnet/Dockerfile | 114 ++++++++++++++++++++++ 2024.3/go/Dockerfile | 83 +++++++++++++++++ 2024.3/js/Dockerfile | 84 +++++++++++++++++ 2024.3/jvm-community/Dockerfile | 79 ++++++++++++++++ 2024.3/jvm/Dockerfile | 94 +++++++++++++++++++ 2024.3/php/Dockerfile | 103 ++++++++++++++++++++ 2024.3/python-community/Dockerfile | 120 ++++++++++++++++++++++++ 2024.3/python/Dockerfile | 140 ++++++++++++++++++++++++++++ 12 files changed, 1227 insertions(+) create mode 100644 2024.3/android-community/Dockerfile create mode 100644 2024.3/android/Dockerfile create mode 100644 2024.3/cpp/Dockerfile create mode 100644 2024.3/dotnet-community/Dockerfile create mode 100644 2024.3/dotnet/Dockerfile create mode 100644 2024.3/go/Dockerfile create mode 100644 2024.3/js/Dockerfile create mode 100644 2024.3/jvm-community/Dockerfile create mode 100644 2024.3/jvm/Dockerfile create mode 100644 2024.3/php/Dockerfile create mode 100644 2024.3/python-community/Dockerfile create mode 100644 2024.3/python/Dockerfile diff --git a/2024.3/android-community/Dockerfile b/2024.3/android-community/Dockerfile new file mode 100644 index 00000000..dbc31a41 --- /dev/null +++ b/2024.3/android-community/Dockerfile @@ -0,0 +1,105 @@ +ARG BASE_TAG="bullseye-slim" +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM debian:$BASE_TAG + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' && \ + mkdir -p -m 777 "$HOME/.m2" "$HOME/.m2/repository" + +ENV GRADLE_USER_HOME="/data/cache/gradle" + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDANDC-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +ENV ANDROID_SDK_ROOT="/opt/android-sdk" ANDROID_USER_HOME="$QODANA_DATA/cache/android" +ENV ANDROID_HOME="$ANDROID_SDK_ROOT" +ENV ANDROID_SDK_TOOLS="$ANDROID_SDK_ROOT/cmdline-tools/tools/bin" QODANA_CORETTO_SDK="$QODANA_DATA/.jdks/corretto-11" +# IDE includes JDK17 by default since 2022, so we need additional JDK for the most projects +COPY --from=amazoncorretto:11.0.24 /usr/lib/jvm/java-11-amazon-corretto $QODANA_CORETTO_SDK + +ARG ANDROID_SDK_VERSION="9123335" +ARG ANDROID_SDK_SHA256="0bebf59339eaa534f4217f8aa0972d14dc49e7207be225511073c661ae01da0a" +ARG ANDROID_API_LEVEL="33" +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends unzip=6.0-26+deb11u1 && \ + mkdir -m 777 -p $QODANA_DATA/cache $ANDROID_USER_HOME $ANDROID_SDK_ROOT $ANDROID_SDK_ROOT/cmdline-tools $ANDROID_SDK_ROOT/platforms $ANDROID_SDK_ROOT/ndk && \ + echo "${ANDROID_SDK_SHA256} /tmp/android.zip" > /tmp/shasum && \ + curl -fsSL -o /tmp/android.zip \ + "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_VERSION}_latest.zip" && \ + sha256sum --check --status /tmp/shasum && \ + unzip -q /tmp/android.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && \ + mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/tools && \ + echo y | ${ANDROID_SDK_TOOLS}/sdkmanager "platforms;android-${ANDROID_API_LEVEL}" && \ + chmod 777 -R $ANDROID_SDK_ROOT && \ + apt-get purge --auto-remove -y unzip && \ + rm -rf /tmp/* + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana Community for Android (https://jb.gg/qodana-android)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/android/Dockerfile b/2024.3/android/Dockerfile new file mode 100644 index 00000000..dbc31a41 --- /dev/null +++ b/2024.3/android/Dockerfile @@ -0,0 +1,105 @@ +ARG BASE_TAG="bullseye-slim" +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM debian:$BASE_TAG + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' && \ + mkdir -p -m 777 "$HOME/.m2" "$HOME/.m2/repository" + +ENV GRADLE_USER_HOME="/data/cache/gradle" + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDANDC-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +ENV ANDROID_SDK_ROOT="/opt/android-sdk" ANDROID_USER_HOME="$QODANA_DATA/cache/android" +ENV ANDROID_HOME="$ANDROID_SDK_ROOT" +ENV ANDROID_SDK_TOOLS="$ANDROID_SDK_ROOT/cmdline-tools/tools/bin" QODANA_CORETTO_SDK="$QODANA_DATA/.jdks/corretto-11" +# IDE includes JDK17 by default since 2022, so we need additional JDK for the most projects +COPY --from=amazoncorretto:11.0.24 /usr/lib/jvm/java-11-amazon-corretto $QODANA_CORETTO_SDK + +ARG ANDROID_SDK_VERSION="9123335" +ARG ANDROID_SDK_SHA256="0bebf59339eaa534f4217f8aa0972d14dc49e7207be225511073c661ae01da0a" +ARG ANDROID_API_LEVEL="33" +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends unzip=6.0-26+deb11u1 && \ + mkdir -m 777 -p $QODANA_DATA/cache $ANDROID_USER_HOME $ANDROID_SDK_ROOT $ANDROID_SDK_ROOT/cmdline-tools $ANDROID_SDK_ROOT/platforms $ANDROID_SDK_ROOT/ndk && \ + echo "${ANDROID_SDK_SHA256} /tmp/android.zip" > /tmp/shasum && \ + curl -fsSL -o /tmp/android.zip \ + "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_VERSION}_latest.zip" && \ + sha256sum --check --status /tmp/shasum && \ + unzip -q /tmp/android.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && \ + mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/tools && \ + echo y | ${ANDROID_SDK_TOOLS}/sdkmanager "platforms;android-${ANDROID_API_LEVEL}" && \ + chmod 777 -R $ANDROID_SDK_ROOT && \ + apt-get purge --auto-remove -y unzip && \ + rm -rf /tmp/* + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana Community for Android (https://jb.gg/qodana-android)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/cpp/Dockerfile b/2024.3/cpp/Dockerfile new file mode 100644 index 00000000..363bfefa --- /dev/null +++ b/2024.3/cpp/Dockerfile @@ -0,0 +1,109 @@ +ARG BASE_TAG="bookworm-slim" +FROM debian:$BASE_TAG +ARG CLANG="16" + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" \ + PATH="/opt/qodana:${PATH}" + +ENV CXX="/usr/lib/llvm-$CLANG/bin/clang++" \ + CC="/usr/lib/llvm-$CLANG/bin/clang" \ + CPLUS_INCLUDE_PATH="/usr/lib/clang/$CLANG/include" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt/qodana $QODANA_DATA/project $QODANA_DATA/cache $QODANA_DATA/results && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + default-jre \ + git \ + git-lfs \ + gnupg2 \ + apt-transport-https \ + autoconf \ + automake \ + cmake \ + dpkg-dev \ + file \ + make \ + patch \ + libc6-dev \ + locales && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' + +RUN echo "deb https://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-${CLANG} main" > /etc/apt/sources.list.d/llvm.list && \ + curl -s https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor > /etc/apt/trusted.gpg.d/llvm.gpg && \ + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys "15CF4D18AF4F7421" && \ + apt-get -qq update && \ + apt-get install -qqy -t \ + llvm-toolchain-bookworm-$CLANG \ + clang-$CLANG \ + clang-tidy-$CLANG \ + clang-format-$CLANG \ + lld-$CLANG \ + libc++-$CLANG-dev \ + libc++abi-$CLANG-dev && \ + for f in /usr/lib/llvm-$CLANG/bin/*; do ln -sf "$f" /usr/bin; done && \ + ln -sf clang /usr/bin/cc && \ + ln -sf clang /usr/bin/c89 && \ + ln -sf clang /usr/bin/c99 && \ + ln -sf clang++ /usr/bin/c++ && \ + ln -sf clang++ /usr/bin/g++ && \ + rm -rf /var/lib/apt/lists/* && \ + apt-get autoremove -y && apt-get clean + +RUN apt-get update && \ + apt-get install -y sudo && \ + useradd -m -u 1001 -U qodana && \ + passwd -d qodana && \ + echo 'qodana ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDCL-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /opt/qodana && \ + mv /opt/qodana/qodana-clang /opt/qodana/qodana && \ + chmod +x /opt/qodana/qodana && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +ENV PATH="/opt/qodana:${PATH}" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana for C/C++ (CMake)" +WORKDIR /data/project +ENTRYPOINT ["qodana", "scan"] diff --git a/2024.3/dotnet-community/Dockerfile b/2024.3/dotnet-community/Dockerfile new file mode 100644 index 00000000..1022337c --- /dev/null +++ b/2024.3/dotnet-community/Dockerfile @@ -0,0 +1,91 @@ +ARG DOTNET_BASE_TAG="7.0-bullseye-slim" +FROM mcr.microsoft.com/dotnet/sdk:$DOTNET_BASE_TAG + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" \ + PATH="/opt/qodana:${PATH}" + +ENV DOTNET_ROOT="/usr/share/dotnet" + +# Not using the URL https://dot.net/v1/dotnet-install.sh because of https://github.com/dotnet/install-scripts/issues/276 +ARG DOTNET_INSTALL_SH_REVISION="40434288dc5bbda41eafcbcbbc5c0fbbe028fb30" +ARG DOTNET_CHANNEL_A="7.0" +ARG DOTNET_CHANNEL_B="6.0" +ARG DOTNET_CHANNEL_C="8.0" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt/qodana /data/project /data/cache /data/results && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + default-jre \ + git \ + git-lfs \ + gnupg2 \ + locales && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + curl -fsSL -o /tmp/dotnet-install.sh \ + "https://raw.githubusercontent.com/dotnet/install-scripts/$DOTNET_INSTALL_SH_REVISION/src/dotnet-install.sh" && \ + echo "d9ede6126a6da49cd3509e5fc8236f79addf175696f29d01f38840fd84663514 /tmp/dotnet-install.sh" > /tmp/shasum && \ + if [ "${DOTNET_INSTALL_SH_REVISION}" != "master" ]; then sha256sum --check --status /tmp/shasum; fi && \ + chmod +x /tmp/dotnet-install.sh && \ + bash /tmp/dotnet-install.sh -c $DOTNET_CHANNEL_A -i $DOTNET_ROOT && \ + bash /tmp/dotnet-install.sh -c $DOTNET_CHANNEL_B -i $DOTNET_ROOT && \ + bash /tmp/dotnet-install.sh -c $DOTNET_CHANNEL_C -i $DOTNET_ROOT && \ + chmod 777 -R $DOTNET_ROOT && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' + +RUN apt-get update && \ + apt-get install -y sudo && \ + useradd -m -u 1001 -U qodana && \ + passwd -d qodana && \ + echo 'qodana ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDNETC-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /opt/qodana && \ + mv /opt/qodana/qodana-cdnet /opt/qodana/qodana && \ + chmod +x /opt/qodana/qodana && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +ENV PATH="/opt/qodana:${PATH}" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana Community for .NET" +WORKDIR /data/project +ENTRYPOINT ["qodana", "scan"] diff --git a/2024.3/dotnet/Dockerfile b/2024.3/dotnet/Dockerfile new file mode 100644 index 00000000..909bb4e4 --- /dev/null +++ b/2024.3/dotnet/Dockerfile @@ -0,0 +1,114 @@ +ARG NODE_TAG="20-bullseye-slim" +ARG DOTNET_BASE_TAG="7.0-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM mcr.microsoft.com/dotnet/sdk:$DOTNET_BASE_TAG + +# renovate: datasource=npm depName=eslint +ENV ESLINT_VERSION="9.8.0" +# renovate: datasource=npm depName=pnpm +ENV PNPM_VERSION="9.6.0" + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +ENV RIDER_UNREAL_ROOT="/data/unrealEngine" DOTNET_ROOT="/usr/share/dotnet" + +# Not using the URL https://dot.net/v1/dotnet-install.sh because of https://github.com/dotnet/install-scripts/issues/276 +ARG DOTNET_INSTALL_SH_REVISION="40434288dc5bbda41eafcbcbbc5c0fbbe028fb30" +ARG DOTNET_CHANNEL_A="7.0" +ARG DOTNET_CHANNEL_B="6.0" +ARG DOTNET_CHANNEL_C="8.0" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p $QODANA_DATA $QODANA_CONF $DOTNET_ROOT $RIDER_UNREAL_ROOT && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps \ + software-properties-common && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' && \ + curl -fsSL -o /tmp/dotnet-install.sh \ + "https://raw.githubusercontent.com/dotnet/install-scripts/$DOTNET_INSTALL_SH_REVISION/src/dotnet-install.sh" && \ + echo "d9ede6126a6da49cd3509e5fc8236f79addf175696f29d01f38840fd84663514 /tmp/dotnet-install.sh" > /tmp/shasum && \ + if [ "${DOTNET_INSTALL_SH_REVISION}" != "master" ]; then sha256sum --check --status /tmp/shasum; fi && \ + chmod +x /tmp/dotnet-install.sh && \ + bash /tmp/dotnet-install.sh -c $DOTNET_CHANNEL_A -i $DOTNET_ROOT && \ + bash /tmp/dotnet-install.sh -c $DOTNET_CHANNEL_B -i $DOTNET_ROOT && \ + bash /tmp/dotnet-install.sh -c $DOTNET_CHANNEL_C -i $DOTNET_ROOT && \ + chmod 777 -R $DOTNET_ROOT + +ENV PATH="/opt/yarn/bin:$PATH" +ENV SKIP_YARN_COREPACK_CHECK=0 +COPY --from=node_base /usr/local/bin/node /usr/local/bin/ +COPY --from=node_base /usr/local/include/node /usr/local/include/node +COPY --from=node_base /usr/local/lib/node_modules /usr/local/lib/node_modules +COPY --from=node_base /opt/yarn-* /opt/yarn/ +RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && \ + ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx && \ + ln -s /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack && \ + node --version && \ + npm --version && \ + yarn --version && \ + npm install -g eslint@$ESLINT_VERSION pnpm@$PNPM_VERSION && npm config set update-notifier false && \ + chmod 777 -R "$HOME/.npm" "$HOME/.npmrc" + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDNET-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana for .NET (https://jb.gg/qodana-dotnet)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] diff --git a/2024.3/go/Dockerfile b/2024.3/go/Dockerfile new file mode 100644 index 00000000..6bbfe687 --- /dev/null +++ b/2024.3/go/Dockerfile @@ -0,0 +1,83 @@ +ARG GO_TAG="1.23-bullseye" +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM golang:$GO_TAG + +# renovate: datasource=npm depName=eslint +ENV ESLINT_VERSION="9.8.0" +# renovate: datasource=npm depName=pnpm +ENV PNPM_VERSION="9.6.0" + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +ENV GOMODCACHE="$QODANA_DATA/cache/go" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDGO-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana for Go (https://jb.gg/qodana-go)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/js/Dockerfile b/2024.3/js/Dockerfile new file mode 100644 index 00000000..f3137670 --- /dev/null +++ b/2024.3/js/Dockerfile @@ -0,0 +1,84 @@ +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG + +# renovate: datasource=npm depName=eslint +ENV ESLINT_VERSION="9.8.0" +# renovate: datasource=npm depName=pnpm +ENV PNPM_VERSION="9.6.0" + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' && \ + npm install -g eslint@$ESLINT_VERSION pnpm@$PNPM_VERSION && npm config set update-notifier false && \ + chmod 777 -R "$HOME/.npm" "$HOME/.npmrc" + +ENV PATH="/opt/yarn/bin:$PATH" +ENV SKIP_YARN_COREPACK_CHECK=0 + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDJVM-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana for JS (https://jb.gg/qodana-js)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/jvm-community/Dockerfile b/2024.3/jvm-community/Dockerfile new file mode 100644 index 00000000..abeb4ddb --- /dev/null +++ b/2024.3/jvm-community/Dockerfile @@ -0,0 +1,79 @@ +ARG BASE_TAG="bullseye-slim" +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM debian:$BASE_TAG + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' && \ + mkdir -p -m 777 "$HOME/.m2" "$HOME/.m2/repository" + +ENV GRADLE_USER_HOME="/data/cache/gradle" + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDJVMC-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana Community for JVM (https://jb.gg/qodana-jvm-community)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/jvm/Dockerfile b/2024.3/jvm/Dockerfile new file mode 100644 index 00000000..8c69ea4b --- /dev/null +++ b/2024.3/jvm/Dockerfile @@ -0,0 +1,94 @@ +ARG BASE_TAG="bullseye-slim" +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM debian:$BASE_TAG + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' && \ + mkdir -p -m 777 "$HOME/.m2" "$HOME/.m2/repository" + +ENV PATH="/opt/yarn/bin:$PATH" +ENV SKIP_YARN_COREPACK_CHECK=0 +COPY --from=node_base /usr/local/bin/node /usr/local/bin/ +COPY --from=node_base /usr/local/include/node /usr/local/include/node +COPY --from=node_base /usr/local/lib/node_modules /usr/local/lib/node_modules +COPY --from=node_base /opt/yarn-* /opt/yarn/ +RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && \ + ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx && \ + ln -s /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack && \ + node --version && \ + npm --version && \ + yarn --version && \ + npm install -g eslint@$ESLINT_VERSION pnpm@$PNPM_VERSION && npm config set update-notifier false && \ + chmod 777 -R "$HOME/.npm" "$HOME/.npmrc" + +ENV GRADLE_USER_HOME="/data/cache/gradle" + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDJVM-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana for JVM (https://jb.gg/qodana-jvm)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/php/Dockerfile b/2024.3/php/Dockerfile new file mode 100644 index 00000000..54e839b1 --- /dev/null +++ b/2024.3/php/Dockerfile @@ -0,0 +1,103 @@ +ARG NODE_TAG="20-bullseye-slim" +ARG PHP_TAG="8.3-cli-bullseye" +ARG COMPOSER_TAG="2.7.9" +FROM node:$NODE_TAG AS node_base +FROM composer:$COMPOSER_TAG AS composer_base +FROM php:$PHP_TAG + +# renovate: datasource=npm depName=eslint +ENV ESLINT_VERSION="9.8.0" +# renovate: datasource=npm depName=pnpm +ENV PNPM_VERSION="9.6.0" + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps \ + software-properties-common \ + zip \ + unzip && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' + +ENV PATH="/opt/yarn/bin:$PATH" +ENV SKIP_YARN_COREPACK_CHECK=0 +COPY --from=node_base /usr/local/bin/node /usr/local/bin/ +COPY --from=node_base /usr/local/include/node /usr/local/include/node +COPY --from=node_base /usr/local/lib/node_modules /usr/local/lib/node_modules +COPY --from=node_base /opt/yarn-* /opt/yarn/ +RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && \ + ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx && \ + ln -s /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack && \ + node --version && \ + npm --version && \ + yarn --version && \ + npm install -g eslint@$ESLINT_VERSION pnpm@$PNPM_VERSION && npm config set update-notifier false && \ + chmod 777 -R "$HOME/.npm" "$HOME/.npmrc" + +COPY --from=composer_base /usr/bin/composer /usr/bin/composer + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDPHP-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana for PHP (https://jb.gg/qodana-php)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/python-community/Dockerfile b/2024.3/python-community/Dockerfile new file mode 100644 index 00000000..4a6c389d --- /dev/null +++ b/2024.3/python-community/Dockerfile @@ -0,0 +1,120 @@ +ARG BASE_TAG="bullseye-slim" +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM debian:$BASE_TAG + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' + +ENV CONDA_DIR="/opt/miniconda3" \ + CONDA_ENVS_PATH="$QODANA_DATA/cache/conda/envs" \ + PIP_CACHE_DIR="$QODANA_DATA/cache/.pip/" \ + POETRY_CACHE_DIR="$QODANA_DATA/cache/.poetry/" \ + FLIT_ROOT_INSTALL=1 +ENV PATH="$CONDA_DIR/bin:$HOME/.local/bin:$PATH" + +# https://docs.conda.io/projects/miniconda/en/latest/miniconda-hashes.html +ARG CONDA_VERSION="py311_24.5.0-0" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + bzip2 \ + libglib2.0-0 \ + libsm6 \ + libxext6 \ + libxrender1 && \ + mkdir -m 777 -p $QODANA_DATA/cache && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + 'amd64') \ + MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-x86_64.sh" \ + SHA256SUM="38b203bb1f2be78b735ebc00162f29e8e73fcd9a619ed5980490a72193ee1f58";; \ + 'arm64') \ + MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-aarch64.sh" \ + SHA256SUM="94a742af7bf5c7bae3dba6bd07d84d94b858b839e15af2ea0cd10fdf2bde8a73";; \ + *) echo "Unsupported architecture $TARGETPLATFORM" >&2; exit 1;; \ + esac && \ + curl -fsSL -o /tmp/miniconda.sh "${MINICONDA_URL}" && \ + echo "${SHA256SUM} /tmp/miniconda.sh" > /tmp/shasum && \ + if [ "${CONDA_VERSION}" != "latest" ]; then sha256sum --check --status /tmp/shasum; fi && \ + bash /tmp/miniconda.sh -b -p $CONDA_DIR && \ + ln -s ${CONDA_DIR}/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ + echo ". ${CONDA_DIR}/etc/profile.d/conda.sh" >> ~/.bashrc && \ + echo "conda activate base" >> ~/.bashrc && ln -s ${CONDA_DIR}/bin/python3 /usr/bin/python3 && \ + find ${CONDA_DIR}/ -follow -type f -name '*.a' -delete && find ${CONDA_DIR}/ -follow -type f -name '*.js.map' -delete && \ + ${CONDA_DIR}/bin/conda install -c conda-forge poetry pipenv && ${CONDA_DIR}/bin/conda clean -afy && \ + poetry config virtualenvs.create false && \ + chmod 777 -R $HOME/.conda $CONDA_DIR/ $HOME/.config/pypoetry/ && \ + rm -rf /tmp/* + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDPYC-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana Community for Python (https://jb.gg/qodana-python-community)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file diff --git a/2024.3/python/Dockerfile b/2024.3/python/Dockerfile new file mode 100644 index 00000000..d8bb2f33 --- /dev/null +++ b/2024.3/python/Dockerfile @@ -0,0 +1,140 @@ +ARG BASE_TAG="bullseye-slim" +ARG NODE_TAG="20-bullseye-slim" +FROM node:$NODE_TAG AS node_base +FROM debian:$BASE_TAG + +# renovate: datasource=npm depName=eslint +ENV ESLINT_VERSION="9.8.0" +# renovate: datasource=npm depName=pnpm +ENV PNPM_VERSION="9.6.0" + +ENV HOME="/root" \ + LC_ALL="en_US.UTF-8" \ + QODANA_DIST="/opt/idea" \ + QODANA_DATA="/data" \ + QODANA_DOCKER="true" +ENV JAVA_HOME="$QODANA_DIST/jbr" \ + QODANA_CONF="$HOME/.config/idea" \ + PATH="$QODANA_DIST/bin:$PATH" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + rm -f /etc/apt/apt.conf.d/docker-clean && \ + mkdir -m 777 -p /opt $QODANA_DATA $QODANA_CONF && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + fontconfig \ + git \ + git-lfs \ + gnupg2 \ + locales \ + procps && \ + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen && locale-gen && \ + apt-get autoremove -y && apt-get clean && \ + chmod 777 -R $HOME && \ + echo 'root:x:0:0:root:/root:/bin/bash' > /etc/passwd && chmod 666 /etc/passwd && \ + git config --global --add safe.directory '*' + +ENV CONDA_DIR="/opt/miniconda3" \ + CONDA_ENVS_PATH="$QODANA_DATA/cache/conda/envs" \ + PIP_CACHE_DIR="$QODANA_DATA/cache/.pip/" \ + POETRY_CACHE_DIR="$QODANA_DATA/cache/.poetry/" \ + FLIT_ROOT_INSTALL=1 +ENV PATH="$CONDA_DIR/bin:$HOME/.local/bin:$PATH" + +# https://docs.conda.io/projects/miniconda/en/latest/miniconda-hashes.html +ARG CONDA_VERSION="py311_24.5.0-0" + +# hadolint ignore=SC2174,DL3009 +RUN --mount=target=/var/lib/apt/lists,type=cache,sharing=locked \ + --mount=target=/var/cache/apt,type=cache,sharing=locked \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + bzip2 \ + libglib2.0-0 \ + libsm6 \ + libxext6 \ + libxrender1 && \ + mkdir -m 777 -p $QODANA_DATA/cache && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + 'amd64') \ + MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-x86_64.sh" \ + SHA256SUM="38b203bb1f2be78b735ebc00162f29e8e73fcd9a619ed5980490a72193ee1f58";; \ + 'arm64') \ + MINICONDA_URL="https://repo.anaconda.com/miniconda/Miniconda3-${CONDA_VERSION}-Linux-aarch64.sh" \ + SHA256SUM="94a742af7bf5c7bae3dba6bd07d84d94b858b839e15af2ea0cd10fdf2bde8a73";; \ + *) echo "Unsupported architecture $TARGETPLATFORM" >&2; exit 1;; \ + esac && \ + curl -fsSL -o /tmp/miniconda.sh "${MINICONDA_URL}" && \ + echo "${SHA256SUM} /tmp/miniconda.sh" > /tmp/shasum && \ + if [ "${CONDA_VERSION}" != "latest" ]; then sha256sum --check --status /tmp/shasum; fi && \ + bash /tmp/miniconda.sh -b -p $CONDA_DIR && \ + ln -s ${CONDA_DIR}/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ + echo ". ${CONDA_DIR}/etc/profile.d/conda.sh" >> ~/.bashrc && \ + echo "conda activate base" >> ~/.bashrc && ln -s ${CONDA_DIR}/bin/python3 /usr/bin/python3 && \ + find ${CONDA_DIR}/ -follow -type f -name '*.a' -delete && find ${CONDA_DIR}/ -follow -type f -name '*.js.map' -delete && \ + ${CONDA_DIR}/bin/conda install -c conda-forge poetry pipenv && ${CONDA_DIR}/bin/conda clean -afy && \ + poetry config virtualenvs.create false && \ + chmod 777 -R $HOME/.conda $CONDA_DIR/ $HOME/.config/pypoetry/ && \ + rm -rf /tmp/* + +ENV PATH="/opt/yarn/bin:$PATH" +ENV SKIP_YARN_COREPACK_CHECK=0 +COPY --from=node_base /usr/local/bin/node /usr/local/bin/ +COPY --from=node_base /usr/local/include/node /usr/local/include/node +COPY --from=node_base /usr/local/lib/node_modules /usr/local/lib/node_modules +COPY --from=node_base /opt/yarn-* /opt/yarn/ +RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm && \ + ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx && \ + ln -s /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack && \ + node --version && \ + npm --version && \ + yarn --version && \ + npm install -g eslint@$ESLINT_VERSION pnpm@$PNPM_VERSION && npm config set update-notifier false && \ + chmod 777 -R "$HOME/.npm" "$HOME/.npmrc" + +ARG QD_RELEASE="2024.3" +ARG QD_BUILD="QDPY-$QD_RELEASE" +# hadolint ignore=DL3003,SC2043 +RUN set -ex && \ + dpkgArch="$(dpkg --print-architecture)" && \ + case "$dpkgArch" in \ + "amd64") \ + OS_ARCH_SUFFIX=""; \ + ;; \ + "arm64") \ + OS_ARCH_SUFFIX="-aarch64"; \ + ;; \ + *) echo "Unsupported architecture $dpkgArch" >&2; exit 1 ;; \ + esac && \ + QD_NAME="qodana-$QD_BUILD$OS_ARCH_SUFFIX" \ + QD_URL="https://download.jetbrains.com/qodana/$QD_RELEASE/$QD_NAME.tar.gz" && \ + curl -fsSL "$QD_URL" -o "/tmp/$QD_NAME.tar.gz" \ + "$QD_URL.sha256" -o "/tmp/$QD_NAME.tar.gz.sha256" \ + "$QD_URL.sha256.asc" -o "/tmp/$QD_NAME.tar.gz.sha256.asc" && \ + GNUPGHOME="$(mktemp -d)" && \ + export GNUPGHOME && \ + for key in \ + "B46DC71E03FEEB7F89D1F2491F7A8F87B9D8F501" \ + ; do \ + gpg --batch --keyserver "hkps://keys.openpgp.org" --recv-keys "$key" || \ + gpg --batch --keyserver "keyserver.ubuntu.com" --recv-keys "$key" ; \ + done && \ + gpg --verify "/tmp/$QD_NAME.tar.gz.sha256.asc" "/tmp/$QD_NAME.tar.gz.sha256" && \ + (cd /tmp && sha256sum --check --status "$QD_NAME.tar.gz.sha256") && \ + mkdir -p /tmp/qd && tar -xzf "/tmp/$QD_NAME.tar.gz" --directory /tmp/qd && \ + mv /tmp/qd/qodana-QD* "$QODANA_DIST" && \ + chmod +x "$QODANA_DIST"/bin/*.sh "$QODANA_DIST"/bin/qodana && \ + update-alternatives --install /usr/bin/java java "$JAVA_HOME/bin/java" 0 && \ + update-alternatives --install /usr/bin/javac javac "$JAVA_HOME/bin/javac" 0 && \ + update-alternatives --set java "$JAVA_HOME/bin/java" && \ + update-alternatives --set javac "$JAVA_HOME/bin/javac" && \ + apt-get purge --auto-remove -y gnupg2 && \ + rm -rf /var/cache/apt /var/lib/apt/ /tmp/* "$GNUPGHOME" + +LABEL maintainer="qodana-support@jetbrains.com" description="Qodana for Python (https://jb.gg/qodana-python)" +WORKDIR /data/project +ENTRYPOINT ["/opt/idea/bin/qodana"] \ No newline at end of file