Skip to content

Commit 7e57294

Browse files
committed
Add CI/CD GitHub Actions build pipeline
1 parent e7bee77 commit 7e57294

4 files changed

Lines changed: 134 additions & 25 deletions

File tree

.github/workflows/build.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: Build & Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
build-windows:
10+
runs-on: windows-latest
11+
steps:
12+
- uses: actions/checkout@v4
13+
14+
- name: Setup Python
15+
uses: actions/setup-python@v5
16+
with:
17+
python-version: '3.11'
18+
19+
- name: Install dependencies
20+
run: pip install -r requirements-windows.txt
21+
22+
- name: Build exe
23+
run: pyinstaller MusicPresence.spec --distpath dist --workpath build
24+
25+
- name: Upload artifact
26+
uses: actions/upload-artifact@v4
27+
with:
28+
name: MusicPresence-windows
29+
path: dist/MusicPresence.exe
30+
31+
build-linux:
32+
runs-on: ubuntu-latest
33+
steps:
34+
- uses: actions/checkout@v4
35+
36+
- name: Setup Python
37+
uses: actions/setup-python@v5
38+
with:
39+
python-version: '3.11'
40+
41+
- name: Install system dependencies
42+
run: |
43+
sudo apt-get update
44+
sudo apt-get install -y libdbus-1-dev libglib2.0-dev pkg-config
45+
46+
- name: Install dependencies
47+
run: pip install -r requirements-linux.txt
48+
49+
- name: Build binary
50+
run: pyinstaller MusicPresence.spec --distpath dist --workpath build
51+
52+
- name: Upload artifact
53+
uses: actions/upload-artifact@v4
54+
with:
55+
name: MusicPresence-linux
56+
path: dist/MusicPresence
57+
58+
release:
59+
needs: [build-windows, build-linux]
60+
runs-on: ubuntu-latest
61+
permissions:
62+
contents: write
63+
steps:
64+
- name: Download Windows artifact
65+
uses: actions/download-artifact@v4
66+
with:
67+
name: MusicPresence-windows
68+
path: artifacts/windows
69+
70+
- name: Download Linux artifact
71+
uses: actions/download-artifact@v4
72+
with:
73+
name: MusicPresence-linux
74+
path: artifacts/linux
75+
76+
- name: Create GitHub Release
77+
uses: softprops/action-gh-release@v2
78+
with:
79+
name: MusicLocal Discord Presence ${{ github.ref_name }}
80+
body: |
81+
## Installation
82+
83+
### Windows
84+
Télécharge `MusicPresence.exe`, place ton `.env` dans le même dossier et lance l'exe.
85+
86+
### Linux
87+
Télécharge `MusicPresence`, rends-le exécutable (`chmod +x MusicPresence`), place ton `.env` dans le même dossier et lance-le.
88+
files: |
89+
artifacts/windows/MusicPresence.exe
90+
artifacts/linux/MusicPresence

MusicPresence.spec

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,44 @@ import sys
33

44
block_cipher = None
55

6+
hiddenimports_common = [
7+
'pypresence',
8+
'pypresence.exceptions',
9+
'minio',
10+
'minio.error',
11+
'PIL',
12+
'PIL.Image',
13+
'backends.smtc',
14+
'backends.mpris',
15+
]
16+
17+
hiddenimports_windows = [
18+
'winsdk.windows.media.control',
19+
'winsdk.windows.storage.streams',
20+
'winsdk.windows.foundation',
21+
]
22+
23+
hiddenimports_linux = [
24+
'dbus',
25+
'pympris',
26+
]
27+
28+
hiddenimports = hiddenimports_common + (
29+
hiddenimports_windows if sys.platform == 'win32' else hiddenimports_linux
30+
)
31+
632
a = Analysis(
733
['main.py'],
834
pathex=[],
935
binaries=[],
1036
datas=[
1137
('playersIcons', 'playersIcons'),
1238
],
13-
hiddenimports=[
14-
# winsdk — chargement dynamique non détecté par PyInstaller
15-
'winsdk.windows.media.control',
16-
'winsdk.windows.storage.streams',
17-
'winsdk.windows.foundation',
18-
# pypresence
19-
'pypresence',
20-
'pypresence.exceptions',
21-
# minio
22-
'minio',
23-
'minio.error',
24-
# Pillow
25-
'PIL',
26-
'PIL.Image',
27-
# backends
28-
'backends.smtc',
29-
'backends.mpris',
30-
],
39+
hiddenimports=hiddenimports,
3140
hookspath=[],
3241
hooksconfig={},
3342
runtime_hooks=[],
34-
excludes=[
35-
# Exclure les dépendances Linux sur Windows et vice versa
36-
'dbus' if sys.platform == 'win32' else 'winsdk',
37-
'pympris' if sys.platform == 'win32' else '',
38-
],
43+
excludes=[],
3944
win_no_prefer_redirects=False,
4045
win_private_assemblies=False,
4146
cipher=block_cipher,
@@ -58,10 +63,9 @@ exe = EXE(
5863
upx=True,
5964
upx_exclude=[],
6065
runtime_tmpdir=None,
61-
console=False, # Pas de fenêtre CMD
66+
console=False,
6267
disable_windowed_traceback=False,
6368
target_arch=None,
6469
codesign_identity=None,
6570
entitlements_file=None,
66-
# icon='playersIcons/default_icon.png', # décommenter si tu as une icône .ico
6771
)

requirements-linux.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
pypresence
2+
python-dotenv
3+
requests
4+
minio
5+
Pillow
6+
dbus-python
7+
pympris
8+
pyinstaller

requirements-windows.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
pypresence
2+
python-dotenv
3+
requests
4+
minio
5+
Pillow
6+
winsdk
7+
pyinstaller

0 commit comments

Comments
 (0)