From fc84084658ea8bec91c29ca7ebb9f8143b97e9f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sat, 21 Sep 2024 16:44:02 +0200 Subject: [PATCH] Add support for official docker images for yacreaderlibraryserver --- azure-pipelines.yml | 57 ++++++++++++++++++++- docker/Dockerfile | 102 ++++++++++++++++++++++++++++++++++++++ docker/Dockerfile.aarch64 | 91 ++++++++++++++++++++++++++++++++++ docker/root.tar.gz | Bin 0 -> 1864 bytes 4 files changed, 248 insertions(+), 2 deletions(-) create mode 100644 docker/Dockerfile create mode 100644 docker/Dockerfile.aarch64 create mode 100644 docker/root.tar.gz diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 055289ac..060d2e93 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -302,6 +302,34 @@ jobs: vc_redist_file_name: 'vc_redist.x86.exe' vc_vars: 'vcvars32.bat' +# +# Docker +# + +- job: BuildDockerImages + displayName: 'Build Docker Images' + pool: + vmImage: 'ubuntu-latest' + steps: + - task: UseDocker@0 + displayName: 'Set up Docker Buildx' + inputs: + command: 'setupBuildx' + buildxVersion: 'latest' + + - script: | + docker buildx create --use + docker buildx inspect --bootstrap + displayName: 'Create and Inspect Buildx Builder' + + - script: | + docker buildx build --no-cache --platform linux/amd64,linux/arm64 \ + --file $(Build.SourcesDirectory)/docker/Dockerfile \ + --file $(Build.SourcesDirectory)/docker/Dockerfile.aarch64 \ + -t yacreaderlibraryserver:develop \ + --output type=docker,dest=$(Build.ArtifactStagingDirectory)/multiarch.tar + displayName: 'Build and Push Multi-Platform Docker Image' + # # Dev builds publication # @@ -317,6 +345,7 @@ jobs: - Windows_x86 - Windows_x64 - Windows_x64_qt6 + - BuildDockerImages condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop'), true) variables: - group: github-releases @@ -327,6 +356,9 @@ jobs: inputs: buildType: 'current' targetPath: $(Build.ArtifactStagingDirectory) + - script: | + docker load -i $(Build.ArtifactStagingDirectory)/multiarch.tar + displayName: 'Load Multi-Platform Docker Image' - script: | find $(Build.ArtifactStagingDirectory) -name '*.*' -exec cp {} $(Build.ArtifactStagingDirectory) \; displayName: 'flatten artifact staging directory' @@ -334,7 +366,15 @@ jobs: VERSION="$(cat common/yacreader_global.h | grep '#define VERSION "' | tr -d '#define VERSION' | tr -d '"' ).$(Build.BuildNumber)" echo "##vso[task.setvariable variable=VERSION]$VERSION" displayName: 'Version' - - task: GitHubRelease@0 + - task: Docker@2 + displayName: 'Push Multi-Platform Docker Image' + inputs: + command: 'push' + repository: yacreaderlibraryserver + tags: | + develop + containerRegistry: $(docker-hub) + - task: GitHubRelease@1 inputs: gitHubConnection: yacreader-releases repositoryName: YACReader/yacreader-dev-builds @@ -359,6 +399,7 @@ jobs: - Windows_x86 - Windows_x64 - Windows_x64_qt6 + - BuildDockerImages condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) variables: - group: github-releases @@ -369,6 +410,9 @@ jobs: inputs: buildType: 'current' targetPath: $(Build.ArtifactStagingDirectory) + - script: | + docker load -i $(Build.ArtifactStagingDirectory)/multiarch.tar + displayName: 'Load Multi-Platform Docker Image' - script: | find $(Build.ArtifactStagingDirectory) -name '*.*' -exec cp {} $(Build.ArtifactStagingDirectory) \; displayName: 'flatten artifact staging directory' @@ -376,7 +420,16 @@ jobs: VERSION="$(cat common/yacreader_global.h | grep '#define VERSION "' | tr -d '#define VERSION' | tr -d '"' )" echo "##vso[task.setvariable variable=VERSION]$VERSION" displayName: 'Version' - - task: GitHubRelease@0 + - task: Docker@2 + displayName: 'Push Multi-Platform Docker Image' + inputs: + command: 'push' + repository: yacreaderlibraryserver + tags: | + latest + $(VERSION) + containerRegistry: $(docker-hub) + - task: GitHubRelease@1 inputs: gitHubConnection: yacreader-releases title: $(VERSION) diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..43fb3517 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,102 @@ +FROM ghcr.io/linuxserver/baseimage-ubuntu:noble + +# version, it can be a TAG or a branch +ARG YACR_VERSION="develop" + +# env variables +ARG DEBIAN_FRONTEND="noninteractive" +ENV APPNAME="YACReaderLibraryServer" +ENV HOME="/config" +LABEL maintainer="luisangelsm" + +# install build & runtime packages +RUN \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + desktop-file-utils \ + gcc \ + g++ \ + git \ + qt6-tools-dev \ + qt6-base-dev-tools \ + qmake6 \ + qmake6-bin \ + qt6-base-dev \ + qt6-multimedia-dev \ + qt6-tools-dev-tools \ + libgl-dev \ + qt6-l10n-tools \ + libqt6opengl6-dev \ + libunarr-dev \ + qt6-declarative-dev \ + libqt6svg6-dev \ + libqt6core5compat6-dev \ + libbz2-dev \ + libglu1-mesa-dev \ + liblzma-dev \ + libqt6gui6 \ + libqt6multimedia6 \ + libqt6network6 \ + libqt6qml6 \ + libqt6quickcontrols2-6 \ + qt6-image-formats-plugins \ + libqt6sql6 \ + libqt6sql6-sqlite \ + make \ + sqlite3 \ + libsqlite3-dev \ + unzip \ + wget \ + 7zip \ + 7zip-rar \ + libpoppler-qt6-dev \ + zlib1g-dev && \ + ldconfig + + +# clone YACReader repo +RUN git clone https://github.com/YACReader/yacreader.git /src/git && \ + cd /src/git && \ + git checkout $YACR_VERSION + +# get 7zip source +RUN cd /src/git/compressed_archive && \ + wget "https://github.com/YACReader/yacreader-7z-deps/blob/main/7z2301-src.7z?raw=true" -O /src/git/compressed_archive/7z2301-src.7z && \ + 7z x /src/git/compressed_archive/7z2301-src.7z -o/src/git/compressed_archive/lib7zip + +# build yacrederlibraryserver +RUN cd /src/git/YACReaderLibraryServer && \ + # qtchooser -list-versions && \ + qmake6 PREFIX=/app CONFIG+="7zip server_standalone" YACReaderLibraryServer.pro && \ + qmake6 -v && \ + make && \ + make install + +# clean up +RUN cd / && \ + apt-get clean && \ + apt-get purge -y build-essential g++ gcc git make qmake6 qtchooser unzip wget && \ + apt-get -y autoremove && \ + apt-get install -y --no-install-recommends \ + dos2unix \ + libqt6core5compat6-dev \ + libpoppler-qt6-dev && \ + rm -rf \ + /src \ + /tmp/* \ + /var/cache/apt \ + /var/lib/apt/lists/* + +# set ENV +ENV LC_ALL="en_US.UTF-8" \ + PATH="/app/bin:${PATH}" + +# copy files +COPY root.tar.gz / +# Extract the contents of root.tar.gz into the / directory +RUN tar -xvpzf /root.tar.gz -C / + +# ports and volumes +EXPOSE 8080 +VOLUME ["/config", "/comics"] diff --git a/docker/Dockerfile.aarch64 b/docker/Dockerfile.aarch64 new file mode 100644 index 00000000..f7bc72ee --- /dev/null +++ b/docker/Dockerfile.aarch64 @@ -0,0 +1,91 @@ +FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-noble + +# version, it can be a TAG or a branch +ARG YACR_VERSION="develop" + +# env variables +ARG DEBIAN_FRONTEND="noninteractive" +ENV APPNAME="YACReaderLibraryServer" +ENV HOME="/config" +LABEL maintainer="luisangelsm" + +# install build & runtime packages +RUN \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + desktop-file-utils \ + g++ \ + git \ + libglu1-mesa-dev \ + libpoppler-qt5-dev \ + libpoppler-qt5-1 \ + libqt5core5a \ + libqt5gui5 \ + libqt5multimedia5 \ + libqt5network5 \ + libqt5opengl5-dev \ + libqt5qml5 \ + libqt5quickcontrols2-5 \ + libqt5script5 \ + libqt5sql5-sqlite \ + libqt5sql5 \ + libqt5svg5-dev \ + libsqlite3-dev \ + make \ + 7zip \ + 7zip-rar \ + qtchooser \ + qtbase5-dev-tools \ + qt5-qmake \ + qtbase5-dev \ + qtmultimedia5-dev \ + qt5-image-formats-plugins \ + qtdeclarative5-dev \ + qtquickcontrols2-5-dev \ + qtscript5-dev \ + qttools5-dev-tools \ + sqlite3 \ + unzip \ + wget && \ + ldconfig + +# clone YACReader repo +RUN git clone https://github.com/YACReader/yacreader.git /src/git && \ + cd /src/git && \ + git checkout $YACR_VERSION + +# get 7zip source +RUN cd /src/git/compressed_archive && \ + wget "https://github.com/YACReader/yacreader-7z-deps/blob/main/7z2301-src.7z?raw=true" -O /src/git/compressed_archive/7z2301-src.7z && \ + 7z x /src/git/compressed_archive/7z2301-src.7z -o/src/git/compressed_archive/lib7zip + +# build yacreaderlibraryserver +RUN cd /src/git/YACReaderLibraryServer && \ + qmake PREFIX=/app CONFIG+="7zip server_standalone" YACReaderLibraryServer.pro && \ + make && \ + make install + +# clean up +RUN cd / && \ + apt-get clean && \ + apt-get purge -y build-essential g++ git make qt5-qmake unzip wget && \ + apt-get -y autoremove && \ + rm -rf \ + /src \ + /tmp/* \ + /var/cache/apt \ + /var/lib/apt/lists/* + +# set ENV +ENV LC_ALL="en_US.UTF-8" \ + PATH="/app/bin:${PATH}" + +# copy files +COPY root.tar.gz / +# Extract the contents of root.tar.gz into the / directory +RUN tar -xvpzf /root.tar.gz -C / + +# ports and volumes +EXPOSE 8080 +VOLUME ["/config", "/comics"] diff --git a/docker/root.tar.gz b/docker/root.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..37913304531088730b1bb5cc64735403b189e9d4 GIT binary patch literal 1864 zcmV-O2eyNICK9-oplL7%*Trw<{Sb*_rDkwk10Xmhwp=S)}-3zlWrFNGBwHoJWG2 zJ2!_V@m*J)ZQpg~&og%Hj_0@Cj^jF=9m}?DtGxs64c6&`oC}-*?2H&+df%$}|0&^2 z|2L1nIV3nF+4uA`!`b+NGP8M)EYh zQ>KY17pj006hs8GJbliDyaz{JTPcrXeEx$pKl%b^;wAlsblXm86DsDA{G1bhIsDa7 z6~~J#P)ynE+O<%cWTN}PdSJ=2IpLfpjGrKKp3)2pdGU(Ir2D|@Ofy4Ag2ZWr1(A0J zI2e+mFxx9)SH91S#OStVtPK&tO?LeS)%$iD| zoRUq-SgF6g*#14&vGntQ6C{lAp?p-o?Rsc#hjrS2o^Dpg%J%Qti|ya`b^C7wa~%W7 za;7_oyUCjJZ&b#L_TTnBckcPGX#Z{P|7(WbPtBZX<|$?785Kh#NSGjO1gDq}5qk0Z z`P1&bck1-Wcxc=2(Titg$g_(OG{}-Xjgt_J1dIW+?y1NY;L`vp^O?ouD(3Yp29aQx zzq^8pBsd-54D2^(wsEZ1b>B{nCN}0h$I(4fIlZDE|PcXSSs=H+#XqtUlKUHE`&q-PTo~+4U zaakUVfJs?TnXYHbOI333xcEdS>K&FB6M6V@?pVeF+C&SfxGA;WAdCB@MYPasX)}=1 z@R6$iy*(N#(~%~#U&ahRh#8bI>s7Lakf1SXJKfg3y$}lmUwrmvUxv~?934sXd{;)l zZ$Y;UE&HKwwO}&2BEoyvf|C>Y{Buyr_Hu?}0!F-F#^Wp=`H{TiD-c7%3PGmk{?8x3 z|MSPMAII;X^4~g=qV>bki_XVd2YL&uM+6fb7=>Ze+g+sFefmgoC+8Uk@82TS}frQ5oP&#xvFqL z6SI$h-d(8b4cGGn9;YdXGa5y}5&@@Vh(`p1B+E!3qA{p}LVmc#n_4^1&FlHsZ5woB zzkj3qMW?|dLQnVbl?YCC%2r-e_!=tIR^uiV`} z=bsJI|J);2-@A$1w_0E+u8;S@ zAm=22U^wsEdG{W^m}WJ57hA~;r|DMmnVQOGS>1L^xtrAK|Eu}~YxsXWU(f#=VGH^f z_m*AQ)n!!I-?MBz{x`xk`twn+HTPc~|G($z_TLCK^sl@fxQ74Fb+!Mm5u$_*^mP8? zrAGU&yd7{=`|o(|#rEH^_5R;Rkn?{v_g9myh%#~t#tSt^JtT6bPXYm4NCU_~BiV}=KEes?CP*05+pr3tBxI(dquv9Tg;!h#_Q z-hv?~gACf11;!buZ}+NFT1?Ipe}Q7&Jyg4V)Yp4ks^F(tl0ur%5sk=za8Q#;s2{pI7?i2pv89q4?Z5JNkh<&t`uXqX*ZLHlkEXPSyE^Z%7T zJwtZ(n|%ema{q68j@8lQe-o^!|3+JYtB?P-UiKz9Rk9q2h|DOK;UyZP){?$7C1#0+ze7~dn|0Y;d z|0Vu_)n(Ms-*dG78jVJy(P%UpjYgx