@@ -2,30 +2,22 @@ name: Build and Release
22
33on :
44 push :
5- branches : [ main, master ]
65 tags :
76 - ' v*'
8- pull_request :
9- branches : [ main, master ]
107 workflow_dispatch :
118 inputs :
129 build_windows :
13- description : ' Build Windows executable'
10+ description : ' Build Windows x64 executable'
1411 required : true
1512 default : true
1613 type : boolean
17- build_linux_amd64 :
18- description : ' Build Linux AMD64 deb package'
19- required : true
20- default : true
21- type : boolean
22- build_linux_arm64 :
23- description : ' Build Linux ARM64 deb package'
14+ build_linux :
15+ description : ' Build Linux x64 deb package'
2416 required : true
2517 default : true
2618 type : boolean
2719 create_release :
28- description : ' Create GitHub Release (only for tags) '
20+ description : ' Create GitHub Release'
2921 required : true
3022 default : false
3123 type : boolean
@@ -51,38 +43,17 @@ jobs:
5143
5244 - name : Build Windows executable
5345 run : |
54- pyinstaller --onefile --windowed --icon=icon.ico --name AssignSticker main.py
55-
56- - name : Prepare Windows package
57- shell : pwsh
58- run : |
59- New-Item -ItemType Directory -Force -Path release/AssignSticker-windows
60- Copy-Item -Recurse dist/AssignSticker.exe release/AssignSticker-windows/
61- Copy-Item -Recurse icons release/AssignSticker-windows/
62- Copy-Item -Recurse htmls release/AssignSticker-windows/
63- Copy-Item -Recurse saying release/AssignSticker-windows/
64- Copy-Item -Recurse desktop_widgets release/AssignSticker-windows/
65- Copy-Item font.ttf release/AssignSticker-windows/
66- Copy-Item icon.ico release/AssignSticker-windows/
67- Copy-Item introduce release/AssignSticker-windows/
68- if (Test-Path banner.png) { Copy-Item banner.png release/AssignSticker-windows/ } else { Write-Host "banner.png not found" }
69- if (Test-Path LICENSE) { Copy-Item LICENSE release/AssignSticker-windows/ } else { Write-Host "LICENSE not found" }
70- if (Test-Path README.md) { Copy-Item README.md release/AssignSticker-windows/ } else { Write-Host "README.md not found" }
71-
72- - name : Create Windows ZIP
73- run : |
74- cd release
75- 7z a AssignSticker-windows-x64.zip AssignSticker-windows
46+ python build.py
7647
7748 - name : Upload Windows artifact
7849 uses : actions/upload-artifact@v4
7950 with :
8051 name : AssignSticker-windows-x64
81- path : release /AssignSticker-windows-x64.zip
52+ path : dist /AssignSticker.exe
8253
83- build-linux-amd64 :
54+ build-linux :
8455 runs-on : ubuntu-latest
85- if : github.event_name != 'workflow_dispatch' || github.event.inputs.build_linux_amd64 == 'true'
56+ if : github.event_name != 'workflow_dispatch' || github.event.inputs.build_linux == 'true'
8657 steps :
8758 - name : Checkout code
8859 uses : actions/checkout@v4
@@ -98,164 +69,114 @@ jobs:
9869 pip install pyinstaller
9970 pip install -r requirements.txt
10071
101- - name : Install build dependencies
72+ - name : Install system dependencies
10273 run : |
10374 sudo apt-get update
104- sudo apt-get install -y dpkg-dev debhelper fakeroot
75+ sudo apt-get install -y dpkg-dev fakeroot
10576
10677 - name : Build Linux executable
10778 run : |
10879 pyinstaller --onefile --windowed --name assignsticker main.py
10980
11081 - name : Prepare DEB package
11182 run : |
112- mkdir -p release/deb/assignsticker-amd64 /usr/local/bin
113- mkdir -p release/deb/assignsticker-amd64 /usr/share/assignsticker
114- mkdir -p release/deb/assignsticker-amd64 /usr/share/applications
115- mkdir -p release/deb/assignsticker-amd64 /DEBIAN
83+ mkdir -p release/deb/assignsticker/usr/local/bin
84+ mkdir -p release/deb/assignsticker/usr/share/assignsticker
85+ mkdir -p release/deb/assignsticker/usr/share/applications
86+ mkdir -p release/deb/assignsticker/DEBIAN
11687
11788 # Copy executable
118- cp dist/assignsticker release/deb/assignsticker-amd64/usr/local/bin/
119- chmod +x release/deb/assignsticker-amd64/usr/local/bin/assignsticker
120-
121- # Copy application files
122- cp -r icons release/deb/assignsticker-amd64/usr/share/assignsticker/
123- cp -r htmls release/deb/assignsticker-amd64/usr/share/assignsticker/
124- cp -r saying release/deb/assignsticker-amd64/usr/share/assignsticker/
125- cp -r desktop_widgets release/deb/assignsticker-amd64/usr/share/assignsticker/
126- cp font.ttf release/deb/assignsticker-amd64/usr/share/assignsticker/
127- cp icon.ico release/deb/assignsticker-amd64/usr/share/assignsticker/
128- cp introduce release/deb/assignsticker-amd64/usr/share/assignsticker/
129- cp banner.png release/deb/assignsticker-amd64/usr/share/assignsticker/ 2>/dev/null || true
130- cp LICENSE release/deb/assignsticker-amd64/usr/share/assignsticker/ 2>/dev/null || true
131- cp README.md release/deb/assignsticker-amd64/usr/share/assignsticker/ 2>/dev/null || true
89+ cp dist/assignsticker release/deb/assignsticker/usr/local/bin/
90+ chmod +x release/deb/assignsticker/usr/local/bin/assignsticker
91+
92+ # Copy all project files (excluding unnecessary directories)
93+ for item in icons htmls saying desktop_widgets; do
94+ if [ -d "$item" ]; then
95+ cp -r "$item" release/deb/assignsticker/usr/share/assignsticker/
96+ fi
97+ done
98+
99+ for file in font.ttf icon.ico introduce banner.png LICENSE README.md; do
100+ if [ -f "$file" ]; then
101+ cp "$file" release/deb/assignsticker/usr/share/assignsticker/
102+ fi
103+ done
132104
133105 # Create desktop entry
134- echo "[Desktop Entry]" > release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
135- echo "Name=AssignSticker" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
136- echo "Comment=作业看板应用" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
137- echo "Exec=/usr/local/bin/assignsticker" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
138- echo "Icon=/usr/share/assignsticker/icon.ico" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
139- echo "Type=Application" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
140- echo "Categories=Education;Office;" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
141- echo "Terminal=false" >> release/deb/assignsticker-amd64/usr/share/applications/assignsticker.desktop
106+ cat > release/deb/assignsticker/usr/share/applications/assignsticker.desktop << 'EOF'
107+ [Desktop Entry]
108+ Name=AssignSticker
109+ Comment=Homework Kanban Application
110+ Exec=/usr/local/bin/assignsticker
111+ Icon=/usr/share/assignsticker/icon.ico
112+ Type=Application
113+ Categories=Education;Office;
114+ Terminal=false
115+ EOF
142116
143117 # Create control file
144- echo "Package: assignsticker" > release/deb/assignsticker-amd64/DEBIAN/control
145- echo "Version: 1.3.0" >> release/deb/assignsticker-amd64/DEBIAN/control
146- echo "Section: education" >> release/deb/assignsticker-amd64/DEBIAN/control
147- echo "Priority: optional" >> release/deb/assignsticker-amd64/DEBIAN/control
148- echo "Architecture: amd64" >> release/deb/assignsticker-amd64/DEBIAN/control
149- echo "Depends: python3, python3-gi, libgtk-3-0" >> release/deb/assignsticker-amd64/DEBIAN/control
150- echo "Maintainer: SECTL <your-email@example.com>" >> release/deb/assignsticker-amd64/DEBIAN/control
151- echo "Description: 作业看板应用" >> release/deb/assignsticker-amd64/DEBIAN/control
152- echo " AssignSticker 是一个用于管理作业的看板应用," >> release/deb/assignsticker-amd64/DEBIAN/control
153- echo " 帮助用户更好地组织和跟踪作业任务。" >> release/deb/assignsticker-amd64/DEBIAN/control
118+ cat > release/deb/assignsticker/DEBIAN/control << 'EOF'
119+ Package : assignsticker
120+ Version : 1.3.0
121+ Section : education
122+ Priority : optional
123+ Architecture : amd64
124+ Depends : python3
125+ Maintainer : SECTL <sectl@example.com>
126+ Description : Homework Kanban Application
127+ AssignSticker is a homework management application
128+ that helps users organize and track homework tasks.
129+ EOF
154130
155131 # Build DEB package
156- dpkg-deb --build release/deb/assignsticker-amd64
157- mv release/deb/assignsticker-amd64 .deb release/AssignSticker-linux-amd64.deb
132+ dpkg-deb --build release/deb/assignsticker
133+ mv release/deb/assignsticker.deb release/AssignSticker-linux-amd64.deb
158134
159- - name : Upload Linux AMD64 artifact
135+ - name : Upload Linux artifact
160136 uses : actions/upload-artifact@v4
161137 with :
162138 name : AssignSticker-linux-amd64
163139 path : release/AssignSticker-linux-amd64.deb
164140
165- build-linux-arm64 :
141+ release :
142+ needs : [build-windows, build-linux]
166143 runs-on : ubuntu-latest
167- if : github.event_name != 'workflow_dispatch' || github.event.inputs.build_linux_arm64 == 'true'
144+ if : |
145+ always() &&
146+ (github.event_name == 'workflow_dispatch' && github.event.inputs.create_release == 'true') ||
147+ startsWith(github.ref, 'refs/tags/v')
168148 steps :
169- - name : Checkout code
170- uses : actions/checkout@v4
171-
172- - name : Set up QEMU
173- uses : docker/setup-qemu-action@v3
149+ - name : Download Windows artifact
150+ if : needs.build-windows.result == 'success'
151+ uses : actions/download-artifact@v4
174152 with :
175- platforms : arm64
153+ name : AssignSticker-windows-x64
154+ path : artifacts/windows
176155
177- - name : Build ARM64 in container
178- uses : docker/build-push-action@v5
156+ - name : Download Linux artifact
157+ if : needs.build-linux.result == 'success'
158+ uses : actions/download-artifact@v4
179159 with :
180- context : .
181- platforms : linux/arm64
182- file : ./Dockerfile.build
183- push : false
184- outputs : type=local,dest=./release/arm64
160+ name : AssignSticker-linux-amd64
161+ path : artifacts/linux
185162
186- - name : Prepare ARM64 DEB package
163+ - name : Prepare release files
187164 run : |
188- mkdir -p release/deb/assignsticker-arm64/usr/local/bin
189- mkdir -p release/deb/assignsticker-arm64/usr/share/assignsticker
190- mkdir -p release/deb/assignsticker-arm64/usr/share/applications
191- mkdir -p release/deb/assignsticker-arm64/DEBIAN
192-
193- # Copy executable
194- cp release/arm64/assignsticker release/deb/assignsticker-arm64/usr/local/bin/ 2>/dev/null || echo "Using placeholder"
195- chmod +x release/deb/assignsticker-arm64/usr/local/bin/assignsticker 2>/dev/null || true
196-
197- # Copy application files
198- cp -r icons release/deb/assignsticker-arm64/usr/share/assignsticker/
199- cp -r htmls release/deb/assignsticker-arm64/usr/share/assignsticker/
200- cp -r saying release/deb/assignsticker-arm64/usr/share/assignsticker/
201- cp -r desktop_widgets release/deb/assignsticker-arm64/usr/share/assignsticker/
202- cp font.ttf release/deb/assignsticker-arm64/usr/share/assignsticker/
203- cp icon.ico release/deb/assignsticker-arm64/usr/share/assignsticker/
204- cp introduce release/deb/assignsticker-arm64/usr/share/assignsticker/
205- cp banner.png release/deb/assignsticker-arm64/usr/share/assignsticker/ 2>/dev/null || true
206- cp LICENSE release/deb/assignsticker-arm64/usr/share/assignsticker/ 2>/dev/null || true
207- cp README.md release/deb/assignsticker-arm64/usr/share/assignsticker/ 2>/dev/null || true
208-
209- # Create desktop entry
210- echo "[Desktop Entry]" > release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
211- echo "Name=AssignSticker" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
212- echo "Comment=作业看板应用" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
213- echo "Exec=/usr/local/bin/assignsticker" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
214- echo "Icon=/usr/share/assignsticker/icon.ico" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
215- echo "Type=Application" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
216- echo "Categories=Education;Office;" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
217- echo "Terminal=false" >> release/deb/assignsticker-arm64/usr/share/applications/assignsticker.desktop
218-
219- # Create control file
220- echo "Package: assignsticker" > release/deb/assignsticker-arm64/DEBIAN/control
221- echo "Version: 1.3.0" >> release/deb/assignsticker-arm64/DEBIAN/control
222- echo "Section: education" >> release/deb/assignsticker-arm64/DEBIAN/control
223- echo "Priority: optional" >> release/deb/assignsticker-arm64/DEBIAN/control
224- echo "Architecture: arm64" >> release/deb/assignsticker-arm64/DEBIAN/control
225- echo "Depends: python3, python3-gi, libgtk-3-0" >> release/deb/assignsticker-arm64/DEBIAN/control
226- echo "Maintainer: SECTL <your-email@example.com>" >> release/deb/assignsticker-arm64/DEBIAN/control
227- echo "Description: 作业看板应用" >> release/deb/assignsticker-arm64/DEBIAN/control
228- echo " AssignSticker 是一个用于管理作业的看板应用," >> release/deb/assignsticker-arm64/DEBIAN/control
229- echo " 帮助用户更好地组织和跟踪作业任务。" >> release/deb/assignsticker-arm64/DEBIAN/control
230-
231- # Build DEB package
232- dpkg-deb --build release/deb/assignsticker-arm64
233- mv release/deb/assignsticker-arm64.deb release/AssignSticker-linux-arm64.deb
234-
235- - name : Upload Linux ARM64 artifact
236- uses : actions/upload-artifact@v4
237- with :
238- name : AssignSticker-linux-arm64
239- path : release/AssignSticker-linux-arm64.deb
240-
241- release :
242- needs : [build-windows, build-linux-amd64, build-linux-arm64]
243- runs-on : ubuntu-latest
244- if : (startsWith(github.ref, 'refs/tags/v') && github.event_name != 'workflow_dispatch') || (github.event_name == 'workflow_dispatch' && github.event.inputs.create_release == 'true')
245- steps :
246- - name : Download all artifacts
247- uses : actions/download-artifact@v4
248- with :
249- path : artifacts
165+ mkdir -p release_files
166+ if [ -f artifacts/windows/AssignSticker.exe ]; then
167+ mv artifacts/windows/AssignSticker.exe release_files/
168+ fi
169+ if [ -f artifacts/linux/AssignSticker-linux-amd64.deb ]; then
170+ mv artifacts/linux/AssignSticker-linux-amd64.deb release_files/
171+ fi
172+ ls -la release_files/
250173
251174 - name : Create Release
252175 uses : softprops/action-gh-release@v1
253176 with :
254- files : |
255- artifacts/AssignSticker-windows-x64/*.zip
256- artifacts/AssignSticker-linux-amd64/*.deb
257- artifacts/AssignSticker-linux-arm64/*.deb
177+ files : release_files/*
258178 draft : false
259179 prerelease : false
180+ generate_release_notes : true
260181 env :
261182 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments