diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml new file mode 100644 index 0000000..9bfb7cf --- /dev/null +++ b/.github/workflows/ci-build.yml @@ -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 diff --git a/.github/workflows/release-builds.yml b/.github/workflows/release-builds.yml new file mode 100644 index 0000000..35860f1 --- /dev/null +++ b/.github/workflows/release-builds.yml @@ -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 diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..f7eecdf --- /dev/null +++ b/run.sh @@ -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" +