diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index dfa7a76..7d621ac 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -173,7 +173,7 @@ jobs: if: inputs.do_upload uses: docker/build-push-action@v6 with: - platforms: linux/amd64,linux/arm64/v8,linux/ppc64le,linux/s390x,linux/riscv64 + platforms: linux/amd64,linux/arm64/v8 push: true build-args: | BUILD_DATE=${{ steps.get_latest_release_metadata.outputs.build_date }} @@ -189,6 +189,30 @@ jobs: ghcr.io/suwayomi/suwayomi-server:${{ inputs.tachidesk_release_type }} ghcr.io/suwayomi/suwayomi-server:${{ steps.get_latest_release_metadata.outputs.release_tag }} + # And also those that aren't supported by KCEF + # the build arg TACHIDESK_KCEF will simply not install the dependencies, so runtime will fail to load libs + # but everything else will still work + - name: Push container image to registry + if: inputs.do_upload + uses: docker/build-push-action@v6 + with: + platforms: linux/ppc64le,linux/s390x,linux/riscv64 + push: true + build-args: | + BUILD_DATE=${{ steps.get_latest_release_metadata.outputs.build_date }} + TACHIDESK_RELEASE_TAG=${{ steps.get_latest_release_metadata.outputs.release_tag }} + TACHIDESK_RELEASE_DOWNLOAD_URL=${{ steps.get_latest_release_metadata.outputs.release_url }} + TACHIDESK_FILENAME=${{ steps.get_latest_release_metadata.outputs.release_filename }} + TACHIDESK_DOCKER_GIT_COMMIT=${{ steps.get_latest_release_metadata.outputs.tachidesk_docker_git_commit }} + TACHIDESK_KCEF=n + tags: | + ${{ inputs.tachidesk_release_type == 'stable' && 'ghcr.io/suwayomi/tachidesk:latest' || '' }} + ghcr.io/suwayomi/tachidesk:${{ inputs.tachidesk_release_type }} + ghcr.io/suwayomi/tachidesk:${{ steps.get_latest_release_metadata.outputs.release_tag }} + ${{ inputs.tachidesk_release_type == 'stable' && 'ghcr.io/suwayomi/suwayomi-server:latest' || '' }} + ghcr.io/suwayomi/suwayomi-server:${{ inputs.tachidesk_release_type }} + ghcr.io/suwayomi/suwayomi-server:${{ steps.get_latest_release_metadata.outputs.release_tag }} + # - name: Create slim container # uses: kitabisa/docker-slim-action@v1 # env: diff --git a/Dockerfile b/Dockerfile index ae08f2d..ebcf637 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,7 @@ ARG TACHIDESK_RELEASE_TAG ARG TACHIDESK_FILENAME ARG TACHIDESK_RELEASE_DOWNLOAD_URL ARG TACHIDESK_DOCKER_GIT_COMMIT +ARG TACHIDESK_KCEF=y # y or n LABEL maintainer="suwayomi" \ org.opencontainers.image.title="Suwayomi Docker" \ @@ -34,12 +35,16 @@ RUN apt-get update && \ rm -rf /var/lib/apt/lists/* # install CEF dependencies -RUN apt-get update && \ - apt-get -y install --no-install-recommends -y libxss1 libxext6 libxrender1 libxcomposite1 libxdamage1 libxkbcommon0 libxtst6 \ - libjogl2-jni libgluegen2-jni libglib2.0-0t64 libnss3 libdbus-1-3 libpango-1.0-0 libcairo2 libasound2t64 \ - libatk-bridge2.0-0t64 libcups2t64 libdrm2 libgbm1 xvfb && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* +# Ubuntu exposes libgluegen_rt.so as libgluegen2_rt.so for some reason, so rename it +# JCEF (or Java?) also does not search /usr/lib/jni, so copy them over into one it will search +RUN if [ "$TACHIDESK_KCEF" = "y" ]; then \ + apt-get update && \ + apt-get -y install --no-install-recommends -y libxss1 libxext6 libxrender1 libxcomposite1 libxdamage1 libxkbcommon0 libxtst6 \ + libjogl2-jni libgluegen2-jni libglib2.0-0t64 libnss3 libdbus-1-3 libpango-1.0-0 libcairo2 libasound2t64 \ + libatk-bridge2.0-0t64 libcups2t64 libdrm2 libgbm1 xvfb && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* || exit 1; \ + fi # Create a user to run as RUN userdel -r ubuntu @@ -60,16 +65,19 @@ COPY scripts/startup_script.sh /home/suwayomi/startup_script.sh RUN chown -R suwayomi:suwayomi /home/suwayomi && \ chmod 777 -R /home/suwayomi -# must be created by root -RUN mkdir /tmp/.X11-unix && chmod 1777 /tmp/.X11-unix +# .X11-unix must be created by root +# Ubuntu exposes libgluegen_rt.so as libgluegen2_rt.so for some reason, so rename it +# JCEF (or Java?) also does not search /usr/lib/jni, so copy them over into one it will search +RUN if [ "$TACHIDESK_KCEF" = "y" ]; then \ + mkdir /tmp/.X11-unix && chmod 1777 /tmp/.X11-unix && \ + cp /usr/lib/jni/libgluegen2_rt.so libgluegen_rt.so && \ + cp /usr/lib/jni/*.so ./; \ + fi USER suwayomi EXPOSE 4567 +ENV TACHIDESK_KCEF=$TACHIDESK_KCEF -# Ubuntu exposes libgluegen_rt.so as libgluegen2_rt.so for some reason, so rename it -# JCEF (or Java?) also does not search /usr/lib/jni, so copy them over into one it will search -RUN cp /usr/lib/jni/libgluegen2_rt.so libgluegen_rt.so && \ - cp /usr/lib/jni/*.so ./ CMD ["/home/suwayomi/startup_script.sh"] diff --git a/scripts/startup_script.sh b/scripts/startup_script.sh index 7adf4d3..1fd4e36 100755 --- a/scripts/startup_script.sh +++ b/scripts/startup_script.sh @@ -89,6 +89,10 @@ sed -i -r "s/server.opdsShowOnlyUnreadChapters = ([0-9]+|[a-zA-Z]+)( #)?/server. sed -i -r "s/server.opdsShowOnlyDownloadedChapters = ([0-9]+|[a-zA-Z]+)( #)?/server.opdsShowOnlyDownloadedChapters = ${OPDS_SHOW_ONLY_DOWNLOADED_CHAPTERS:-\1} #/" /home/suwayomi/.local/share/Tachidesk/server.conf sed -i -r "s/server.opdsChapterSortOrder = \"(.*?)\"( #)?/server.opdsChapterSortOrder = \"${OPDS_CHAPTER_SORT_ORDER:-\1}\" #/" /home/suwayomi/.local/share/Tachidesk/server.conf -Xvfb :0 -screen 0 800x680x24 -nolisten tcp >/dev/null 2>&1 & -export DISPLAY=:0 +if [ "$TACHIDESK_KCEF" = "" ] || [ "$TACHIDESK_KCEF" = "y" ]; then + Xvfb :0 -screen 0 800x680x24 -nolisten tcp >/dev/null 2>&1 & + export DISPLAY=:0 +else + echo "Suwayomi built without KCEF support, not starting Xvfb" +fi exec java -Duser.home=/home/suwayomi -jar "/home/suwayomi/startup/tachidesk_latest.jar";