name: Build and Package JRuby Rails App on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Java and JRuby run: | apt-get update && apt-get install -y wget curl libgmp-dev # Install Java (needed for JRuby and jpackage) apt-get install -y openjdk-17-jdk # Download and install JRuby directly JRUBY_VERSION="9.4.6.0" curl -O https://repo1.maven.org/maven2/org/jruby/jruby-dist/${JRUBY_VERSION}/jruby-dist-${JRUBY_VERSION}-bin.tar.gz tar -xzf jruby-dist-${JRUBY_VERSION}-bin.tar.gz -C /opt/ ln -s /opt/jruby-${JRUBY_VERSION}/bin/jruby /usr/local/bin/jruby ln -s /opt/jruby-${JRUBY_VERSION}/bin/bundle /usr/local/bin/bundle - name: Install Dependencies run: | bundle install - name: Build JAR with Jarbler run: | gem install jarbler jarble - name: Generate Unique App Name with Git Hash id: vars run: | SHORT_HASH=$(git rev-parse --short HEAD) echo "app_name=custom-app-${SHORT_HASH}" >> $GITHUB_OUTPUT - name: Package with jpackage run: | # Find the generated jar file name dynamically JAR_FILE=$(ls build/*.jar | head -n 1) # Run jpackage to bundle the application and runtime into an app-image directory jpackage \ --type app-image \ --name "${{ steps.vars.outputs.app_name }}" \ --input "$(dirname "$JAR_FILE")" \ --main-jar "$(basename "$JAR_FILE")" \ --dest dist - name: Compress Executable Package run: | cd dist tar -czvf "${{ steps.vars.outputs.app_name }}.tar.gz" "${{ steps.vars.outputs.app_name }}" - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: ${{ steps.vars.outputs.app_name }} path: dist/*.tar.gz