merge latest
						commit
						f315ee9e34
					
				|  | @ -10,7 +10,7 @@ env: | ||||||
|   UNITY_LICENSE: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>\n    <License id=\"Terms\">\n        <MachineBindings>\n            <Binding Key=\"1\" Value=\"576562626572264761624c65526f7578\"/>\n            <Binding Key=\"2\" Value=\"576562626572264761624c65526f7578\"/>\n        </MachineBindings>\n        <MachineID Value=\"D7nTUnjNAmtsUMcnoyrqkgIbYdM=\"/>\n        <SerialHash Value=\"2033b8ac3e6faa3742ca9f0bfae44d18f2a96b80\"/>\n        <Features>\n            <Feature Value=\"33\"/>\n            <Feature Value=\"1\"/>\n            <Feature Value=\"12\"/>\n            <Feature Value=\"2\"/>\n            <Feature Value=\"24\"/>\n            <Feature Value=\"3\"/>\n            <Feature Value=\"36\"/>\n            <Feature Value=\"17\"/>\n            <Feature Value=\"19\"/>\n            <Feature Value=\"62\"/>\n        </Features>\n        <DeveloperData Value=\"AQAAAEY0LUJHUlgtWEQ0RS1aQ1dWLUM1SlctR0RIQg==\"/>\n        <SerialMasked Value=\"F4-BGRX-XD4E-ZCWV-C5JW-XXXX\"/>\n        <StartDate Value=\"2021-02-08T00:00:00\"/>\n        <UpdateDate Value=\"2021-02-09T00:34:57\"/>\n        <InitialActivationDate Value=\"2021-02-08T00:34:56\"/>\n        <LicenseVersion Value=\"6.x\"/>\n        <ClientProvidedVersion Value=\"2018.4.30f1\"/>\n        <AlwaysOnline Value=\"false\"/>\n        <Entitlements>\n            <Entitlement Ns=\"unity_editor\" Tag=\"UnityPersonal\" Type=\"EDITOR\" ValidTo=\"9999-12-31T00:00:00\"/>\n            <Entitlement Ns=\"unity_editor\" Tag=\"DarkSkin\" Type=\"EDITOR_FEATURE\" ValidTo=\"9999-12-31T00:00:00\"/>\n        </Entitlements>\n    </License>\n<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments\"/><SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/><Reference URI=\"#Terms\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><DigestValue>m0Db8UK+ktnOLJBtHybkfetpcKo=</DigestValue></Reference></SignedInfo><SignatureValue>o/pUbSQAukz7+ZYAWhnA0AJbIlyyCPL7bKVEM2lVqbrXt7cyey+umkCXamuOgsWPVUKBMkXtMH8L\n5etLmD0getWIhTGhzOnDCk+gtIPfL4jMo9tkEuOCROQAXCci23VFscKcrkB+3X6h4wEOtA2APhOY\nB+wvC794o8/82ffjP79aVAi57rp3Wmzx+9pe9yMwoJuljAy2sc2tIMgdQGWVmOGBpQm3JqsidyzI\nJWG2kjnc7pDXK9pwYzXoKiqUqqrut90d+kQqRyv7MSZXR50HFqD/LI69h68b7P8Bjo3bPXOhNXGR\n9YCoemH6EkfCJxp2gIjzjWW+l2Hj2EsFQi8YXw==</SignatureValue></Signature></root>" |   UNITY_LICENSE: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>\n    <License id=\"Terms\">\n        <MachineBindings>\n            <Binding Key=\"1\" Value=\"576562626572264761624c65526f7578\"/>\n            <Binding Key=\"2\" Value=\"576562626572264761624c65526f7578\"/>\n        </MachineBindings>\n        <MachineID Value=\"D7nTUnjNAmtsUMcnoyrqkgIbYdM=\"/>\n        <SerialHash Value=\"2033b8ac3e6faa3742ca9f0bfae44d18f2a96b80\"/>\n        <Features>\n            <Feature Value=\"33\"/>\n            <Feature Value=\"1\"/>\n            <Feature Value=\"12\"/>\n            <Feature Value=\"2\"/>\n            <Feature Value=\"24\"/>\n            <Feature Value=\"3\"/>\n            <Feature Value=\"36\"/>\n            <Feature Value=\"17\"/>\n            <Feature Value=\"19\"/>\n            <Feature Value=\"62\"/>\n        </Features>\n        <DeveloperData Value=\"AQAAAEY0LUJHUlgtWEQ0RS1aQ1dWLUM1SlctR0RIQg==\"/>\n        <SerialMasked Value=\"F4-BGRX-XD4E-ZCWV-C5JW-XXXX\"/>\n        <StartDate Value=\"2021-02-08T00:00:00\"/>\n        <UpdateDate Value=\"2021-02-09T00:34:57\"/>\n        <InitialActivationDate Value=\"2021-02-08T00:34:56\"/>\n        <LicenseVersion Value=\"6.x\"/>\n        <ClientProvidedVersion Value=\"2018.4.30f1\"/>\n        <AlwaysOnline Value=\"false\"/>\n        <Entitlements>\n            <Entitlement Ns=\"unity_editor\" Tag=\"UnityPersonal\" Type=\"EDITOR\" ValidTo=\"9999-12-31T00:00:00\"/>\n            <Entitlement Ns=\"unity_editor\" Tag=\"DarkSkin\" Type=\"EDITOR_FEATURE\" ValidTo=\"9999-12-31T00:00:00\"/>\n        </Entitlements>\n    </License>\n<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments\"/><SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/><Reference URI=\"#Terms\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><DigestValue>m0Db8UK+ktnOLJBtHybkfetpcKo=</DigestValue></Reference></SignedInfo><SignatureValue>o/pUbSQAukz7+ZYAWhnA0AJbIlyyCPL7bKVEM2lVqbrXt7cyey+umkCXamuOgsWPVUKBMkXtMH8L\n5etLmD0getWIhTGhzOnDCk+gtIPfL4jMo9tkEuOCROQAXCci23VFscKcrkB+3X6h4wEOtA2APhOY\nB+wvC794o8/82ffjP79aVAi57rp3Wmzx+9pe9yMwoJuljAy2sc2tIMgdQGWVmOGBpQm3JqsidyzI\nJWG2kjnc7pDXK9pwYzXoKiqUqqrut90d+kQqRyv7MSZXR50HFqD/LI69h68b7P8Bjo3bPXOhNXGR\n9YCoemH6EkfCJxp2gIjzjWW+l2Hj2EsFQi8YXw==</SignatureValue></Signature></root>" | ||||||
| 
 | 
 | ||||||
| jobs: | jobs: | ||||||
|   buildForAllPlatforms: |   buildForAllPlatformsUbuntu: | ||||||
|     name: Build for ${{ matrix.targetPlatform }} on version ${{ matrix.unityVersion }} |     name: Build for ${{ matrix.targetPlatform }} on version ${{ matrix.unityVersion }} | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     strategy: |     strategy: | ||||||
|  | @ -48,9 +48,9 @@ jobs: | ||||||
|       - uses: actions/cache@v2 |       - uses: actions/cache@v2 | ||||||
|         with: |         with: | ||||||
|           path: ${{ matrix.projectPath }}/Library |           path: ${{ matrix.projectPath }}/Library | ||||||
|           key: Library-${{ matrix.projectPath }}-${{ matrix.targetPlatform }} |           key: Library-${{ matrix.projectPath }}-ubuntu-${{ matrix.targetPlatform }} | ||||||
|           restore-keys: | |           restore-keys: | | ||||||
|             Library-${{ matrix.projectPath }}- |             Library-${{ matrix.projectPath }}-ubuntu- | ||||||
|             Library- |             Library- | ||||||
| 
 | 
 | ||||||
|       ########################### |       ########################### | ||||||
|  | @ -68,6 +68,6 @@ jobs: | ||||||
|       ########################### |       ########################### | ||||||
|       - uses: actions/upload-artifact@v2 |       - uses: actions/upload-artifact@v2 | ||||||
|         with: |         with: | ||||||
|           name: Build (${{ matrix.unityVersion }}) |           name: Build Ubuntu (${{ matrix.unityVersion }}) | ||||||
|           path: build |           path: build | ||||||
|           retention-days: 14 |           retention-days: 14 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,77 @@ | ||||||
|  | name: Windows Builds | ||||||
|  | 
 | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - main | ||||||
|  | 
 | ||||||
|  | env: | ||||||
|  |   UNITY_LICENSE: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>\n    <License id=\"Terms\">\n        <MachineBindings>\n            <Binding Key=\"1\" Value=\"576562626572264761624c65526f7578\"/>\n            <Binding Key=\"2\" Value=\"576562626572264761624c65526f7578\"/>\n        </MachineBindings>\n        <MachineID Value=\"D7nTUnjNAmtsUMcnoyrqkgIbYdM=\"/>\n        <SerialHash Value=\"2033b8ac3e6faa3742ca9f0bfae44d18f2a96b80\"/>\n        <Features>\n            <Feature Value=\"33\"/>\n            <Feature Value=\"1\"/>\n            <Feature Value=\"12\"/>\n            <Feature Value=\"2\"/>\n            <Feature Value=\"24\"/>\n            <Feature Value=\"3\"/>\n            <Feature Value=\"36\"/>\n            <Feature Value=\"17\"/>\n            <Feature Value=\"19\"/>\n            <Feature Value=\"62\"/>\n        </Features>\n        <DeveloperData Value=\"AQAAAEY0LUJHUlgtWEQ0RS1aQ1dWLUM1SlctR0RIQg==\"/>\n        <SerialMasked Value=\"F4-BGRX-XD4E-ZCWV-C5JW-XXXX\"/>\n        <StartDate Value=\"2021-02-08T00:00:00\"/>\n        <UpdateDate Value=\"2021-02-09T00:34:57\"/>\n        <InitialActivationDate Value=\"2021-02-08T00:34:56\"/>\n        <LicenseVersion Value=\"6.x\"/>\n        <ClientProvidedVersion Value=\"2018.4.30f1\"/>\n        <AlwaysOnline Value=\"false\"/>\n        <Entitlements>\n            <Entitlement Ns=\"unity_editor\" Tag=\"UnityPersonal\" Type=\"EDITOR\" ValidTo=\"9999-12-31T00:00:00\"/>\n            <Entitlement Ns=\"unity_editor\" Tag=\"DarkSkin\" Type=\"EDITOR_FEATURE\" ValidTo=\"9999-12-31T00:00:00\"/>\n        </Entitlements>\n    </License>\n<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments\"/><SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/><Reference URI=\"#Terms\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><DigestValue>m0Db8UK+ktnOLJBtHybkfetpcKo=</DigestValue></Reference></SignedInfo><SignatureValue>o/pUbSQAukz7+ZYAWhnA0AJbIlyyCPL7bKVEM2lVqbrXt7cyey+umkCXamuOgsWPVUKBMkXtMH8L\n5etLmD0getWIhTGhzOnDCk+gtIPfL4jMo9tkEuOCROQAXCci23VFscKcrkB+3X6h4wEOtA2APhOY\nB+wvC794o8/82ffjP79aVAi57rp3Wmzx+9pe9yMwoJuljAy2sc2tIMgdQGWVmOGBpQm3JqsidyzI\nJWG2kjnc7pDXK9pwYzXoKiqUqqrut90d+kQqRyv7MSZXR50HFqD/LI69h68b7P8Bjo3bPXOhNXGR\n9YCoemH6EkfCJxp2gIjzjWW+l2Hj2EsFQi8YXw==</SignatureValue></Signature></root>" | ||||||
|  | 
 | ||||||
|  | jobs: | ||||||
|  |   buildForAllPlatformsWindows: | ||||||
|  |     name: Build for ${{ matrix.targetPlatform }} on version ${{ matrix.unityVersion }} | ||||||
|  |     runs-on: windows-2019 | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         projectPath: | ||||||
|  |           - test-project | ||||||
|  |         unityVersion: | ||||||
|  |           - 2020.3.24f1 | ||||||
|  |         targetPlatform: | ||||||
|  |           - StandaloneWindows64 # Build a Windows 64-bit standalone. | ||||||
|  |           - StandaloneWindows # Build a Windows 32-bit standalone. | ||||||
|  |           - WSAPlayer # Build a UWP App | ||||||
|  |           - tvOS # Build an Apple TV XCode project | ||||||
|  | 
 | ||||||
|  |     steps: | ||||||
|  |       ########################### | ||||||
|  |       #         Checkout        # | ||||||
|  |       ########################### | ||||||
|  |       - uses: actions/checkout@v2 | ||||||
|  |         with: | ||||||
|  |           lfs: true | ||||||
|  | 
 | ||||||
|  |       ########################### | ||||||
|  |       #          Cache          # | ||||||
|  |       ########################### | ||||||
|  |       - uses: actions/cache@v2 | ||||||
|  |         with: | ||||||
|  |           path: ${{ matrix.projectPath }}/Library | ||||||
|  |           key: Library-${{ matrix.projectPath }}-windows-${{ matrix.targetPlatform }} | ||||||
|  |           restore-keys: | | ||||||
|  |             Library-${{ matrix.projectPath }}-windows- | ||||||
|  |             Library- | ||||||
|  | 
 | ||||||
|  |       ########################### | ||||||
|  |       #  Set Scripting Backend  # | ||||||
|  |       ########################### | ||||||
|  |       - name: Set Scripting Backend To il2cpp | ||||||
|  |         run: | | ||||||
|  |           Move-Item -Path "./test-project/ProjectSettings/ProjectSettingsWindows.asset" -Destination "./test-project/ProjectSettings/ProjectSettings.asset" -Force | ||||||
|  | 
 | ||||||
|  |       ########################### | ||||||
|  |       #          Build          # | ||||||
|  |       ########################### | ||||||
|  |       - uses: ./ | ||||||
|  |         env: | ||||||
|  |           UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }} | ||||||
|  |           UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }} | ||||||
|  |           UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }} | ||||||
|  |         with: | ||||||
|  |           projectPath: ${{ matrix.projectPath }} | ||||||
|  |           unityVersion: ${{ matrix.unityVersion }} | ||||||
|  |           targetPlatform: ${{ matrix.targetPlatform }} | ||||||
|  |           customParameters: -profile SomeProfile -someBoolean -someValue exampleValue | ||||||
|  |           allowDirtyBuild: true | ||||||
|  |       # We use dirty build because we are replacing the default project settings file above | ||||||
|  | 
 | ||||||
|  |       ########################### | ||||||
|  |       #          Upload         # | ||||||
|  |       ########################### | ||||||
|  |       - uses: actions/upload-artifact@v2 | ||||||
|  |         with: | ||||||
|  |           name: Build Windows (${{ matrix.unityVersion }}) | ||||||
|  |           path: build | ||||||
|  |           retention-days: 14 | ||||||
|  | @ -2,3 +2,4 @@ | ||||||
| node_modules | node_modules | ||||||
| coverage/ | coverage/ | ||||||
| lib/ | lib/ | ||||||
|  | .vsconfig | ||||||
|  |  | ||||||
|  | @ -39,12 +39,14 @@ namespace UnityBuilderAction | ||||||
| 
 | 
 | ||||||
|       // Set version for this build |       // Set version for this build | ||||||
|       VersionApplicator.SetVersion(options["buildVersion"]); |       VersionApplicator.SetVersion(options["buildVersion"]); | ||||||
|       VersionApplicator.SetAndroidVersionCode(options["androidVersionCode"]); |  | ||||||
|        |        | ||||||
|       // Apply Android settings |       // Apply Android settings | ||||||
|       if (buildPlayerOptions.target == BuildTarget.Android) |       if (buildPlayerOptions.target == BuildTarget.Android) | ||||||
|  |       { | ||||||
|  |         VersionApplicator.SetAndroidVersionCode(options["androidVersionCode"]); | ||||||
|         AndroidSettings.Apply(options); |         AndroidSettings.Apply(options); | ||||||
| 
 |       } | ||||||
|  |        | ||||||
|       // Execute default AddressableAsset content build, if the package is installed. |       // Execute default AddressableAsset content build, if the package is installed. | ||||||
|       // Version defines would be the best solution here, but Unity 2018 doesn't support that, |       // Version defines would be the best solution here, but Unity 2018 doesn't support that, | ||||||
|       // so we fall back to using reflection instead. |       // so we fall back to using reflection instead. | ||||||
|  |  | ||||||
|  | @ -43,10 +43,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | ||||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
|  | var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
|  |     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||||
|  | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const core = __importStar(__webpack_require__(42186)); | const core = __importStar(__webpack_require__(42186)); | ||||||
| const model_1 = __webpack_require__(41359); | const model_1 = __webpack_require__(41359); | ||||||
| const cli_1 = __webpack_require__(55651); | const cli_1 = __webpack_require__(55651); | ||||||
|  | const platform_setup_1 = __importDefault(__webpack_require__(64423)); | ||||||
| function runMain() { | function runMain() { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         try { |         try { | ||||||
|  | @ -62,6 +66,7 @@ function runMain() { | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 core.info('Building locally'); |                 core.info('Building locally'); | ||||||
|  |                 platform_setup_1.default.setup(buildParameters); | ||||||
|                 const builtImage = yield model_1.Docker.build({ path: actionFolder, dockerfile, baseImage }); |                 const builtImage = yield model_1.Docker.build({ path: actionFolder, dockerfile, baseImage }); | ||||||
|                 yield model_1.Docker.run(builtImage, Object.assign({ workspace }, buildParameters)); |                 yield model_1.Docker.run(builtImage, Object.assign({ workspace }, buildParameters)); | ||||||
|             } |             } | ||||||
|  | @ -96,7 +101,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const path_1 = __importDefault(__webpack_require__(85622)); | const path_1 = __importDefault(__webpack_require__(85622)); | ||||||
| class Action { | class Action { | ||||||
|     static get supportedPlatforms() { |     static get supportedPlatforms() { | ||||||
|         return ['linux']; |         return ['linux', 'win32']; | ||||||
|     } |     } | ||||||
|     static get isRunningLocally() { |     static get isRunningLocally() { | ||||||
|         return process.env.RUNNER_WORKSPACE === undefined; |         return process.env.RUNNER_WORKSPACE === undefined; | ||||||
|  | @ -117,7 +122,15 @@ class Action { | ||||||
|         return `${Action.rootFolder}/dist`; |         return `${Action.rootFolder}/dist`; | ||||||
|     } |     } | ||||||
|     static get dockerfile() { |     static get dockerfile() { | ||||||
|         return `${Action.actionFolder}/Dockerfile`; |         const currentPlatform = process.platform; | ||||||
|  |         switch (currentPlatform) { | ||||||
|  |             case 'linux': | ||||||
|  |                 return `${Action.actionFolder}/platforms/ubuntu/Dockerfile`; | ||||||
|  |             case 'win32': | ||||||
|  |                 return `${Action.actionFolder}/platforms/windows/Dockerfile`; | ||||||
|  |             default: | ||||||
|  |                 throw new Error(`No Dockerfile for currently unsupported platform: ${currentPlatform}`); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     static get workspace() { |     static get workspace() { | ||||||
|         return process.env.GITHUB_WORKSPACE; |         return process.env.GITHUB_WORKSPACE; | ||||||
|  | @ -202,6 +215,25 @@ exports.default = AndroidVersioning; | ||||||
| 
 | 
 | ||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||||||
|  | }) : (function(o, m, k, k2) { | ||||||
|  |     if (k2 === undefined) k2 = k; | ||||||
|  |     o[k2] = m[k]; | ||||||
|  | })); | ||||||
|  | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||||||
|  |     Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||||||
|  | }) : function(o, v) { | ||||||
|  |     o["default"] = v; | ||||||
|  | }); | ||||||
|  | var __importStar = (this && this.__importStar) || function (mod) { | ||||||
|  |     if (mod && mod.__esModule) return mod; | ||||||
|  |     var result = {}; | ||||||
|  |     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||||||
|  |     __setModuleDefault(result, mod); | ||||||
|  |     return result; | ||||||
|  | }; | ||||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|     return new (P || (P = Promise))(function (resolve, reject) { |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|  | @ -216,6 +248,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| const nanoid_1 = __webpack_require__(39140); | const nanoid_1 = __webpack_require__(39140); | ||||||
|  | const core = __importStar(__webpack_require__(42186)); | ||||||
| const android_versioning_1 = __importDefault(__webpack_require__(43059)); | const android_versioning_1 = __importDefault(__webpack_require__(43059)); | ||||||
| const cloud_runner_constants_1 = __importDefault(__webpack_require__(91311)); | const cloud_runner_constants_1 = __importDefault(__webpack_require__(91311)); | ||||||
| const cloud_runner_namespace_1 = __importDefault(__webpack_require__(63287)); | const cloud_runner_namespace_1 = __importDefault(__webpack_require__(63287)); | ||||||
|  | @ -231,9 +264,25 @@ class BuildParameters { | ||||||
|             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 androidSdkManagerParameters = android_versioning_1.default.determineSdkManagerParameters(input_1.default.androidTargetSdkVersion); |             const androidSdkManagerParameters = android_versioning_1.default.determineSdkManagerParameters(input_1.default.androidTargetSdkVersion); | ||||||
|  |             let unitySerial = ''; | ||||||
|  |             if (!process.env.UNITY_SERIAL) { | ||||||
|  |                 //No serial was present so it is a personal license that we need to convert
 | ||||||
|  |                 if (!process.env.UNITY_LICENSE) { | ||||||
|  |                     throw new Error(`Missing Unity License File and no Serial was found. If this
 | ||||||
|  |                           is a personal license, make sure to follow the activation | ||||||
|  |                           steps and set the UNITY_LICENSE GitHub secret or enter a Unity | ||||||
|  |                           serial number inside the UNITY_SERIAL GitHub secret.`);
 | ||||||
|  |                 } | ||||||
|  |                 unitySerial = this.getSerialFromLicenseFile(process.env.UNITY_LICENSE); | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 unitySerial = process.env.UNITY_SERIAL; | ||||||
|  |             } | ||||||
|  |             core.setSecret(unitySerial); | ||||||
|             return { |             return { | ||||||
|                 version: unityVersion, |                 version: unityVersion, | ||||||
|                 customImage: input_1.default.customImage, |                 customImage: input_1.default.customImage, | ||||||
|  |                 unitySerial, | ||||||
|                 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, | ||||||
|  | @ -285,6 +334,17 @@ class BuildParameters { | ||||||
|         } |         } | ||||||
|         return filename; |         return filename; | ||||||
|     } |     } | ||||||
|  |     static getSerialFromLicenseFile(license) { | ||||||
|  |         const startKey = `<DeveloperData Value="`; | ||||||
|  |         const endKey = `"/>`; | ||||||
|  |         const startIndex = license.indexOf(startKey) + startKey.length; | ||||||
|  |         if (startIndex < 0) { | ||||||
|  |             throw new Error(`License File was corrupted, unable to locate serial`); | ||||||
|  |         } | ||||||
|  |         const endIndex = license.indexOf(endKey, startIndex); | ||||||
|  |         // Slice off the first 4 characters as they are garbage values
 | ||||||
|  |         return Buffer.from(license.slice(startIndex, endIndex), 'base64').toString('binary').slice(4); | ||||||
|  |     } | ||||||
| } | } | ||||||
| exports.default = BuildParameters; | exports.default = BuildParameters; | ||||||
| 
 | 
 | ||||||
|  | @ -3222,21 +3282,39 @@ class Docker { | ||||||
|     } |     } | ||||||
|     static run(image, parameters, silent = false) { |     static run(image, parameters, silent = false) { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|             const { workspace, runnerTempPath, sshAgent } = parameters; |             const { workspace, unitySerial, runnerTempPath, sshAgent } = parameters; | ||||||
|             const command = `docker run \
 |             const baseOsSpecificArguments = this.getBaseOsSpecificArguments(process.platform, workspace, unitySerial, runnerTempPath, sshAgent); | ||||||
|         --workdir /github/workspace \ |             const runCommand = `docker run \
 | ||||||
|         --rm \ |     --workdir /github/workspace \ | ||||||
|         ${image_environment_factory_1.default.getEnvVarString(parameters)} \ |     --rm \ | ||||||
|         --volume "/var/run/docker.sock":"/var/run/docker.sock" \ |     ${image_environment_factory_1.default.getEnvVarString(parameters)} \ | ||||||
|         --volume "${runnerTempPath}/_github_home":"/root" \ |     ${baseOsSpecificArguments} \ | ||||||
|         --volume "${runnerTempPath}/_github_workflow":"/github/workflow" \ |     ${image}`;
 | ||||||
|         --volume "${workspace}":"/github/workspace" \ |             yield exec_1.exec(runCommand, undefined, { silent }); | ||||||
|         ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ |  | ||||||
|         ${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''} \ |  | ||||||
|         ${image}`;
 |  | ||||||
|             yield exec_1.exec(command, undefined, { silent }); |  | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |     static getBaseOsSpecificArguments(baseOs, workspace, unitySerial, runnerTemporaryPath, sshAgent) { | ||||||
|  |         switch (baseOs) { | ||||||
|  |             case 'linux': | ||||||
|  |                 return `--env UNITY_SERIAL \
 | ||||||
|  |                 ${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \ | ||||||
|  |                 --volume "/var/run/docker.sock":"/var/run/docker.sock" \ | ||||||
|  |                 --volume "${runnerTemporaryPath}/_github_home":"/root" \ | ||||||
|  |                 --volume "${runnerTemporaryPath}/_github_workflow":"/github/workflow" \ | ||||||
|  |                 --volume "${workspace}":"/github/workspace" \ | ||||||
|  |                 ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ | ||||||
|  |                 ${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''}`;
 | ||||||
|  |             case 'win32': | ||||||
|  |                 return `--env UNITY_SERIAL="${unitySerial}" \
 | ||||||
|  |                 --volume "${workspace}":"c:/github/workspace" \ | ||||||
|  |                 --volume "c:/regkeys":"c:/regkeys" \ | ||||||
|  |                 --volume "C:/Program Files (x86)/Microsoft Visual Studio":"C:/Program Files (x86)/Microsoft Visual Studio" \ | ||||||
|  |                 --volume "C:/Program Files (x86)/Windows Kits":"C:/Program Files (x86)/Windows Kits" \ | ||||||
|  |                 --volume "C:/ProgramData/Microsoft/VisualStudio":"C:/ProgramData/Microsoft/VisualStudio"`;
 | ||||||
|  |             //Note: When upgrading to Server 2022, we will need to move to just "program files" since VS will be 64-bit
 | ||||||
|  |         } | ||||||
|  |         return ''; | ||||||
|  |     } | ||||||
| } | } | ||||||
| exports.default = Docker; | exports.default = Docker; | ||||||
| 
 | 
 | ||||||
|  | @ -3386,23 +3464,36 @@ class ImageTag { | ||||||
|             webgl: 'webgl', |             webgl: 'webgl', | ||||||
|             mac: 'mac-mono', |             mac: 'mac-mono', | ||||||
|             windows: 'windows-mono', |             windows: 'windows-mono', | ||||||
|  |             windowsIl2cpp: 'windows-il2cpp', | ||||||
|  |             wsaPlayer: 'universal-windows-platform', | ||||||
|             linux: 'base', |             linux: 'base', | ||||||
|             linuxIl2cpp: 'linux-il2cpp', |             linuxIl2cpp: 'linux-il2cpp', | ||||||
|             android: 'android', |             android: 'android', | ||||||
|             ios: 'ios', |             ios: 'ios', | ||||||
|  |             tvos: 'appletv', | ||||||
|             facebook: 'facebook', |             facebook: 'facebook', | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
|     static getTargetPlatformToImageSuffixMap(platform, version) { |     static getTargetPlatformToImageSuffixMap(platform, version) { | ||||||
|         const { generic, webgl, mac, windows, linux, linuxIl2cpp, android, ios, facebook } = ImageTag.imageSuffixes; |         const { generic, webgl, mac, windows, windowsIl2cpp, wsaPlayer, linux, linuxIl2cpp, android, ios, tvos, facebook, } = ImageTag.imageSuffixes; | ||||||
|         const [major, minor] = version.split('.').map((digit) => Number(digit)); |         const [major, minor] = version.split('.').map((digit) => Number(digit)); | ||||||
|         // @see: https://docs.unity3d.com/ScriptReference/BuildTarget.html
 |         // @see: https://docs.unity3d.com/ScriptReference/BuildTarget.html
 | ||||||
|         switch (platform) { |         switch (platform) { | ||||||
|             case platform_1.default.types.StandaloneOSX: |             case platform_1.default.types.StandaloneOSX: | ||||||
|                 return mac; |                 return mac; | ||||||
|             case platform_1.default.types.StandaloneWindows: |             case platform_1.default.types.StandaloneWindows: | ||||||
|                 return windows; |  | ||||||
|             case platform_1.default.types.StandaloneWindows64: |             case platform_1.default.types.StandaloneWindows64: | ||||||
|  |                 // Can only build windows-il2cpp on a windows based system
 | ||||||
|  |                 if (process.platform === 'win32') { | ||||||
|  |                     // Unity versions before 2019.3 do not support il2cpp
 | ||||||
|  |                     if (major >= 2020 || (major === 2019 && minor >= 3)) { | ||||||
|  |                         return windowsIl2cpp; | ||||||
|  |                     } | ||||||
|  |                     else { | ||||||
|  |                         throw new Error(`Windows-based builds are only supported on 2019.3.X+ versions of Unity.
 | ||||||
|  |                              If you are trying to build for windows-mono, please use a Linux based OS.`);
 | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|                 return windows; |                 return windows; | ||||||
|             case platform_1.default.types.StandaloneLinux64: { |             case platform_1.default.types.StandaloneLinux64: { | ||||||
|                 // Unity versions before 2019.3 do not support il2cpp
 |                 // Unity versions before 2019.3 do not support il2cpp
 | ||||||
|  | @ -3418,13 +3509,19 @@ class ImageTag { | ||||||
|             case platform_1.default.types.WebGL: |             case platform_1.default.types.WebGL: | ||||||
|                 return webgl; |                 return webgl; | ||||||
|             case platform_1.default.types.WSAPlayer: |             case platform_1.default.types.WSAPlayer: | ||||||
|                 return windows; |                 if (process.platform !== 'win32') { | ||||||
|  |                     throw new Error(`WSAPlayer can only be built on a windows base OS`); | ||||||
|  |                 } | ||||||
|  |                 return wsaPlayer; | ||||||
|             case platform_1.default.types.PS4: |             case platform_1.default.types.PS4: | ||||||
|                 return windows; |                 return windows; | ||||||
|             case platform_1.default.types.XboxOne: |             case platform_1.default.types.XboxOne: | ||||||
|                 return windows; |                 return windows; | ||||||
|             case platform_1.default.types.tvOS: |             case platform_1.default.types.tvOS: | ||||||
|                 return windows; |                 if (process.platform !== 'win32') { | ||||||
|  |                     throw new Error(`tvOS can only be built on a windows base OS`); | ||||||
|  |                 } | ||||||
|  |                 return tvos; | ||||||
|             case platform_1.default.types.Switch: |             case platform_1.default.types.Switch: | ||||||
|                 return windows; |                 return windows; | ||||||
|             // Unsupported
 |             // Unsupported
 | ||||||
|  | @ -3448,7 +3545,15 @@ class ImageTag { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     get tag() { |     get tag() { | ||||||
|         return `${this.version}-${this.builderPlatform}`.replace(/-+$/, ''); |         //We check the host os so we know what type of the images we need to pull
 | ||||||
|  |         switch (process.platform) { | ||||||
|  |             case 'win32': | ||||||
|  |                 return `windows-${this.version}-${this.builderPlatform}`.replace(/-+$/, ''); | ||||||
|  |             case 'linux': | ||||||
|  |                 return `${this.version}-${this.builderPlatform}`.replace(/-+$/, ''); | ||||||
|  |             default: | ||||||
|  |                 break; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     get image() { |     get image() { | ||||||
|         return `${this.repository}/${this.name}`.replace(/^\/+/, ''); |         return `${this.repository}/${this.name}`.replace(/^\/+/, ''); | ||||||
|  | @ -3902,6 +4007,162 @@ class Output { | ||||||
| exports.default = Output; | exports.default = Output; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 64423: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
|  |     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | const setup_windows_1 = __importDefault(__webpack_require__(37449)); | ||||||
|  | const validate_windows_1 = __importDefault(__webpack_require__(41563)); | ||||||
|  | class PlatformSetup { | ||||||
|  |     static setup(buildParameters) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             switch (process.platform) { | ||||||
|  |                 case 'win32': | ||||||
|  |                     validate_windows_1.default.validate(buildParameters); | ||||||
|  |                     setup_windows_1.default.setup(buildParameters); | ||||||
|  |                     break; | ||||||
|  |                 //Add other baseOS's here
 | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.default = PlatformSetup; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 37449: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||||
|  |     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||||
|  |     return new (P || (P = Promise))(function (resolve, reject) { | ||||||
|  |         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||||
|  |         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||||
|  |         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||||
|  |         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
|  |     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | const exec_1 = __webpack_require__(71514); | ||||||
|  | const fs_1 = __importDefault(__webpack_require__(35747)); | ||||||
|  | class SetupWindows { | ||||||
|  |     static setup(buildParameters) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             yield SetupWindows.setupWindowsRun(buildParameters.platform); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     //Setup prerequisite files/folders for a windows-based docker run
 | ||||||
|  |     static setupWindowsRun(platform, silent = false) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (!fs_1.default.existsSync('c:/regkeys')) { | ||||||
|  |                 fs_1.default.mkdirSync('c:/regkeys'); | ||||||
|  |             } | ||||||
|  |             switch (platform) { | ||||||
|  |                 //These all need the Windows 10 SDK
 | ||||||
|  |                 case 'StandaloneWindows': | ||||||
|  |                 case 'StandaloneWindows64': | ||||||
|  |                 case 'WSAPlayer': | ||||||
|  |                     this.generateWinSDKRegKeys(silent); | ||||||
|  |                     break; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     static generateWinSDKRegKeys(silent = false) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             // Export registry keys that point to the location of the windows 10 sdk
 | ||||||
|  |             const exportWinSDKRegKeysCommand = 'reg export "HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0" c:/regkeys/winsdk.reg /y'; | ||||||
|  |             yield exec_1.exec(exportWinSDKRegKeysCommand, undefined, { silent }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.default = SetupWindows; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 41563: | ||||||
|  | /***/ (function(__unused_webpack_module, exports, __webpack_require__) { | ||||||
|  | 
 | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
|  |     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | const fs_1 = __importDefault(__webpack_require__(35747)); | ||||||
|  | class ValidateWindows { | ||||||
|  |     static validate(buildParameters) { | ||||||
|  |         ValidateWindows.validateWindowsPlatformRequirements(buildParameters.platform); | ||||||
|  |         if (!(process.env.UNITY_EMAIL && process.env.UNITY_PASSWORD)) { | ||||||
|  |             throw new Error(`Unity email and password must be set for Windows based builds to
 | ||||||
|  |                        authenticate the license. Make sure to set them inside UNITY_EMAIL | ||||||
|  |                        and UNITY_PASSWORD in Github Secrets and pass them into the environment.`);
 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     static validateWindowsPlatformRequirements(platform) { | ||||||
|  |         switch (platform) { | ||||||
|  |             case 'StandaloneWindows': | ||||||
|  |                 this.checkForVisualStudio(); | ||||||
|  |                 this.checkForWin10SDK(); | ||||||
|  |                 break; | ||||||
|  |             case 'StandaloneWindows64': | ||||||
|  |                 this.checkForVisualStudio(); | ||||||
|  |                 this.checkForWin10SDK(); | ||||||
|  |                 break; | ||||||
|  |             case 'WSAPlayer': | ||||||
|  |                 this.checkForVisualStudio(); | ||||||
|  |                 this.checkForWin10SDK(); | ||||||
|  |                 break; | ||||||
|  |             case 'tvOS': | ||||||
|  |                 this.checkForVisualStudio(); | ||||||
|  |                 break; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     static checkForWin10SDK() { | ||||||
|  |         //Check for Windows 10 SDK on runner
 | ||||||
|  |         const windows10SDKPathExists = fs_1.default.existsSync('C:/Program Files (x86)/Windows Kits'); | ||||||
|  |         if (!windows10SDKPathExists) { | ||||||
|  |             throw new Error(`Windows 10 SDK not found in default location. Make sure
 | ||||||
|  |                       the runner has a Windows 10 SDK installed in the default | ||||||
|  |                       location.`);
 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     static checkForVisualStudio() { | ||||||
|  |         //Note: When upgrading to Server 2022, we will need to move to just "program files" since VS will be 64-bit
 | ||||||
|  |         const visualStudioInstallPathExists = fs_1.default.existsSync('C:/Program Files (x86)/Microsoft Visual Studio'); | ||||||
|  |         const visualStudioDataPathExists = fs_1.default.existsSync('C:/ProgramData/Microsoft/VisualStudio'); | ||||||
|  |         if (!visualStudioInstallPathExists || !visualStudioDataPathExists) { | ||||||
|  |             throw new Error(`Visual Studio not found at the default location.
 | ||||||
|  |               Make sure the runner has Visual Studio installed in the | ||||||
|  |               default location`);
 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.default = ValidateWindows; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 9707: | /***/ 9707: | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -6,14 +6,14 @@ LABEL "com.github.actions.description"="Build Unity projects for different platf | ||||||
| LABEL "com.github.actions.icon"="box" | LABEL "com.github.actions.icon"="box" | ||||||
| LABEL "com.github.actions.color"="gray-dark" | LABEL "com.github.actions.color"="gray-dark" | ||||||
| 
 | 
 | ||||||
| LABEL "repository"="http://github.com/webbertakken/unity-actions" | LABEL "repository"="http://github.com/game-ci/unity-actions" | ||||||
| LABEL "homepage"="http://github.com/webbertakken/unity-actions" | LABEL "homepage"="http://github.com/game-ci/unity-actions" | ||||||
| LABEL "maintainer"="Webber Takken <webber@takken.io>" | LABEL "maintainer"="Webber Takken <webber@takken.io>" | ||||||
| 
 | 
 | ||||||
| ADD default-build-script /UnityBuilderAction | COPY default-build-script /UnityBuilderAction | ||||||
| ADD steps /steps | COPY platforms/ubuntu/steps /steps | ||||||
| RUN chmod -R +x /steps | RUN chmod -R +x /steps | ||||||
| ADD entrypoint.sh /entrypoint.sh | COPY platforms/ubuntu/entrypoint.sh /entrypoint.sh | ||||||
| RUN chmod +x /entrypoint.sh | RUN chmod +x /entrypoint.sh | ||||||
| RUN ls | RUN ls | ||||||
| 
 | 
 | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | ARG IMAGE | ||||||
|  | FROM $IMAGE | ||||||
|  | 
 | ||||||
|  | LABEL "com.github.actions.name"="Unity - Builder" | ||||||
|  | LABEL "com.github.actions.description"="Build Unity projects for different platforms." | ||||||
|  | LABEL "com.github.actions.icon"="box" | ||||||
|  | LABEL "com.github.actions.color"="gray-dark" | ||||||
|  | 
 | ||||||
|  | LABEL "repository"="http://github.com/game-ci/unity-actions" | ||||||
|  | LABEL "homepage"="http://github.com/game-ci/unity-actions" | ||||||
|  | LABEL "maintainer"="Webber Takken <webber@takken.io>" | ||||||
|  | 
 | ||||||
|  | COPY default-build-script c:/UnityBuilderAction | ||||||
|  | COPY platforms/windows/steps c:/steps | ||||||
|  | COPY platforms/windows/entrypoint.ps1 c:/entrypoint.ps1 | ||||||
|  | RUN dir | ||||||
|  | 
 | ||||||
|  | ENTRYPOINT ["powershell", "c:/entrypoint.ps1"] | ||||||
|  | @ -0,0 +1,15 @@ | ||||||
|  | # Activate Unity | ||||||
|  | & "c:\steps\activate.ps1" | ||||||
|  | 
 | ||||||
|  | # Import any necessary registry keys, ie: location of windows 10 sdk | ||||||
|  | # No guarantee that there will be any necessary registry keys, ie: tvOS | ||||||
|  | Get-ChildItem -Path c:\regkeys -File | Foreach {reg import $_.fullname} | ||||||
|  | 
 | ||||||
|  | # Register the Visual Studio installation so Unity can find it | ||||||
|  | regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio.Setup.Configuration.Native.dll | ||||||
|  | 
 | ||||||
|  | # Build the project | ||||||
|  | & "c:\steps\build.ps1" | ||||||
|  | 
 | ||||||
|  | # Free the seat for the activated license | ||||||
|  | & "c:\steps\return_license.ps1" | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | # Activates Unity | ||||||
|  | & "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -batchmode -quit -nographics ` | ||||||
|  |                                                                           -username $Env:UNITY_EMAIL ` | ||||||
|  |                                                                           -password $Env:UNITY_PASSWORD ` | ||||||
|  |                                                                           -serial $Env:UNITY_SERIAL ` | ||||||
|  |                                                                           -logfile | Out-Host | ||||||
|  | @ -0,0 +1,147 @@ | ||||||
|  | # | ||||||
|  | # Set project path | ||||||
|  | # | ||||||
|  | $Env:UNITY_PROJECT_PATH="$Env:GITHUB_WORKSPACE\$Env:PROJECT_PATH" | ||||||
|  | Write-Output "$('Using project path "')$($Env:UNITY_PROJECT_PATH)$('".')" | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Display the name for the build, doubles as the output name | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | Write-Output "$('Using build name "')$($Env:BUILD_NAME)$('".')" | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Display the build's target platform; | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | Write-Output "$('Using build target "')$($Env:BUILD_TARGET)$('".')" | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Display build path and file | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | Write-Output "$('Using build path "')$($Env:BUILD_PATH)$('" to save file "')$($Env:BUILD_FILE)$('".')" | ||||||
|  | $Env:BUILD_PATH_FULL="$Env:GITHUB_WORKSPACE\$Env:BUILD_PATH" | ||||||
|  | $Env:CUSTOM_BUILD_PATH="$Env:BUILD_PATH_FULL\$Env:BUILD_FILE" | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Set the build method, must reference one of: | ||||||
|  | # | ||||||
|  | #   - <NamespaceName.ClassName.MethodName> | ||||||
|  | #   - <ClassName.MethodName> | ||||||
|  | # | ||||||
|  | # For example: `BuildCommand.PerformBuild` | ||||||
|  | # | ||||||
|  | # The method must be declared static and placed in project/Assets/Editor | ||||||
|  | # | ||||||
|  | if ($Env:BUILD_METHOD)  | ||||||
|  | { | ||||||
|  |     # User has provided their own build method. | ||||||
|  |     # Assume they also bring their own script. | ||||||
|  |     Write-Output "$('Using build method "')$($Env:BUILD_METHOD)$('".')" | ||||||
|  | }  | ||||||
|  | else  | ||||||
|  | { | ||||||
|  |     # User has not provided their own build command. | ||||||
|  |     # | ||||||
|  |     # Use the script from this action which builds the scenes that are enabled in | ||||||
|  |     # the project. | ||||||
|  |     # | ||||||
|  |     Write-Output "Using built-in build method." | ||||||
|  | 
 | ||||||
|  |     # Create Editor directory if it does not exist | ||||||
|  |     if(-Not (Test-Path -Path $Env:UNITY_PROJECT_PATH\Assets\Editor)) | ||||||
|  |     { | ||||||
|  |         # We use -Force to suppress output, doesn't overwrite anything | ||||||
|  |         New-Item -ItemType Directory -Force -Path $Env:UNITY_PROJECT_PATH\Assets\Editor | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     # Copy the build script of Unity Builder action | ||||||
|  |     Copy-Item -Path "c:\UnityBuilderAction" -Destination $Env:UNITY_PROJECT_PATH\Assets\Editor -Recurse | ||||||
|  | 
 | ||||||
|  |     # Set the Build method to that of UnityBuilder Action | ||||||
|  |     $Env:BUILD_METHOD="UnityBuilderAction.Builder.BuildProject" | ||||||
|  | 
 | ||||||
|  |     # Verify recursive paths | ||||||
|  |     Get-ChildItem -Path $UNITY_PROJECT_PATH\Assets\Editor -Recurse | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Pre-build debug information | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | Write-Output "" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "#    Custom parameters    #" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "" | ||||||
|  | 
 | ||||||
|  | Write-Output "$('"')$($Env:CUSTOM_PARAMETERS)$('"')" | ||||||
|  | 
 | ||||||
|  | Write-Output "" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "#    Current build dir    #" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "" | ||||||
|  | 
 | ||||||
|  | Write-Output "$('Creating "')$($Env:BUILD_PATH_FULL)$('" if it does not exist.')" | ||||||
|  | if (-Not (Test-Path -Path $Env:BUILD_PATH_FULL))  | ||||||
|  | { | ||||||
|  |     mkdir "$Env:BUILD_PATH_FULL" | ||||||
|  | } | ||||||
|  | Get-ChildItem $Env:BUILD_PATH_FULL | ||||||
|  | 
 | ||||||
|  | Write-Output "" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "#    Project directory    #" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "" | ||||||
|  | 
 | ||||||
|  | Get-ChildItem $Env:UNITY_PROJECT_PATH | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Build | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | Write-Output "" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "#    Building project     #" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "" | ||||||
|  | 
 | ||||||
|  | & "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -quit -batchmode -nographics ` | ||||||
|  |                                                                           -projectPath $Env:UNITY_PROJECT_PATH ` | ||||||
|  |                                                                           -executeMethod $Env:BUILD_METHOD ` | ||||||
|  |                                                                           -buildTarget $Env:BUILD_TARGET ` | ||||||
|  |                                                                           -customBuildTarget $Env:BUILD_TARGET ` | ||||||
|  |                                                                           -customBuildPath $Env:CUSTOM_BUILD_PATH ` | ||||||
|  |                                                                           -buildVersion $Env:VERSION ` | ||||||
|  |                                                                           $Env:CUSTOM_PARAMETERS ` | ||||||
|  |                                                                           -logfile | Out-Host | ||||||
|  | 
 | ||||||
|  | # Catch exit code | ||||||
|  | $Env:BUILD_EXIT_CODE=$? | ||||||
|  | 
 | ||||||
|  | # Display results | ||||||
|  | if ($Env:BUILD_EXIT_CODE -eq 0)  | ||||||
|  | { | ||||||
|  |     Write-Output "Build Succeeded!" | ||||||
|  | } else  | ||||||
|  | { | ||||||
|  |     Write-Output "$('Build failed, with exit code ')$($Env:BUILD_EXIT_CODE)$('"')" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # TODO: Determine if we need to set permissions on any files | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Results | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | Write-Output "" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "#       Build output      #" | ||||||
|  | Write-Output "###########################" | ||||||
|  | Write-Output "" | ||||||
|  | 
 | ||||||
|  | Get-ChildItem $Env:BUILD_PATH_FULL | ||||||
|  | Write-Output "" | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | # Return the active Unity license | ||||||
|  | & "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -batchmode -quit -nographics ` | ||||||
|  |                                                                           -username $Env:UNITY_EMAIL ` | ||||||
|  |                                                                           -password $Env:UNITY_PASSWORD ` | ||||||
|  |                                                                           -returnlicense ` | ||||||
|  |                                                                           -logfile | Out-Host | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| import * as core from '@actions/core'; | import * as core from '@actions/core'; | ||||||
| import { Action, BuildParameters, Cache, Docker, ImageTag, Output, CloudRunner } from './model'; | import { Action, BuildParameters, Cache, Docker, ImageTag, Output, CloudRunner } from './model'; | ||||||
| import { CLI } from './model/cli/cli'; | import { CLI } from './model/cli/cli'; | ||||||
|  | import PlatformSetup from './model/platform-setup'; | ||||||
| async function runMain() { | async function runMain() { | ||||||
|   try { |   try { | ||||||
|     Action.checkCompatibility(); |     Action.checkCompatibility(); | ||||||
|  | @ -18,6 +19,7 @@ async function runMain() { | ||||||
|       await CloudRunner.run(buildParameters, baseImage.toString()); |       await CloudRunner.run(buildParameters, baseImage.toString()); | ||||||
|     } else { |     } else { | ||||||
|       core.info('Building locally'); |       core.info('Building locally'); | ||||||
|  |       PlatformSetup.setup(buildParameters); | ||||||
|       const builtImage = await Docker.build({ path: actionFolder, dockerfile, baseImage }); |       const builtImage = await Docker.build({ path: actionFolder, dockerfile, baseImage }); | ||||||
|       await Docker.run(builtImage, { workspace, ...buildParameters }); |       await Docker.run(builtImage, { workspace, ...buildParameters }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -4,8 +4,8 @@ import Action from './action'; | ||||||
| 
 | 
 | ||||||
| describe('Action', () => { | describe('Action', () => { | ||||||
|   describe('compatibility check', () => { |   describe('compatibility check', () => { | ||||||
|     it('throws for anything other than linux', () => { |     it('throws for anything other than linux or windows', () => { | ||||||
|       if (process.platform !== 'linux') { |       if (process.platform !== 'linux' && process.platform !== 'win32') { | ||||||
|         expect(() => Action.checkCompatibility()).toThrow(); |         expect(() => Action.checkCompatibility()).toThrow(); | ||||||
|       } else { |       } else { | ||||||
|         expect(() => Action.checkCompatibility()).not.toThrow(); |         expect(() => Action.checkCompatibility()).not.toThrow(); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import path from 'path'; | ||||||
| 
 | 
 | ||||||
| class Action { | class Action { | ||||||
|   static get supportedPlatforms() { |   static get supportedPlatforms() { | ||||||
|     return ['linux']; |     return ['linux', 'win32']; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static get isRunningLocally() { |   static get isRunningLocally() { | ||||||
|  | @ -30,7 +30,15 @@ class Action { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static get dockerfile() { |   static get dockerfile() { | ||||||
|     return `${Action.actionFolder}/Dockerfile`; |     const currentPlatform = process.platform; | ||||||
|  |     switch (currentPlatform) { | ||||||
|  |       case 'linux': | ||||||
|  |         return `${Action.actionFolder}/platforms/ubuntu/Dockerfile`; | ||||||
|  |       case 'win32': | ||||||
|  |         return `${Action.actionFolder}/platforms/windows/Dockerfile`; | ||||||
|  |       default: | ||||||
|  |         throw new Error(`No Dockerfile for currently unsupported platform: ${currentPlatform}`); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static get workspace() { |   static get workspace() { | ||||||
|  |  | ||||||
|  | @ -5,6 +5,10 @@ import BuildParameters from './build-parameters'; | ||||||
| import Input from './input'; | import Input from './input'; | ||||||
| import Platform from './platform'; | import Platform from './platform'; | ||||||
| 
 | 
 | ||||||
|  | const testLicense = | ||||||
|  |   '<?xml version="1.0" encoding="UTF-8"?><root>\n    <License id="Terms">\n        <MachineBindings>\n            <Binding Key="1" Value="576562626572264761624c65526f7578"/>\n            <Binding Key="2" Value="576562626572264761624c65526f7578"/>\n        </MachineBindings>\n        <MachineID Value="D7nTUnjNAmtsUMcnoyrqkgIbYdM="/>\n        <SerialHash Value="2033b8ac3e6faa3742ca9f0bfae44d18f2a96b80"/>\n        <Features>\n            <Feature Value="33"/>\n            <Feature Value="1"/>\n            <Feature Value="12"/>\n            <Feature Value="2"/>\n            <Feature Value="24"/>\n            <Feature Value="3"/>\n            <Feature Value="36"/>\n            <Feature Value="17"/>\n            <Feature Value="19"/>\n            <Feature Value="62"/>\n        </Features>\n        <DeveloperData Value="AQAAAEY0LUJHUlgtWEQ0RS1aQ1dWLUM1SlctR0RIQg=="/>\n        <SerialMasked Value="F4-BGRX-XD4E-ZCWV-C5JW-XXXX"/>\n        <StartDate Value="2021-02-08T00:00:00"/>\n        <UpdateDate Value="2021-02-09T00:34:57"/>\n        <InitialActivationDate Value="2021-02-08T00:34:56"/>\n        <LicenseVersion Value="6.x"/>\n        <ClientProvidedVersion Value="2018.4.30f1"/>\n        <AlwaysOnline Value="false"/>\n        <Entitlements>\n            <Entitlement Ns="unity_editor" Tag="UnityPersonal" Type="EDITOR" ValidTo="9999-12-31T00:00:00"/>\n            <Entitlement Ns="unity_editor" Tag="DarkSkin" Type="EDITOR_FEATURE" ValidTo="9999-12-31T00:00:00"/>\n        </Entitlements>\n    </License>\n<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#Terms"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>m0Db8UK+ktnOLJBtHybkfetpcKo=</DigestValue></Reference></SignedInfo><SignatureValue>o/pUbSQAukz7+ZYAWhnA0AJbIlyyCPL7bKVEM2lVqbrXt7cyey+umkCXamuOgsWPVUKBMkXtMH8L\n5etLmD0getWIhTGhzOnDCk+gtIPfL4jMo9tkEuOCROQAXCci23VFscKcrkB+3X6h4wEOtA2APhOY\nB+wvC794o8/82ffjP79aVAi57rp3Wmzx+9pe9yMwoJuljAy2sc2tIMgdQGWVmOGBpQm3JqsidyzI\nJWG2kjnc7pDXK9pwYzXoKiqUqqrut90d+kQqRyv7MSZXR50HFqD/LI69h68b7P8Bjo3bPXOhNXGR\n9YCoemH6EkfCJxp2gIjzjWW+l2Hj2EsFQi8YXw==</SignatureValue></Signature></root>'; | ||||||
|  | process.env.UNITY_LICENSE = testLicense; | ||||||
|  | 
 | ||||||
| const determineVersion = jest.spyOn(Versioning, 'determineVersion').mockImplementation(async () => '1.3.37'); | const determineVersion = jest.spyOn(Versioning, 'determineVersion').mockImplementation(async () => '1.3.37'); | ||||||
| 
 | 
 | ||||||
| const determineUnityVersion = jest | const determineUnityVersion = jest | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| import { customAlphabet } from 'nanoid'; | import { customAlphabet } from 'nanoid'; | ||||||
|  | import * as core from '@actions/core'; | ||||||
| import AndroidVersioning from './android-versioning'; | import AndroidVersioning from './android-versioning'; | ||||||
| import CloudRunnerConstants from './cloud-runner/services/cloud-runner-constants'; | import CloudRunnerConstants from './cloud-runner/services/cloud-runner-constants'; | ||||||
| import CloudRunnerNamespace from './cloud-runner/services/cloud-runner-namespace'; | import CloudRunnerNamespace from './cloud-runner/services/cloud-runner-namespace'; | ||||||
|  | @ -10,6 +11,7 @@ import Versioning from './versioning'; | ||||||
| class BuildParameters { | class BuildParameters { | ||||||
|   public version!: string; |   public version!: string; | ||||||
|   public customImage!: string; |   public customImage!: string; | ||||||
|  |   public unitySerial!: string; | ||||||
|   public runnerTempPath: string | undefined; |   public runnerTempPath: string | undefined; | ||||||
|   public platform!: string; |   public platform!: string; | ||||||
|   public projectPath!: string; |   public projectPath!: string; | ||||||
|  | @ -62,9 +64,26 @@ class BuildParameters { | ||||||
| 
 | 
 | ||||||
|     const androidSdkManagerParameters = AndroidVersioning.determineSdkManagerParameters(Input.androidTargetSdkVersion); |     const androidSdkManagerParameters = AndroidVersioning.determineSdkManagerParameters(Input.androidTargetSdkVersion); | ||||||
| 
 | 
 | ||||||
|  |     let unitySerial = ''; | ||||||
|  |     if (!process.env.UNITY_SERIAL) { | ||||||
|  |       //No serial was present so it is a personal license that we need to convert
 | ||||||
|  |       if (!process.env.UNITY_LICENSE) { | ||||||
|  |         throw new Error(`Missing Unity License File and no Serial was found. If this
 | ||||||
|  |                           is a personal license, make sure to follow the activation | ||||||
|  |                           steps and set the UNITY_LICENSE GitHub secret or enter a Unity | ||||||
|  |                           serial number inside the UNITY_SERIAL GitHub secret.`);
 | ||||||
|  |       } | ||||||
|  |       unitySerial = this.getSerialFromLicenseFile(process.env.UNITY_LICENSE); | ||||||
|  |     } else { | ||||||
|  |       unitySerial = process.env.UNITY_SERIAL!; | ||||||
|  |     } | ||||||
|  |     core.setSecret(unitySerial); | ||||||
|  | 
 | ||||||
|     return { |     return { | ||||||
|       version: unityVersion, |       version: unityVersion, | ||||||
|       customImage: Input.customImage, |       customImage: Input.customImage, | ||||||
|  |       unitySerial, | ||||||
|  | 
 | ||||||
|       runnerTempPath: process.env.RUNNER_TEMP, |       runnerTempPath: process.env.RUNNER_TEMP, | ||||||
|       platform: Input.targetPlatform, |       platform: Input.targetPlatform, | ||||||
|       projectPath: Input.projectPath, |       projectPath: Input.projectPath, | ||||||
|  | @ -118,6 +137,18 @@ class BuildParameters { | ||||||
| 
 | 
 | ||||||
|     return filename; |     return filename; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   static getSerialFromLicenseFile(license) { | ||||||
|  |     const startKey = `<DeveloperData Value="`; | ||||||
|  |     const endKey = `"/>`; | ||||||
|  |     const startIndex = license.indexOf(startKey) + startKey.length; | ||||||
|  |     if (startIndex < 0) { | ||||||
|  |       throw new Error(`License File was corrupted, unable to locate serial`); | ||||||
|  |     } | ||||||
|  |     const endIndex = license.indexOf(endKey, startIndex); | ||||||
|  |     // Slice off the first 4 characters as they are garbage values
 | ||||||
|  |     return Buffer.from(license.slice(startIndex, endIndex), 'base64').toString('binary').slice(4); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export default BuildParameters; | export default BuildParameters; | ||||||
|  |  | ||||||
|  | @ -19,21 +19,47 @@ class Docker { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static async run(image, parameters, silent = false) { |   static async run(image, parameters, silent = false) { | ||||||
|     const { workspace, runnerTempPath, sshAgent } = parameters; |     const { workspace, unitySerial, runnerTempPath, sshAgent } = parameters; | ||||||
| 
 | 
 | ||||||
|     const command = `docker run \ |     const baseOsSpecificArguments = this.getBaseOsSpecificArguments( | ||||||
|         --workdir /github/workspace \ |       process.platform, | ||||||
|         --rm \ |       workspace, | ||||||
|         ${ImageEnvironmentFactory.getEnvVarString(parameters)} \ |       unitySerial, | ||||||
|         --volume "/var/run/docker.sock":"/var/run/docker.sock" \ |       runnerTempPath, | ||||||
|         --volume "${runnerTempPath}/_github_home":"/root" \ |       sshAgent, | ||||||
|         --volume "${runnerTempPath}/_github_workflow":"/github/workflow" \ |     ); | ||||||
|         --volume "${workspace}":"/github/workspace" \ |  | ||||||
|         ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ |  | ||||||
|         ${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''} \ |  | ||||||
|         ${image}`;
 |  | ||||||
| 
 | 
 | ||||||
|     await exec(command, undefined, { silent }); |     const runCommand = `docker run \ | ||||||
|  |     --workdir /github/workspace \ | ||||||
|  |     --rm \ | ||||||
|  |     ${ImageEnvironmentFactory.getEnvVarString(parameters)} \ | ||||||
|  |     ${baseOsSpecificArguments} \ | ||||||
|  |     ${image}`;
 | ||||||
|  | 
 | ||||||
|  |     await exec(runCommand, undefined, { silent }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static getBaseOsSpecificArguments(baseOs, workspace, unitySerial, runnerTemporaryPath, sshAgent): string { | ||||||
|  |     switch (baseOs) { | ||||||
|  |       case 'linux': | ||||||
|  |         return `--env UNITY_SERIAL \ | ||||||
|  |                 ${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \ | ||||||
|  |                 --volume "/var/run/docker.sock":"/var/run/docker.sock" \ | ||||||
|  |                 --volume "${runnerTemporaryPath}/_github_home":"/root" \ | ||||||
|  |                 --volume "${runnerTemporaryPath}/_github_workflow":"/github/workflow" \ | ||||||
|  |                 --volume "${workspace}":"/github/workspace" \ | ||||||
|  |                 ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ | ||||||
|  |                 ${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''}`;
 | ||||||
|  |       case 'win32': | ||||||
|  |         return `--env UNITY_SERIAL="${unitySerial}" \ | ||||||
|  |                 --volume "${workspace}":"c:/github/workspace" \ | ||||||
|  |                 --volume "c:/regkeys":"c:/regkeys" \ | ||||||
|  |                 --volume "C:/Program Files (x86)/Microsoft Visual Studio":"C:/Program Files (x86)/Microsoft Visual Studio" \ | ||||||
|  |                 --volume "C:/Program Files (x86)/Windows Kits":"C:/Program Files (x86)/Windows Kits" \ | ||||||
|  |                 --volume "C:/ProgramData/Microsoft/VisualStudio":"C:/ProgramData/Microsoft/VisualStudio"`;
 | ||||||
|  |       //Note: When upgrading to Server 2022, we will need to move to just "program files" since VS will be 64-bit
 | ||||||
|  |     } | ||||||
|  |     return ''; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -48,8 +48,14 @@ describe('ImageTag', () => { | ||||||
|   describe('toString', () => { |   describe('toString', () => { | ||||||
|     it('returns the correct version', () => { |     it('returns the correct version', () => { | ||||||
|       const image = new ImageTag({ version: '2099.1.1111', platform: some.platform }); |       const image = new ImageTag({ version: '2099.1.1111', platform: some.platform }); | ||||||
| 
 |       switch (process.platform) { | ||||||
|       expect(image.toString()).toStrictEqual(`${defaults.image}:2099.1.1111-0`); |         case 'win32': | ||||||
|  |           expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2099.1.1111-0`); | ||||||
|  |           break; | ||||||
|  |         case 'linux': | ||||||
|  |           expect(image.toString()).toStrictEqual(`${defaults.image}:2099.1.1111-0`); | ||||||
|  |           break; | ||||||
|  |       } | ||||||
|     }); |     }); | ||||||
|     it('returns customImage if given', () => { |     it('returns customImage if given', () => { | ||||||
|       const image = new ImageTag({ |       const image = new ImageTag({ | ||||||
|  | @ -64,13 +70,27 @@ describe('ImageTag', () => { | ||||||
|     it('returns the specific build platform', () => { |     it('returns the specific build platform', () => { | ||||||
|       const image = new ImageTag({ version: '2019.2.11f1', platform: 'WebGL' }); |       const image = new ImageTag({ version: '2019.2.11f1', platform: 'WebGL' }); | ||||||
| 
 | 
 | ||||||
|       expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-webgl-0`); |       switch (process.platform) { | ||||||
|  |         case 'win32': | ||||||
|  |           expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-webgl-0`); | ||||||
|  |           break; | ||||||
|  |         case 'linux': | ||||||
|  |           expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-webgl-0`); | ||||||
|  |           break; | ||||||
|  |       } | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it('returns no specific build platform for generic targetPlatforms', () => { |     it('returns no specific build platform for generic targetPlatforms', () => { | ||||||
|       const image = new ImageTag({ platform: 'NoTarget' }); |       const image = new ImageTag({ platform: 'NoTarget' }); | ||||||
| 
 | 
 | ||||||
|       expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-0`); |       switch (process.platform) { | ||||||
|  |         case 'win32': | ||||||
|  |           expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-0`); | ||||||
|  |           break; | ||||||
|  |         case 'linux': | ||||||
|  |           expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-0`); | ||||||
|  |           break; | ||||||
|  |       } | ||||||
|     }); |     }); | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | @ -35,16 +35,32 @@ class ImageTag { | ||||||
|       webgl: 'webgl', |       webgl: 'webgl', | ||||||
|       mac: 'mac-mono', |       mac: 'mac-mono', | ||||||
|       windows: 'windows-mono', |       windows: 'windows-mono', | ||||||
|  |       windowsIl2cpp: 'windows-il2cpp', | ||||||
|  |       wsaPlayer: 'universal-windows-platform', | ||||||
|       linux: 'base', |       linux: 'base', | ||||||
|       linuxIl2cpp: 'linux-il2cpp', |       linuxIl2cpp: 'linux-il2cpp', | ||||||
|       android: 'android', |       android: 'android', | ||||||
|       ios: 'ios', |       ios: 'ios', | ||||||
|  |       tvos: 'appletv', | ||||||
|       facebook: 'facebook', |       facebook: 'facebook', | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static getTargetPlatformToImageSuffixMap(platform, version) { |   static getTargetPlatformToImageSuffixMap(platform, version) { | ||||||
|     const { generic, webgl, mac, windows, linux, linuxIl2cpp, android, ios, facebook } = ImageTag.imageSuffixes; |     const { | ||||||
|  |       generic, | ||||||
|  |       webgl, | ||||||
|  |       mac, | ||||||
|  |       windows, | ||||||
|  |       windowsIl2cpp, | ||||||
|  |       wsaPlayer, | ||||||
|  |       linux, | ||||||
|  |       linuxIl2cpp, | ||||||
|  |       android, | ||||||
|  |       ios, | ||||||
|  |       tvos, | ||||||
|  |       facebook, | ||||||
|  |     } = ImageTag.imageSuffixes; | ||||||
| 
 | 
 | ||||||
|     const [major, minor] = version.split('.').map((digit) => Number(digit)); |     const [major, minor] = version.split('.').map((digit) => Number(digit)); | ||||||
|     // @see: https://docs.unity3d.com/ScriptReference/BuildTarget.html
 |     // @see: https://docs.unity3d.com/ScriptReference/BuildTarget.html
 | ||||||
|  | @ -52,8 +68,17 @@ class ImageTag { | ||||||
|       case Platform.types.StandaloneOSX: |       case Platform.types.StandaloneOSX: | ||||||
|         return mac; |         return mac; | ||||||
|       case Platform.types.StandaloneWindows: |       case Platform.types.StandaloneWindows: | ||||||
|         return windows; |  | ||||||
|       case Platform.types.StandaloneWindows64: |       case Platform.types.StandaloneWindows64: | ||||||
|  |         // Can only build windows-il2cpp on a windows based system
 | ||||||
|  |         if (process.platform === 'win32') { | ||||||
|  |           // Unity versions before 2019.3 do not support il2cpp
 | ||||||
|  |           if (major >= 2020 || (major === 2019 && minor >= 3)) { | ||||||
|  |             return windowsIl2cpp; | ||||||
|  |           } else { | ||||||
|  |             throw new Error(`Windows-based builds are only supported on 2019.3.X+ versions of Unity.
 | ||||||
|  |                              If you are trying to build for windows-mono, please use a Linux based OS.`);
 | ||||||
|  |           } | ||||||
|  |         } | ||||||
|         return windows; |         return windows; | ||||||
|       case Platform.types.StandaloneLinux64: { |       case Platform.types.StandaloneLinux64: { | ||||||
|         // Unity versions before 2019.3 do not support il2cpp
 |         // Unity versions before 2019.3 do not support il2cpp
 | ||||||
|  | @ -69,13 +94,19 @@ class ImageTag { | ||||||
|       case Platform.types.WebGL: |       case Platform.types.WebGL: | ||||||
|         return webgl; |         return webgl; | ||||||
|       case Platform.types.WSAPlayer: |       case Platform.types.WSAPlayer: | ||||||
|         return windows; |         if (process.platform !== 'win32') { | ||||||
|  |           throw new Error(`WSAPlayer can only be built on a windows base OS`); | ||||||
|  |         } | ||||||
|  |         return wsaPlayer; | ||||||
|       case Platform.types.PS4: |       case Platform.types.PS4: | ||||||
|         return windows; |         return windows; | ||||||
|       case Platform.types.XboxOne: |       case Platform.types.XboxOne: | ||||||
|         return windows; |         return windows; | ||||||
|       case Platform.types.tvOS: |       case Platform.types.tvOS: | ||||||
|         return windows; |         if (process.platform !== 'win32') { | ||||||
|  |           throw new Error(`tvOS can only be built on a windows base OS`); | ||||||
|  |         } | ||||||
|  |         return tvos; | ||||||
|       case Platform.types.Switch: |       case Platform.types.Switch: | ||||||
|         return windows; |         return windows; | ||||||
|       // Unsupported
 |       // Unsupported
 | ||||||
|  | @ -101,7 +132,15 @@ class ImageTag { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   get tag() { |   get tag() { | ||||||
|     return `${this.version}-${this.builderPlatform}`.replace(/-+$/, ''); |     //We check the host os so we know what type of the images we need to pull
 | ||||||
|  |     switch (process.platform) { | ||||||
|  |       case 'win32': | ||||||
|  |         return `windows-${this.version}-${this.builderPlatform}`.replace(/-+$/, ''); | ||||||
|  |       case 'linux': | ||||||
|  |         return `${this.version}-${this.builderPlatform}`.replace(/-+$/, ''); | ||||||
|  |       default: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   get image() { |   get image() { | ||||||
|  |  | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | import { BuildParameters } from '.'; | ||||||
|  | import SetupWindows from './platform-setup/setup-windows'; | ||||||
|  | import ValidateWindows from './platform-validation/validate-windows'; | ||||||
|  | 
 | ||||||
|  | class PlatformSetup { | ||||||
|  |   static async setup(buildParameters: BuildParameters) { | ||||||
|  |     switch (process.platform) { | ||||||
|  |       case 'win32': | ||||||
|  |         ValidateWindows.validate(buildParameters); | ||||||
|  |         SetupWindows.setup(buildParameters); | ||||||
|  |         break; | ||||||
|  |       //Add other baseOS's here
 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default PlatformSetup; | ||||||
|  | @ -0,0 +1,33 @@ | ||||||
|  | import { exec } from '@actions/exec'; | ||||||
|  | import fs from 'fs'; | ||||||
|  | import { BuildParameters } from '..'; | ||||||
|  | 
 | ||||||
|  | class SetupWindows { | ||||||
|  |   public static async setup(buildParameters: BuildParameters) { | ||||||
|  |     await SetupWindows.setupWindowsRun(buildParameters.platform); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   //Setup prerequisite files/folders for a windows-based docker run
 | ||||||
|  |   private static async setupWindowsRun(platform, silent = false) { | ||||||
|  |     if (!fs.existsSync('c:/regkeys')) { | ||||||
|  |       fs.mkdirSync('c:/regkeys'); | ||||||
|  |     } | ||||||
|  |     switch (platform) { | ||||||
|  |       //These all need the Windows 10 SDK
 | ||||||
|  |       case 'StandaloneWindows': | ||||||
|  |       case 'StandaloneWindows64': | ||||||
|  |       case 'WSAPlayer': | ||||||
|  |         this.generateWinSDKRegKeys(silent); | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private static async generateWinSDKRegKeys(silent = false) { | ||||||
|  |     // Export registry keys that point to the location of the windows 10 sdk
 | ||||||
|  |     const exportWinSDKRegKeysCommand = | ||||||
|  |       'reg export "HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0" c:/regkeys/winsdk.reg /y'; | ||||||
|  |     await exec(exportWinSDKRegKeysCommand, undefined, { silent }); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default SetupWindows; | ||||||
|  | @ -0,0 +1,57 @@ | ||||||
|  | import fs from 'fs'; | ||||||
|  | import { BuildParameters } from '..'; | ||||||
|  | 
 | ||||||
|  | class ValidateWindows { | ||||||
|  |   public static validate(buildParameters: BuildParameters) { | ||||||
|  |     ValidateWindows.validateWindowsPlatformRequirements(buildParameters.platform); | ||||||
|  |     if (!(process.env.UNITY_EMAIL && process.env.UNITY_PASSWORD)) { | ||||||
|  |       throw new Error(`Unity email and password must be set for Windows based builds to
 | ||||||
|  |                        authenticate the license. Make sure to set them inside UNITY_EMAIL | ||||||
|  |                        and UNITY_PASSWORD in Github Secrets and pass them into the environment.`);
 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private static validateWindowsPlatformRequirements(platform) { | ||||||
|  |     switch (platform) { | ||||||
|  |       case 'StandaloneWindows': | ||||||
|  |         this.checkForVisualStudio(); | ||||||
|  |         this.checkForWin10SDK(); | ||||||
|  |         break; | ||||||
|  |       case 'StandaloneWindows64': | ||||||
|  |         this.checkForVisualStudio(); | ||||||
|  |         this.checkForWin10SDK(); | ||||||
|  |         break; | ||||||
|  |       case 'WSAPlayer': | ||||||
|  |         this.checkForVisualStudio(); | ||||||
|  |         this.checkForWin10SDK(); | ||||||
|  |         break; | ||||||
|  |       case 'tvOS': | ||||||
|  |         this.checkForVisualStudio(); | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private static checkForWin10SDK() { | ||||||
|  |     //Check for Windows 10 SDK on runner
 | ||||||
|  |     const windows10SDKPathExists = fs.existsSync('C:/Program Files (x86)/Windows Kits'); | ||||||
|  |     if (!windows10SDKPathExists) { | ||||||
|  |       throw new Error(`Windows 10 SDK not found in default location. Make sure
 | ||||||
|  |                       the runner has a Windows 10 SDK installed in the default | ||||||
|  |                       location.`);
 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private static checkForVisualStudio() { | ||||||
|  |     //Note: When upgrading to Server 2022, we will need to move to just "program files" since VS will be 64-bit
 | ||||||
|  |     const visualStudioInstallPathExists = fs.existsSync('C:/Program Files (x86)/Microsoft Visual Studio'); | ||||||
|  |     const visualStudioDataPathExists = fs.existsSync('C:/ProgramData/Microsoft/VisualStudio'); | ||||||
|  | 
 | ||||||
|  |     if (!visualStudioInstallPathExists || !visualStudioDataPathExists) { | ||||||
|  |       throw new Error(`Visual Studio not found at the default location.
 | ||||||
|  |               Make sure the runner has Visual Studio installed in the | ||||||
|  |               default location`);
 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default ValidateWindows; | ||||||
|  | @ -0,0 +1,673 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!129 &1 | ||||||
|  | PlayerSettings: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   serializedVersion: 22 | ||||||
|  |   productGUID: d9e9dde8e7ed4cf4bac4c6f2dffe7ef4 | ||||||
|  |   AndroidProfiler: 0 | ||||||
|  |   AndroidFilterTouchesWhenObscured: 0 | ||||||
|  |   AndroidEnableSustainedPerformanceMode: 0 | ||||||
|  |   defaultScreenOrientation: 4 | ||||||
|  |   targetDevice: 2 | ||||||
|  |   useOnDemandResources: 0 | ||||||
|  |   accelerometerFrequency: 60 | ||||||
|  |   companyName: DefaultCompany | ||||||
|  |   productName: simple-test-project | ||||||
|  |   defaultCursor: {fileID: 0} | ||||||
|  |   cursorHotspot: {x: 0, y: 0} | ||||||
|  |   m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} | ||||||
|  |   m_ShowUnitySplashScreen: 1 | ||||||
|  |   m_ShowUnitySplashLogo: 1 | ||||||
|  |   m_SplashScreenOverlayOpacity: 1 | ||||||
|  |   m_SplashScreenAnimation: 1 | ||||||
|  |   m_SplashScreenLogoStyle: 1 | ||||||
|  |   m_SplashScreenDrawMode: 0 | ||||||
|  |   m_SplashScreenBackgroundAnimationZoom: 1 | ||||||
|  |   m_SplashScreenLogoAnimationZoom: 1 | ||||||
|  |   m_SplashScreenBackgroundLandscapeAspect: 1 | ||||||
|  |   m_SplashScreenBackgroundPortraitAspect: 1 | ||||||
|  |   m_SplashScreenBackgroundLandscapeUvs: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     x: 0 | ||||||
|  |     y: 0 | ||||||
|  |     width: 1 | ||||||
|  |     height: 1 | ||||||
|  |   m_SplashScreenBackgroundPortraitUvs: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     x: 0 | ||||||
|  |     y: 0 | ||||||
|  |     width: 1 | ||||||
|  |     height: 1 | ||||||
|  |   m_SplashScreenLogos: [] | ||||||
|  |   m_VirtualRealitySplashScreen: {fileID: 0} | ||||||
|  |   m_HolographicTrackingLossScreen: {fileID: 0} | ||||||
|  |   defaultScreenWidth: 1024 | ||||||
|  |   defaultScreenHeight: 768 | ||||||
|  |   defaultScreenWidthWeb: 960 | ||||||
|  |   defaultScreenHeightWeb: 600 | ||||||
|  |   m_StereoRenderingPath: 0 | ||||||
|  |   m_ActiveColorSpace: 0 | ||||||
|  |   m_MTRendering: 1 | ||||||
|  |   mipStripping: 0 | ||||||
|  |   numberOfMipsStripped: 0 | ||||||
|  |   m_StackTraceTypes: 010000000100000001000000010000000100000001000000 | ||||||
|  |   iosShowActivityIndicatorOnLoading: -1 | ||||||
|  |   androidShowActivityIndicatorOnLoading: -1 | ||||||
|  |   iosUseCustomAppBackgroundBehavior: 0 | ||||||
|  |   iosAllowHTTPDownload: 1 | ||||||
|  |   allowedAutorotateToPortrait: 1 | ||||||
|  |   allowedAutorotateToPortraitUpsideDown: 1 | ||||||
|  |   allowedAutorotateToLandscapeRight: 1 | ||||||
|  |   allowedAutorotateToLandscapeLeft: 1 | ||||||
|  |   useOSAutorotation: 1 | ||||||
|  |   use32BitDisplayBuffer: 1 | ||||||
|  |   preserveFramebufferAlpha: 0 | ||||||
|  |   disableDepthAndStencilBuffers: 0 | ||||||
|  |   androidStartInFullscreen: 1 | ||||||
|  |   androidRenderOutsideSafeArea: 1 | ||||||
|  |   androidUseSwappy: 0 | ||||||
|  |   androidBlitType: 0 | ||||||
|  |   androidResizableWindow: 0 | ||||||
|  |   androidDefaultWindowWidth: 1920 | ||||||
|  |   androidDefaultWindowHeight: 1080 | ||||||
|  |   androidMinimumWindowWidth: 400 | ||||||
|  |   androidMinimumWindowHeight: 300 | ||||||
|  |   androidFullscreenMode: 1 | ||||||
|  |   defaultIsNativeResolution: 1 | ||||||
|  |   macRetinaSupport: 1 | ||||||
|  |   runInBackground: 1 | ||||||
|  |   captureSingleScreen: 0 | ||||||
|  |   muteOtherAudioSources: 0 | ||||||
|  |   Prepare IOS For Recording: 0 | ||||||
|  |   Force IOS Speakers When Recording: 0 | ||||||
|  |   deferSystemGesturesMode: 0 | ||||||
|  |   hideHomeButton: 0 | ||||||
|  |   submitAnalytics: 1 | ||||||
|  |   usePlayerLog: 1 | ||||||
|  |   bakeCollisionMeshes: 0 | ||||||
|  |   forceSingleInstance: 0 | ||||||
|  |   useFlipModelSwapchain: 1 | ||||||
|  |   resizableWindow: 0 | ||||||
|  |   useMacAppStoreValidation: 0 | ||||||
|  |   macAppStoreCategory: public.app-category.games | ||||||
|  |   gpuSkinning: 0 | ||||||
|  |   xboxPIXTextureCapture: 0 | ||||||
|  |   xboxEnableAvatar: 0 | ||||||
|  |   xboxEnableKinect: 0 | ||||||
|  |   xboxEnableKinectAutoTracking: 0 | ||||||
|  |   xboxEnableFitness: 0 | ||||||
|  |   visibleInBackground: 1 | ||||||
|  |   allowFullscreenSwitch: 1 | ||||||
|  |   fullscreenMode: 1 | ||||||
|  |   xboxSpeechDB: 0 | ||||||
|  |   xboxEnableHeadOrientation: 0 | ||||||
|  |   xboxEnableGuest: 0 | ||||||
|  |   xboxEnablePIXSampling: 0 | ||||||
|  |   metalFramebufferOnly: 0 | ||||||
|  |   xboxOneResolution: 0 | ||||||
|  |   xboxOneSResolution: 0 | ||||||
|  |   xboxOneXResolution: 3 | ||||||
|  |   xboxOneMonoLoggingLevel: 0 | ||||||
|  |   xboxOneLoggingLevel: 1 | ||||||
|  |   xboxOneDisableEsram: 0 | ||||||
|  |   xboxOneEnableTypeOptimization: 0 | ||||||
|  |   xboxOnePresentImmediateThreshold: 0 | ||||||
|  |   switchQueueCommandMemory: 0 | ||||||
|  |   switchQueueControlMemory: 16384 | ||||||
|  |   switchQueueComputeMemory: 262144 | ||||||
|  |   switchNVNShaderPoolsGranularity: 33554432 | ||||||
|  |   switchNVNDefaultPoolsGranularity: 16777216 | ||||||
|  |   switchNVNOtherPoolsGranularity: 16777216 | ||||||
|  |   switchNVNMaxPublicTextureIDCount: 0 | ||||||
|  |   switchNVNMaxPublicSamplerIDCount: 0 | ||||||
|  |   stadiaPresentMode: 0 | ||||||
|  |   stadiaTargetFramerate: 0 | ||||||
|  |   vulkanNumSwapchainBuffers: 3 | ||||||
|  |   vulkanEnableSetSRGBWrite: 0 | ||||||
|  |   vulkanEnablePreTransform: 0 | ||||||
|  |   vulkanEnableLateAcquireNextImage: 0 | ||||||
|  |   vulkanEnableCommandBufferRecycling: 1 | ||||||
|  |   m_SupportedAspectRatios: | ||||||
|  |     4:3: 1 | ||||||
|  |     5:4: 1 | ||||||
|  |     16:10: 1 | ||||||
|  |     16:9: 1 | ||||||
|  |     Others: 1 | ||||||
|  |   bundleVersion: 0.1 | ||||||
|  |   preloadedAssets: [] | ||||||
|  |   metroInputSource: 0 | ||||||
|  |   wsaTransparentSwapchain: 0 | ||||||
|  |   m_HolographicPauseOnTrackingLoss: 1 | ||||||
|  |   xboxOneDisableKinectGpuReservation: 1 | ||||||
|  |   xboxOneEnable7thCore: 1 | ||||||
|  |   vrSettings: | ||||||
|  |     enable360StereoCapture: 0 | ||||||
|  |   isWsaHolographicRemotingEnabled: 0 | ||||||
|  |   enableFrameTimingStats: 0 | ||||||
|  |   useHDRDisplay: 0 | ||||||
|  |   D3DHDRBitDepth: 0 | ||||||
|  |   m_ColorGamuts: 00000000 | ||||||
|  |   targetPixelDensity: 30 | ||||||
|  |   resolutionScalingMode: 0 | ||||||
|  |   androidSupportedAspectRatio: 1 | ||||||
|  |   androidMaxAspectRatio: 2.1 | ||||||
|  |   applicationIdentifier: | ||||||
|  |     Standalone: com.Company.ProductName | ||||||
|  |   buildNumber: | ||||||
|  |     Standalone: 0 | ||||||
|  |     iPhone: 0 | ||||||
|  |     tvOS: 0 | ||||||
|  |   overrideDefaultApplicationIdentifier: 1 | ||||||
|  |   AndroidBundleVersionCode: 1 | ||||||
|  |   AndroidMinSdkVersion: 19 | ||||||
|  |   AndroidTargetSdkVersion: 0 | ||||||
|  |   AndroidPreferredInstallLocation: 1 | ||||||
|  |   aotOptions:  | ||||||
|  |   stripEngineCode: 1 | ||||||
|  |   iPhoneStrippingLevel: 0 | ||||||
|  |   iPhoneScriptCallOptimization: 0 | ||||||
|  |   ForceInternetPermission: 0 | ||||||
|  |   ForceSDCardPermission: 0 | ||||||
|  |   CreateWallpaper: 0 | ||||||
|  |   APKExpansionFiles: 0 | ||||||
|  |   keepLoadedShadersAlive: 0 | ||||||
|  |   StripUnusedMeshComponents: 1 | ||||||
|  |   VertexChannelCompressionMask: 4054 | ||||||
|  |   iPhoneSdkVersion: 988 | ||||||
|  |   iOSTargetOSVersionString: 11.0 | ||||||
|  |   tvOSSdkVersion: 0 | ||||||
|  |   tvOSRequireExtendedGameController: 0 | ||||||
|  |   tvOSTargetOSVersionString: 11.0 | ||||||
|  |   uIPrerenderedIcon: 0 | ||||||
|  |   uIRequiresPersistentWiFi: 0 | ||||||
|  |   uIRequiresFullScreen: 1 | ||||||
|  |   uIStatusBarHidden: 1 | ||||||
|  |   uIExitOnSuspend: 0 | ||||||
|  |   uIStatusBarStyle: 0 | ||||||
|  |   appleTVSplashScreen: {fileID: 0} | ||||||
|  |   appleTVSplashScreen2x: {fileID: 0} | ||||||
|  |   tvOSSmallIconLayers: [] | ||||||
|  |   tvOSSmallIconLayers2x: [] | ||||||
|  |   tvOSLargeIconLayers: [] | ||||||
|  |   tvOSLargeIconLayers2x: [] | ||||||
|  |   tvOSTopShelfImageLayers: [] | ||||||
|  |   tvOSTopShelfImageLayers2x: [] | ||||||
|  |   tvOSTopShelfImageWideLayers: [] | ||||||
|  |   tvOSTopShelfImageWideLayers2x: [] | ||||||
|  |   iOSLaunchScreenType: 0 | ||||||
|  |   iOSLaunchScreenPortrait: {fileID: 0} | ||||||
|  |   iOSLaunchScreenLandscape: {fileID: 0} | ||||||
|  |   iOSLaunchScreenBackgroundColor: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     rgba: 0 | ||||||
|  |   iOSLaunchScreenFillPct: 100 | ||||||
|  |   iOSLaunchScreenSize: 100 | ||||||
|  |   iOSLaunchScreenCustomXibPath:  | ||||||
|  |   iOSLaunchScreeniPadType: 0 | ||||||
|  |   iOSLaunchScreeniPadImage: {fileID: 0} | ||||||
|  |   iOSLaunchScreeniPadBackgroundColor: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     rgba: 0 | ||||||
|  |   iOSLaunchScreeniPadFillPct: 100 | ||||||
|  |   iOSLaunchScreeniPadSize: 100 | ||||||
|  |   iOSLaunchScreeniPadCustomXibPath:  | ||||||
|  |   iOSLaunchScreenCustomStoryboardPath:  | ||||||
|  |   iOSLaunchScreeniPadCustomStoryboardPath:  | ||||||
|  |   iOSDeviceRequirements: [] | ||||||
|  |   iOSURLSchemes: [] | ||||||
|  |   iOSBackgroundModes: 0 | ||||||
|  |   iOSMetalForceHardShadows: 0 | ||||||
|  |   metalEditorSupport: 1 | ||||||
|  |   metalAPIValidation: 1 | ||||||
|  |   iOSRenderExtraFrameOnPause: 0 | ||||||
|  |   iosCopyPluginsCodeInsteadOfSymlink: 0 | ||||||
|  |   appleDeveloperTeamID:  | ||||||
|  |   iOSManualSigningProvisioningProfileID:  | ||||||
|  |   tvOSManualSigningProvisioningProfileID:  | ||||||
|  |   iOSManualSigningProvisioningProfileType: 0 | ||||||
|  |   tvOSManualSigningProvisioningProfileType: 0 | ||||||
|  |   appleEnableAutomaticSigning: 0 | ||||||
|  |   iOSRequireARKit: 0 | ||||||
|  |   iOSAutomaticallyDetectAndAddCapabilities: 1 | ||||||
|  |   appleEnableProMotion: 0 | ||||||
|  |   shaderPrecisionModel: 0 | ||||||
|  |   clonedFromGUID: 5f34be1353de5cf4398729fda238591b | ||||||
|  |   templatePackageId: com.unity.template.2d@3.2.3 | ||||||
|  |   templateDefaultScene: Assets/Scenes/SampleScene.unity | ||||||
|  |   useCustomMainManifest: 0 | ||||||
|  |   useCustomLauncherManifest: 0 | ||||||
|  |   useCustomMainGradleTemplate: 0 | ||||||
|  |   useCustomLauncherGradleManifest: 0 | ||||||
|  |   useCustomBaseGradleTemplate: 0 | ||||||
|  |   useCustomGradlePropertiesTemplate: 0 | ||||||
|  |   useCustomProguardFile: 0 | ||||||
|  |   AndroidTargetArchitectures: 1 | ||||||
|  |   AndroidTargetDevices: 0 | ||||||
|  |   AndroidSplashScreenScale: 0 | ||||||
|  |   androidSplashScreen: {fileID: 0} | ||||||
|  |   AndroidKeystoreName: '{inproject}: ' | ||||||
|  |   AndroidKeyaliasName:  | ||||||
|  |   AndroidBuildApkPerCpuArchitecture: 0 | ||||||
|  |   AndroidTVCompatibility: 0 | ||||||
|  |   AndroidIsGame: 1 | ||||||
|  |   AndroidEnableTango: 0 | ||||||
|  |   androidEnableBanner: 1 | ||||||
|  |   androidUseLowAccuracyLocation: 0 | ||||||
|  |   androidUseCustomKeystore: 0 | ||||||
|  |   m_AndroidBanners: | ||||||
|  |   - width: 320 | ||||||
|  |     height: 180 | ||||||
|  |     banner: {fileID: 0} | ||||||
|  |   androidGamepadSupportLevel: 0 | ||||||
|  |   chromeosInputEmulation: 1 | ||||||
|  |   AndroidMinifyWithR8: 0 | ||||||
|  |   AndroidMinifyRelease: 0 | ||||||
|  |   AndroidMinifyDebug: 0 | ||||||
|  |   AndroidValidateAppBundleSize: 1 | ||||||
|  |   AndroidAppBundleSizeToValidate: 150 | ||||||
|  |   m_BuildTargetIcons: [] | ||||||
|  |   m_BuildTargetPlatformIcons: [] | ||||||
|  |   m_BuildTargetBatching: [] | ||||||
|  |   m_BuildTargetGraphicsJobs: | ||||||
|  |   - m_BuildTarget: GameCoreScarlettSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: Switch | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: iOSSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: LuminSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: MacStandaloneSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: PS5Player | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: WebGLSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: AppleTVSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: GameCoreXboxOneSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: CloudRendering | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: WindowsStandaloneSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: PS4Player | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: MetroSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: AndroidPlayer | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: BJMSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: LinuxStandaloneSupport | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   - m_BuildTarget: XboxOnePlayer | ||||||
|  |     m_GraphicsJobs: 0 | ||||||
|  |   m_BuildTargetGraphicsJobMode: | ||||||
|  |   - m_BuildTarget: PS4Player | ||||||
|  |     m_GraphicsJobMode: 0 | ||||||
|  |   - m_BuildTarget: XboxOnePlayer | ||||||
|  |     m_GraphicsJobMode: 0 | ||||||
|  |   m_BuildTargetGraphicsAPIs: | ||||||
|  |   - m_BuildTarget: AndroidPlayer | ||||||
|  |     m_APIs: 150000000b000000 | ||||||
|  |     m_Automatic: 0 | ||||||
|  |   - m_BuildTarget: iOSSupport | ||||||
|  |     m_APIs: 10000000 | ||||||
|  |     m_Automatic: 1 | ||||||
|  |   m_BuildTargetVRSettings: [] | ||||||
|  |   openGLRequireES31: 0 | ||||||
|  |   openGLRequireES31AEP: 0 | ||||||
|  |   openGLRequireES32: 0 | ||||||
|  |   m_TemplateCustomTags: {} | ||||||
|  |   mobileMTRendering: | ||||||
|  |     Android: 1 | ||||||
|  |     iPhone: 1 | ||||||
|  |     tvOS: 1 | ||||||
|  |   m_BuildTargetGroupLightmapEncodingQuality: [] | ||||||
|  |   m_BuildTargetGroupLightmapSettings: [] | ||||||
|  |   m_BuildTargetNormalMapEncoding: [] | ||||||
|  |   playModeTestRunnerEnabled: 0 | ||||||
|  |   runPlayModeTestAsEditModeTest: 0 | ||||||
|  |   actionOnDotNetUnhandledException: 1 | ||||||
|  |   enableInternalProfiler: 0 | ||||||
|  |   logObjCUncaughtExceptions: 1 | ||||||
|  |   enableCrashReportAPI: 0 | ||||||
|  |   cameraUsageDescription:  | ||||||
|  |   locationUsageDescription:  | ||||||
|  |   microphoneUsageDescription:  | ||||||
|  |   bluetoothUsageDescription:  | ||||||
|  |   switchNMETAOverride:  | ||||||
|  |   switchNetLibKey:  | ||||||
|  |   switchSocketMemoryPoolSize: 6144 | ||||||
|  |   switchSocketAllocatorPoolSize: 128 | ||||||
|  |   switchSocketConcurrencyLimit: 14 | ||||||
|  |   switchScreenResolutionBehavior: 2 | ||||||
|  |   switchUseCPUProfiler: 0 | ||||||
|  |   switchUseGOLDLinker: 0 | ||||||
|  |   switchApplicationID: 0x01004b9000490000 | ||||||
|  |   switchNSODependencies:  | ||||||
|  |   switchTitleNames_0:  | ||||||
|  |   switchTitleNames_1:  | ||||||
|  |   switchTitleNames_2:  | ||||||
|  |   switchTitleNames_3:  | ||||||
|  |   switchTitleNames_4:  | ||||||
|  |   switchTitleNames_5:  | ||||||
|  |   switchTitleNames_6:  | ||||||
|  |   switchTitleNames_7:  | ||||||
|  |   switchTitleNames_8:  | ||||||
|  |   switchTitleNames_9:  | ||||||
|  |   switchTitleNames_10:  | ||||||
|  |   switchTitleNames_11:  | ||||||
|  |   switchTitleNames_12:  | ||||||
|  |   switchTitleNames_13:  | ||||||
|  |   switchTitleNames_14:  | ||||||
|  |   switchTitleNames_15:  | ||||||
|  |   switchPublisherNames_0:  | ||||||
|  |   switchPublisherNames_1:  | ||||||
|  |   switchPublisherNames_2:  | ||||||
|  |   switchPublisherNames_3:  | ||||||
|  |   switchPublisherNames_4:  | ||||||
|  |   switchPublisherNames_5:  | ||||||
|  |   switchPublisherNames_6:  | ||||||
|  |   switchPublisherNames_7:  | ||||||
|  |   switchPublisherNames_8:  | ||||||
|  |   switchPublisherNames_9:  | ||||||
|  |   switchPublisherNames_10:  | ||||||
|  |   switchPublisherNames_11:  | ||||||
|  |   switchPublisherNames_12:  | ||||||
|  |   switchPublisherNames_13:  | ||||||
|  |   switchPublisherNames_14:  | ||||||
|  |   switchPublisherNames_15:  | ||||||
|  |   switchIcons_0: {fileID: 0} | ||||||
|  |   switchIcons_1: {fileID: 0} | ||||||
|  |   switchIcons_2: {fileID: 0} | ||||||
|  |   switchIcons_3: {fileID: 0} | ||||||
|  |   switchIcons_4: {fileID: 0} | ||||||
|  |   switchIcons_5: {fileID: 0} | ||||||
|  |   switchIcons_6: {fileID: 0} | ||||||
|  |   switchIcons_7: {fileID: 0} | ||||||
|  |   switchIcons_8: {fileID: 0} | ||||||
|  |   switchIcons_9: {fileID: 0} | ||||||
|  |   switchIcons_10: {fileID: 0} | ||||||
|  |   switchIcons_11: {fileID: 0} | ||||||
|  |   switchIcons_12: {fileID: 0} | ||||||
|  |   switchIcons_13: {fileID: 0} | ||||||
|  |   switchIcons_14: {fileID: 0} | ||||||
|  |   switchIcons_15: {fileID: 0} | ||||||
|  |   switchSmallIcons_0: {fileID: 0} | ||||||
|  |   switchSmallIcons_1: {fileID: 0} | ||||||
|  |   switchSmallIcons_2: {fileID: 0} | ||||||
|  |   switchSmallIcons_3: {fileID: 0} | ||||||
|  |   switchSmallIcons_4: {fileID: 0} | ||||||
|  |   switchSmallIcons_5: {fileID: 0} | ||||||
|  |   switchSmallIcons_6: {fileID: 0} | ||||||
|  |   switchSmallIcons_7: {fileID: 0} | ||||||
|  |   switchSmallIcons_8: {fileID: 0} | ||||||
|  |   switchSmallIcons_9: {fileID: 0} | ||||||
|  |   switchSmallIcons_10: {fileID: 0} | ||||||
|  |   switchSmallIcons_11: {fileID: 0} | ||||||
|  |   switchSmallIcons_12: {fileID: 0} | ||||||
|  |   switchSmallIcons_13: {fileID: 0} | ||||||
|  |   switchSmallIcons_14: {fileID: 0} | ||||||
|  |   switchSmallIcons_15: {fileID: 0} | ||||||
|  |   switchManualHTML:  | ||||||
|  |   switchAccessibleURLs:  | ||||||
|  |   switchLegalInformation:  | ||||||
|  |   switchMainThreadStackSize: 1048576 | ||||||
|  |   switchPresenceGroupId:  | ||||||
|  |   switchLogoHandling: 0 | ||||||
|  |   switchReleaseVersion: 0 | ||||||
|  |   switchDisplayVersion: 1.0.0 | ||||||
|  |   switchStartupUserAccount: 0 | ||||||
|  |   switchTouchScreenUsage: 0 | ||||||
|  |   switchSupportedLanguagesMask: 0 | ||||||
|  |   switchLogoType: 0 | ||||||
|  |   switchApplicationErrorCodeCategory:  | ||||||
|  |   switchUserAccountSaveDataSize: 0 | ||||||
|  |   switchUserAccountSaveDataJournalSize: 0 | ||||||
|  |   switchApplicationAttribute: 0 | ||||||
|  |   switchCardSpecSize: -1 | ||||||
|  |   switchCardSpecClock: -1 | ||||||
|  |   switchRatingsMask: 0 | ||||||
|  |   switchRatingsInt_0: 0 | ||||||
|  |   switchRatingsInt_1: 0 | ||||||
|  |   switchRatingsInt_2: 0 | ||||||
|  |   switchRatingsInt_3: 0 | ||||||
|  |   switchRatingsInt_4: 0 | ||||||
|  |   switchRatingsInt_5: 0 | ||||||
|  |   switchRatingsInt_6: 0 | ||||||
|  |   switchRatingsInt_7: 0 | ||||||
|  |   switchRatingsInt_8: 0 | ||||||
|  |   switchRatingsInt_9: 0 | ||||||
|  |   switchRatingsInt_10: 0 | ||||||
|  |   switchRatingsInt_11: 0 | ||||||
|  |   switchRatingsInt_12: 0 | ||||||
|  |   switchLocalCommunicationIds_0:  | ||||||
|  |   switchLocalCommunicationIds_1:  | ||||||
|  |   switchLocalCommunicationIds_2:  | ||||||
|  |   switchLocalCommunicationIds_3:  | ||||||
|  |   switchLocalCommunicationIds_4:  | ||||||
|  |   switchLocalCommunicationIds_5:  | ||||||
|  |   switchLocalCommunicationIds_6:  | ||||||
|  |   switchLocalCommunicationIds_7:  | ||||||
|  |   switchParentalControl: 0 | ||||||
|  |   switchAllowsScreenshot: 1 | ||||||
|  |   switchAllowsVideoCapturing: 1 | ||||||
|  |   switchAllowsRuntimeAddOnContentInstall: 0 | ||||||
|  |   switchDataLossConfirmation: 0 | ||||||
|  |   switchUserAccountLockEnabled: 0 | ||||||
|  |   switchSystemResourceMemory: 16777216 | ||||||
|  |   switchSupportedNpadStyles: 22 | ||||||
|  |   switchNativeFsCacheSize: 32 | ||||||
|  |   switchIsHoldTypeHorizontal: 0 | ||||||
|  |   switchSupportedNpadCount: 8 | ||||||
|  |   switchSocketConfigEnabled: 0 | ||||||
|  |   switchTcpInitialSendBufferSize: 32 | ||||||
|  |   switchTcpInitialReceiveBufferSize: 64 | ||||||
|  |   switchTcpAutoSendBufferSizeMax: 256 | ||||||
|  |   switchTcpAutoReceiveBufferSizeMax: 256 | ||||||
|  |   switchUdpSendBufferSize: 9 | ||||||
|  |   switchUdpReceiveBufferSize: 42 | ||||||
|  |   switchSocketBufferEfficiency: 4 | ||||||
|  |   switchSocketInitializeEnabled: 1 | ||||||
|  |   switchNetworkInterfaceManagerInitializeEnabled: 1 | ||||||
|  |   switchPlayerConnectionEnabled: 1 | ||||||
|  |   switchUseNewStyleFilepaths: 0 | ||||||
|  |   switchUseMicroSleepForYield: 1 | ||||||
|  |   switchMicroSleepForYieldTime: 25 | ||||||
|  |   ps4NPAgeRating: 12 | ||||||
|  |   ps4NPTitleSecret:  | ||||||
|  |   ps4NPTrophyPackPath:  | ||||||
|  |   ps4ParentalLevel: 11 | ||||||
|  |   ps4ContentID: ED1633-NPXX51362_00-0000000000000000 | ||||||
|  |   ps4Category: 0 | ||||||
|  |   ps4MasterVersion: 01.00 | ||||||
|  |   ps4AppVersion: 01.00 | ||||||
|  |   ps4AppType: 0 | ||||||
|  |   ps4ParamSfxPath:  | ||||||
|  |   ps4VideoOutPixelFormat: 0 | ||||||
|  |   ps4VideoOutInitialWidth: 1920 | ||||||
|  |   ps4VideoOutBaseModeInitialWidth: 1920 | ||||||
|  |   ps4VideoOutReprojectionRate: 60 | ||||||
|  |   ps4PronunciationXMLPath:  | ||||||
|  |   ps4PronunciationSIGPath:  | ||||||
|  |   ps4BackgroundImagePath:  | ||||||
|  |   ps4StartupImagePath:  | ||||||
|  |   ps4StartupImagesFolder:  | ||||||
|  |   ps4IconImagesFolder:  | ||||||
|  |   ps4SaveDataImagePath:  | ||||||
|  |   ps4SdkOverride:  | ||||||
|  |   ps4BGMPath:  | ||||||
|  |   ps4ShareFilePath:  | ||||||
|  |   ps4ShareOverlayImagePath:  | ||||||
|  |   ps4PrivacyGuardImagePath:  | ||||||
|  |   ps4ExtraSceSysFile:  | ||||||
|  |   ps4NPtitleDatPath:  | ||||||
|  |   ps4RemotePlayKeyAssignment: -1 | ||||||
|  |   ps4RemotePlayKeyMappingDir:  | ||||||
|  |   ps4PlayTogetherPlayerCount: 0 | ||||||
|  |   ps4EnterButtonAssignment: 1 | ||||||
|  |   ps4ApplicationParam1: 0 | ||||||
|  |   ps4ApplicationParam2: 0 | ||||||
|  |   ps4ApplicationParam3: 0 | ||||||
|  |   ps4ApplicationParam4: 0 | ||||||
|  |   ps4DownloadDataSize: 0 | ||||||
|  |   ps4GarlicHeapSize: 2048 | ||||||
|  |   ps4ProGarlicHeapSize: 2560 | ||||||
|  |   playerPrefsMaxSize: 32768 | ||||||
|  |   ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ | ||||||
|  |   ps4pnSessions: 1 | ||||||
|  |   ps4pnPresence: 1 | ||||||
|  |   ps4pnFriends: 1 | ||||||
|  |   ps4pnGameCustomData: 1 | ||||||
|  |   playerPrefsSupport: 0 | ||||||
|  |   enableApplicationExit: 0 | ||||||
|  |   resetTempFolder: 1 | ||||||
|  |   restrictedAudioUsageRights: 0 | ||||||
|  |   ps4UseResolutionFallback: 0 | ||||||
|  |   ps4ReprojectionSupport: 0 | ||||||
|  |   ps4UseAudio3dBackend: 0 | ||||||
|  |   ps4UseLowGarlicFragmentationMode: 1 | ||||||
|  |   ps4SocialScreenEnabled: 0 | ||||||
|  |   ps4ScriptOptimizationLevel: 0 | ||||||
|  |   ps4Audio3dVirtualSpeakerCount: 14 | ||||||
|  |   ps4attribCpuUsage: 0 | ||||||
|  |   ps4PatchPkgPath:  | ||||||
|  |   ps4PatchLatestPkgPath:  | ||||||
|  |   ps4PatchChangeinfoPath:  | ||||||
|  |   ps4PatchDayOne: 0 | ||||||
|  |   ps4attribUserManagement: 0 | ||||||
|  |   ps4attribMoveSupport: 0 | ||||||
|  |   ps4attrib3DSupport: 0 | ||||||
|  |   ps4attribShareSupport: 0 | ||||||
|  |   ps4attribExclusiveVR: 0 | ||||||
|  |   ps4disableAutoHideSplash: 0 | ||||||
|  |   ps4videoRecordingFeaturesUsed: 0 | ||||||
|  |   ps4contentSearchFeaturesUsed: 0 | ||||||
|  |   ps4CompatibilityPS5: 0 | ||||||
|  |   ps4AllowPS5Detection: 0 | ||||||
|  |   ps4GPU800MHz: 1 | ||||||
|  |   ps4attribEyeToEyeDistanceSettingVR: 0 | ||||||
|  |   ps4IncludedModules: [] | ||||||
|  |   ps4attribVROutputEnabled: 0 | ||||||
|  |   monoEnv:  | ||||||
|  |   splashScreenBackgroundSourceLandscape: {fileID: 0} | ||||||
|  |   splashScreenBackgroundSourcePortrait: {fileID: 0} | ||||||
|  |   blurSplashScreenBackground: 1 | ||||||
|  |   spritePackerPolicy:  | ||||||
|  |   webGLMemorySize: 16 | ||||||
|  |   webGLExceptionSupport: 1 | ||||||
|  |   webGLNameFilesAsHashes: 0 | ||||||
|  |   webGLDataCaching: 1 | ||||||
|  |   webGLDebugSymbols: 0 | ||||||
|  |   webGLEmscriptenArgs:  | ||||||
|  |   webGLModulesDirectory:  | ||||||
|  |   webGLTemplate: APPLICATION:Default | ||||||
|  |   webGLAnalyzeBuildSize: 0 | ||||||
|  |   webGLUseEmbeddedResources: 0 | ||||||
|  |   webGLCompressionFormat: 1 | ||||||
|  |   webGLWasmArithmeticExceptions: 0 | ||||||
|  |   webGLLinkerTarget: 1 | ||||||
|  |   webGLThreadsSupport: 0 | ||||||
|  |   webGLDecompressionFallback: 0 | ||||||
|  |   scriptingDefineSymbols: {} | ||||||
|  |   additionalCompilerArguments: {} | ||||||
|  |   platformArchitecture: {} | ||||||
|  |   scriptingBackend: | ||||||
|  |     Standalone: 1 | ||||||
|  |   il2cppCompilerConfiguration: {} | ||||||
|  |   managedStrippingLevel: {} | ||||||
|  |   incrementalIl2cppBuild: {} | ||||||
|  |   suppressCommonWarnings: 1 | ||||||
|  |   allowUnsafeCode: 0 | ||||||
|  |   useDeterministicCompilation: 1 | ||||||
|  |   useReferenceAssemblies: 1 | ||||||
|  |   enableRoslynAnalyzers: 1 | ||||||
|  |   additionalIl2CppArgs:  | ||||||
|  |   scriptingRuntimeVersion: 1 | ||||||
|  |   gcIncremental: 0 | ||||||
|  |   assemblyVersionValidation: 1 | ||||||
|  |   gcWBarrierValidation: 0 | ||||||
|  |   apiCompatibilityLevelPerPlatform: {} | ||||||
|  |   m_RenderingPath: 1 | ||||||
|  |   m_MobileRenderingPath: 1 | ||||||
|  |   metroPackageName: Template2D | ||||||
|  |   metroPackageVersion: 1.0.0.0 | ||||||
|  |   metroCertificatePath:  | ||||||
|  |   metroCertificatePassword:  | ||||||
|  |   metroCertificateSubject:  | ||||||
|  |   metroCertificateIssuer:  | ||||||
|  |   metroCertificateNotAfter: 0000000000000000 | ||||||
|  |   metroApplicationDescription: Template_2D | ||||||
|  |   wsaImages: {} | ||||||
|  |   metroTileShortName: simple-test-project | ||||||
|  |   metroTileShowName: 0 | ||||||
|  |   metroMediumTileShowName: 0 | ||||||
|  |   metroLargeTileShowName: 0 | ||||||
|  |   metroWideTileShowName: 0 | ||||||
|  |   metroSupportStreamingInstall: 0 | ||||||
|  |   metroLastRequiredScene: 0 | ||||||
|  |   metroDefaultTileSize: 1 | ||||||
|  |   metroTileForegroundText: 2 | ||||||
|  |   metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} | ||||||
|  |   metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, | ||||||
|  |     a: 1} | ||||||
|  |   metroSplashScreenUseBackgroundColor: 0 | ||||||
|  |   platformCapabilities: {} | ||||||
|  |   metroTargetDeviceFamilies: {} | ||||||
|  |   metroFTAName:  | ||||||
|  |   metroFTAFileTypes: [] | ||||||
|  |   metroProtocolName:  | ||||||
|  |   XboxOneProductId:  | ||||||
|  |   XboxOneUpdateKey:  | ||||||
|  |   XboxOneSandboxId:  | ||||||
|  |   XboxOneContentId:  | ||||||
|  |   XboxOneTitleId:  | ||||||
|  |   XboxOneSCId:  | ||||||
|  |   XboxOneGameOsOverridePath:  | ||||||
|  |   XboxOnePackagingOverridePath:  | ||||||
|  |   XboxOneAppManifestOverridePath:  | ||||||
|  |   XboxOneVersion: 1.0.0.0 | ||||||
|  |   XboxOnePackageEncryption: 0 | ||||||
|  |   XboxOnePackageUpdateGranularity: 2 | ||||||
|  |   XboxOneDescription:  | ||||||
|  |   XboxOneLanguage: | ||||||
|  |   - enus | ||||||
|  |   XboxOneCapability: [] | ||||||
|  |   XboxOneGameRating: {} | ||||||
|  |   XboxOneIsContentPackage: 0 | ||||||
|  |   XboxOneEnhancedXboxCompatibilityMode: 0 | ||||||
|  |   XboxOneEnableGPUVariability: 1 | ||||||
|  |   XboxOneSockets: {} | ||||||
|  |   XboxOneSplashScreen: {fileID: 0} | ||||||
|  |   XboxOneAllowedProductIds: [] | ||||||
|  |   XboxOnePersistentLocalStorageSize: 0 | ||||||
|  |   XboxOneXTitleMemory: 8 | ||||||
|  |   XboxOneOverrideIdentityName:  | ||||||
|  |   XboxOneOverrideIdentityPublisher:  | ||||||
|  |   vrEditorSettings: {} | ||||||
|  |   cloudServicesEnabled: | ||||||
|  |     UNet: 1 | ||||||
|  |   luminIcon: | ||||||
|  |     m_Name:  | ||||||
|  |     m_ModelFolderPath:  | ||||||
|  |     m_PortalFolderPath:  | ||||||
|  |   luminCert: | ||||||
|  |     m_CertPath:  | ||||||
|  |     m_SignPackage: 1 | ||||||
|  |   luminIsChannelApp: 0 | ||||||
|  |   luminVersion: | ||||||
|  |     m_VersionCode: 1 | ||||||
|  |     m_VersionName:  | ||||||
|  |   apiCompatibilityLevel: 6 | ||||||
|  |   activeInputHandler: 0 | ||||||
|  |   cloudProjectId:  | ||||||
|  |   framebufferDepthMemorylessMode: 0 | ||||||
|  |   qualitySettingsNames: [] | ||||||
|  |   projectName:  | ||||||
|  |   organizationId:  | ||||||
|  |   cloudEnabled: 0 | ||||||
|  |   legacyClampBlendShapeWeights: 0 | ||||||
|  |   virtualTexturingSupportEnabled: 0 | ||||||
							
								
								
									
										34
									
								
								yarn.lock
								
								
								
								
							
							
						
						
									
										34
									
								
								yarn.lock
								
								
								
								
							|  | @ -4402,9 +4402,11 @@ nice-try@^1.0.4: | ||||||
|   integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== |   integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== | ||||||
| 
 | 
 | ||||||
| node-fetch@^2.6.1: | node-fetch@^2.6.1: | ||||||
|   version "2.6.1" |   version "2.6.7" | ||||||
|   resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" |   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" | ||||||
|   integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== |   integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== | ||||||
|  |   dependencies: | ||||||
|  |     whatwg-url "^5.0.0" | ||||||
| 
 | 
 | ||||||
| node-int64@^0.4.0: | node-int64@^0.4.0: | ||||||
|   version "0.4.0" |   version "0.4.0" | ||||||
|  | @ -5808,10 +5810,15 @@ tr46@^2.0.2: | ||||||
|   dependencies: |   dependencies: | ||||||
|     punycode "^2.1.1" |     punycode "^2.1.1" | ||||||
| 
 | 
 | ||||||
| ts-jest@^26.4.2: | tr46@~0.0.3: | ||||||
|   version "26.5.6" |   version "0.0.3" | ||||||
|   resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" |   resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" | ||||||
|   integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== |   integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= | ||||||
|  | 
 | ||||||
|  | ts-jest@^26.4.4: | ||||||
|  |   version "26.5.5" | ||||||
|  |   resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.5.tgz" | ||||||
|  |   integrity sha512-7tP4m+silwt1NHqzNRAPjW1BswnAhopTdc2K3HEkRZjF0ZG2F/e/ypVH0xiZIMfItFtD3CX0XFbwPzp9fIEUVg== | ||||||
|   dependencies: |   dependencies: | ||||||
|     bs-logger "0.x" |     bs-logger "0.x" | ||||||
|     buffer-from "1.x" |     buffer-from "1.x" | ||||||
|  | @ -6091,6 +6098,11 @@ walker@^1.0.7, walker@~1.0.5: | ||||||
|   dependencies: |   dependencies: | ||||||
|     makeerror "1.0.x" |     makeerror "1.0.x" | ||||||
| 
 | 
 | ||||||
|  | webidl-conversions@^3.0.0: | ||||||
|  |   version "3.0.1" | ||||||
|  |   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" | ||||||
|  |   integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= | ||||||
|  | 
 | ||||||
| webidl-conversions@^5.0.0: | webidl-conversions@^5.0.0: | ||||||
|   version "5.0.0" |   version "5.0.0" | ||||||
|   resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" |   resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" | ||||||
|  | @ -6113,6 +6125,14 @@ whatwg-mimetype@^2.3.0: | ||||||
|   resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" |   resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" | ||||||
|   integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== |   integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== | ||||||
| 
 | 
 | ||||||
|  | whatwg-url@^5.0.0: | ||||||
|  |   version "5.0.0" | ||||||
|  |   resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" | ||||||
|  |   integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= | ||||||
|  |   dependencies: | ||||||
|  |     tr46 "~0.0.3" | ||||||
|  |     webidl-conversions "^3.0.0" | ||||||
|  | 
 | ||||||
| whatwg-url@^8.0.0, whatwg-url@^8.5.0: | whatwg-url@^8.0.0, whatwg-url@^8.5.0: | ||||||
|   version "8.5.0" |   version "8.5.0" | ||||||
|   resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz" |   resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue