diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8782a24e6..4bb171408 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,5 @@ ###################################################################################### -# JME CI/CD +# JME CI/CD ###################################################################################### # Quick overview of what is going on in this script: # - Build natives for android @@ -10,7 +10,7 @@ # - (only when building a release) Deploy everything else to github releases, github packet registry and bintray # - (only when building a release) Update javadoc.jmonkeyengine.org # Note: -# All the actions/upload-artifact and actions/download-artifact steps are used to pass +# 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. @@ -23,7 +23,7 @@ # BINTRAY_APIKEY=XXXXXX # BINTRAY_LICENSE="BSD 3-Clause" # >> Configure PACKAGE REGISTRY RELEASE -# Nothing to do here, everything is autoconfigured to work with the account/org that +# 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" @@ -31,7 +31,7 @@ # 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 +# 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 @@ -54,35 +54,36 @@ on: pull_request: release: types: [published] - + jobs: - + # Builds the natives on linux arm BuildLinuxArmNatives: name: Build natives for linux (arm) runs-on: ubuntu-18.04 container: image: riccardoblb/buildenv-jme3:linuxArm - + steps: - name: Clone the repo - uses: actions/checkout@v1 + uses: actions/checkout@v1 with: fetch-depth: 1 - - - name: Build + - name: Validate the Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: Build run: | # Build # Note: since this is crossbuild we use the buildForPlatforms filter to tell # the buildscript wich platforms it should build for. gradle -PuseCommitHashAsVersionName=true --no-daemon -PbuildForPlatforms=LinuxArm,LinuxArmHF,LinuxArm64 -PbuildNativeProjects=true \ - :jme3-bullet-native:assemble + :jme3-bullet-native:assemble - name: Upload natives uses: actions/upload-artifact@master with: name: linuxarm-natives - path: build/native + path: build/native # Build the natives on android BuildAndroidNatives: @@ -90,19 +91,20 @@ jobs: runs-on: ubuntu-18.04 container: image: riccardoblb/buildenv-jme3:android - + steps: - name: Clone the repo - uses: actions/checkout@v1 + uses: actions/checkout@v1 with: fetch-depth: 1 - - - name: Build - run: | - gradle -PuseCommitHashAsVersionName=true --no-daemon -PbuildNativeProjects=true \ + - name: Validate the Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: Build + run: | + ./gradlew -PuseCommitHashAsVersionName=true --no-daemon -PbuildNativeProjects=true \ :jme3-android-native:assemble \ - :jme3-bullet-native-android:assemble - + :jme3-bullet-native-android:assemble + - name: Upload natives uses: actions/upload-artifact@master with: @@ -114,7 +116,7 @@ jobs: strategy: fail-fast: true matrix: - os: [ubuntu-18.04,windows-2019,macOS-latest] + os: [ubuntu-18.04,windows-2019,macOS-latest] jdk: [8.x.x] include: - os: ubuntu-18.04 @@ -123,22 +125,23 @@ jobs: osName: windows - os: macOS-latest osName: mac - + name: Build natives for ${{ matrix.osName }} - runs-on: ${{ matrix.os }} - steps: - + runs-on: ${{ matrix.os }} + steps: + - name: Clone the repo - uses: actions/checkout@v1 + uses: actions/checkout@v1 with: fetch-depth: 1 - + - name: Prepare java environment uses: actions/setup-java@v1 with: java-version: ${{ matrix.jdk }} - architecture: x64 - + architecture: x64 + - name: Validate the Gradle wrapper + uses: gradle/wrapper-validation-action@v1 - name: Build Natives shell: bash env: @@ -147,8 +150,8 @@ jobs: # Install dependencies if [ "$OS_NAME" = "mac" ]; then - echo "Prepare mac" - + echo "Prepare mac" + elif [ "$OS_NAME" = "linux" ]; then echo "Prepare linux" @@ -157,25 +160,25 @@ jobs: else echo "Prepare windows" fi - + # Build gradle -PuseCommitHashAsVersionName=true --no-daemon -PbuildNativeProjects=true -Dmaven.repo.local="$PWD/dist/maven" \ build \ :jme3-bullet-native:build - + # Upload natives to be used later by the BuildJMonkey job - name: Upload natives uses: actions/upload-artifact@master with: name: ${{ matrix.osName }}-natives path: build/native - + # Build the engine, we only deploy from ubuntu-18.04 jdk8 - BuildJMonkey: + BuildJMonkey: needs: [BuildNatives,BuildAndroidNatives] name: Build on ${{ matrix.osName }} jdk${{ matrix.jdk }} - runs-on: ${{ matrix.os }} + runs-on: ${{ matrix.os }} strategy: fail-fast: true matrix: @@ -188,21 +191,21 @@ jobs: - os: windows-2019 osName: windows - os: macOS-latest - osName: mac + osName: mac - jdk: 11.x.x - deploy: false + deploy: false - steps: + steps: - name: Clone the repo uses: actions/checkout@v1 with: fetch-depth: 1 - + - name: Setup the java environment uses: actions/setup-java@v1 with: java-version: ${{ matrix.jdk }} - architecture: x64 + architecture: x64 - name: Download natives for linux uses: actions/download-artifact@master @@ -215,7 +218,7 @@ jobs: with: name: windows-natives path: build/native - + - name: Download natives for mac uses: actions/download-artifact@master with: @@ -233,26 +236,27 @@ jobs: with: name: linuxarm-natives path: build/native - + - name: Validate the Gradle wrapper + uses: gradle/wrapper-validation-action@v1 - name: Build Engine shell: bash run: | # Build gradle -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true build - + if [ "${{ matrix.deploy }}" = "true" ]; - then + then # We are going to need "zip" sudo apt-get update sudo apt-get install -y zip # Create the zip release and the javadoc gradle -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true mergedJavadoc createZipDistribution - + # We prepare the release for deploy mkdir -p ./dist/release/ mv build/distributions/*.zip dist/release/ - + # Create the maven artifacts mkdir -p ./dist/maven/ gradle -PuseCommitHashAsVersionName=true -PskipPrebuildLibraries=true install -Dmaven.repo.local="$PWD/dist/maven" @@ -261,10 +265,10 @@ jobs: echo "Create native zip" cdir="$PWD" cd "build/native" - zip -r "$cdir/dist/jme3-natives.zip" * + zip -r "$cdir/dist/jme3-natives.zip" * cd "$cdir" echo "Done" - fi + fi # Used later by DeploySnapshot - name: Upload merged natives @@ -273,29 +277,29 @@ jobs: with: name: natives path: dist/jme3-natives.zip - + # Upload maven artifacts to be used later by the deploy job - name: Upload maven artifacts if: matrix.deploy==true uses: actions/upload-artifact@master with: name: maven - path: dist/maven + path: dist/maven - name: Upload javadoc if: matrix.deploy==true uses: actions/upload-artifact@master with: name: javadoc - path: dist/javadoc - - # Upload release archive to be used later by the deploy job + 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@master with: name: release - path: dist/release + path: dist/release # This job deploys the native snapshot. # The snapshot is downloaded when people build the engine without setting buildNativeProject @@ -316,7 +320,7 @@ jobs: then git clone --single-branch --branch "$branch" https://github.com/${GITHUB_REPOSITORY}.git . fi - + - name: Download merged natives uses: actions/download-artifact@master with: @@ -334,7 +338,7 @@ jobs: then nativeSnapshot=`cat "natives-snapshot.properties"` nativeSnapshot="${nativeSnapshot#*=}" - + # We deploy ONLY if GITHUB_SHA (the current commit hash) is newer than $nativeSnapshot if [ "`git rev-list --count $nativeSnapshot..$GITHUB_SHA`" = "0" ]; then @@ -355,9 +359,9 @@ jobs: echo "No changes, skip." else if [ "${{ secrets.BINTRAY_GENERIC_REPO }}" = "" ]; - then + then echo "Configure the following secrets to enable native snapshot deployment" - echo "BINTRAY_GENERIC_REPO, BINTRAY_USER, BINTRAY_APIKEY" + echo "BINTRAY_GENERIC_REPO, BINTRAY_USER, BINTRAY_APIKEY" else # Deploy snapshot bintray_uploadFile dist/jme3-natives.zip \ @@ -368,17 +372,17 @@ jobs: "https://github.com/${GITHUB_REPOSITORY}" \ "${{ secrets.BINTRAY_LICENSE }}" "true" - # We reference the snapshot by writing its commit hash in natives-snapshot.properties + # We reference the snapshot by writing its commit hash in natives-snapshot.properties echo "natives.snapshot=$GITHUB_SHA" > natives-snapshot.properties - + # We commit the updated natives-snapshot.properties git config --global user.name "Github Actions" git config --global user.email "actions@users.noreply.github.com" - + git add natives-snapshot.properties - + git commit -m "[skip ci] update natives snapshot" - + # Pull rebase from the remote repo, just in case there was a push in the meantime git pull -q --rebase @@ -387,39 +391,39 @@ jobs: # Push (git -c http.extraheader="AUTHORIZATION: basic $header" push origin "$branch" || true) - + fi fi fi # This job deploys the release - DeployRelease: + DeployRelease: needs: [BuildJMonkey] name: Deploy Release runs-on: ubuntu-18.04 if: github.event_name == 'release' - steps: - + steps: + # We need to clone everything again for uploadToMaven.sh ... - name: Clone the repo uses: actions/checkout@v1 with: fetch-depth: 1 - + # Download all the stuff... - name: Download maven artifacts uses: actions/download-artifact@master with: name: maven path: dist/maven - + - name: Download release uses: actions/download-artifact@master with: name: release - path: dist/release - - - name: Deploy to github releases + path: dist/release + + - 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}" @@ -436,7 +440,7 @@ jobs: -H "Content-Type: application/zip" \ --data-binary @"$filename" \ "$url" - + - name: Deploy to bintray run: | source .github/actions/tools/uploadToMaven.sh @@ -447,22 +451,22 @@ jobs: else uploadAllToMaven dist/maven/ https://api.bintray.com/maven/${{ secrets.BINTRAY_MAVEN_REPO }} ${{ secrets.BINTRAY_USER }} ${{ secrets.BINTRAY_APIKEY }} "https://github.com/${GITHUB_REPOSITORY}" "${{ secrets.BINTRAY_LICENSE }}" fi - + # - 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: + DeployJavaDoc: needs: [BuildJMonkey] name: Deploy Javadoc runs-on: ubuntu-18.04 if: github.event_name == 'release' - steps: - + steps: + # We are going to need a deploy key for this, since we need # to push to a different repo - name: Set ssh key @@ -477,16 +481,16 @@ jobs: 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@master with: name: javadoc path: newdoc - + # The actual deploy - - name: Deploy to github pages + - name: Deploy to github pages run: | set -f IFS=$'\n' @@ -508,10 +512,10 @@ jobs: # 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; + for v in $index; do if [ "$v" = "$version" ]; then @@ -538,11 +542,11 @@ jobs: # Commit the changes git config --global user.name "Github Actions" git config --global user.email "actions@users.noreply.github.com" - + git add . git commit -m "$version" - branch="gh-pages" - git push origin "$branch" --force + branch="gh-pages" + git push origin "$branch" --force fi