4949 clang \
5050 libpango-1.0-0 \
5151 libatk1.0-dev \
52- libgtk-3-dev
52+ libgtk-3-dev \
53+ file
5354 - uses : actions/checkout@v3
5455 - name : Install latest nightly
5556 uses : actions-rs/toolchain@v1
@@ -59,20 +60,78 @@ jobs:
5960 components : rustfmt, clippy
6061 - name : Build Rust
6162 run : cargo build --verbose --release
62- - name : Create Linux zip
63- run : zip "celemod-linux.zip" ./target/release/cele-mod
63+ - name : Download AppImage tools
64+ run : |
65+ wget -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
66+ wget -q https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
67+ chmod +x linuxdeploy-x86_64.AppImage appimagetool-x86_64.AppImage
68+ - name : Create AppDir
69+ run : |
70+ mkdir -p AppDir/usr/bin
71+ mkdir -p AppDir/usr/lib
72+ mkdir -p AppDir/usr/share/icons/hicolor/256x256/apps
73+ mkdir -p AppDir/usr/share/applications
74+
75+ # Copy binary and library
76+ cp ./target/release/cele-mod AppDir/usr/bin/cele-mod
77+ cp ./resources/libsciter.so AppDir/usr/lib/libsciter.so
78+ chmod +x AppDir/usr/bin/cele-mod
79+
80+ # Copy icon
81+ cp ./resources/icon.png AppDir/usr/share/icons/hicolor/256x256/apps/celemod.png
82+
83+ # Create .desktop file
84+ cat > AppDir/usr/share/applications/celemod.desktop << 'EOF'
85+ [Desktop Entry]
86+ Name=CeleMod
87+ Comment=Celeste Mod Manager
88+ Exec=cele-mod
89+ Icon=celemod
90+ Terminal=false
91+ Type=Application
92+ Categories=Game;Utility;
93+ EOF
94+
95+ # Create symlinks
96+ ln -s usr/share/applications/celemod.desktop AppDir/celemod.desktop
97+ ln -s usr/share/icons/hicolor/256x256/apps/celemod.png AppDir/celemod.png
98+ ln -s usr/bin/cele-mod AppDir/AppRun
99+ - name : Build AppImage
100+ run : |
101+ ARCH=x86_64 ./linuxdeploy-x86_64.AppImage --appdir AppDir --output appimage || true
102+ # Fallback: use appimagetool directly if linuxdeploy fails
103+ if [ ! -f CeleMod-*.AppImage ]; then
104+ ARCH=x86_64 ./appimagetool-x86_64.AppImage AppDir CeleMod-x86_64.AppImage
105+ fi
106+ mv CeleMod-*.AppImage celemod-linux.AppImage || true
107+ - name : Create zip fallback
108+ run : |
109+ mkdir -p celemod-linux
110+ cp ./target/release/cele-mod celemod-linux/cele-mod
111+ cp ./resources/libsciter.so celemod-linux/libsciter.so
112+ cp ./resources/icon.png celemod-linux/celemod.png
113+ zip -r "celemod-linux.zip" celemod-linux
64114 - uses : actions/upload-artifact@v4.3.1
65115 with :
66116 name : linux-zip
67117 path : celemod-linux.zip
68- build-osx :
118+ - uses : actions/upload-artifact@v4.3.1
119+ with :
120+ name : linux-appimage
121+ path : celemod-linux.AppImage
122+ - uses : actions/upload-artifact@v4.3.1
123+ with :
124+ name : linux-zip
125+ path : celemod-linux.zip
126+ build-macos :
69127 runs-on : macos-latest
70128 steps :
71129 - name : Install dependencies
72130 run : |
73131 brew install pango
74132 brew install gtk+3
75133 brew install protobuf
134+ brew install create-dmg
76135 - uses : actions/checkout@v3
77136 - name : Install latest nightly
78137 uses : actions-rs/toolchain@v1
@@ -82,15 +141,76 @@ jobs:
82141 components : rustfmt, clippy
83142 - name : Build Rust
84143 run : cargo build --verbose --release
85- - name : Create OSX zip
86- run : zip "celemod-osx.zip" ./target/release/cele-mod
144+ - name : Create macOS app bundle
145+ run : |
146+ mkdir -p CeleMod.app/Contents/MacOS
147+ mkdir -p CeleMod.app/Contents/Resources
148+ cp ./target/release/cele-mod CeleMod.app/Contents/MacOS/CeleMod
149+ cp ./resources/libsciter.dylib CeleMod.app/Contents/MacOS/libsciter.dylib
150+ cp ./resources/icon.icns CeleMod.app/Contents/Resources/AppIcon.icns
151+ chmod +x CeleMod.app/Contents/MacOS/CeleMod
152+
153+ # Create Info.plist with icon
154+ cat > CeleMod.app/Contents/Info.plist << 'EOF'
155+ <?xml version="1.0" encoding="UTF-8"?>
156+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
157+ <plist version="1.0">
158+ <dict>
159+ <key>CFBundleDevelopmentRegion</key>
160+ <string>en</string>
161+ <key>CFBundleExecutable</key>
162+ <string>CeleMod</string>
163+ <key>CFBundleIconFile</key>
164+ <string>AppIcon</string>
165+ <key>CFBundleIdentifier</key>
166+ <string>com.celemod.app</string>
167+ <key>CFBundleInfoDictionaryVersion</key>
168+ <string>6.0</string>
169+ <key>CFBundleName</key>
170+ <string>CeleMod</string>
171+ <key>CFBundleDisplayName</key>
172+ <string>CeleMod</string>
173+ <key>CFBundlePackageType</key>
174+ <string>APPL</string>
175+ <key>CFBundleShortVersionString</key>
176+ <string>1.0</string>
177+ <key>CFBundleVersion</key>
178+ <string>1</string>
179+ <key>LSMinimumSystemVersion</key>
180+ <string>10.13</string>
181+ <key>NSHighResolutionCapable</key>
182+ <true/>
183+ <key>NSHumanReadableCopyright</key>
184+ <string>Copyright © 2024 CeleMod. All rights reserved.</string>
185+ </dict>
186+ </plist>
187+ EOF
188+ - name : Create DMG (optional)
189+ run : |
190+ create-dmg --volname "CeleMod" --volicon "./resources/icon.icns" --window-pos 200 120 --window-size 800 400 --icon-size 100 --app-drop-link 600 185 "CeleMod.dmg" "CeleMod.app" || true
191+ # If create-dmg fails, just zip the app
192+ if [ ! -f CeleMod.dmg ]; then
193+ zip -r "celemod-macos.zip" CeleMod.app
194+ fi
195+ - name : Prepare artifact
196+ run : |
197+ if [ -f CeleMod.dmg ]; then
198+ mv CeleMod.dmg celemod-macos.dmg
199+ else
200+ # Ensure zip exists
201+ if [ ! -f celemod-macos.zip ]; then
202+ zip -r "celemod-macos.zip" CeleMod.app
203+ fi
204+ fi
87205 - uses : actions/upload-artifact@v4.3.1
88206 with :
89- name : osx-zip
90- path : celemod-osx.zip
207+ name : macos-app
208+ path : |
209+ celemod-macos.dmg
210+ celemod-macos.zip
91211 release :
92212 runs-on : ubuntu-latest
93- needs : [build-windows, build-linux, build-osx ]
213+ needs : [build-windows, build-linux, build-macos ]
94214 if : github.event_name == 'release'
95215 steps :
96216 - uses : actions/download-artifact@v4
@@ -107,7 +227,11 @@ jobs:
107227 path : .
108228 - uses : actions/download-artifact@v4
109229 with :
110- name : osx-zip
230+ name : linux-appimage
231+ path : .
232+ - uses : actions/download-artifact@v4
233+ with :
234+ name : macos-app
111235 path : .
112236 - name : Prepare release files
113237 run : mv cele-mod.exe "cele-mod-no-dependencies.exe"
@@ -117,6 +241,8 @@ jobs:
117241 cele-mod-no-dependencies.exe
118242 celemod-windows.zip
119243 celemod-linux.zip
120- celemod-osx.zip
244+ celemod-linux.AppImage
245+ celemod-macos.dmg
246+ celemod-macos.zip
121247 env :
122248 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments