Fixes files owned by root

pull/247/head
Gaeel Bradshaw 2021-04-28 18:03:27 +02:00
parent 7e7938581c
commit 0ca8806349
7 changed files with 543 additions and 497 deletions

12
dist/Dockerfile vendored
View File

@ -1,6 +1,10 @@
ARG IMAGE ARG IMAGE
FROM $IMAGE FROM $IMAGE
ARG UNAME=runner
ARG UID=1000
ARG GID=1000
LABEL "com.github.actions.name"="Unity - Builder" LABEL "com.github.actions.name"="Unity - Builder"
LABEL "com.github.actions.description"="Build Unity projects for different platforms." LABEL "com.github.actions.description"="Build Unity projects for different platforms."
LABEL "com.github.actions.icon"="box" LABEL "com.github.actions.icon"="box"
@ -10,6 +14,12 @@ LABEL "repository"="http://github.com/webbertakken/unity-actions"
LABEL "homepage"="http://github.com/webbertakken/unity-actions" LABEL "homepage"="http://github.com/webbertakken/unity-actions"
LABEL "maintainer"="Webber Takken <webber@takken.io>" 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
RUN chown $UID:$GID -R /opt/unity/
ADD default-build-script /UnityBuilderAction ADD default-build-script /UnityBuilderAction
ADD steps /steps ADD steps /steps
RUN chmod -R +x /steps RUN chmod -R +x /steps
@ -18,3 +28,5 @@ RUN chmod +x /entrypoint.sh
RUN ls RUN ls
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]
USER $UID:$GID

19
dist/index.js vendored
View File

@ -59,7 +59,13 @@ function run() {
// default and local case // default and local case
default: default:
core.info('Building locally'); core.info('Building locally');
builtImage = yield model_1.Docker.build({ path: actionFolder, dockerfile, baseImage }); builtImage = yield model_1.Docker.build({
path: actionFolder,
dockerfile,
baseImage,
uid: buildParameters.uid,
gid: buildParameters.gid,
});
yield model_1.Docker.run(builtImage, Object.assign({ workspace }, buildParameters)); yield model_1.Docker.run(builtImage, Object.assign({ workspace }, buildParameters));
break; break;
} }
@ -746,6 +752,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
const os_1 = __importDefault(__webpack_require__(12087));
const android_versioning_1 = __importDefault(__webpack_require__(43059)); const android_versioning_1 = __importDefault(__webpack_require__(43059));
const input_1 = __importDefault(__webpack_require__(91933)); const input_1 = __importDefault(__webpack_require__(91933));
const platform_1 = __importDefault(__webpack_require__(9707)); const platform_1 = __importDefault(__webpack_require__(9707));
@ -758,9 +765,12 @@ class BuildParameters {
const unityVersion = unity_versioning_1.default.determineUnityVersion(input_1.default.projectPath, input_1.default.unityVersion); const unityVersion = unity_versioning_1.default.determineUnityVersion(input_1.default.projectPath, input_1.default.unityVersion);
const buildVersion = yield versioning_1.default.determineVersion(input_1.default.versioningStrategy, input_1.default.specifiedVersion); const buildVersion = yield versioning_1.default.determineVersion(input_1.default.versioningStrategy, input_1.default.specifiedVersion);
const androidVersionCode = android_versioning_1.default.determineVersionCode(buildVersion, input_1.default.androidVersionCode); const androidVersionCode = android_versioning_1.default.determineVersionCode(buildVersion, input_1.default.androidVersionCode);
const { uid, gid } = os_1.default.userInfo();
return { return {
version: unityVersion, version: unityVersion,
customImage: input_1.default.customImage, customImage: input_1.default.customImage,
uid,
gid,
runnerTempPath: process.env.RUNNER_TEMP, runnerTempPath: process.env.RUNNER_TEMP,
platform: input_1.default.targetPlatform, platform: input_1.default.targetPlatform,
projectPath: input_1.default.projectPath, projectPath: input_1.default.projectPath,
@ -874,17 +884,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
const fs_1 = __importDefault(__webpack_require__(35747));
const exec_1 = __webpack_require__(71514); const exec_1 = __webpack_require__(71514);
const image_tag_1 = __importDefault(__webpack_require__(57648)); const image_tag_1 = __importDefault(__webpack_require__(57648));
class Docker { class Docker {
static build(buildParameters, silent = false) { static build(buildParameters, silent = false) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const { path, dockerfile, baseImage } = buildParameters; const { path, dockerfile, baseImage, uid, gid } = buildParameters;
const { version, platform } = baseImage; const { version, platform } = baseImage;
const tag = new image_tag_1.default({ repository: '', name: 'unity-builder', version, platform }); const tag = new image_tag_1.default({ repository: '', name: 'unity-builder', version, platform });
const command = `docker build ${path} \ const command = `docker build ${path} \
--file ${dockerfile} \ --file ${dockerfile} \
--build-arg IMAGE=${baseImage} \ --build-arg IMAGE=${baseImage} \
--build-arg UID=${uid} \
--build-arg GID=${gid} \
--tag ${tag}`; --tag ${tag}`;
yield exec_1.exec(command, undefined, { silent }); yield exec_1.exec(command, undefined, { silent });
return tag; return tag;
@ -937,6 +950,8 @@ class Docker {
--volume "${runnerTempPath}/_github_workflow":"/github/workflow" \ --volume "${runnerTempPath}/_github_workflow":"/github/workflow" \
--volume "${workspace}":"/github/workspace" \ --volume "${workspace}":"/github/workspace" \
${image}`; ${image}`;
fs_1.default.mkdirSync(`${runnerTempPath}/_github_home`, { recursive: true });
fs_1.default.mkdirSync(`${runnerTempPath}/_github_workflow`, { recursive: true });
yield exec_1.exec(command, undefined, { silent }); yield exec_1.exec(command, undefined, { silent });
}); });
} }

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
echo "Exporting HOME as /github/home"
export HOME=/github/home
if [[ -n "$UNITY_LICENSE" ]] || [[ -n "$UNITY_LICENSE_FILE" ]]; then if [[ -n "$UNITY_LICENSE" ]] || [[ -n "$UNITY_LICENSE_FILE" ]]; then
# #
# PERSONAL LICENSE MODE # PERSONAL LICENSE MODE

View File

@ -26,7 +26,13 @@ async function run() {
// default and local case // default and local case
default: default:
core.info('Building locally'); core.info('Building locally');
builtImage = await Docker.build({ path: actionFolder, dockerfile, baseImage }); builtImage = await Docker.build({
path: actionFolder,
dockerfile,
baseImage,
uid: buildParameters.uid,
gid: buildParameters.gid,
});
await Docker.run(builtImage, { workspace, ...buildParameters }); await Docker.run(builtImage, { workspace, ...buildParameters });
break; break;
} }

View File

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

View File

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