Skip to content

Commit a94833d

Browse files
NmurtasDevclaude
andcommitted
Add automated release pipeline with documentation
- Create GitHub Actions workflow for multi-platform releases - Trigger on version tags (v3.0.0, v3.0.0-rc1, etc.) - Auto-detect pre-release vs stable based on tag format - Build Universal JAR, Windows EXE, Linux DEB, and Linux AppImage - Upload all artifacts to GitHub Release automatically - Generate release notes from commits - Add comprehensive RELEASE.md documentation explaining: - How the release system works - How to create releases and pre-releases - Versioning best practices - Build matrix and file outputs - Troubleshooting guide - Complete release workflow example 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 2323bd8 commit a94833d

2 files changed

Lines changed: 407 additions & 0 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 }}

0 commit comments

Comments
 (0)