فهرست منبع

docker build multi-arch (#457)

* full arch support: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x
* 启动立即执行一次 #451
break changes:
* 二进制 ddns 文件移到到 /bin/ddns #451
* 启动workdir /ddns
* 默认配置文件 /ddns/config.json
New Future 6 ماه پیش
والد
کامیت
4260629751
7فایلهای تغییر یافته به همراه27 افزوده شده و 20 حذف شده
  1. 13 0
      .build/Dockerfile
  2. 3 2
      .build/entrypoint.sh
  3. 1 1
      .build/nuitka.cmd
  4. 5 3
      .github/workflows/build.yml
  5. 4 2
      .github/workflows/publish.yml
  6. 0 10
      Dockerfile
  7. 1 2
      run.py

+ 13 - 0
.build/Dockerfile

@@ -0,0 +1,13 @@
+FROM alpine:latest
+WORKDIR /app
+COPY . .
+RUN apk add --no-cache python3 py3-pip python3-dev patchelf build-base
+RUN pip3 install -U nuitka --break-system-packages
+RUN .build/nuitka.cmd
+
+FROM alpine:latest
+LABEL maintainer="NN708, newfuture"
+WORKDIR /ddns
+COPY --from=0 /app/.build/entrypoint.sh /
+COPY --from=0 /app/dist/ddns /bin/
+ENTRYPOINT [ "/entrypoint.sh" ]

+ 3 - 2
entrypoint.sh → .build/entrypoint.sh

@@ -2,12 +2,13 @@
 
 if [ $# -eq 0 ]; then
   printenv > /etc/environment
-  echo "*/5 * * * *   /ddns -c /config.json" > /etc/crontabs/root
+  echo "*/5 * * * *  cd /ddns && /bin/ddns" > /etc/crontabs/root
+  /bin/ddns
   exec crond -f
 else
   first=`echo $1 | cut -c1`
   if [ "$first" = "-" ]; then
-    exec /ddns $@
+    exec /bin/ddns $@
   else
     exec $@
   fi

+ 1 - 1
.build/nuitka.cmd

@@ -1 +1 @@
-nuitka --standalone --onefile --output-dir=./dist --output-filename=ddns --remove-output --include-module=dns.dnspod --include-module=dns.alidns --include-module=dns.dnspod_com --include-module=dns.dnscom --include-module=dns.cloudflare --include-module=dns.he --include-module=dns.huaweidns --include-module=dns.callback --macos-app-name="DDNS" --product-name=DDNS --file-description="DDNS Client 自动更新域名解析到本机IP" --company-name="New Future" --copyright="https://ddns.newfuture.cc" --windows-icon-from-ico="favicon.ico" --linux-icon=".build/icon.png" --macos-app-icon=".build/icon.png" --assume-yes-for-downloads run.py 
+nuitka run.py --standalone --onefile --output-dir=./dist --no-deployment-flag=self-execution --output-filename=ddns --remove-output --include-module=dns.dnspod --include-module=dns.alidns --include-module=dns.dnspod_com --include-module=dns.dnscom --include-module=dns.cloudflare --include-module=dns.he --include-module=dns.huaweidns --include-module=dns.callback --product-name=DDNS --file-description="DDNS Client 自动更新域名解析到本机IP" --company-name="New Future" --copyright="https://ddns.newfuture.cc" --windows-icon-from-ico="favicon.ico" --assume-yes-for-downloads --lto=yes

+ 5 - 3
.github/workflows/build.yml

@@ -121,13 +121,14 @@ jobs:
         if: runner.os == 'Linux'
         run: |
           sudo apt-get update && sudo apt install -y patchelf ccache
+          echo " --static-libpython=yes --linux-icon=.build/icon.png" >> .build/nuitka.cmd
           cp /etc/ssl/certs/ca-certificates.crt cert.pem && export SSL_CERT_FILE=${PWD}/cert.pem
       
       - name: setup on macOS
         if: runner.os == 'macOS'
         run: |
           python3 -m pip install imageio
-
+          echo " --macos-app-name=DDNS --macos-app-icon=.build/icon.png" >> .build/nuitka.cmd
 
       - run: python ./run.py -h
 
@@ -154,6 +155,7 @@ jobs:
         with:
           context: .
           load: true
+          file: .build/Dockerfile
           tags: ddns:test
       - name: test help command
         run: docker run --rm ddns:test -h
@@ -189,8 +191,7 @@ jobs:
       name: preview
       url: https://github.com/NewFuture/DDNS/pkgs/container/ddns/?tag=master
     env:
-      arch: linux/amd64,linux/arm,linux/arm64
-      # arch: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x
+      arch: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x
     permissions:
       packages: write
     steps:
@@ -218,6 +219,7 @@ jobs:
       - uses: docker/build-push-action@v6
         with:
           context: .
+          file: .build/Dockerfile
           platforms: ${{ env.arch }}
           push: true
           tags: ${{ steps.meta.outputs.tags }}

+ 4 - 2
.github/workflows/publish.yml

@@ -18,8 +18,7 @@ jobs:
       packages: write
     env:
       DOCKER_BUILD_RECORD_UPLOAD: false
-      arch: linux/amd64,linux/arm,linux/arm64
-      # arch: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x
+      arch: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x
     steps:
       - uses: actions/checkout@v4
       - run: sed -i -e "s#\${BUILD_VERSION}#${{ github.ref_name }}#" -e "s/\${BUILD_DATE}/$(date --iso-8601=seconds)/" run.py
@@ -45,6 +44,7 @@ jobs:
       - uses: docker/build-push-action@v6
         with:
           context: .
+          file: .build/Dockerfile
           platforms: ${{ env.arch }}
           push: true
           tags: ${{ steps.meta.outputs.tags }}
@@ -98,12 +98,14 @@ jobs:
         if: runner.os == 'Linux'
         run: |
           apt-get update && apt install -y patchelf ccache
+          echo " --static-libpython=yes --linux-icon=.build/icon.png" >> .build/nuitka.cmd
           cp /etc/ssl/certs/ca-certificates.crt cert.pem && export SSL_CERT_FILE=${PWD}/cert.pem
       
       - name: setup on macOS
         if: runner.os == 'macOS'
         run: |
           python3 -m pip install imageio
+          echo " --macos-app-name=DDNS --macos-app-icon=.build/icon.png" >> .build/nuitka.cmd
 
       - name: Package binary
         run: ./.build/nuitka.cmd

+ 0 - 10
Dockerfile

@@ -1,10 +0,0 @@
-FROM six8/pyinstaller-alpine:alpine-3.6-pyinstaller-v3.4
-WORKDIR /app
-COPY . .
-RUN pyinstaller --onefile --noconfirm --clean ./.build/ddns.spec
-
-FROM alpine:latest
-LABEL maintainer="NN708"
-COPY --from=0 /app/entrypoint.sh /
-COPY --from=0 /app/dist/ddns /
-ENTRYPOINT [ "/entrypoint.sh" ]

+ 1 - 2
run.py

@@ -5,8 +5,7 @@ DDNS
 @author: New Future
 @modified: rufengsuixing
 """
-# nuitka-project-if: {OS} == "Linux":
-#   nuitka-project: --static-libpython=yes
+
 # nuitka-project-if: os.getenv("BUILD_VERSION") is not None:
 #   nuitka-project: --product-version=${BUILD_VERSION}
 # nuitka-project-else: