Compare commits

...

19 Commits

Author SHA1 Message Date
Webber Takken
8eeb848483 add il2cpp support for linux from 2019.3 (#177) 2020-11-14 00:57:44 +01:00
Webber Takken
9e2a1b2d35 Remove duplicate flag batch-mode (#173) 2020-11-09 20:04:56 +01:00
Webber
471bf0bdf0 Merge branch 'BLaZeKiLL-fix/unity-alias' into main 2020-11-01 15:08:06 +01:00
Webber
6c2fbff839 Merge branch 'fix/unity-alias' of https://github.com/BLaZeKiLL/unity-builder into BLaZeKiLL-fix/unity-alias 2020-11-01 15:06:09 +01:00
Webber Takken
17c28995b2 Update action to use main (#168) 2020-10-29 23:21:48 +01:00
BLaZeKiLL
72ab50499d linux platform added 2020-10-24 13:09:01 +05:30
BLaZeKiLL
9269fba307 image tags updated 2020-10-24 12:13:29 +05:30
BLaZeKiLL
dc54ae10a5 Merge branch 'main' of https://github.com/webbertakken/unity-builder into fix/unity-alias 2020-10-22 23:51:43 +05:30
BLaZeKiLL
5417369dba action build 2020-10-22 23:44:36 +05:30
Devashish Lal
21c985b8e9 added -nographics flag to build.sh (#166) 2020-10-22 16:05:41 +02:00
BLaZeKiLL
483b784253 default docker repository updated to new docker repository 2020-10-22 18:24:42 +05:30
Kai Biermeier
e6d3daedbe revert Fix file ownership issues for self-hosted runners. (#141) (#165) 2020-10-22 10:20:12 +02:00
BLaZeKiLL
046ab3a72d -no-graphics flag removed from build script 2020-10-22 12:27:27 +05:30
BLaZeKiLL
ec0baa5d7b removed redundant xvfb calls (part of the alias) 2020-10-20 17:59:57 +05:30
BLaZeKiLL
5b8f3cf342 refactored to unity-editor alias 2020-10-20 17:29:34 +05:30
Webber Takken
ef74241772 Fix recursive path (#160) 2020-10-12 19:37:26 +02:00
dependabot[bot]
3d7e4a8018 Bump @actions/core from 1.2.4 to 1.2.6 (#158)
Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 1.2.4 to 1.2.6.
- [Release notes](https://github.com/actions/toolkit/releases)
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-10-01 21:30:09 +02:00
Webber Takken
91da660786 remove artifacts older than 21 days (#157) 2020-09-28 19:19:18 +02:00
Webber Takken
f42f7923ed Add intructions for debugging (#154) 2020-09-27 21:44:14 +02:00
15 changed files with 148 additions and 116 deletions

13
.github/workflows/cleanup.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
name: Delete old artifacts
on:
schedule:
- cron: '30 10 * * *' # every day at 10:30
jobs:
delete-artifacts:
runs-on: ubuntu-latest
steps:
- uses: kolpav/purge-artifacts-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
expire-in: 21 days

View File

@@ -2,7 +2,7 @@ name: Actions
on:
pull_request: {}
push: { branches: [master] }
push: { branches: [main] }
env:
CODECOV_TOKEN: '2f2eb890-30e2-4724-83eb-7633832cf0de'

View File

@@ -1,10 +1,6 @@
ARG IMAGE
FROM $IMAGE
ARG UNAME=runner
ARG UID=1000
ARG GID=1000
LABEL "com.github.actions.name"="Unity - Builder"
LABEL "com.github.actions.description"="Build Unity projects for different platforms."
LABEL "com.github.actions.icon"="box"
@@ -14,15 +10,9 @@ LABEL "repository"="http://github.com/webbertakken/unity-actions"
LABEL "homepage"="http://github.com/webbertakken/unity-actions"
LABEL "maintainer"="Webber Takken <webber@takken.io>"
RUN bash -c 'mkdir -p /github/{home,workflow,workspace}' && chown $UID:$GID -R /github/
RUN getent group $GID || groupadd -g $GID $UNAME
RUN id -u $UID &>/dev/null || useradd -m -u $UID -g $GID -s /bin/bash -d /github/home $UNAME
ADD default-build-script /UnityBuilderAction
ADD steps /steps
RUN chmod -R +x /steps
ADD entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER $UID:$GID

17
action/entrypoint.sh Normal file → Executable file
View File

@@ -8,6 +8,23 @@ source /steps/activate.sh
source /steps/build.sh
source /steps/return_license.sh
#
# Instructions for debugging
#
if [[ $BUILD_EXIT_CODE -gt 0 ]]; then
echo ""
echo "###########################"
echo "# Failure #"
echo "###########################"
echo ""
echo "Please note that the exit code is not very descriptive."
echo "Most likely it will not help you solve the issue."
echo ""
echo "To find the reason for failure: please search for errors in the log above."
echo ""
fi;
#
# Exit with code from the build step.
#

File diff suppressed because one or more lines are too long

21
action/steps/activate.sh Normal file → Executable file
View File

@@ -24,9 +24,7 @@ if [[ -n "$UNITY_LICENSE" ]] || [[ -n "$UNITY_LICENSE_FILE" ]]; then
fi
# Activate license
ACTIVATION_OUTPUT=$(xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' \
/opt/Unity/Editor/Unity \
-batchmode \
ACTIVATION_OUTPUT=$(unity-editor \
-nographics \
-logFile /dev/stdout \
-quit \
@@ -63,15 +61,14 @@ elif [[ -n "$UNITY_SERIAL" && -n "$UNITY_EMAIL" && -n "$UNITY_PASSWORD" ]]; then
echo "Requesting activation (professional license)"
# Activate license
xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' \
/opt/Unity/Editor/Unity \
-batchmode \
-nographics \
-logFile /dev/stdout \
-quit \
-serial "$UNITY_SERIAL" \
-username "$UNITY_EMAIL" \
-password "$UNITY_PASSWORD"
unity-editor \
-batchmode \
-nographics \
-logFile /dev/stdout \
-quit \
-serial "$UNITY_SERIAL" \
-username "$UNITY_EMAIL" \
-password "$UNITY_PASSWORD"
# Store the exit code from the verify command
UNITY_EXIT_CODE=$?

37
action/steps/build.sh Normal file → Executable file
View File

@@ -48,7 +48,7 @@ if [ -z "$BUILD_METHOD" ]; then
# Create Editor directory if it does not exist
mkdir -p "$UNITY_PROJECT_PATH/Assets/Editor/"
# Copy the build script of Unity Builder action
cp -r "/UnityBuilderAction/Assets/Editor" "$UNITY_PROJECT_PATH/Assets/Editor/"
cp -R "/UnityBuilderAction/Assets/Editor/" "$UNITY_PROJECT_PATH/Assets/Editor/"
# Set the Build method to that of UnityBuilder Action
BUILD_METHOD="UnityBuilderAction.Builder.BuildProject"
# Verify recursive paths
@@ -108,24 +108,23 @@ echo "# Building platform #"
echo "###########################"
echo ""
xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' \
/opt/Unity/Editor/Unity \
-batchmode \
-logfile /dev/stdout \
-quit \
-customBuildName "$BUILD_NAME" \
-projectPath "$UNITY_PROJECT_PATH" \
-buildTarget "$BUILD_TARGET" \
-customBuildTarget "$BUILD_TARGET" \
-customBuildPath "$CUSTOM_BUILD_PATH" \
-executeMethod "$BUILD_METHOD" \
-buildVersion "$VERSION" \
-androidVersionCode "$ANDROID_VERSION_CODE" \
-androidKeystoreName "$ANDROID_KEYSTORE_NAME" \
-androidKeystorePass "$ANDROID_KEYSTORE_PASS" \
-androidKeyaliasName "$ANDROID_KEYALIAS_NAME" \
-androidKeyaliasPass "$ANDROID_KEYALIAS_PASS" \
$CUSTOM_PARAMETERS
unity-editor \
-nographics \
-logfile /dev/stdout \
-quit \
-customBuildName "$BUILD_NAME" \
-projectPath "$UNITY_PROJECT_PATH" \
-buildTarget "$BUILD_TARGET" \
-customBuildTarget "$BUILD_TARGET" \
-customBuildPath "$CUSTOM_BUILD_PATH" \
-executeMethod "$BUILD_METHOD" \
-buildVersion "$VERSION" \
-androidVersionCode "$ANDROID_VERSION_CODE" \
-androidKeystoreName "$ANDROID_KEYSTORE_NAME" \
-androidKeystorePass "$ANDROID_KEYSTORE_PASS" \
-androidKeyaliasName "$ANDROID_KEYALIAS_NAME" \
-androidKeyaliasPass "$ANDROID_KEYALIAS_PASS" \
$CUSTOM_PARAMETERS
# Catch exit code
BUILD_EXIT_CODE=$?

12
action/steps/return_license.sh Normal file → Executable file
View File

@@ -6,11 +6,9 @@ if [[ -n "$UNITY_SERIAL" ]]; then
#
# This will return the license that is currently in use.
#
xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' \
/opt/Unity/Editor/Unity \
-batchmode \
-nographics \
-logFile /dev/stdout \
-quit \
-returnlicense
unity-editor \
-nographics \
-logFile /dev/stdout \
-quit \
-returnlicense
fi

View File

@@ -14,7 +14,7 @@
"test": "jest"
},
"dependencies": {
"@actions/core": "^1.2.4",
"@actions/core": "^1.2.6",
"@actions/exec": "1.0.4",
"@actions/github": "^2.1.1",
"base-64": "^0.1.0",

View File

@@ -16,13 +16,7 @@ async function action() {
} else {
// Build docker image
// TODO: No image required (instead use a version published to dockerhub for the action, supply credentials for github cloning)
const builtImage = await Docker.build({
path: actionFolder,
dockerfile,
baseImage,
uid: buildParameters.uid,
gid: buildParameters.gid,
});
const builtImage = await Docker.build({ path: actionFolder, dockerfile, baseImage });
await Docker.run(builtImage, { workspace, ...buildParameters });
}

View File

@@ -1,4 +1,3 @@
import os from 'os';
import AndroidVersioning from './android-versioning';
import Input from './input';
import Platform from './platform';
@@ -21,13 +20,10 @@ class BuildParameters {
Input.androidVersionCode,
);
const { uid, gid } = os.userInfo();
return {
version: Input.unityVersion,
customImage: Input.customImage,
uid,
gid,
runnerTempPath: process.env.RUNNER_TEMP,
platform: Input.targetPlatform,
projectPath: Input.projectPath,

View File

@@ -1,18 +1,15 @@
import fs from 'fs';
import { exec } from '@actions/exec';
import ImageTag from './image-tag';
class Docker {
static async build(buildParameters, silent = false) {
const { path, dockerfile, baseImage, uid, gid } = buildParameters;
const { path, dockerfile, baseImage } = buildParameters;
const { version, platform } = baseImage;
const tag = new ImageTag({ repository: '', name: 'unity-builder', version, platform });
const command = `docker build ${path} \
--file ${dockerfile} \
--build-arg IMAGE=${baseImage} \
--build-arg UID=${uid} \
--build-arg GID=${gid} \
--tag ${tag}`;
await exec(command, undefined, { silent });
@@ -86,9 +83,6 @@ class Docker {
--volume "${workspace}":"/github/workspace" \
${image}`;
fs.mkdirSync(`${runnerTempPath}/_github_home`, { recursive: true });
fs.mkdirSync(`${runnerTempPath}/_github_workflow`, { recursive: true });
await exec(command, undefined, { silent });
}
}

View File

@@ -1,11 +1,11 @@
import { has, get, trimEnd, trimStart } from 'lodash-es';
import { trimEnd, trimStart } from 'lodash-es';
import Platform from './platform';
class ImageTag {
constructor(imageProperties) {
const {
repository = 'gableroux',
name = 'unity3d',
repository = 'unityci',
name = 'editor',
version = '2019.2.11f1',
platform,
customImage,
@@ -15,15 +15,7 @@ class ImageTag {
throw new Error(`Invalid version "${version}".`);
}
if (!has(ImageTag.targetPlatformToImageSuffixMap, platform)) {
throw new Error(`Platform "${platform}" is currently not supported.`);
}
const builderPlatform = get(
ImageTag.targetPlatformToImageSuffixMap,
platform,
ImageTag.imageSuffixes.generic,
);
const builderPlatform = ImageTag.getTargetPlatformToImageSuffixMap(platform, version);
Object.assign(this, { repository, name, version, platform, builderPlatform, customImage });
}
@@ -36,40 +28,81 @@ class ImageTag {
return {
generic: '',
webgl: 'webgl',
mac: 'mac',
windows: 'windows',
mac: 'mac-mono',
windows: 'windows-mono',
linux: 'base',
linuxIl2cpp: 'linux-il2cpp',
android: 'android',
ios: 'ios',
facebook: 'facebook',
};
}
static get targetPlatformToImageSuffixMap() {
const { generic, webgl, mac, windows, android, ios, facebook } = ImageTag.imageSuffixes;
static getTargetPlatformToImageSuffixMap(platform, version) {
const {
generic,
webgl,
mac,
windows,
linux,
linuxIl2cpp,
android,
ios,
facebook,
} = ImageTag.imageSuffixes;
const [major, minor] = version.split('.');
// @see: https://docs.unity3d.com/ScriptReference/BuildTarget.html
return {
[Platform.types.StandaloneOSX]: mac,
[Platform.types.StandaloneWindows]: windows,
[Platform.types.StandaloneWindows64]: windows,
[Platform.types.StandaloneLinux64]: windows,
[Platform.types.iOS]: ios,
[Platform.types.Android]: android,
[Platform.types.WebGL]: webgl,
[Platform.types.WSAPlayer]: windows,
[Platform.types.PS4]: windows,
[Platform.types.XboxOne]: windows,
[Platform.types.tvOS]: windows,
[Platform.types.Switch]: windows,
switch (platform) {
case Platform.types.StandaloneOSX:
return mac;
case Platform.types.StandaloneWindows:
return windows;
case Platform.types.StandaloneWindows64:
return windows;
case Platform.types.StandaloneLinux64: {
// Unity versions before 2019.3 do not support il2cpp
if (major >= 2020 || (major === 2019 && minor >= 3)) {
return linuxIl2cpp;
}
return linux;
}
case Platform.types.iOS:
return ios;
case Platform.types.Android:
return android;
case Platform.types.WebGL:
return webgl;
case Platform.types.WSAPlayer:
return windows;
case Platform.types.PS4:
return windows;
case Platform.types.XboxOne:
return windows;
case Platform.types.tvOS:
return windows;
case Platform.types.Switch:
return windows;
// Unsupported
[Platform.types.Lumin]: windows,
[Platform.types.BJM]: windows,
[Platform.types.Stadia]: windows,
[Platform.types.Facebook]: facebook,
[Platform.types.NoTarget]: generic,
case Platform.types.Lumin:
return windows;
case Platform.types.BJM:
return windows;
case Platform.types.Stadia:
return windows;
case Platform.types.Facebook:
return facebook;
case Platform.types.NoTarget:
return generic;
// Test specific
[Platform.types.Test]: generic,
};
case Platform.types.Test:
return generic;
default:
throw new Error(`
Platform must be one of the ones described in the documentation.
"${platform}" is currently not supported.`);
}
}
get tag() {
@@ -87,7 +120,7 @@ class ImageTag {
return this.customImage;
}
return `${image}:${tag}`;
return `${image}:${tag}-0`; // '0' here represents the docker repo version
}
}

View File

@@ -10,9 +10,9 @@ describe('UnityImageVersion', () => {
};
const defaults = {
repository: 'gableroux',
name: 'unity3d',
image: 'gableroux/unity3d',
repository: 'unityci',
name: 'editor',
image: 'unityci/editor',
};
describe('constructor', () => {
@@ -49,7 +49,7 @@ describe('UnityImageVersion', () => {
it('returns the correct version', () => {
const image = new ImageTag({ version: '2099.1.1111', platform: some.platform });
expect(image.toString()).toStrictEqual(`${defaults.image}:2099.1.1111`);
expect(image.toString()).toStrictEqual(`${defaults.image}:2099.1.1111-0`);
});
it('returns customImage if given', () => {
const image = new ImageTag({
@@ -64,13 +64,13 @@ describe('UnityImageVersion', () => {
it('returns the specific build platform', () => {
const image = new ImageTag({ version: '2019.2.11f1', platform: 'WebGL' });
expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-webgl`);
expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-webgl-0`);
});
it('returns no specific build platform for generic targetPlatforms', () => {
const image = new ImageTag({ platform: 'NoTarget' });
expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1`);
expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-0`);
});
});
});

View File

@@ -2,9 +2,10 @@
# yarn lockfile v1
"@actions/core@^1.2.4":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.4.tgz#96179dbf9f8d951dd74b40a0dbd5c22555d186ab"
"@actions/core@^1.2.6":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.2.6.tgz#a78d49f41a4def18e88ce47c2cac615d5694bf09"
integrity sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA==
"@actions/exec@1.0.4":
version "1.0.4"