-
Notifications
You must be signed in to change notification settings - Fork 678
153 lines (138 loc) · 4.91 KB
/
publish.yml
File metadata and controls
153 lines (138 loc) · 4.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
name: Publish
on:
push:
tags: [v*]
permissions:
contents: read
jobs:
publish-docker:
runs-on: ubuntu-latest
timeout-minutes: 15
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
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 }}
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- uses: docker/metadata-action@v5
id: meta
with:
images: |
ghcr.io/newfuture/ddns
newfuture/ddns
- uses: docker/build-push-action@v6
with:
context: .
file: .build/Dockerfile
platforms: ${{ env.arch }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
publish-pypi:
runs-on: ubuntu-latest
timeout-minutes: 5
environment:
name: publish
url: https://pypi.org/project/ddns/
permissions:
# IMPORTANT: this permission is mandatory for Trusted Publishing
id-token: write
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: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build
- name: Build package
run: python -m build --sdist --wheel --outdir dist/
- uses: pypa/gh-action-pypi-publish@release/v1
with:
print-hash: true
build-binary:
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
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
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: setup on Linux
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
- run: ./dist/ddns || test -e config.json
- run: ./dist/ddns -h
- 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 }}
path: dist/
retention-days: 10
github-release:
runs-on: ubuntu-latest
timeout-minutes: 5
environment:
name: publish
url: https://github.com/NewFuture/DDNS/releases/tag/${{ github.ref_name }}
permissions:
contents: write
needs: [publish-docker, publish-pypi, build-binary]
steps:
- uses: actions/checkout@v4
- run: sed -i -e "s#\${BUILD_VERSION}#${{ github.ref_name }}#" .release/README.md
- uses: actions/download-artifact@v4
with:
path: dist
- name: Upload files
run: gh release upload ${{ github.ref_name }} .release/*.sh .release/*.bat dist/*/* --clobber
env:
GH_TOKEN: ${{ github.token }}
- name: Generate release notes and append README.md
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release view ${{ github.ref_name }} --json body -q '.body' > .release/notes.md
cat .release/README.md >> .release/notes.md
gh release edit ${{ github.ref_name }} --notes-file .release/notes.md --latest --prerelease=false