Skip to content

Optimize LightList copies #28

Optimize LightList copies

Optimize LightList copies #28

Workflow file for this run

######################################################################################
# JME CI/CD
######################################################################################
# Quick overview of what is going on in this script:
# - Build the engine, create the zip release, maven artifacts and javadoc
# - (only when building a release) Deploy everything else to github releases and Sonatype
# - (only when building a release) Update javadoc.jmonkeyengine.org
# Note:
# All the actions/upload-artifact and actions/download-artifact steps are used to pass
# stuff between jobs, github actions has some sort of storage that is local to the
# running workflow, we use it to store the result of each job since the filesystem
# is not maintained between jobs.
################# CONFIGURATIONS #####################################################
# >> Configure SONATYPE RELEASE
# CENTRAL_PASSWORD=XXXXXX
# CENTRAL_USERNAME=XXXXXX
# >> Configure SIGNING
# SIGNING_KEY=XXXXXX
# SIGNING_PASSWORD=XXXXXX
# >> Configure PACKAGE REGISTRY RELEASE
# Nothing to do here, everything is autoconfigured to work with the account/org that
# is running the build.
# >> Configure JAVADOC
# JAVADOC_GHPAGES_REPO="riccardoblsandbox/javadoc.jmonkeyengine.org.git"
# Generate a deploy key
# ssh-keygen -t rsa -b 4096 -C "actions@users.noreply.github.com" -f javadoc_deploy
# Set
# JAVADOC_GHPAGES_DEPLOY_PRIVKEY="......."
# In github repo -> Settings, use javadoc_deploy.pub as Deploy key with write access
######################################################################################
# Resources:
# - Github actions docs: https://help.github.com/en/articles/about-github-actions
# - Package registry docs: https://help.github.com/en/articles/about-github-package-registry
# - Official actions: https://github.com/actions
# - Community actions: https://github.com/sdras/awesome-actions
######################################################################################
# - Riccardo Balbo
######################################################################################
name: Build jMonkeyEngine
on:
push:
branches:
- master
- v3.7
- v3.6
- v3.5
- v3.4
- v3.3
- ios-2024_2
pull_request:
release:
types: [published]
jobs:
Checkstyle:
name: Run Checkstyle
runs-on: ubuntu-latest
continue-on-error: true
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- name: Setup the java environment
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '25'
- name: Validate the Gradle wrapper
uses: gradle/actions/wrapper-validation@v6.1.0
- name: Run Checkstyle
run: |
./gradlew checkstyleMain checkstyleTest --console=plain --stacktrace
- name: Upload Checkstyle Reports
uses: actions/upload-artifact@v7.0.1
if: always()
with:
name: checkstyle-report
retention-days: 30
path: |
**/build/reports/checkstyle/**
SpotBugs:
name: Run SpotBugs
runs-on: ubuntu-latest
continue-on-error: true
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- name: Setup the java environment
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '25'
- name: Validate the Gradle wrapper
uses: gradle/actions/wrapper-validation@v6.1.0
- name: Run SpotBugs
run: |
./gradlew -PenableSpotBugs=true spotbugsMain spotbugsTest --console=plain --stacktrace
- name: Upload SpotBugs Reports
uses: actions/upload-artifact@v7.0.1
if: always()
with:
name: spotbugs-report
retention-days: 30
path: |
**/build/reports/spotbugs/**
ScreenshotTests:
name: Run Screenshot Tests
runs-on: ubuntu-latest
container:
image: ghcr.io/onemillionworlds/opengl-docker-image:v1
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- name: Setup the java environment
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '25'
- name: Start xvfb
run: |
Xvfb :99 -ac -screen 0 1024x768x16 &
export DISPLAY=:99
echo "DISPLAY=:99" >> $GITHUB_ENV
- name: Report GL/Vulkan
run: |
set -x
echo "DISPLAY=$DISPLAY"
glxinfo | grep -E "OpenGL version|OpenGL renderer|OpenGL vendor" || true
vulkaninfo --summary || true
echo "VK_ICD_FILENAMES=$VK_ICD_FILENAMES"
echo "MESA_LOADER_DRIVER_OVERRIDE=$MESA_LOADER_DRIVER_OVERRIDE"
echo "GALLIUM_DRIVER=$GALLIUM_DRIVER"
- name: Validate the Gradle wrapper
uses: gradle/actions/wrapper-validation@v6.1.0
- name: Test with Gradle Wrapper
run: |
./gradlew :jme3-screenshot-test:screenshotTest
- name: Upload Test Reports
uses: actions/upload-artifact@v7.0.1
if: always()
with:
name: screenshot-test-report
retention-days: 30
path: |
**/build/reports/**
**/build/changed-images/**
**/build/test-results/**
# Build the engine, we only deploy from ubuntu-latest jdk25
BuildJMonkey:
name: Build on ${{ matrix.osName }} jdk${{ matrix.jdk }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
jdk: [25]
include:
- os: ubuntu-latest
osName: linux
deploy: true
- os: windows-latest
osName: windows
deploy: false
- os: macOS-latest
osName: mac
deploy: false
steps:
- name: Clone the repo
uses: actions/checkout@v6
with:
fetch-depth: 1
- name: Setup the java environment
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{ matrix.jdk }}
- name: Validate the Gradle wrapper
uses: gradle/actions/wrapper-validation@v6.1.0
- name: Build Engine
shell: bash
run: |
# Normal build plus ZIP distribution and merged javadoc
./gradlew -PuseCommitHashAsVersionName=true \
-x checkstyleMain -x checkstyleTest \
build createZipDistribution mergedJavadoc
if [ "${{ matrix.deploy }}" = "true" ];
then
# We are going to need "zip"
sudo apt-get update
sudo apt-get install -y zip
# We prepare the release for deploy
mkdir -p ./dist/release/
mv build/distributions/*.zip dist/release/
# Install maven artifacts to ./dist/maven and sign them if possible
if [ "${{ secrets.SIGNING_PASSWORD }}" = "" ];
then
echo "Configure the following secrets to enable signing:"
echo "SIGNING_KEY, SIGNING_PASSWORD"
./gradlew publishMavenPublicationToDistRepository \
-PuseCommitHashAsVersionName=true \
--console=plain --stacktrace
else
./gradlew publishMavenPublicationToDistRepository \
-PsigningKey='${{ secrets.SIGNING_KEY }}' \
-PsigningPassword='${{ secrets.SIGNING_PASSWORD }}' \
-PuseCommitHashAsVersionName=true \
--console=plain --stacktrace
fi
fi
# Upload maven artifacts to be used later by the deploy job
- name: Upload maven artifacts
if: matrix.deploy==true
uses: actions/upload-artifact@v7.0.1
with:
name: maven
path: dist/maven
- name: Upload javadoc
if: matrix.deploy==true
uses: actions/upload-artifact@v7.0.1
with:
name: javadoc
path: dist/javadoc
# Upload release archive to be used later by the deploy job
- name: Upload release
if: github.event_name == 'release' && matrix.deploy==true
uses: actions/upload-artifact@v7.0.1
with:
name: release
path: dist/release
# This job deploys snapshots on the master branch
DeployJavaSnapshot:
needs: [BuildJMonkey]
name: Deploy Java Snapshot
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref_name == 'master'
permissions:
contents: read
steps:
# We need to clone everything again for uploadToMaven.sh ...
- name: Clone the repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 1
# Setup jdk 25 used for building Maven-style artifacts
- name: Setup the java environment
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
distribution: 'temurin'
java-version: '25'
- name: Rebuild the maven artifacts and upload them to Sonatype's maven-snapshots repo
run: |
if [ "${{ secrets.CENTRAL_PASSWORD }}" = "" ];
then
echo "Configure the following secrets to enable uploading to Sonatype:"
echo "CENTRAL_PASSWORD, CENTRAL_USERNAME, SIGNING_KEY, SIGNING_PASSWORD"
else
./gradlew publishMavenPublicationToSNAPSHOTRepository \
-PcentralPassword=${{ secrets.CENTRAL_PASSWORD }} \
-PcentralUsername=${{ secrets.CENTRAL_USERNAME }} \
-PsigningKey='${{ secrets.SIGNING_KEY }}' \
-PsigningPassword='${{ secrets.SIGNING_PASSWORD }}' \
--console=plain --stacktrace
fi
# This job deploys the release
DeployRelease:
needs: [BuildJMonkey]
name: Deploy Release
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
# We need to clone everything again for uploadToCentral.sh ...
- name: Clone the repo
uses: actions/checkout@v6
with:
fetch-depth: 1
# Setup jdk 25 used for building Sonatype artifacts
- name: Setup the java environment
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '25'
# Download all the stuff...
- name: Download maven artifacts
uses: actions/download-artifact@v8.0.1
with:
name: maven
path: dist/maven
- name: Download release
uses: actions/download-artifact@v8.0.1
with:
name: release
path: dist/release
- name: Rebuild the maven artifacts and upload them to Sonatype's Central Publisher Portal
run: |
if [ "${{ secrets.CENTRAL_PASSWORD }}" = "" ];
then
echo "Configure the following secrets to enable uploading to Sonatype:"
echo "CENTRAL_PASSWORD, CENTRAL_USERNAME, SIGNING_KEY, SIGNING_PASSWORD"
else
./gradlew publishMavenPublicationToCentralRepository \
-PcentralPassword=${{ secrets.CENTRAL_PASSWORD }} \
-PcentralUsername=${{ secrets.CENTRAL_USERNAME }} \
-PsigningKey='${{ secrets.SIGNING_KEY }}' \
-PsigningPassword='${{ secrets.SIGNING_PASSWORD }}' \
-PuseCommitHashAsVersionName=true \
--console=plain --stacktrace
.github/actions/tools/uploadToCentral.sh \
-p '${{ secrets.CENTRAL_PASSWORD }}' \
-u '${{ secrets.CENTRAL_USERNAME }}'
fi
- name: Deploy to GitHub Releases
run: |
# We need to get the release id (yeah, it's not the same as the tag)
echo "${GITHUB_EVENT_PATH}"
cat ${GITHUB_EVENT_PATH}
releaseId=$(jq --raw-output '.release.id' ${GITHUB_EVENT_PATH})
# Now that we have the id, we just upload the release zip from before
echo "Upload to release $releaseId"
filename="$(ls dist/release/*.zip)"
url="https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/$releaseId/assets?name=$(basename $filename)"
echo "Upload to $url"
curl -L \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/zip" \
--data-binary @"$filename" \
"$url"
- name: Deploy to github package registry
run: |
source .github/actions/tools/uploadToMaven.sh
registry="https://maven.pkg.github.com/$GITHUB_REPOSITORY"
echo "Deploy to github package registry $registry"
uploadAllToMaven dist/maven/ $registry "token" ${{ secrets.GITHUB_TOKEN }}
# Deploy the javadoc
DeployJavaDoc:
needs: [BuildJMonkey]
name: Deploy Javadoc
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
# We are going to need a deploy key for this, since we need
# to push to a different repo
- name: Set ssh key
run: |
mkdir -p ~/.ssh/
echo "${{ secrets.JAVADOC_GHPAGES_DEPLOY_PRIVKEY }}" > $HOME/.ssh/deploy.key
chmod 600 $HOME/.ssh/deploy.key
# We clone the javadoc repo
- name: Clone gh-pages
run: |
branch="gh-pages"
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $HOME/.ssh/deploy.key"
git clone --single-branch --branch "$branch" git@github.com:${{ secrets.JAVADOC_GHPAGES_REPO }} .
# Download the javadoc in the new directory "newdoc"
- name: Download javadoc
uses: actions/download-artifact@v8.0.1
with:
name: javadoc
path: newdoc
# The actual deploy
- name: Deploy to github pages
run: |
set -f
IFS=$'\n'
# Get the tag for this release
version="`if [[ $GITHUB_REF == refs\/tags* ]]; then echo ${GITHUB_REF//refs\/tags\//}; fi`"
# If there is no tag, then we do nothing.
if [ "$version" != "" ];
then
echo "Deploy as $version"
# Remove any older version of the javadoc for this tag
if [ -d "$version" ];then rm -Rf "$version"; fi
# Rename newdoc with the version name
mv newdoc "$version"
# if there isn't an index.txt we create one (we need this to list the versions)
if [ ! -f "index.txt" ]; then echo "" > index.txt ; fi
index="`cat index.txt`"
# Check if this version is already in index.txt
addNew=true
for v in $index;
do
if [ "$v" = "$version" ];
then
echo "$v" "$version"
addNew=false
break
fi
done
# If not, we add it to the beginning
if [ "$addNew" = "true" ];
then
echo -e "$version\n$index" > index.txt
index="`cat index.txt`"
fi
# Regenerate the pages
chmod +x make.sh
./make.sh
# Configure git to use the deploy key
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $HOME/.ssh/deploy.key"
# Commit the changes
git config --global user.name "Github Actions"
git config --global user.email "actions@users.noreply.github.com"
git add . || true
git commit -m "$version" || true
branch="gh-pages"
git push origin "$branch" --force || true
fi