Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
09cf807
[add]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
98b2165
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
beac48b
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
8102e3a
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
cc2e6f2
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
c29fc16
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
4d12878
Add HeadlessSetup wrapper to generate libGDX project without UI
HunterTheCraft-OFICIAL Dec 18, 2025
ff8fab4
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
50d93d7
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
41043df
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
a8ae64b
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
323ed52
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
2f3c156
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 18, 2025
53a67ad
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
bd43430
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
82e4c3e
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
08bcb22
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
69a0eb7
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
aa610b5
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
2b080bf
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
2955b06
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
cd64f22
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
5e896d7
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
49291e6
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
e436397
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
d83e719
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
270e355
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
6df2ff5
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
080182d
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
9c6a0d0
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
2b499c9
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
5fae2c4
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
38d39bc
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
cc827bf
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
6c54bbb
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
4b9e12d
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
cd06668
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
b3f25f0
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
da8ad39
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
2556d72
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 19, 2025
ad95f28
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 20, 2025
cbd99b1
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 20, 2025
f5fc8c8
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 20, 2025
9dae061
[fix]: workflows - LibGDX-Setup
HunterTheCraft-OFICIAL Dec 20, 2025
96b798c
feat: launch libGDX Project Factory v1.11.0 - Headless Automation & G…
HunterTheCraft-OFICIAL Dec 20, 2025
3753d99
feat(ci): add HeadlessSetup, VariantsCatalog and GitHub Actions workflow
HunterTheCraft-OFICIAL Dec 20, 2025
2d26647
feat(ci): add HeadlessSetup, VariantsCatalog and GitHub Actions workflow
HunterTheCraft-OFICIAL Dec 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions .github/workflows/libgdx-factory.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
name: 'libGDX Project Factory'

# Este workflow permite gerar estruturas de projeto libGDX pré-configuradas
# diretamente pela interface do GitHub Actions (aba Actions).
on:
workflow_dispatch:
inputs:
project_name:
description: 'Application Name (e.g., MySuperGame)'
required: true
default: 'MyGdxGame'
package_name:
description: 'Java Package (e.g., com.mycompany.game)'
required: true
default: 'com.mygdx.game'
selected_variant:
description: 'Select a specific variant (or "all" for everything)'
type: choice
default: 'all'
options:
- all
- desktop-only
- mobile-basic
- web-starter
- physics-2d-basic
- physics-3d-pro
- ui-heavy-suite
- ecs-core-ashley
- smart-logic-ai
- full-platform-stack
- creative-sandbox
- all-all

jobs:
factory:
name: 'Build Project Variants'
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'temurin'
# Cache automático para dependências do Gradle para acelerar builds futuros
cache: 'gradle'

- name: 🔨 Compile Setup Engine
run: |
mkdir -p bin
javac -cp publish/gdx-setup.jar -d bin $(find src -name "*.java")

- name: ⚙️ Generate Projects
run: |
# Garante que o diretório de saída esteja limpo
mkdir -p dist

# Se 'all' for selecionado, iteramos por todas as 11 variantes do catálogo
if [ "${{ github.event.inputs.selected_variant }}" == "all" ]; then
variants=("desktop-only" "mobile-basic" "web-starter" "physics-2d-basic" "physics-3d-pro" "ui-heavy-suite" "ecs-core-ashley" "smart-logic-ai" "full-platform-stack" "creative-sandbox" "all-all")
for v in "${variants[@]}"; do
echo "Factory: Generating $v..."
java -cp publish/gdx-setup.jar:bin com.badlogic.gdx.setup.HeadlessSetup \
--variant $v \
--dir "dist/$v" \
--name "${{ github.event.inputs.project_name }}_$v" \
--package "${{ github.event.inputs.package_name }}"
done
else
# Gera apenas a variante específica selecionada no dropdown
v="${{ github.event.inputs.selected_variant }}"
echo "Factory: Generating single variant: $v"
java -cp publish/gdx-setup.jar:bin com.badlogic.gdx.setup.HeadlessSetup \
--variant $v \
--dir "dist/$v" \
--name "${{ github.event.inputs.project_name }}" \
--package "${{ github.event.inputs.package_name }}"
fi

- name: 📊 Generation Report
if: always()
run: |
echo "### 🛠️ Factory Generation Report" >> $GITHUB_STEP_SUMMARY
echo "**Project Name:** ${{ github.event.inputs.project_name }}" >> $GITHUB_STEP_SUMMARY
echo "**Package:** ${{ github.event.inputs.package_name }}" >> $GITHUB_STEP_SUMMARY
echo "**Strategy:** ${{ github.event.inputs.selected_variant }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Directory | Status |" >> $GITHUB_STEP_SUMMARY
echo "| :--- | :--- |" >> $GITHUB_STEP_SUMMARY
if [ -d "dist" ]; then
cd dist && for d in *; do echo "| $d | ✅ Generated |" >> $GITHUB_STEP_SUMMARY; done
else
echo "| N/A | ❌ Generation Failed |" >> $GITHUB_STEP_SUMMARY
fi

- name: 📦 Archiving Artifacts
if: success()
uses: actions/upload-artifact@v4
with:
name: ${{ github.event.inputs.project_name }}-variants
path: dist/
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Changelog
All notable changes to this project will be documented in this file.

## [1.11.1] - 2025-12-20
### Changed
- **Default Branch**: Migrated from 'master' to 'main'.
- **VariantsCatalog**: Refactored with 11 master variants (e.g., 'desktop-only', 'all-all').
- **Documentation**: Final professional polish on README.md.

## [1.11.0] - 2025-12-20
### Added
- **Headless Mode**: Introduced 'HeadlessSetup.java' for project generation via CLI.
- **GitHub Actions**: Added '.github/workflows/libgdx-factory.yml'.
- **i18n**: Full translation of core engine messages to English.

## [1.10.5] - Legacy Milestone
### Added
- **Point of Origin**: Mirror of the original libGDX setup repository (last commit from 4 years ago).
54 changes: 54 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,57 @@ To open it, just execute this command:
```
$ java -jar ./publish/gdx-setup.jar
```

---



🚀 New Features (Headless Automation & CI/CD) v1.11.0

This fork introduces headless project generation and CI/CD automation capabilities, making libGDX setup usable in pipelines such as GitHub Actions.

🔹 HeadlessSetup
- New class HeadlessSetup allows generating libGDX projects without UI.
- Integrates with VariantsCatalog for pre‑configured architectures.
- Parameters supported: --variant, --dir, --name, --package, --mainClass, --language.
- Cleans output directory before generation to avoid conflicts in CI runners.
- Prints [SUCCESS] Project generated at: <dir> upon completion.

🔹 VariantsCatalog
- Central catalog of pre‑defined variants.
- Keys: only-desktop-basic, only-android-basic, mobile-basic, desktop-box2d-freetype, desktop-ashley-ai, all-all.

🔹 GitHub Actions Workflow
- Workflow file: .github/workflows/libgdx-factory.yml.
- Manual trigger with inputs (projectname, packagename, generate_all).
- Generates all variants or just only-desktop-basic.
- Publishes report in Job Summary and uploads artifacts.

📦 Example Usage
```bash
java -cp publish/gdx-setup.jar:bin com.badlogic.gdx.setup.HeadlessSetup \
--variant only-desktop-basic --dir MyDesktopGame --name MyDesktopGame
```

---

🚀 New Features & Infrastructure (v1.11.1)

This minor update consolidates the transition to a modern CI/CD environment, internationalized code, and a refined variants catalog.

🔹 Repository Migration
- Default branch moved from master to main.
- Repository name updated to libgdx-setup.

🔹 VariantsCatalog (Refactored)
- Expanded to 11 master variants.
- New naming convention: desktop-only, mobile-basic, physics-2d-basic, smart-logic-ai, all-all.

📦 Example Usage
```bash
java -cp publish/gdx-setup.jar:bin com.badlogic.gdx.setup.HeadlessSetup \
--variant desktop-only --dir MyDesktopGame --name MyDesktopGame
```

---
For a detailed history of changes and version milestones, please see the [CHANGELOG.md](./CHANGELOG.md).
83 changes: 83 additions & 0 deletions src/com/badlogic/gdx/setup/HeadlessSetup.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.badlogic.gdx.setup;

import com.badlogic.gdx.setup.DependencyBank.ProjectDependency;
import com.badlogic.gdx.setup.DependencyBank.ProjectType;
import com.badlogic.gdx.setup.Executor.CharCallback;
import com.badlogic.gdx.setup.VariantsCatalog.Variant;
import java.io.File;
import java.util.*;

/**
* Headless entry point for libGDX project generation via CLI/CI-CD.
* Designed to work with the official gdx-setup.jar (v1.10.0 logic).
*/
public class HeadlessSetup {
public static void main(String[] args) {
try {
Map<String, String> params = parseArgs(args);
String outputDir = params.getOrDefault("dir", "MyGdxGame");

// Clean output directory to avoid conflicts in GitHub Runner environments
File out = new File(outputDir);
if (out.exists()) deleteDir(out);

DependencyBank bank = new DependencyBank();
ProjectBuilder builder = new ProjectBuilder(bank);
List<ProjectType> projects = new ArrayList<>();
List<Dependency> dependencies = new ArrayList<>();

// Selection via Catalog
String variantKey = params.get("variant");
Variant selected = VariantsCatalog.getVariant(variantKey);

// Fallback to basic desktop if variant is not found or null
if (selected == null) {
selected = VariantsCatalog.getVariant("only-desktop-basic");
}

projects.addAll(selected.platforms);
for (ProjectDependency pd : selected.extensions) {
dependencies.add(bank.getDependency(pd));
}

builder.buildProject(projects, dependencies);
builder.build(Language.JAVA);

// Core generation call using legacy gdx-setup API
new GdxSetup().build(builder, outputDir,
params.getOrDefault("name", "MyGdxGame"),
"com.mygdx.game", "MainClass", Language.JAVA,
System.getenv("ANDROID_HOME"), new CharCallback() {
@Override public void character(char c) { System.out.print(c); }
}, null);

System.out.println("\n[SUCCESS] Project generated at: " + outputDir);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}

/**
* Recursively deletes a directory.
*/
private static void deleteDir(File dir) {
File[] files = dir.listFiles();
if (files != null) for (File f : files) deleteDir(f);
dir.delete();
}

/**
* Parses CLI arguments in --key value format.
*/
private static Map<String, String> parseArgs(String[] args) {
Map<String, String> params = new HashMap<>();
for (int i = 0; i < args.length; i++) {
if (args[i].startsWith("--") && i + 1 < args.length) {
params.put(args[i].replace("--", ""), args[i+1]);
i++;
}
}
return params;
}
}
116 changes: 116 additions & 0 deletions src/com/badlogic/gdx/setup/VariantsCatalog.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package com.badlogic.gdx.setup;

import com.badlogic.gdx.setup.DependencyBank.ProjectDependency;
import com.badlogic.gdx.setup.DependencyBank.ProjectType;
import java.util.*;

/**
* Catalog of pre-defined project variants for libGDX.
* Maps unique keys to specific combinations of platforms and extensions.
* Updated for v1.11.x - Internationalized and complete.
*/
public class VariantsCatalog {

public static class Variant {
public String name;
public List<ProjectType> platforms;
public List<ProjectDependency> extensions;

public Variant(String name, List<ProjectType> platforms, List<ProjectDependency> extensions) {
this.name = name;
this.platforms = platforms;
this.extensions = extensions;
}
}

private static final Map<String, Variant> catalog = new HashMap<>();

static {
// --- 1. Desktop Only ---
catalog.put("desktop-only", new Variant(
"Desktop Only (Basic)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP),
Arrays.asList(ProjectDependency.GDX)
));

// --- 2. Mobile Basic ---
catalog.put("mobile-basic", new Variant(
"Mobile Starter (Android + iOS)",
Arrays.asList(ProjectType.CORE, ProjectType.ANDROID, ProjectType.IOS),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.FREETYPE)
));

// --- 3. Web Starter ---
catalog.put("web-starter", new Variant(
"Web Starter (HTML)",
Arrays.asList(ProjectType.CORE, ProjectType.HTML),
Arrays.asList(ProjectDependency.GDX)
));

// --- 4. Physics 2D Basic ---
catalog.put("physics-2d-basic", new Variant(
"Physics 2D Pack (Box2D)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP, ProjectType.ANDROID),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.BOX2D, ProjectDependency.BOX2DLIGHTS)
));

// --- 5. Physics 3D Pro ---
catalog.put("physics-3d-pro", new Variant(
"Physics 3D Pro (Bullet)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP, ProjectType.ANDROID),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.BULLET)
));

// --- 6. UI Heavy Suite ---
catalog.put("ui-heavy-suite", new Variant(
"UI Heavy Suite (Tools + Controllers)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP, ProjectType.ANDROID),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.FREETYPE, ProjectDependency.TOOLS, ProjectDependency.CONTROLLERS)
));

// --- 7. ECS Core Ashley ---
catalog.put("ecs-core-ashley", new Variant(
"ECS Core (Ashley)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.ASHLEY)
));

// --- 8. Smart Logic AI ---
catalog.put("smart-logic-ai", new Variant(
"Smart Logic (Ashley + AI)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.ASHLEY, ProjectDependency.AI)
));

// --- 9. Full Platform Stack ---
catalog.put("full-platform-stack", new Variant(
"Full Platform Stack (All OS)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP, ProjectType.ANDROID, ProjectType.IOS, ProjectType.HTML),
Arrays.asList(ProjectDependency.GDX)
));

// --- 10. Creative Sandbox ---
catalog.put("creative-sandbox", new Variant(
"Creative Sandbox (Mixed Essentials)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP, ProjectType.ANDROID),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.FREETYPE, ProjectDependency.BOX2D, ProjectDependency.ASHLEY)
));

// --- 11. All-in-One Ultimate ---
catalog.put("all-all", new Variant(
"Ultimate Full Stack (Everything)",
Arrays.asList(ProjectType.CORE, ProjectType.DESKTOP, ProjectType.ANDROID, ProjectType.IOS, ProjectType.HTML),
Arrays.asList(ProjectDependency.GDX, ProjectDependency.BULLET, ProjectDependency.FREETYPE,
ProjectDependency.TOOLS, ProjectDependency.CONTROLLERS, ProjectDependency.BOX2D,
ProjectDependency.BOX2DLIGHTS, ProjectDependency.AI, ProjectDependency.ASHLEY)
));
}

public static Variant getVariant(String key) {
return catalog.get(key);
}

public static Set<String> getVariantNames() {
return catalog.keySet();
}
}