From d5ac281f3e476ddf4494760d2ba0b9cdc12dfefa Mon Sep 17 00:00:00 2001 From: thespad Date: Wed, 11 Sep 2024 15:37:32 +0100 Subject: [PATCH 1/6] Bundle binaries at buildtime --- .github/workflows/BuildImage.yml | 16 ++++++- Dockerfile | 11 ++++- .../init-mod-universal-calibre-setup/run | 42 ++----------------- 3 files changed, 27 insertions(+), 42 deletions(-) diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 76e4373..ff76616 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -1,8 +1,16 @@ name: Build Image -on: [push, pull_request_target, workflow_dispatch] +on: + push: + pull_request_target: + workflow_dispatch: + inputs: + mod_version: + type: string + required: false env: + MOD_VERSION: ${{ inputs.mod_version }} GITHUB_REPO: "linuxserver/docker-mods" #don't modify ENDPOINT: "linuxserver/mods" #don't modify BASEIMAGE: "universal" #replace @@ -20,7 +28,11 @@ jobs: echo "BASEIMAGE=${{ env.BASEIMAGE }}" >> $GITHUB_OUTPUT echo "MODNAME=${{ env.MODNAME }}" >> $GITHUB_OUTPUT # **** If the mod needs to be versioned, set the versioning logic below. Otherwise leave as is. **** - MOD_VERSION=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" | jq -r '.tag_name') + if [[ -z "${{ env.MOD_VERSION }}" ]]; then + MOD_VERSION=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" | jq -r '.tag_name') + else + MOD_VERSION=${{ env.MOD_VERSION }} + fi echo "MOD_VERSION=${MOD_VERSION}" >> $GITHUB_OUTPUT outputs: GITHUB_REPO: ${{ steps.outputs.outputs.GITHUB_REPO }} diff --git a/Dockerfile b/Dockerfile index 86025ef..be11bc9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # syntax=docker/dockerfile:1 ## Buildstage ## -FROM ghcr.io/linuxserver/baseimage-alpine:3.19 AS buildstage +FROM ghcr.io/linuxserver/baseimage-alpine:3.20 AS buildstage ARG MOD_VERSION @@ -12,6 +12,15 @@ RUN \ MOD_VERSION=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" \ | jq -r '.tag_name'); \ fi && \ + if [ "$(uname -m)" == "x86_64" ]; then \ + curl -o \ + /root-layer/calibre.txz -L \ + "https://download.calibre-ebook.com/${MOD_VERSION:1}/calibre-${MOD_VERSION:1}-x86_64.txz"; \ + elif [ "$(uname -m)" == "aarch64" ]; then \ + curl -o \ + /root-layer/calibre.txz -L \ + "https://download.calibre-ebook.com/${MOD_VERSION:1}/calibre-${MOD_VERSION:1}-arm64.txz"; \ + fi && \ echo $MOD_VERSION > /root-layer/CALIBRE_RELEASE # copy local files diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run index fbb4bb7..002583a 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run @@ -1,20 +1,6 @@ #!/usr/bin/with-contenv bash -if [[ "$(uname -m)" == "armv7l" ]]; then -cat <<-EOF - ******************************************************** - ******************************************************** - * * - * !!!! * - * universal-calibre mod is not supported on armhf. * - * * - ******************************************************** - ******************************************************** -EOF -exit 0 -fi - -if [ ! -f /usr/bin/apt ]; then +if [[ ! -f /usr/bin/apt ]]; then cat <<-EOF ******************************************************** ******************************************************** @@ -31,33 +17,11 @@ fi export DEBIAN_FRONTEND="noninteractive" -CALIBRE_RELEASE="$(cat /CALIBRE_RELEASE)" -if [ -z ${CALIBRE_RELEASE+x} ]; then - CALIBRE_RELEASE=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" \ - | awk '/tag_name/{print $4;exit}' FS='[""]'); \ -fi - - -if [ ! -e /usr/bin/calibre-server ] || [ "${CALIBRE_RELEASE}" != "$(cat /config/.CALIBRE_RELEASE || :)" ]; then - echo "**** Installing/updating calibre ****" - rm -rf /app/calibre - mkdir -p \ - /app/calibre - if [ "$(uname -m)" == "x86_64" ]; then - curl -o \ - /tmp/calibre.txz -L \ - "https://github.com/kovidgoyal/calibre/releases/download/${CALIBRE_RELEASE}/calibre-${CALIBRE_RELEASE:1}-x86_64.txz" - elif [ "$(uname -m)" == "aarch64" ]; then - curl -o \ - /tmp/calibre.txz -L \ - "https://github.com/kovidgoyal/calibre/releases/download/${CALIBRE_RELEASE}/calibre-${CALIBRE_RELEASE:1}-arm64.txz" - fi +if [[ ! -e /usr/bin/calibre-server ]]; then tar xf \ /tmp/calibre.txz \ -C /app/calibre rm /tmp/calibre.txz + echo "Installing Calibre version $(cat /CALIBRE_RELEASE)" /app/calibre/calibre_postinstall - echo "${CALIBRE_RELEASE}" > /config/.CALIBRE_RELEASE -else - echo "**** Calibre already installed, skipping ****" fi From d77ab01de30d335e3d258a8c58dd6faae4f5f9b2 Mon Sep 17 00:00:00 2001 From: thespad Date: Wed, 11 Sep 2024 15:49:13 +0100 Subject: [PATCH 2/6] Add multi-arch env --- .github/workflows/BuildImage.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index ff76616..80c839f 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -15,6 +15,7 @@ env: ENDPOINT: "linuxserver/mods" #don't modify BASEIMAGE: "universal" #replace MODNAME: "calibre" #replace + MULTI_ARCH: "true" #set to false if not needed jobs: set-vars: @@ -27,6 +28,7 @@ jobs: echo "ENDPOINT=${{ env.ENDPOINT }}" >> $GITHUB_OUTPUT echo "BASEIMAGE=${{ env.BASEIMAGE }}" >> $GITHUB_OUTPUT echo "MODNAME=${{ env.MODNAME }}" >> $GITHUB_OUTPUT + echo "MULTI_ARCH=${{ env.MULTI_ARCH }}" >> $GITHUB_OUTPUT # **** If the mod needs to be versioned, set the versioning logic below. Otherwise leave as is. **** if [[ -z "${{ env.MOD_VERSION }}" ]]; then MOD_VERSION=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" | jq -r '.tag_name') @@ -39,6 +41,7 @@ jobs: ENDPOINT: ${{ steps.outputs.outputs.ENDPOINT }} BASEIMAGE: ${{ steps.outputs.outputs.BASEIMAGE }} MODNAME: ${{ steps.outputs.outputs.MODNAME }} + MULTI_ARCH: ${{ steps.outputs.outputs.MULTI_ARCH }} MOD_VERSION: ${{ steps.outputs.outputs.MOD_VERSION }} build: @@ -54,4 +57,5 @@ jobs: ENDPOINT: ${{ needs.set-vars.outputs.ENDPOINT }} BASEIMAGE: ${{ needs.set-vars.outputs.BASEIMAGE }} MODNAME: ${{ needs.set-vars.outputs.MODNAME }} + MULTI_ARCH: ${{ needs.set-vars.outputs.MULTI_ARCH }} MOD_VERSION: ${{ needs.set-vars.outputs.MOD_VERSION }} From 33bcc9ae92f99177409527aedc7662559813e6f6 Mon Sep 17 00:00:00 2001 From: thespad Date: Wed, 11 Sep 2024 17:20:20 +0100 Subject: [PATCH 3/6] Add mod override, bump to action v2 --- .github/workflows/BuildImage.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index 80c839f..b0db7e1 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -34,6 +34,7 @@ jobs: MOD_VERSION=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" | jq -r '.tag_name') else MOD_VERSION=${{ env.MOD_VERSION }} + echo "MOD_VERSION_OVERRIDE=true" >> $GITHUB_OUTPUT fi echo "MOD_VERSION=${MOD_VERSION}" >> $GITHUB_OUTPUT outputs: @@ -43,9 +44,10 @@ jobs: MODNAME: ${{ steps.outputs.outputs.MODNAME }} MULTI_ARCH: ${{ steps.outputs.outputs.MULTI_ARCH }} MOD_VERSION: ${{ steps.outputs.outputs.MOD_VERSION }} + MOD_VERSION_OVERRIDE: ${{ steps.outputs.outputs.MOD_VERSION_OVERRIDE }} build: - uses: linuxserver/github-workflows/.github/workflows/docker-mod-builder.yml@v1 + uses: linuxserver/github-workflows/.github/workflows/docker-mod-builder.yml@v2 needs: set-vars secrets: CR_USER: ${{ secrets.CR_USER }} @@ -59,3 +61,4 @@ jobs: MODNAME: ${{ needs.set-vars.outputs.MODNAME }} MULTI_ARCH: ${{ needs.set-vars.outputs.MULTI_ARCH }} MOD_VERSION: ${{ needs.set-vars.outputs.MOD_VERSION }} + MOD_VERSION_OVERRIDE: ${{ needs.set-vars.outputs.MOD_VERSION_OVERRIDE }} From 427d934015f3a44d39d0b02b71ec9e3408bd3492 Mon Sep 17 00:00:00 2001 From: thespad Date: Wed, 11 Sep 2024 17:40:12 +0100 Subject: [PATCH 4/6] Restore version check for updates on container restart --- .../s6-rc.d/init-mod-universal-calibre-setup/run | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run index 002583a..d3a7efd 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run @@ -17,11 +17,18 @@ fi export DEBIAN_FRONTEND="noninteractive" -if [[ ! -e /usr/bin/calibre-server ]]; then +CALIBRE_RELEASE="$(cat /CALIBRE_RELEASE)" +if [ -z ${CALIBRE_RELEASE+x} ]; then + CALIBRE_RELEASE=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" \ + | awk '/tag_name/{print $4;exit}' FS='[""]'); \ +fi + +if [[ ! -e /usr/bin/calibre-server ]] || [[ "${CALIBRE_RELEASE}" != "$(cat /config/.CALIBRE_RELEASE || :)" ]]; then tar xf \ /tmp/calibre.txz \ -C /app/calibre rm /tmp/calibre.txz echo "Installing Calibre version $(cat /CALIBRE_RELEASE)" /app/calibre/calibre_postinstall + echo "${CALIBRE_RELEASE}" > /config/.CALIBRE_RELEASE fi From 9535f3b04015df9291784773b2a8d3f6973e8f48 Mon Sep 17 00:00:00 2001 From: thespad Date: Wed, 11 Sep 2024 19:25:01 +0100 Subject: [PATCH 5/6] Update workflow tag --- .github/workflows/BuildImage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/BuildImage.yml b/.github/workflows/BuildImage.yml index b0db7e1..56b539f 100644 --- a/.github/workflows/BuildImage.yml +++ b/.github/workflows/BuildImage.yml @@ -47,7 +47,7 @@ jobs: MOD_VERSION_OVERRIDE: ${{ steps.outputs.outputs.MOD_VERSION_OVERRIDE }} build: - uses: linuxserver/github-workflows/.github/workflows/docker-mod-builder.yml@v2 + uses: linuxserver/github-workflows/.github/workflows/docker-mod-builder.yml@v1 needs: set-vars secrets: CR_USER: ${{ secrets.CR_USER }} From ef884b9b23bf3eb53cdc13a929903e8eb4a17558 Mon Sep 17 00:00:00 2001 From: thespad Date: Wed, 11 Sep 2024 19:53:53 +0100 Subject: [PATCH 6/6] Install if downloaded mod tarball is present --- .../s6-rc.d/init-mod-universal-calibre-setup/run | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run index d3a7efd..73af5c1 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run +++ b/root/etc/s6-overlay/s6-rc.d/init-mod-universal-calibre-setup/run @@ -17,18 +17,11 @@ fi export DEBIAN_FRONTEND="noninteractive" -CALIBRE_RELEASE="$(cat /CALIBRE_RELEASE)" -if [ -z ${CALIBRE_RELEASE+x} ]; then - CALIBRE_RELEASE=$(curl -sX GET "https://api.github.com/repos/kovidgoyal/calibre/releases/latest" \ - | awk '/tag_name/{print $4;exit}' FS='[""]'); \ -fi - -if [[ ! -e /usr/bin/calibre-server ]] || [[ "${CALIBRE_RELEASE}" != "$(cat /config/.CALIBRE_RELEASE || :)" ]]; then +if [[ -e /tmp/calibre.txz ]]; then tar xf \ /tmp/calibre.txz \ -C /app/calibre - rm /tmp/calibre.txz echo "Installing Calibre version $(cat /CALIBRE_RELEASE)" /app/calibre/calibre_postinstall - echo "${CALIBRE_RELEASE}" > /config/.CALIBRE_RELEASE + rm /tmp/calibre.txz fi