name: Build Game on: workflow_dispatch: pull_request: push: branches: - '**' # every branch - '!no-build-**' # unless marked as no-build env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm-cache permissions: contents: write jobs: build-windows: name: Windows Build runs-on: windows-latest steps: - uses: actions/checkout@v4 - name: Setup caches uses: ./.github/actions/setup-cache with: host: win target: win - name: Create Build Environment # Some projects don't allow in-source building, so create a separate build directory # We'll use this as our working directory for all subsequent commands run: cmake -E make_directory ${{github.workspace}}/build - name: Configure CMake shell: powershell working-directory: ${{github.workspace}}/build run: cmake $env:GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE - name: Build working-directory: ${{github.workspace}}/build shell: powershell run: cmake --build . --config $env:BUILD_TYPE --target MinecraftPE - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: mcpe-windows path: | ${{github.workspace}}/build/${{ env.BUILD_TYPE }}/MinecraftPE.exe ${{github.workspace}}/build/${{ env.BUILD_TYPE }}/glfw3.dll ${{github.workspace}}/build/${{ env.BUILD_TYPE }}/libpng16.dll ${{github.workspace}}/build/${{ env.BUILD_TYPE }}/OpenAL32.dll ${{github.workspace}}/build/${{ env.BUILD_TYPE }}/z.dll build-linux: name: Linux Build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup caches uses: ./.github/actions/setup-cache with: host: linux target: linux - name: Create Build Environment # Some projects don't allow in-source building, so create a separate build directory # We'll use this as our working directory for all subsequent commands run: cmake -E make_directory ${{github.workspace}}/build - name: Setup Environment run: | sudo apt-get update -qq sudo apt-get install gcc-multilib sudo apt-get install -y --no-install-recommends build-essential libgl-dev libwayland-dev xorg-dev libxkbcommon-dev - name: Configure CMake # Use a bash shell so we can use the same syntax for environment variable # access regardless of the host operating system shell: bash working-directory: ${{github.workspace}}/build run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE - name: Build working-directory: ${{github.workspace}}/build shell: bash run: cmake --build . --config $BUILD_TYPE - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: mcpe-linux path: | ${{github.workspace}}/build/MinecraftPE ${{github.workspace}}/build/MinecraftPE-server build-android: # pray to god name: Build Android APK runs-on: ubuntu-latest env: ANDROID_SDK_ROOT: ${{ github.workspace }}/android-sdk # ANDROID_NDK_PATH: ${{ env.ANDROID_NDK_PATH }} ANDROID_PLATFORM_API: 36 ANDROID_BUILD_TOOLS_VERSION: 36.0.0 ADB: /bin/true # JAVA_HOME: ${{ env.JAVA_HOME }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install system prerequisites run: | sudo apt-get update -qq sudo apt-get install -y --no-install-recommends wget unzip curl git python3 libncurses6 libtinfo6 if ! ldconfig -p | grep -q "libncurses.so.5"; then sudo ln -sf /lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5 || true fi if ! ldconfig -p | grep -q "libtinfo.so.5"; then sudo ln -sf /lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 || true fi - name: Setup Java 25 uses: actions/setup-java@v4 with: distribution: temurin java-version: 25 - name: Setup Android command line tools run: | mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools" curl -o cmdline-tools.zip -L "https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip" unzip -q cmdline-tools.zip -d "$ANDROID_SDK_ROOT/cmdline-tools" mv "$ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools" "$ANDROID_SDK_ROOT/cmdline-tools/latest" yes | "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$ANDROID_SDK_ROOT" "platform-tools" "platforms;android-${ANDROID_PLATFORM_API}" "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" - name: Setup Android NDK uses: nttld/setup-ndk@v1 with: ndk-version: r14b add-to-path: true link-to-sdk: false local-cache: true - name: List NDK directory run: | echo "ANDROID_NDK_PATH=$ANDROID_NDK_PATH" ls -l "$ANDROID_NDK_PATH" ls -l "$ANDROID_NDK_PATH/ndk-build" - name: Validate environment run: | echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" echo "ANDROID_NDK_PATH=$ANDROID_NDK_PATH" echo "JAVA_HOME=$JAVA_HOME" $ANDROID_SDK_ROOT/platform-tools/adb version || true java -version javac -version - name: Run Android build script run: | chmod +x ./build.sh ./build.sh - name: Upload APK uses: actions/upload-artifact@v4 with: name: minecraftpe-apk path: | ${{ github.workspace }}/build-apk/minecraftpe-debug.apk publish: name: Publish runs-on: ubuntu-latest needs: [ build-windows, build-linux, build-android ] if: github.ref == 'refs/heads/main' steps: - name: Checkout uses: actions/checkout@v4 - name: Declare Version Variables id: ref run: | echo "version=$(cat VERSION | xargs)" >> $GITHUB_OUTPUT echo "hash=$(git rev-parse --short "$GITHUB_SHA")" >> $GITHUB_OUTPUT - name: Download Artifacts uses: actions/download-artifact@v4 - name: Zip Windows Artifacts uses: vimtor/action-zip@v1.2 with: files: ${{github.workspace}}/data/ mcpe-windows/MinecraftPE.exe mcpe-windows/glfw3.dll mcpe-windows/libpng16.dll mcpe-windows/OpenAL32.dll mcpe-windows/z.dll dest: minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip - name: Zip Linux Artifacts uses: vimtor/action-zip@v1.2 with: files: ${{github.workspace}}/data/ mcpe-linux/MinecraftPE # ye, you should install libraries by urself :trollface: dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip - name: Zip Linux Server Artifacts uses: vimtor/action-zip@v1.2 with: files: mcpe-linux/MinecraftPE-server dest: minecraftpe-server-${{ steps.ref.outputs.hash }}.zip - name: Zip Android Artifact uses: vimtor/action-zip@v1.2 with: files: mcpe-apk/minecraftpe-debug.apk dest: minecraftpe-${{ steps.ref.outputs.hash }}-android.zip - name: Update Development Release uses: andelf/nightly-release@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: dev name: 'Development Release' body: | MinecraftPE development release for commit ${{ github.sha }}. files: | ./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip ./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip ./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip ./minecraftpe-${{ steps.ref.outputs.hash }}-android.zip