Skip to content

Commit f4f1777

Browse files
authored
Merge pull request #5 from NmurtasDev/feature/macos-linux-packaging
Add macOS and Linux native packaging support
2 parents 335ca67 + a94833d commit f4f1777

5 files changed

Lines changed: 1298 additions & 61 deletions

File tree

.github/workflows/release.yml

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
name: Release Build
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*' # Trigger on version tags (v3.0.0, v3.0.0-rc1, etc.)
7+
8+
permissions:
9+
contents: write # Required to create releases
10+
11+
jobs:
12+
build-and-release:
13+
name: Build Multi-Platform Release
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v4
19+
20+
- name: Set up JDK 21
21+
uses: actions/setup-java@v4
22+
with:
23+
java-version: '21'
24+
distribution: 'temurin'
25+
26+
# Extract version from tag (v3.0.0 -> 3.0.0)
27+
- name: Extract version
28+
id: version
29+
run: |
30+
VERSION=${GITHUB_REF#refs/tags/v}
31+
echo "version=$VERSION" >> $GITHUB_OUTPUT
32+
echo "Building version: $VERSION"
33+
34+
# Determine if this is a pre-release (contains -, like v3.0.0-rc1)
35+
- name: Check if pre-release
36+
id: prerelease
37+
run: |
38+
if [[ "${{ steps.version.outputs.version }}" == *"-"* ]]; then
39+
echo "is_prerelease=true" >> $GITHUB_OUTPUT
40+
echo "This is a pre-release"
41+
else
42+
echo "is_prerelease=false" >> $GITHUB_OUTPUT
43+
echo "This is a stable release"
44+
fi
45+
46+
# Build 1: Universal JAR (works on all platforms)
47+
- name: Build Universal JAR
48+
run: mvn clean package -q
49+
50+
# Build 2: Windows EXE (requires Java on target system)
51+
- name: Build Windows EXE
52+
run: mvn clean package -Pwindows -q
53+
54+
# Build 3: Linux DEB package (includes JRE)
55+
- name: Build Linux DEB
56+
run: mvn clean package -Plinux-deb -q
57+
58+
# Build 4: Linux App Image (includes JRE)
59+
- name: Build Linux AppImage
60+
run: mvn clean package -Plinux -q
61+
62+
# Note: macOS .app bundle requires macOS runner
63+
# Skipping macOS build for now (can be added with macos-latest runner)
64+
65+
# Prepare release artifacts
66+
- name: Prepare artifacts
67+
run: |
68+
mkdir -p release-artifacts
69+
70+
# Copy JAR
71+
cp target/android-emulator-manager-${{ steps.version.outputs.version }}-jar-with-dependencies.jar \
72+
release-artifacts/android-emulator-manager-${{ steps.version.outputs.version }}.jar
73+
74+
# Copy Windows EXE
75+
cp target/android-emulator-manager-${{ steps.version.outputs.version }}.exe \
76+
release-artifacts/android-emulator-manager-${{ steps.version.outputs.version }}.exe
77+
78+
# Copy Linux DEB
79+
cp target/android-emulator-manager_${{ steps.version.outputs.version }}_amd64.deb \
80+
release-artifacts/android-emulator-manager_${{ steps.version.outputs.version }}_amd64.deb
81+
82+
# Package Linux AppImage as tar.gz
83+
cd target
84+
tar -czf ../release-artifacts/android-emulator-manager-${{ steps.version.outputs.version }}-linux.tar.gz \
85+
AndroidEmulatorManager/
86+
cd ..
87+
88+
# List all artifacts
89+
ls -lh release-artifacts/
90+
91+
# Create GitHub Release
92+
- name: Create Release
93+
uses: softprops/action-gh-release@v1
94+
with:
95+
name: Release ${{ steps.version.outputs.version }}
96+
prerelease: ${{ steps.prerelease.outputs.is_prerelease }}
97+
draft: false
98+
generate_release_notes: true
99+
files: |
100+
release-artifacts/*.jar
101+
release-artifacts/*.exe
102+
release-artifacts/*.deb
103+
release-artifacts/*.tar.gz
104+
body: |
105+
## Android Emulator Manager ${{ steps.version.outputs.version }}
106+
107+
### 📦 Downloads
108+
109+
| Platform | File | Requires Java |
110+
|----------|------|---------------|
111+
| **Universal** | `android-emulator-manager-${{ steps.version.outputs.version }}.jar` | ✅ Java 21+ |
112+
| **Windows** | `android-emulator-manager-${{ steps.version.outputs.version }}.exe` | ✅ Java 21+ |
113+
| **Linux DEB** | `android-emulator-manager_${{ steps.version.outputs.version }}_amd64.deb` | ❌ Includes JRE |
114+
| **Linux AppImage** | `android-emulator-manager-${{ steps.version.outputs.version }}-linux.tar.gz` | ❌ Includes JRE |
115+
116+
### 🚀 Quick Start
117+
118+
**Universal JAR:**
119+
```bash
120+
java -jar android-emulator-manager-${{ steps.version.outputs.version }}.jar
121+
```
122+
123+
**Windows:**
124+
```bash
125+
android-emulator-manager-${{ steps.version.outputs.version }}.exe
126+
```
127+
128+
**Linux DEB:**
129+
```bash
130+
sudo dpkg -i android-emulator-manager_${{ steps.version.outputs.version }}_amd64.deb
131+
android-emulator-manager
132+
```
133+
134+
**Linux AppImage:**
135+
```bash
136+
tar -xzf android-emulator-manager-${{ steps.version.outputs.version }}-linux.tar.gz
137+
cd AndroidEmulatorManager/bin
138+
./AndroidEmulatorManager
139+
```
140+
141+
### 📋 Requirements
142+
- Java 21 or higher (for JAR and Windows EXE)
143+
- Internet connection for SDK download
144+
145+
---
146+
147+
🤖 **Auto-generated release** via GitHub Actions
148+
env:
149+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,44 @@ jlink --output jre --add-modules java.base,java.desktop --strip-debug --compress
5858
mvn clean package -Pwindows-standalone
5959
```
6060

61+
### Build macOS App Bundle
62+
63+
```bash
64+
git clone https://github.com/NmurtasDev/AndroidEmulatorManager.git
65+
cd AndroidEmulatorManager
66+
mvn clean package -Pmacos
67+
# Output: target/AndroidEmulatorManager.app/
68+
```
69+
70+
### Build Linux App Bundle
71+
72+
```bash
73+
git clone https://github.com/NmurtasDev/AndroidEmulatorManager.git
74+
cd AndroidEmulatorManager
75+
mvn clean package -Plinux
76+
# Output: target/AndroidEmulatorManager/ (executable: bin/AndroidEmulatorManager)
77+
```
78+
79+
### Build Linux DEB Package
80+
81+
```bash
82+
git clone https://github.com/NmurtasDev/AndroidEmulatorManager.git
83+
cd AndroidEmulatorManager
84+
mvn clean package -Plinux-deb
85+
# Output: target/android-emulator-manager_3.0.0_amd64.deb
86+
```
87+
88+
## Platform-Specific Distributions
89+
90+
| Platform | Profile | Output | Includes JRE |
91+
|----------|---------|--------|--------------|
92+
| **Windows** | `windows` | `.exe` (requires Java) ||
93+
| **Windows** | `windows-standalone` | `.exe` (standalone) ||
94+
| **macOS** | `macos` | `.app` bundle ||
95+
| **Linux** | `linux` | app-image ||
96+
| **Linux** | `linux-deb` | `.deb` package ||
97+
| **All** | default | `.jar` (universal) ||
98+
6199
## Usage
62100

63101
1. **Launch the application**

0 commit comments

Comments
 (0)