Skip to content

Commit b51c1a5

Browse files
重写GitHub Actions工作流:简化构建流程,支持Windows x64和Linux x64 deb包
1 parent f166581 commit b51c1a5

File tree

2 files changed

+81
-187
lines changed

2 files changed

+81
-187
lines changed

.github/workflows/build.yml

Lines changed: 81 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,22 @@ name: Build and Release
22

33
on:
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 }}

Dockerfile.build

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)