Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .build/Dockerfile
Original file line number Diff line number Diff line change
@@ -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

Expand Down
2 changes: 1 addition & 1 deletion .build/nuitka.cmd
Original file line number Diff line number Diff line change
@@ -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
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}"
73 changes: 50 additions & 23 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand All @@ -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:
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand All @@ -220,7 +243,11 @@ 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
13 changes: 9 additions & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,21 @@ 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
permissions:
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:
Expand All @@ -45,10 +45,15 @@ 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
Expand Down
Loading