Merge branch 'main' of bastion:unity/unity-runner into main

This commit is contained in:
Lachee 2025-09-20 17:50:55 +10:00
commit 9c1e04e52a
No known key found for this signature in database
GPG Key ID: F1694B0D3BCBCD55
8 changed files with 99 additions and 212 deletions

View File

@ -1,9 +1,12 @@
name: 🤓 Individual Runners
on:
# push:
# branches: [main]
# paths: ['versions.txt']
push:
branches: [main]
paths:
- versions.txt
- dockerfiles/runner.dockerfile
- .gitea/workflows/create-image.yaml
workflow_dispatch:
inputs:
@ -32,8 +35,11 @@ jobs:
env:
DOCKER_REGISTRY: docker.lakes.house/
UNITY_VERSION: ${{ github.event.inputs.unity_version }}
GAMECI_OS: ubuntu
GAMECI_VERSION: 3
strategy:
max-parallel: 2
matrix:
platform:
- webgl
@ -48,10 +54,11 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Login to Docker Registry
uses: docker/login-action@v3
with:
registry: ${{ env.DOCKER_REGISTRY }} # usual credentials for bastion.local
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
@ -63,14 +70,15 @@ jobs:
echo "Unity Version: $VERSION"
- name: Docker Build
run: .gitea/workflows/scripts/build-image.sh
run: .gitea/workflows/scripts/build-runner-image.sh
id: build-image
env:
UNITY_VERSION: ${{ env.UNITY_VERSION }}
UNITY_PLATFORM: ${{ matrix.platform }}
IMAGE: ${{ env.DOCKER_REGISTRY }}unityci/editor
UNITY_MODULES: ${{ matrix.platform }}
GAMECI_VERSION: ${{ env.GAMECI_VERSION }}
ONLY_RUNNER_TAG: true
GAMECI_OS: ${{ env.GAMECI_OS }}
IMAGE: ${{ env.DOCKER_REGISTRY }}unityci/editor
TAG: ${{ env.GAMECI_OS }}-${{ env.UNITY_VERSION }}-${{ matrix.platform }}-runner
- name: Docker Push
run: |

View File

@ -6,7 +6,8 @@ on:
paths:
- versions.txt
- dockerfiles/runner.dockerfile
- .github/workflows/create-runner.yaml
- .gitea/workflows/create-runner.yaml
workflow_dispatch:
jobs:
@ -15,6 +16,7 @@ jobs:
env:
DOCKER_REGISTRY: docker.lakes.house/
UNITY_MODULES: webgl android ios mac-mono windows-mono linux-il2cpp
GAMECI_OS: ubuntu
GAMECI_VERSION: 3
name: Build
@ -40,8 +42,9 @@ jobs:
UNITY_VERSION: ${{ env.UNITY_VERSION }}
UNITY_MODULES: ${{ env.UNITY_MODULES }}
GAMECI_VERSION: ${{ env.GAMECI_VERSION }}
GAMECI_OS: ubuntu
GAMECI_OS: ${{ env.GAMECI_OS }}
IMAGE: ${{ env.DOCKER_REGISTRY }}unityci/editor
TAG: ${{ env.GAMECI_OS }}-${{ env.UNITY_VERSION }}-runner
- name: Docker Push
run: |

View File

@ -1,101 +0,0 @@
#!/bin/sh
# Ensure UNITY_VERSION is set, pull from arguments if not
if [ -z "${UNITY_VERSION}" ]; then
if [ -n "$1" ]; then
UNITY_VERSION=$1
else
echo "Error: UNITY_VERSION is not set."
exit 1
fi
fi
# Ensure UNITY_PLATFORM is set, pull from arguments if not
if [ -z "${UNITY_PLATFORM}" ]; then
if [ -n "$2" ]; then
UNITY_PLATFORM=$2
else
echo "Error: UNITY_PLATFORM is not set."
exit 1
fi
fi
# Ensure IMAGE is set, pull from arguments if not
if [ -z "${IMAGE}" ]; then
if [ -n "$3" ]; then
IMAGE=$3
else
echo "Error: IMAGE is not set."
exit 1
fi
fi
# Ensure GAME_CI_VERSION is set, default to 3 if not
if [ -z "${GAMECI_VERSION}" ]; then
GAMECI_VERSION=3
fi
# Ensure IMAGE_OS is set, default to ubuntu if not
if [ -z "${GAMECI_OS}" ]; then
# windows-il2cpp requires windows OS
if [ "${UNITY_PLATFORM}" = "windows-il2cpp" ]; then
GAMECI_OS="windows"
else
GAMECI_OS="ubuntu"
fi
# TODO: MacOS probably requires a mac image.
# Might be worth just putting this in the strategy at this point
fi
# Ensure PLATFORM is set, default to the current system if not
if [ -z "${PLATFORM}" ]; then
PLATFORM=$(uname -m)
case "${PLATFORM}" in
x86_64) PLATFORM="linux/amd64" ;;
arm64) PLATFORM="linux/arm64" ;;
*)
echo "Error: Unsupported platform ${PLATFORM}."
exit 1
;;
esac
fi
BASE_IMAGE=unityci/editor:${GAMECI_OS}-${UNITY_VERSION}-${UNITY_PLATFORM}-${GAMECI_VERSION}
SHORT_TAG=${GAMECI_OS}-${UNITY_VERSION}-${UNITY_PLATFORM}
TAG=${SHORT_TAG}-runner
FULL_IMAGE=${IMAGE}:${TAG}
ADDITIONAL_TAGS=""
if [ "${ONLY_RUNNER_TAG}" != "true" ]; then
ADDITIONAL_TAGS="$ADDITIONAL_TAGS -t ${IMAGE}:${SHORT_TAG}"
ADDITIONAL_TAGS="$ADDITIONAL_TAGS -t ${IMAGE}:${SHORT_TAG}-${GAMECI_VERSION}"
fi
echo "Building Docker image ${FULL_IMAGE}"
echo "- Platfrom: ${PLATFORM}"
echo "- Base: ${BASE_IMAGE}"
echo "- Tag: ${TAG}"
echo "- Image: ${IMAGE}:${TAG}"
echo "- Additional Tags: ${ADDITIONAL_TAGS}"
docker build \
--platform ${PLATFORM} \
--build-arg BASE_IMAGE=${BASE_IMAGE} \
${ADDITIONAL_TAGS} \
-t ${FULL_IMAGE} \
${DOCKER_BUILD_ARGS} \
-f ./dockerfiles/individual.dockerfile .
if [ $? -ne 0 ]; then
echo "Error: Docker build failed."
exit 1
fi
# Export IMAGE and TAG for GitHub Actions
if [ -n "$GITHUB_OUTPUT" ]; then
echo "IMAGE=${IMAGE}" >> $GITHUB_OUTPUT
echo "TAG=${TAG}" >> $GITHUB_OUTPUT
echo "FULL_IMAGE=${FULL_IMAGE}" >> $GITHUB_OUTPUT
fi

View File

@ -11,16 +11,16 @@ fi
# Fetch the changelog and extract the changeset ID for the specified Unity version
# This is because hub doesnt remember every version of unity and uses the changset for the exact id lookup.
if [ -z "${UNITY_CHANGESET}" ]; then
echo "Warning: No changeset provided. Scraping one from the change logs."
echo "This might take a while. Use the UNITY_CHANGESET to avoid this lookup."
CHANGELOG_URL="https://unity.com/releases/editor/whats-new/${UNITY_VERSION}"
UNITY_CHANGESET=$(curl -s -r 0-500 "$CHANGELOG_URL" | grep -oP 'unityhub://(?:[0-9a-z.])+/\K([a-z0-9]+)' | head -n 1)
if [ -z "$UNITY_CHANGESET" ]; then
echo "Error: Could not extract changeset for Unity version ${UNITY_VERSION}."
exit 1
fi
fi
# if [ -z "${UNITY_CHANGESET}" ]; then
# echo "Warning: No changeset provided. Scraping one from the change logs."
# echo "This might take a while. Use the UNITY_CHANGESET to avoid this lookup."
# CHANGELOG_URL="https://unity.com/releases/editor/whats-new/${UNITY_VERSION}"
# UNITY_CHANGESET=$(curl -s -r 0-500 "$CHANGELOG_URL" | grep -oP 'unityhub://(?:[0-9a-z.])+/\K([a-z0-9]+)' | head -n 1)
# if [ -z "$UNITY_CHANGESET" ]; then
# echo "Error: Could not extract changeset for Unity version ${UNITY_VERSION}."
# exit 1
# fi
# fi
# Ensure we have some modules
if [ -z "${UNITY_MODULES}" ]; then
@ -32,16 +32,6 @@ if [ -z "${UNITY_MODULES}" ]; then
fi
fi
# Ensure IMAGE is set, pull from arguments if not
if [ -z "${IMAGE}" ]; then
if [ -n "$3" ]; then
IMAGE=$3
else
echo "Error: IMAGE is not set."
exit 1
fi
fi
# Ensure GAME_CI_VERSION is set, default to 3 if not
if [ -z "${GAMECI_VERSION}" ]; then
GAMECI_VERSION=3
@ -74,6 +64,22 @@ if [ -z "${PLATFORM}" ]; then
esac
fi
# Ensure IMAGE is set, pull from arguments if not
if [ -z "${IMAGE}" ]; then
if [ -n "$3" ]; then
IMAGE=$3
else
echo "Error: IMAGE is not set."
exit 1
fi
fi
# Ensure the TAG is set, default to latest if not
if [ -z "${TAG}" ]; then
TAG="${GAMECI_OS}-${UNITY_VERSION}-runner"
fi
# Ensure some additional build settings are set
if [ -z "${DOCKER_BUILD_ARGS}" ]; then
DOCKER_BUILD_ARGS=""
@ -81,21 +87,19 @@ fi
BASE_TAG=${GAMECI_OS}-${UNITY_VERSION}-base-${GAMECI_VERSION}
BASE_IMAGE=unityci/editor:${BASE_TAG}
DEST_TAG=${GAMECI_OS}-${UNITY_VERSION}-runner
DEST_IMAGE=${IMAGE}:${DEST_TAG}
DEST_IMAGE=${IMAGE}:${TAG}
echo "Building Docker image ${DEST_IMAGE}"
echo "- Version: ${UNITY_VERSION}"
echo "- Changeset: ${UNITY_CHANGESET}"
echo "- Platfrom: ${PLATFORM}"
echo "- Base: ${BASE_IMAGE}"
echo "- Tag: ${DEST_TAG}"
echo "- Tag: ${TAG}"
echo "- Image: ${DEST_IMAGE}"
docker buildx build \
docker build \
--platform ${PLATFORM} \
--build-arg "VERSION=${UNITY_VERSION}" \
--build-arg "CHANGESET=${UNITY_CHANGESET}" \
--build-arg "BASE_IMAGE=${BASE_IMAGE}" \
--build-arg "MODULE=${UNITY_MODULES}" \
-t ${DEST_IMAGE} ${DOCKER_BUILD_ARGS} \
@ -109,6 +113,6 @@ fi
# Export IMAGE and TAG for GitHub Actions
if [ -n "$GITHUB_OUTPUT" ]; then
echo "IMAGE=${IMAGE}" >> $GITHUB_OUTPUT
echo "TAG=$DEST_TAG" >> $GITHUB_OUTPUT
echo "TAG=$TAG" >> $GITHUB_OUTPUT
echo "FULL_IMAGE=${DEST_IMAGE}" >> $GITHUB_OUTPUT
fi

View File

@ -6,14 +6,18 @@ on:
branches: [main]
paths:
- versions.txt
- Dockerfile
- dockerfiles/runner.dockerfile
- .github/workflows/create-image.yaml
jobs:
build-docker:
runs-on: ubuntu-latest
env:
GAMECI_OS: ubuntu
GAMECI_VERSION: 3
strategy:
max-parallel: 2
matrix:
platform:
- webgl
@ -43,13 +47,15 @@ jobs:
echo "Unity Version: $VERSION"
- name: Docker Build
run: .gitea/workflows/scripts/build-individual-image.sh
run: .gitea/workflows/scripts/build-runner-image.sh
id: build-image
env:
UNITY_VERSION: ${{ env.UNITY_VERSION }}
UNITY_PLATFORM: ${{ matrix.platform }}
IMAGE: "${{ vars.DOCKERHUB_USERNAME }}/unity-runner"
UNITY_MODULES: ${{ matrix.platform }}
GAMECI_VERSION: ${{ env.GAMECI_VERSION }}
GAMECI_OS: ${{ env.GAMECI_OS }}
IMAGE: "${{ vars.DOCKERHUB_USERNAME }}/unity-runner"
TAG: ${{ env.GAMECI_OS }}-${{ env.UNITY_VERSION }}-${{ matrix.platform }}-runner
- name: Docker Push
run: |

View File

@ -14,6 +14,8 @@ jobs:
runs-on: ubuntu-latest
env:
UNITY_MODULES: webgl android ios mac-mono windows-mono linux-il2cpp
GAMECI_OS: ubuntu
GAMECI_VERSION: 3
environment:
name: Docker Hub
@ -41,8 +43,9 @@ jobs:
UNITY_VERSION: ${{ env.UNITY_VERSION }}
UNITY_MODULES: ${{ env.UNITY_MODULES }}
GAMECI_VERSION: ${{ env.GAMECI_VERSION }}
GAMECI_OS: ubuntu
GAMECI_OS: ${{ env.GAMECI_OS }}
IMAGE: "${{ vars.DOCKERHUB_USERNAME }}/unity-runner"
TAG: ${{ env.GAMECI_OS }}-${{ env.UNITY_VERSION }}-runner
- name: Docker Push
run: |

View File

@ -1,41 +0,0 @@
ARG BASE_IMAGE=unityci/editor
FROM $BASE_IMAGE
RUN apt-get update && \
apt-get install -y \
git \
curl \
gcc \
make \
libssl-dev \
zlib1g-dev \
libsqlite3-dev
# Set up the scripts
RUN git clone --depth=1 https://github.com/game-ci/unity-builder.git /gameci && \
cp -rf /gameci/dist/platforms/ubuntu/steps /steps && \
cp -rf /gameci/dist/default-build-script /UnityBuilderAction && \
cp /gameci/dist/platforms/ubuntu/entrypoint.sh /entrypoint.sh
# Set up Node.js environment for github actions
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
npm install -g npm@latest
# Install Blender
ARG BLENDER_SHORT_VERSION=3.4
ARG BLENDER_FULL_VERSION=3.4.1
RUN echo "BLENDER_FULL_VERSION: $BLENDER_FULL_VERSION" && \
echo echo "BLENDER_SHORT_VERSION: $BLENDER_SHORT_VERSION" && \
apt-get install -y wget && \
wget https://download.blender.org/release/Blender$BLENDER_SHORT_VERSION/blender-$BLENDER_FULL_VERSION-linux-x64.tar.xz && \
tar -xf blender-$BLENDER_FULL_VERSION-linux-x64.tar.xz && \
rm blender-$BLENDER_FULL_VERSION-linux-x64.tar.xz
ENV PATH="$PATH:/blender-$BLENDER_FULL_VERSION-linux-x64"
# Add custom scripts
COPY scripts/build.sh /build.sh
RUN chmod +x /build.sh
# Done
ENTRYPOINT [ "/entrypoint.sh" ]

View File

@ -81,5 +81,10 @@ ENV PATH="$PATH:/blender-$BLENDER_FULL_VERSION-linux-x64"
COPY scripts/build.sh /build.sh
RUN chmod +x /build.sh
LABEL com.unity3d.version="$VERSION"
LABEL com.unity3d.modules="$MODULE"
LABEL org.blender.version="$BLENDER_FULL_VERSION"
# Done
ENTRYPOINT [ "/entrypoint.sh" ]
# ENTRYPOINT [ "/bin/bash" ]~