From 7cf577e85802239edf39e46afb88c92334a87697 Mon Sep 17 00:00:00 2001 From: New Future Date: Tue, 27 May 2025 00:21:47 +0800 Subject: [PATCH] using Nuitka for binary (#456) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * nuitka package binary * update pipeline * update test * fix lint * update build * fix path * imageio * 兼容powershell * update build * update build * lowercase * fix build * fix versiob build * fix build --- .build/icon-black.png | Bin 0 -> 16106 bytes .build/icon.png | Bin 0 -> 20144 bytes .build/nuitka.cmd | 1 + .github/workflows/build.yml | 50 +++++++++++++++++++++++++++++++++- .github/workflows/publish.yml | 31 +++++++++++++++------ favicon.ico | Bin 0 -> 16958 bytes run.py | 12 ++++++-- 7 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 .build/icon-black.png create mode 100644 .build/icon.png create mode 100755 .build/nuitka.cmd create mode 100644 favicon.ico diff --git a/.build/icon-black.png b/.build/icon-black.png new file mode 100644 index 0000000000000000000000000000000000000000..d1854ba3c891db0502a65fd70cb66c0c5325274c GIT binary patch literal 16106 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
>ZWVsCt9DHn6oU4Zw8Bdwm>t6>LfI`D)WHXtU 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 literal 0 HcmV?d00001 diff --git a/.build/nuitka.cmd b/.build/nuitka.cmd new file mode 100755 index 000000000..bb2f88721 --- /dev/null +++ b/.build/nuitka.cmd @@ -0,0 +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 \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0ed2af1dc..78c64846f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,7 +92,55 @@ jobs: # Upload build result - uses: actions/upload-artifact@v4 with: - name: ${{ matrix.os }}-py${{ matrix.python-version }} + name: PyInstaller-${{ matrix.os }}-py${{ matrix.python-version }} + path: dist/ + retention-days: 7 + + nuitka: + strategy: + # fail-fast: false + matrix: + os: [windows-latest, windows-11-arm, ubuntu-latest, ubuntu-24.04-arm, macos-13, macos-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.x + uses: actions/setup-python@v5 + with: + python-version: 3.x + - name: Install dependencies + run: pip install nuitka + + # Prepare build version and cert + - name: Replace build version + run: sed -i.tmp -e "s#\${BUILD_VERSION}#${{ github.ref_name }}#" -e "s/\${BUILD_DATE}/$(date --iso-8601=seconds)/" run.py && rm run.py.tmp + shell: bash + + - name: setup on Linux + if: runner.os == 'Linux' + run: | + sudo apt-get update && sudo apt install -y patchelf ccache + 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 + + + - run: python ./run.py -h + + - name: Package binary + run: ./.build/nuitka.cmd + + - run: ./dist/ddns || test -e config.json + - run: ./dist/ddns -h + + # Upload build result + - uses: actions/upload-artifact@v4 + with: + name: ddns-${{ runner.os }}-${{ runner.arch }} path: dist/ retention-days: 7 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 64b2f90a0..98bda1ad9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -77,31 +77,44 @@ jobs: build-binary: strategy: + # fail-fast: false matrix: - os: [macos, ubuntu, windows] - runs-on: ${{ matrix.os }}-latest - timeout-minutes: 8 + os: [windows-latest, windows-11-arm, ubuntu-latest, ubuntu-24.04-arm, macos-13, macos-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 10 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install dependencies - run: pip install pyinstaller + run: pip install nuitka - name: Replace build version run: sed -i.tmp -e "s#\${BUILD_VERSION}#${{ github.ref_name }}#" -e "s/\${BUILD_DATE}/$(date --iso-8601=seconds)/" run.py && rm run.py.tmp shell: bash - - name: Copy cert on ubuntu + + - name: setup on Linux if: runner.os == 'Linux' - run: cp /etc/ssl/certs/ca-certificates.crt cert.pem && export SSL_CERT_FILE=${PWD}/cert.pem + run: | + apt-get update && apt install -y patchelf ccache + 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 + + - name: Package binary + run: ./.build/nuitka.cmd - - run: python -O -m PyInstaller --noconfirm --clean .build/ddns.spec - run: ./dist/ddns || test -e config.json - run: ./dist/ddns -h - - run: mv ./dist/ddns ./dist/ddns-osx - if: runner.os == 'macOS' + - name: Move and rename binary with lowercase OS and arch + run: mv ./dist/ddns "./dist/ddns-$(echo ${{ runner.os }}-${{ runner.arch }} | tr '[:upper:]' '[:lower:]')" + shell: bash + - uses: actions/upload-artifact@v4 with: name: ${{ runner.os }} diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..973a4dfaa6cc48403b4fd37c2433def311e3af79 GIT binary patch literal 16958 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 QVFQK#FM#a(%TEIT0rm@$r2qf` literal 0 HcmV?d00001 diff --git a/run.py b/run.py index a87e2fec8..d792ecb49 100755 --- a/run.py +++ b/run.py @@ -5,6 +5,13 @@ @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: +# nuitka-project: --product-version=0.0.0 + from __future__ import print_function from time import ctime, asctime from os import path, environ, name as os_name @@ -46,7 +53,7 @@ def get_ip(ip_type, index="default"): debug(f"get_ip({ip_type}, {index})") if index is False: # disabled return False - elif type(index) is list: # 如果获取到的规则是列表,则依次判断列表中每一个规则,直到找到一个可以正确获取到的IP + elif isinstance(index, list): # 如果获取到的规则是列表,则依次判断列表中每一个规则,直到找到一个可以正确获取到的IP for i in index: value = get_ip(ip_type, i) if value: @@ -66,8 +73,7 @@ def get_ip(ip_type, index="default"): value = getattr(ip, index + "_v" + ip_type)() except Exception as e: error(e) - finally: - return value + return value def change_dns_record(dns, proxy_list, **kw):