diff --git a/.github/actions/docker/Dockerfile b/.github/actions/docker/Dockerfile new file mode 100644 index 0000000..5305062 --- /dev/null +++ b/.github/actions/docker/Dockerfile @@ -0,0 +1,8 @@ +# Container image that runs your code +FROM ubuntu:18.04 + +# Copies your code file from your action repository to the filesystem path `/` of the container +COPY entrypoint.sh /entrypoint.sh + +# Code file to execute when the docker container starts up (`entrypoint.sh`) +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/.github/actions/docker/action.yml b/.github/actions/docker/action.yml new file mode 100644 index 0000000..98d6d7e --- /dev/null +++ b/.github/actions/docker/action.yml @@ -0,0 +1,6 @@ +# action.yml +name: 'Build Linux Natives in Docker' +description: 'Build Linux Natives in Ubuntu 18.04 docker container' +runs: + using: 'docker' + image: 'Dockerfile' diff --git a/.github/actions/docker/entrypoint.sh b/.github/actions/docker/entrypoint.sh new file mode 100755 index 0000000..309f02d --- /dev/null +++ b/.github/actions/docker/entrypoint.sh @@ -0,0 +1,108 @@ +#!/bin/sh -l + +# ubuntu dockerfile is very minimal (only 122 packages are installed) +# need to install updated git (from official git ppa) +apt-get -q update +apt-get -yq install software-properties-common +add-apt-repository -y ppa:git-core/ppa +# install dependencies expected by other steps +apt-get -q update +apt-get -yq install git \ +curl \ +ca-certificates \ +wget \ +bzip2 \ +zip \ +unzip \ +xz-utils \ +build-essential \ +sudo \ +locales \ +gnupg rename +#openjdk-11-jdk-headless \ + + +# set Locale to en_US.UTF-8 (avoids hang during compilation) +locale-gen en_US.UTF-8 +export LANG=en_US.UTF-8 +export LANGUAGE=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 + +# add zulu apt repository - https://docs.azul.com/core/install/debian +curl -s https://repos.azul.com/azul-repo.key | gpg --dearmor -o /usr/share/keyrings/azul.gpg +echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" | tee /etc/apt/sources.list.d/zulu.list + +# default Ubuntu jammy archive doesn't support armhf or arm64 +# so remove those architectures in this list to avoid invalid URL errors +sed -i 's/deb http/deb [arch=amd64,i386] http/' /etc/apt/sources.list +# make a copy of sources.list that we'll use for armhf and arm64 ports +grep "ubuntu.com/ubuntu" /etc/apt/sources.list | tee /etc/apt/sources.list.d/ports.list +sed -i 's/amd64,i386/armhf,arm64/' /etc/apt/sources.list.d/ports.list +# change URLs in ports.list to use Ubuntu ports repo +sed -i 's#http://.*/ubuntu#http://ports.ubuntu.com/ubuntu-ports#' /etc/apt/sources.list.d/ports.list +# Add extra platform architectures +dpkg --add-architecture i386; dpkg --add-architecture armhf; dpkg --add-architecture arm64 +apt-get -q update + +# install zulu and java build tools +apt-get -yq install zulu8-jdk-headless maven ant + +# Install Windows compilers +apt-get -yq install g++-mingw-w64-i686 g++-mingw-w64-x86-64 +# Install Linux x86 compilers/libraries +apt-get -yq install gcc-multilib g++-multilib linux-libc-dev:i386 +# Install Linux arm32 compilers/libraries +apt-get -yq install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf +# Install Linux arm64 compilers/libraries +apt-get -yq install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + +find . -type f -path "SDL/*.h" -exec sed -i 's/extern DECLSPEC//' {} \; +sed -i 's/#define SDL_DYNAMIC_API 1/#define SDL_DYNAMIC_API 0/' SDL/src/dynapi/SDL_dynapi.h + +mkdir -p SDL/build-linux64 +cd SDL/build-linux64 || exit +../configure CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi +make -j +cd - || exit + +mkdir -p SDL/build-linux32 +cd SDL/build-linux32 || exit +../configure CFLAGS="-fPIC -m32" CPPFLAGS="-fPIC -m32" LDFLAGS="-m32" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi +make -j +cd - || exit + +mkdir -p SDL/build-linuxarm32 +cd SDL/build-linuxarm32 || exit +../configure --host=arm-linux-gnueabihf CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi +make -j +cd - || exit + +mkdir -p SDL/build-linuxarm64 +cd SDL/build-linuxarm64 || exit +../configure --host=aarch64-linux-gnu CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi +make -j +cd - || exit + +mkdir -p SDL/build-windows32 +cd SDL/build-windows32 || exit +../configure --host=i686-w64-mingw32 --disable-audio --disable-render --disable-power --disable-filesystem --disable-hidapi +make -j +cd - || exit + +mkdir -p SDL/build-windows64 +cd SDL/build-windows64 || exit +../configure --host=x86_64-w64-mingw32 --disable-audio --disable-render --disable-power --disable-filesystem --disable-hidapi +make -j +cd - || exit + +# Grant execute permission for gradlew +chmod +x gradlew +# Build with Gradle +./gradlew jnigen jnigenBuild jnigenJarNativesDesktop --no-daemon + +# fix built jars being of the form workspace-*.jar instead of Jamepad-*.jar +# due to the directory being mounted to /github/workspace on the container +rename 's/workspace/Jamepad/' build/libs/* + +# clean up gradle files before handing back to runner +rm -rf .gradle \ No newline at end of file diff --git a/.github/workflows/pushaction.yml b/.github/workflows/pushaction.yml index 4c054e5..1256d42 100644 --- a/.github/workflows/pushaction.yml +++ b/.github/workflows/pushaction.yml @@ -3,9 +3,6 @@ name: Compile and deploy snapshot artifacts on: [push, pull_request] # Don't worry, the actual deployment is guarded with an "if" and only done on push to master env: GRADLE_USER_HOME: .gradle - # Needed in order to use Node 16. Node 20 does not work with glibc 2.17 - # See https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/ - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true jobs: macos: @@ -43,7 +40,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew jnigen jnigenBuild + run: ./gradlew jnigen jnigenBuild --no-daemon - name: Upload macOS natives uses: actions/upload-artifact@v3 with: @@ -53,127 +50,45 @@ jobs: linux: needs: macos runs-on: ubuntu-20.04 - container: ubuntu:18.04 env: ORG_GRADLE_PROJECT_GITHUB_USERNAME: "" ORG_GRADLE_PROJECT_GITHUB_API_TOKEN: "" steps: - - name: Install dependencies into minimal dockerfile - run: | - # ubuntu dockerfile is very minimal (only 122 packages are installed) - # need to install updated git (from official git ppa) - apt update - apt install -y software-properties-common - add-apt-repository ppa:git-core/ppa -y - # install dependencies expected by other steps - apt update - apt install -y git \ - curl \ - ca-certificates \ - wget \ - bzip2 \ - zip \ - unzip \ - xz-utils \ - openjdk-11-jdk-headless \ - maven \ - build-essential \ - ant sudo locales - # set Locale to en_US.UTF-8 (avoids hang during compilation) - locale-gen en_US.UTF-8 - echo "LANG=en_US.UTF-8" >> $GITHUB_ENV - echo "LANGUAGE=en_US.UTF-8" >> $GITHUB_ENV - echo "LC_ALL=en_US.UTF-8" >> $GITHUB_ENV - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'recursive' - - name: Set up JDK 8 - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: 8 - - - name: Setup Gradle - uses: gradle/gradle-build-action@v2.4.2 - - - run: sudo sed -i 's/deb http/deb [arch=amd64,i386] http/' /etc/apt/sources.list - - run: grep "ubuntu.com/ubuntu" /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list - - run: sudo sed -i 's/amd64,i386/armhf,arm64/' /etc/apt/sources.list.d/ports.list - - run: sudo sed -i 's#http://.*/ubuntu#http://ports.ubuntu.com/ubuntu-ports#' /etc/apt/sources.list.d/ports.list - - name: Add extra platform architectures - run: sudo dpkg --add-architecture i386; sudo dpkg --add-architecture armhf; sudo dpkg --add-architecture arm64 - - run: sudo apt-get update - - name: Install Windows compilers - run: sudo apt-get -yq install g++-mingw-w64-i686 g++-mingw-w64-x86-64 - - name: Install Linux x86 compilers/libraries - run: sudo apt-get -yq install gcc-multilib g++-multilib linux-libc-dev:i386 - - name: Install Linux arm32 compilers/libraries - run: sudo apt-get -yq install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf - - name: Install Linux arm64 compilers/libraries - run: sudo apt-get -yq install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - name: Download macOS natives uses: actions/download-artifact@v3 with: name: macos-natives path: libs - - run: find -type f -name "*.h" -exec sed -i 's/extern DECLSPEC//' {} \; - working-directory: SDL - - run: sed -i 's/#define SDL_DYNAMIC_API 1/#define SDL_DYNAMIC_API 0/' SDL/src/dynapi/SDL_dynapi.h - - - run: mkdir -p SDL/build-linux64 - - run: ../configure CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linux64 - - run: make -j - working-directory: SDL/build-linux64 - - - run: mkdir -p SDL/build-linux32 - - run: ../configure CFLAGS="-fPIC -m32" CPPFLAGS="-fPIC -m32" LDFLAGS="-m32" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linux32 - - run: make -j - working-directory: SDL/build-linux32 - - - run: mkdir -p SDL/build-linuxarm32 - - run: ../configure --host=arm-linux-gnueabihf CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linuxarm32 - - run: make -j - working-directory: SDL/build-linuxarm32 - - - run: mkdir -p SDL/build-linuxarm64 - - run: ../configure --host=aarch64-linux-gnu CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linuxarm64 - - run: make -j - working-directory: SDL/build-linuxarm64 - - - run: mkdir -p SDL/build-windows32 - - run: ../configure --host=i686-w64-mingw32 --disable-audio --disable-render --disable-power --disable-filesystem --disable-hidapi - working-directory: SDL/build-windows32 - - run: make -j - working-directory: SDL/build-windows32 - - - run: mkdir -p SDL/build-windows64 - - run: ../configure --host=x86_64-w64-mingw32 --disable-audio --disable-render --disable-power --disable-filesystem --disable-hidapi - working-directory: SDL/build-windows64 - - run: make -j - working-directory: SDL/build-windows64 - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew jnigen jnigenBuild jnigenJarNativesDesktop + - name: Build natives in Docker Container + uses: ./.github/actions/docker + id: docker - name: Upload all output libs uses: actions/upload-artifact@v3 with: name: output-libs path: build/libs/ - - name: Snapshot build - run: - ./gradlew build - - name: Snapshot deploy + + - name: Set up JDK 8 + if: github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository_owner == 'libgdx' + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 8 + + - name: Setup Gradle + if: github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository_owner == 'libgdx' + uses: gradle/gradle-build-action@v2.4.2 + + - name: Snapshot build deploy if: github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository_owner == 'libgdx' env: NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }} NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} run: - ./gradlew publish + # Execute permission was granted in the docker script + ./gradlew build publish --no-daemon diff --git a/.github/workflows/releaseaction.yml b/.github/workflows/releaseaction.yml index 0587b8d..d66d6c3 100644 --- a/.github/workflows/releaseaction.yml +++ b/.github/workflows/releaseaction.yml @@ -6,9 +6,6 @@ on: env: GRADLE_USER_HOME: .gradle - # Needed in order to use Node 16. Node 20 does not work with glibc 2.17 - # See https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/ - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true jobs: macos: @@ -46,7 +43,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew jnigen jnigenBuild + run: ./gradlew jnigen jnigenBuild --no-daemon - name: Upload macOS natives uses: actions/upload-artifact@v3 with: @@ -56,120 +53,38 @@ jobs: linux: needs: macos runs-on: ubuntu-20.04 - container: ubuntu:18.04 env: ORG_GRADLE_PROJECT_GITHUB_USERNAME: "" ORG_GRADLE_PROJECT_GITHUB_API_TOKEN: "" steps: - - name: Install dependencies into minimal dockerfile - run: | - # ubuntu dockerfile is very minimal (only 122 packages are installed) - # need to install updated git (from official git ppa) - apt update - apt install -y software-properties-common - add-apt-repository ppa:git-core/ppa -y - # install dependencies expected by other steps - apt update - apt install -y git \ - curl \ - ca-certificates \ - wget \ - bzip2 \ - zip \ - unzip \ - xz-utils \ - openjdk-11-jdk-headless \ - maven \ - build-essential \ - ant sudo locales - # set Locale to en_US.UTF-8 (avoids hang during compilation) - locale-gen en_US.UTF-8 - echo "LANG=en_US.UTF-8" >> $GITHUB_ENV - echo "LANGUAGE=en_US.UTF-8" >> $GITHUB_ENV - echo "LC_ALL=en_US.UTF-8" >> $GITHUB_ENV - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'recursive' - - name: Set up JDK 8 - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: 8 - - - name: Setup Gradle - uses: gradle/gradle-build-action@v2.4.2 - - - run: sudo sed -i 's/deb http/deb [arch=amd64,i386] http/' /etc/apt/sources.list - - run: grep "ubuntu.com/ubuntu" /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list - - run: sudo sed -i 's/amd64,i386/armhf,arm64/' /etc/apt/sources.list.d/ports.list - - run: sudo sed -i 's#http://.*/ubuntu#http://ports.ubuntu.com/ubuntu-ports#' /etc/apt/sources.list.d/ports.list - - name: Add extra platform architectures - run: sudo dpkg --add-architecture i386; sudo dpkg --add-architecture armhf; sudo dpkg --add-architecture arm64 - - run: sudo apt-get update - - name: Install Windows compilers - run: sudo apt-get -yq install g++-mingw-w64-i686 g++-mingw-w64-x86-64 - - name: Install Linux x86 compilers/libraries - run: sudo apt-get -yq install gcc-multilib g++-multilib linux-libc-dev:i386 - - name: Install Linux arm32 compilers/libraries - run: sudo apt-get -yq install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf - - name: Install Linux arm64 compilers/libraries - run: sudo apt-get -yq install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu - name: Download macOS natives uses: actions/download-artifact@v3 with: name: macos-natives path: libs - - run: find -type f -name "*.h" -exec sed -i 's/extern DECLSPEC//' {} \; - working-directory: SDL - - run: sed -i 's/#define SDL_DYNAMIC_API 1/#define SDL_DYNAMIC_API 0/' SDL/src/dynapi/SDL_dynapi.h - - - run: mkdir -p SDL/build-linux64 - - run: ../configure CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linux64 - - run: make -j - working-directory: SDL/build-linux64 - - - run: mkdir -p SDL/build-linux32 - - run: ../configure CFLAGS="-fPIC -m32" CPPFLAGS="-fPIC -m32" LDFLAGS="-m32" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linux32 - - run: make -j - working-directory: SDL/build-linux32 - - - run: mkdir -p SDL/build-linuxarm32 - - run: ../configure --host=arm-linux-gnueabihf CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linuxarm32 - - run: make -j - working-directory: SDL/build-linuxarm32 - - - run: mkdir -p SDL/build-linuxarm64 - - run: ../configure --host=aarch64-linux-gnu CFLAGS="-fPIC" CPPFLAGS="-fPIC" --disable-audio --disable-video --disable-video-vulkan --disable-render --disable-filesystem --disable-threads --disable-directx --disable-mmx --disable-3dnow --disable-sse --disable-sse2 --disable-sse3 --disable-cpuinfo --disable-sensor --enable-hidapi - working-directory: SDL/build-linuxarm64 - - run: make -j - working-directory: SDL/build-linuxarm64 - - - run: mkdir -p SDL/build-windows32 - - run: ../configure --host=i686-w64-mingw32 --disable-audio --disable-render --disable-power --disable-filesystem --disable-hidapi - working-directory: SDL/build-windows32 - - run: make -j - working-directory: SDL/build-windows32 - - - run: mkdir -p SDL/build-windows64 - - run: ../configure --host=x86_64-w64-mingw32 --disable-audio --disable-render --disable-power --disable-filesystem --disable-hidapi - working-directory: SDL/build-windows64 - - run: make -j - working-directory: SDL/build-windows64 - - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew jnigen jnigenBuild jnigenJarNativesDesktop + - name: Build natives in Docker Container + uses: ./.github/actions/docker + id: docker - name: Upload all output libs uses: actions/upload-artifact@v3 with: name: output-libs path: build/libs/ + + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 8 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2.4.2 + - name: Import GPG key id: import_gpg uses: crazy-max/ghaction-import-gpg@v5 @@ -181,4 +96,5 @@ jobs: NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }} NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} run: - ./gradlew build publish -PRELEASE -Psigning.gnupg.keyId=${{ secrets.GPG_KEYID }} -Psigning.gnupg.passphrase=${{ secrets.GPG_PASSPHRASE }} -Psigning.gnupg.keyName=${{ secrets.GPG_KEYID }} + # Execute permission was granted in the docker script + ./gradlew build publish -PRELEASE -Psigning.gnupg.keyId=${{ secrets.GPG_KEYID }} -Psigning.gnupg.passphrase=${{ secrets.GPG_PASSPHRASE }} -Psigning.gnupg.keyName=${{ secrets.GPG_KEYID }} --no-daemon