Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
153 changes: 153 additions & 0 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
name: CI Build

on:
pull_request:
branches: [ main, master ]
push:
branches: [ main, master ]
paths:
- "src/**"
- "pom.xml"
- ".github/workflows/ci-build.yml"
- "run.sh"

jobs:
build-linux:
name: Build and Test - Linux (amd64)
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
cache: 'maven'

- name: Build with Maven
run: mvn -B clean package --file pom.xml

- name: Verify JAR was created
run: |
if [ ! -f target/SpriteLab.jar ]; then
echo "Error: SpriteLab.jar was not created"
exit 1
fi
echo "Build successful: SpriteLab.jar created"
ls -lh target/SpriteLab.jar

- name: Download FFmpeg for Linux
run: |
mkdir -p staging/bin
wget -O ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xf ffmpeg.tar.xz
mv ffmpeg-*-amd64-static/ffmpeg staging/bin/ffmpeg
chmod +x staging/bin/ffmpeg
rm -rf ffmpeg.tar.xz ffmpeg-*-amd64-static

- name: Verify FFmpeg
run: |
if [ ! -f staging/bin/ffmpeg ]; then
echo "Error: FFmpeg binary not found"
exit 1
fi
./staging/bin/ffmpeg -version | head -1

- name: Copy artifacts
run: |
cp target/SpriteLab.jar staging/SpriteLab-linux-amd64.jar
cp run.sh staging/ || true
cp README.md staging/ || cp Readme.md staging/ || true
cp LICENSE staging/ || true

- name: Create test package
run: |
cd staging
tar -czf SpriteLab-Linux-amd64.tar.gz *
mv SpriteLab-Linux-amd64.tar.gz ..

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: SpriteLab-Linux-amd64
path: SpriteLab-Linux-amd64.tar.gz
retention-days: 7

- name: Clean staging
run: rm -fr staging

build-macos:
name: Build and Test - macOS (arm64)
runs-on: macos-14 # macOS 14 runs on Apple Silicon (arm64)
permissions:
contents: read

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
cache: 'maven'

- name: Build with Maven
run: mvn -B clean package --file pom.xml

- name: Verify JAR was created
run: |
if [ ! -f target/SpriteLab.jar ]; then
echo "Error: SpriteLab.jar was not created"
exit 1
fi
echo "Build successful: SpriteLab.jar created"
ls -lh target/SpriteLab.jar

- name: Download FFmpeg for macOS ARM64
run: |
mkdir -p staging/bin
# Download FFmpeg static build for macOS ARM64
curl -L -o ffmpeg.zip https://evermeet.cx/ffmpeg/getrelease/ffmpeg/zip
unzip -j ffmpeg.zip -d staging/bin/
chmod +x staging/bin/ffmpeg
rm ffmpeg.zip

- name: Verify FFmpeg
run: |
if [ ! -f staging/bin/ffmpeg ]; then
echo "Error: FFmpeg binary not found"
exit 1
fi
./staging/bin/ffmpeg -version | head -1

- name: Copy artifacts
run: |
cp target/SpriteLab.jar staging/SpriteLab-macos-arm64.jar
cp run.sh staging/ || true
cp README.md staging/ || cp Readme.md staging/ || true
cp LICENSE staging/ || true

- name: Create test package
run: |
cd staging
tar -czf SpriteLab-macOS-arm64.tar.gz *
mv SpriteLab-macOS-arm64.tar.gz ..

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: SpriteLab-macOS-arm64
path: SpriteLab-macOS-arm64.tar.gz
retention-days: 7

- name: Clean staging
run: rm -fr staging
110 changes: 110 additions & 0 deletions .github/workflows/release-builds.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Release Builds

on:
release:
types: [published]

jobs:
build-linux:
name: Build Linux (amd64)
runs-on: ubuntu-latest
permissions:
contents: write # Required to upload release assets

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
native-image-job-reports: 'true'
cache: 'maven'

- name: Build with Maven
run: mvn -B clean package --file pom.xml

- name: Download FFmpeg for Linux
run: |
mkdir -p staging/bin
wget -O ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xf ffmpeg.tar.xz
mv ffmpeg-*-amd64-static/ffmpeg staging/bin/ffmpeg
chmod +x staging/bin/ffmpeg
rm -rf ffmpeg.tar.xz ffmpeg-*-amd64-static

- name: Copy artifacts
run: |
cp target/SpriteLab.jar staging/SpriteLab-linux-amd64.jar
cp run.sh staging/ || true
cp README.md staging/ || cp Readme.md staging/ || true
cp LICENSE staging/ || true

- name: Create release package
run: |
cd staging
tar -czf SpriteLab-Linux-amd64.tar.gz *
mv SpriteLab-Linux-amd64.tar.gz ..

- name: Upload release asset
uses: softprops/action-gh-release@v2
with:
files: SpriteLab-Linux-amd64.tar.gz

- name: Clean staging
run: rm -fr staging

build-macos:
name: Build macOS (arm64)
runs-on: macos-14 # macOS 14 runs on Apple Silicon (arm64)
permissions:
contents: write # Required to upload release assets

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
native-image-job-reports: 'true'
cache: 'maven'

- name: Build with Maven
run: mvn -B clean package --file pom.xml

- name: Download FFmpeg for macOS ARM64
run: |
mkdir -p staging/bin
# Download FFmpeg static build for macOS ARM64
wget -O ffmpeg.zip https://evermeet.cx/ffmpeg/getrelease/ffmpeg/zip
unzip -j ffmpeg.zip -d staging/bin/
chmod +x staging/bin/ffmpeg
rm ffmpeg.zip

- name: Copy artifacts
run: |
cp target/SpriteLab.jar staging/SpriteLab-macos-arm64.jar
cp run.sh staging/ || true
cp README.md staging/ || cp Readme.md staging/ || true
cp LICENSE staging/ || true

- name: Create release package
run: |
cd staging
tar -czf SpriteLab-macOS-arm64.tar.gz *
mv SpriteLab-macOS-arm64.tar.gz ..

- name: Upload release asset
uses: softprops/action-gh-release@v2
with:
files: SpriteLab-macOS-arm64.tar.gz

- name: Clean staging
run: rm -fr staging
28 changes: 28 additions & 0 deletions run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/bash
# Launch script for SpriteLab on Linux/macOS

# Get the directory where this script is located
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Check if Java is installed
if ! command -v java &> /dev/null; then
echo "Error: Java is not installed or not in PATH."
echo "Please install Java 21 or higher to run SpriteLab."
exit 1
fi

# Check if the JAR file exists
if [ ! -f "$SCRIPT_DIR/SpriteLab.jar" ]; then
echo "Error: SpriteLab.jar not found in $SCRIPT_DIR"
exit 1
fi

# Check if FFmpeg binary exists
if [ ! -f "$SCRIPT_DIR/bin/ffmpeg" ]; then
echo "Warning: FFmpeg binary not found in $SCRIPT_DIR/bin/"
echo "SpriteLab requires FFmpeg to function properly."
fi

# Run SpriteLab with the correct Java version
java -jar "$SCRIPT_DIR/SpriteLab.jar"