From d5601466f7096d5c967ffc97ddc07454837d4d90 Mon Sep 17 00:00:00 2001 From: New Future Date: Wed, 28 May 2025 03:11:55 +0800 Subject: [PATCH 1/3] =?UTF-8?q?PR=20=E6=A3=80=E6=9F=A5docker=20=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=20=20(#458)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .build/Dockerfile | 2 +- .build/nuitka.cmd | 2 +- .github/workflows/build.yml | 74 ++++++++++++++++++++++++----------- .github/workflows/publish.yml | 14 +++++-- 4 files changed, 63 insertions(+), 29 deletions(-) diff --git a/.build/Dockerfile b/.build/Dockerfile index a3d62482b..5c41125bf 100755 --- a/.build/Dockerfile +++ b/.build/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:latest WORKDIR /app COPY . . -RUN apk add --no-cache python3 py3-pip python3-dev patchelf build-base libffi-dev +RUN apk add py3-pip python3-dev patchelf build-base libffi-dev RUN pip3 install -U nuitka --break-system-packages RUN .build/nuitka.cmd diff --git a/.build/nuitka.cmd b/.build/nuitka.cmd index c12673744..4df5bf911 100755 --- a/.build/nuitka.cmd +++ b/.build/nuitka.cmd @@ -1 +1 @@ -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 \ No newline at end of file +python3 -m nuitka run.py --mode=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 --nofollow-import-to=unittest,pydoc --onefile-tempdir-spec="{CACHE_DIR}/{PRODUCT}/{VERSION}" \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b936278a0..51575cf1c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,6 @@ permissions: concurrency: group: "${{ github.workflow }}-${{ github.event.pull_request.head.label || github.head_ref || github.ref }}" cancel-in-progress: true - jobs: lint: runs-on: ubuntu-latest @@ -61,15 +60,14 @@ jobs: # fail-fast: false matrix: os: [windows, macos, ubuntu] - python-version: ["3.x"] runs-on: ${{ matrix.os }}-latest timeout-minutes: 8 steps: - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} + - name: Set up Python "3.x" uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python-version }} + python-version: "3.x" - name: Install dependencies run: pip install pyinstaller @@ -92,15 +90,29 @@ jobs: # Upload build result - uses: actions/upload-artifact@v4 with: - name: PyInstaller-${{ matrix.os }}-py${{ matrix.python-version }} + name: PyInstaller-${{ matrix.os }} path: dist/ - retention-days: 7 + retention-days: 3 nuitka: strategy: - # fail-fast: false + fail-fast: false matrix: - os: [windows-latest, windows-11-arm, ubuntu-latest, ubuntu-24.04-arm, macos-13, macos-latest] + include: + - os: windows-latest + arch: x64 + - os: windows-latest + arch: x86 + - os: windows-11-arm + arch: arm64 + - os: ubuntu-latest + arch: x64 + - os: ubuntu-24.04-arm + arch: arm64 + - os: macos-13 + arch: x64 + - os: macos-latest + arch: arm64 runs-on: ${{ matrix.os }} timeout-minutes: 10 steps: @@ -109,28 +121,30 @@ jobs: uses: actions/setup-python@v5 with: python-version: 3.x + architecture: ${{ matrix.arch }} - name: Install dependencies - run: pip install nuitka + run: python3 -m pip install -U 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 + + - name: Set up on Linux if: runner.os == 'Linux' run: | - sudo apt-get update && sudo apt install -y patchelf ccache + sudo apt-get update + sudo apt-get install -y patchelf 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 + + - name: Set up 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 + - run: python3 ./run.py -h - name: Package binary run: ./.build/nuitka.cmd @@ -141,22 +155,32 @@ jobs: # Upload build result - uses: actions/upload-artifact@v4 with: - name: ddns-${{ runner.os }}-${{ runner.arch }} + name: ddns-${{ runner.os }}-${{ matrix.arch }} path: dist/ retention-days: 7 docker: + if: github.event_name == 'pull_request' + strategy: + matrix: + platforms: [ linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x ] runs-on: ubuntu-latest - timeout-minutes: 5 + timeout-minutes: 45 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 + - uses: docker/setup-qemu-action@v3 + with: + platforms: ${{ matrix.platforms }} + - uses: docker/setup-buildx-action@v3 - uses: docker/build-push-action@v6 with: context: . load: true file: .build/Dockerfile + platforms: ${{ matrix.platforms }} tags: ddns:test + - name: test help command run: docker run --rm ddns:test -h - name: test config generation @@ -185,21 +209,20 @@ jobs: preview-docker: runs-on: ubuntu-latest if: github.event_name == 'push' - timeout-minutes: 12 - needs: [docker] + timeout-minutes: 120 environment: name: preview url: https://github.com/NewFuture/DDNS/pkgs/container/ddns/?tag=master - env: - arch: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x permissions: packages: write + env: + platforms: 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 - uses: docker/setup-qemu-action@v3 with: - platforms: ${{ env.arch }} + platforms: ${{ env.platforms }} - uses: docker/setup-buildx-action@v3 - uses: docker/login-action@v3 with: @@ -220,7 +243,12 @@ jobs: with: context: . file: .build/Dockerfile - platforms: ${{ env.arch }} + platforms: ${{ env.platforms }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + outputs: | + type=image,name=target,\ + annotation-index.org.opencontainers.image.description=DDNS alpine container,\ + annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS,\ + annotation-index.org.opencontainers.image.licenses=MIT diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3847d9a0e..c10a9ffdb 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,7 +10,7 @@ permissions: jobs: publish-docker: runs-on: ubuntu-latest - timeout-minutes: 15 + timeout-minutes: 120 environment: name: publish url: https://hub.docker.com/r/newfuture/ddns @@ -18,13 +18,13 @@ jobs: packages: write env: DOCKER_BUILD_RECORD_UPLOAD: false - arch: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x + platforms: 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 - uses: docker/setup-qemu-action@v3 with: - platforms: ${{ env.arch }} + platforms: ${{ env.platforms }} - uses: docker/setup-buildx-action@v3 - uses: docker/login-action@v3 with: @@ -45,10 +45,16 @@ jobs: with: context: . file: .build/Dockerfile - platforms: ${{ env.arch }} + platforms: ${{ env.platforms }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + outputs: | + type=image,name=target,\ + annotation-index.org.opencontainers.image.description=DDNS alpine container,\ + annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS,\ + annotation-index.org.opencontainers.image.licenses=MIT + publish-pypi: runs-on: ubuntu-latest From ed05d4094678fa814dae25d2fd71773c73a6a499 Mon Sep 17 00:00:00 2001 From: New Future Date: Wed, 28 May 2025 03:16:49 +0800 Subject: [PATCH 2/3] fix build --- .github/workflows/build.yml | 6 +++--- .github/workflows/publish.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 51575cf1c..bd68c270b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -248,7 +248,7 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} outputs: | - type=image,name=target,\ - annotation-index.org.opencontainers.image.description=DDNS alpine container,\ - annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS,\ + type=image,name=target, + annotation-index.org.opencontainers.image.description=DDNS alpine container, + annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS, annotation-index.org.opencontainers.image.licenses=MIT diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c10a9ffdb..34d7ece81 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -50,9 +50,9 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} outputs: | - type=image,name=target,\ - annotation-index.org.opencontainers.image.description=DDNS alpine container,\ - annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS,\ + type=image,name=target, + annotation-index.org.opencontainers.image.description=DDNS alpine container, + annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS, annotation-index.org.opencontainers.image.licenses=MIT From f608515a8246e5aa5f2683c4f76796026cdf78bc Mon Sep 17 00:00:00 2001 From: New Future Date: Wed, 28 May 2025 03:19:40 +0800 Subject: [PATCH 3/3] fix build --- .github/workflows/build.yml | 7 +++---- .github/workflows/publish.yml | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bd68c270b..e2dccf987 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -247,8 +247,7 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - outputs: | - type=image,name=target, - annotation-index.org.opencontainers.image.description=DDNS alpine container, - annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS, + outputs: type=image,name=target,\ + annotation-index.org.opencontainers.image.description=DDNS alpine container,\ + annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS,\ annotation-index.org.opencontainers.image.licenses=MIT diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 34d7ece81..14a245f75 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -49,10 +49,9 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - outputs: | - type=image,name=target, - annotation-index.org.opencontainers.image.description=DDNS alpine container, - annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS, + outputs: type=image,name=target,\ + annotation-index.org.opencontainers.image.description=DDNS alpine container,\ + annotation-index.org.opencontainers.image.source=https://github.com/NewFuture/DDNS,\ annotation-index.org.opencontainers.image.licenses=MIT