Upgraded the build system to Gradle 8.12 and updated the CI pipeline to use JDK 17 for improved compatibility and performance.
197 lines
5.6 KiB
YAML
197 lines
5.6 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
tags:
|
|
- v*
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
build-java:
|
|
name: Build Java
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Java
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: liberica
|
|
java-version: 17
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@v4
|
|
|
|
- name: Build
|
|
run: ./gradlew buildAll
|
|
|
|
# This helps to upload only jar files into the build artifact
|
|
- name: Copy Build Results to Temp
|
|
run: |
|
|
mkdir -p tmp/
|
|
cp imgui-app/build/libs/*.jar tmp/
|
|
cp imgui-binding/build/libs/*.jar tmp/
|
|
cp imgui-lwjgl3/build/libs/*.jar tmp/
|
|
|
|
- name: Upload Artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: java-libraries
|
|
path: tmp/*.jar
|
|
|
|
build-natives:
|
|
name: Build Native (${{ matrix.target.os }} - ${{ matrix.target.type }})
|
|
needs: build-java
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
target:
|
|
- os: ubuntu-latest
|
|
type: linux
|
|
- os: ubuntu-latest
|
|
type: windows
|
|
- os: macos-latest
|
|
type: macos
|
|
runs-on: ${{ matrix.target.os }}
|
|
steps:
|
|
- name: Checkout Repository and Submodules
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
submodules: recursive
|
|
|
|
- name: Setup Java
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: liberica
|
|
java-version: 17
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@v4
|
|
|
|
- name: Install Dependencies (for Windows build)
|
|
if: matrix.target.type == 'windows'
|
|
run: sudo apt install mingw-w64
|
|
|
|
- name: Build
|
|
run: |
|
|
chmod +x buildSrc/scripts/build.sh
|
|
buildSrc/scripts/build.sh ${{ matrix.target.type }}
|
|
|
|
- name: Upload Artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: native-library-${{ matrix.target.type }}
|
|
path: /tmp/imgui/dst/
|
|
|
|
# This required to pack all native libraries into single archive
|
|
archive-natives:
|
|
name: Archive Natives
|
|
runs-on: ubuntu-latest
|
|
needs: build-natives
|
|
steps:
|
|
- name: Merge Artifacts
|
|
uses: actions/upload-artifact/merge@v4
|
|
with:
|
|
name: native-libraries
|
|
pattern: native-library-*
|
|
|
|
update-bin:
|
|
name: Update Binaries
|
|
if: github.ref == 'refs/heads/main' && !github.event.repository.fork # runs only on the main branch and not forks (sometimes people do PRs from the main branch)
|
|
runs-on: ubuntu-latest
|
|
needs: archive-natives
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Download Artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: /tmp/artifacts
|
|
|
|
# Job compares sha1 hash of the imgui-binding/src/main directory.
|
|
# If there are any changes, then we update native libraries.
|
|
# We do not rely on git in terms of comparing binaries,
|
|
# since DLL files will always have versioning difference.
|
|
- name: Compare Binding Hash
|
|
id: cmp-binding-hash
|
|
continue-on-error: true
|
|
run: |
|
|
touch bin/binding.sha1
|
|
cat bin/binding.sha1 > /tmp/hash
|
|
find imgui-binding/src/main -type f -print0 | sort -z | xargs -0 sha1sum > bin/binding.sha1
|
|
find imgui-binding/src/generated -type f -print0 | sort -z | xargs -0 sha1sum >> bin/binding.sha1
|
|
find include -type f -print0 | sort -z | xargs -0 sha1sum >> bin/binding.sha1
|
|
cmp /tmp/hash bin/binding.sha1
|
|
|
|
- name: Update
|
|
if: steps.cmp-binding-hash.outcome != 'success'
|
|
run: mv /tmp/artifacts/native-libraries/* bin/
|
|
|
|
- name: Commit
|
|
if: steps.cmp-binding-hash.outcome != 'success'
|
|
uses: EndBug/add-and-commit@v9
|
|
with:
|
|
default_author: github_actions
|
|
message: '[ci skip] update native binaries'
|
|
|
|
release:
|
|
name: Release
|
|
if: startsWith(github.ref, 'refs/tags/v') # if tag starts with "v"
|
|
runs-on: ubuntu-latest
|
|
needs: [ build-java, archive-natives ]
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Java
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: liberica
|
|
java-version: 17
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@v4
|
|
|
|
- name: Download Artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: out/artifacts
|
|
|
|
- name: Zip Artifacts
|
|
run: |
|
|
mkdir out/archives
|
|
zip -rj out/archives/native-libraries out/artifacts/native-libraries
|
|
zip -rj out/archives/java-libraries out/artifacts/java-libraries
|
|
|
|
- name: Publish
|
|
env:
|
|
NEXUS_UPD_ID: ${{ secrets.RELEASE_NEXUS_UPD_ID }}
|
|
NEXUS_UPD_PASS: ${{ secrets.RELEASE_NEXUS_UPD_PASS }}
|
|
SIGNING_KEY_ID: ${{ secrets.RELEASE_SIGNING_KEY_ID }}
|
|
SIGNING_KEY: ${{ secrets.RELEASE_SIGNING_KEY }}
|
|
SIGNING_KEY_PASS: ${{ secrets.RELEASE_SIGNING_KEY_PASS }}
|
|
run: |
|
|
chmod +x ./buildSrc/scripts/publish.sh
|
|
buildSrc/scripts/publish.sh
|
|
|
|
- name: Release
|
|
uses: softprops/action-gh-release@v2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
draft: true
|
|
prerelease: false
|
|
files: |
|
|
out/archives/**
|