Search Unity

Unity Cloud Build Feature Requests

Discussion in 'Unity Cloud Build' started by David-Berger, Jun 2, 2015.

  1. David-Berger

    David-Berger

    Unity Technologies

    Joined:
    Jul 16, 2014
    Posts:
    646
    Starting today the Unity Feedback site has a new category for Unity Cloud Build.

    You’ll be able to check this area to see which feature requests are currently popular, and to vote for (or suggest!) the features you care about the most.

    Every user receives 10 votes to use, and if there is a feature you REALLY care about you can vote for it up to three times.

    You’ll notice that each feature has a status:
    • Active: Any Feedback which is currently not Completed, Declined or Invalid.
    • Under review: We’re considering this feature.
    • Planned: We’ve agreed that this feature should be implemented, and found a place for it on our roadmap
    • Started: We’ve started work on this feature.
    • Completed: This feature is complete.
    • Declined: We’ve considered this feature but decided not to implement it.
    • Invalid: Feedback which was rejected as it does not fit to the Service.
    When you’re discussing Cloud Build features on the forum, using Twitter, or anywhere else, try to remember to link to the feature request on the feedback site so that other users will find it and up-vote it! And if someone suggests something brilliant, encourage them to submit it to the feedback site so it can be documented and considered. The Cloud Build team will try to keep the requests updated and will reach out to the person who posted the request if any clarification is necessary.

    Thanks to all of you for using the service and being a vocal part of the Cloud Build community. We remain dedicated to helping relieve you of repetitive workflows so you can stay focused on building awesome games!
     
    P_Jong and junglemason like this.
  2. goldbug

    goldbug

    Joined:
    Oct 12, 2011
    Posts:
    671
    @David-Berger, the last completed feature is 2 years old, nothing is started, nothing is planned and nothing new is in review.

    Are you guys watching the Unity feedback site? Is there any development in cloud build?
     
    erlioniel likes this.
  3. ollieblanks

    ollieblanks

    Unity Technologies

    Joined:
    Aug 21, 2017
    Posts:
    134
    @goldbug Thank you for raising this concern. We are always making a conscious effort to respond to our user's feedback and keep our users up to date with new developments.

    Cloud Build is under active development, and most of that effort in recent months has gone into maintaining support for the existing platforms, reducing the error rates (such as the work with teams across Unity on solving the shader compiler errors), and working on a few key new features such as the new deployments service (for which Xiaomi's Mi Game Center is the first target).

    We have still been monitoring and reviewing new feedback items, although it is evident that the Feedback site has not been kept up to date as it should.
     
    goldbug likes this.
  4. StaffanEk

    StaffanEk

    Joined:
    Jul 13, 2012
    Posts:
    377
    Include my template file in the WebGL build, and stop blowing smoke up my ass about hosting. I don't care about hosting.
     
  5. PlayItSafe_Fries

    PlayItSafe_Fries

    Joined:
    Jan 17, 2018
    Posts:
    8
    Instead of waiting for Unity to fix this, I decided to write a workaround myself. This will allow you to use your custom template with cloud build.

    Just put this code anywhere in your project (Preferrably under an /Editor folder) and don't forget to replace the <YOUR TEMPLATE NAME> part with your actual template name.

    Code (CSharp):
    1. #if UNITY_EDITOR && UNITY_WEBGL
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEditor.Callbacks;
    5. using UnityEditor;
    6. using System.IO;
    7. using System;
    8. using System.Text.RegularExpressions;
    9. using System.Linq;
    10.  
    11. public class PostProcessWebGL
    12. {
    13.     //The name of the WebGLTemplate. Location in project should be Assets/WebGLTemplates/<YOUR TEMPLATE NAME>
    14.     const string __TemplateToUse = "<YOUR TEMPLATE NAME>";
    15.  
    16.     [PostProcessBuild]
    17.     public static void ChangeWebGLTemplate(BuildTarget buildTarget, string pathToBuiltProject)
    18.     {
    19.         if (buildTarget != BuildTarget.WebGL) return;
    20.  
    21.  
    22.         //create template path
    23.         var templatePath = Paths.Combine(Application.dataPath, "WebGLTemplates", __TemplateToUse);
    24.  
    25.         //Clear the TemplateData folder, built by Unity.
    26.         FileUtilExtended.CreateOrCleanDirectory(Paths.Combine(pathToBuiltProject, "TemplateData"));
    27.  
    28.         //Copy contents from WebGLTemplate. Ignore all .meta files
    29.         FileUtilExtended.CopyDirectoryFiltered(templatePath, pathToBuiltProject, true, @".*/\.+|\.meta$", true);
    30.  
    31.         //Replace contents of index.html
    32.         FixIndexHtml(pathToBuiltProject);
    33.     }
    34.  
    35.     //Replaces %...% defines in index.html
    36.     static void FixIndexHtml(string pathToBuiltProject)
    37.     {
    38.         //Fetch filenames to be referenced in index.html
    39.         string
    40.             webglBuildUrl,
    41.             webglLoaderUrl;
    42.    
    43.         if (File.Exists(Paths.Combine(pathToBuiltProject, "Build", "UnityLoader.js")))
    44.         {
    45.             webglLoaderUrl = "Build/UnityLoader.js";
    46.         }
    47.         else
    48.         {
    49.             webglLoaderUrl = "Build/UnityLoader.min.js";
    50.         }
    51.  
    52.         string buildName = pathToBuiltProject.Substring(pathToBuiltProject.LastIndexOf("/") + 1);
    53.         webglBuildUrl = string.Format("Build/{0}.json", buildName);
    54.  
    55.         //webglLoaderUrl = EditorUserBuildSettings.development? "Build/UnityLoader.js": "Build/UnityLoader.min.js";
    56.         Dictionary<string, string> replaceKeywordsMap = new Dictionary<string, string> {
    57.                 {
    58.                     "%UNITY_WIDTH%",
    59.                     PlayerSettings.defaultWebScreenWidth.ToString()
    60.                 },
    61.                 {
    62.                     "%UNITY_HEIGHT%",
    63.                     PlayerSettings.defaultWebScreenHeight.ToString()
    64.                 },
    65.                 {
    66.                     "%UNITY_WEB_NAME%",
    67.                     PlayerSettings.productName
    68.                 },
    69.                 {
    70.                     "%UNITY_WEBGL_LOADER_URL%",
    71.                     webglLoaderUrl
    72.                 },
    73.                 {
    74.                     "%UNITY_WEBGL_BUILD_URL%",
    75.                     webglBuildUrl
    76.                 }
    77.             };
    78.  
    79.         string indexFilePath = Paths.Combine(pathToBuiltProject, "index.html");
    80.       Func<string, KeyValuePair<string, string>, string> replaceFunction = (current, replace) => current.Replace(replace.Key, replace.Value);
    81.         if (File.Exists(indexFilePath))
    82.         {
    83.           File.WriteAllText(indexFilePath, replaceKeywordsMap.Aggregate<KeyValuePair<string, string>, string>(File.ReadAllText(indexFilePath), replaceFunction));
    84.         }
    85.  
    86.     }
    87.  
    88.     private class FileUtilExtended
    89.     {
    90.    
    91.         internal static void CreateOrCleanDirectory(string dir)
    92.         {
    93.             if (Directory.Exists(dir))
    94.             {
    95.                 Directory.Delete(dir, true);
    96.             }
    97.             Directory.CreateDirectory(dir);
    98.         }
    99.  
    100.         //Fix forward slashes on other platforms than windows
    101.         internal static string FixForwardSlashes(string unityPath)
    102.         {
    103.             return ((Application.platform != RuntimePlatform.WindowsEditor) ? unityPath : unityPath.Replace("/", @"\"));
    104.         }
    105.  
    106.  
    107.  
    108.         //Copies the contents of one directory to another.
    109.       public static void CopyDirectoryFiltered(string source, string target, bool overwrite, string regExExcludeFilter, bool recursive)
    110.         {
    111.             RegexMatcher excluder = new RegexMatcher()
    112.             {
    113.                 exclude = null
    114.             };
    115.             try
    116.             {
    117.                 if (regExExcludeFilter != null)
    118.                 {
    119.                     excluder.exclude = new Regex(regExExcludeFilter);
    120.                 }
    121.             }
    122.             catch (ArgumentException)
    123.             {
    124.               UnityEngine.Debug.Log("CopyDirectoryRecursive: Pattern '" + regExExcludeFilter + "' is not a correct Regular Expression. Not excluding any files.");
    125.                 return;
    126.             }
    127.             CopyDirectoryFiltered(source, target, overwrite, excluder.CheckInclude, recursive);
    128.         }
    129.       internal static void CopyDirectoryFiltered(string sourceDir, string targetDir, bool overwrite, Func<string, bool> filtercallback, bool recursive)
    130.         {
    131.             // Create directory if needed
    132.             if (!Directory.Exists(targetDir))
    133.             {
    134.                 Directory.CreateDirectory(targetDir);
    135.                 overwrite = false;
    136.             }
    137.  
    138.             // Iterate all files, files that match filter are copied.
    139.             foreach (string filepath in Directory.GetFiles(sourceDir))
    140.             {
    141.                 if (filtercallback(filepath))
    142.                 {
    143.                     string fileName = Path.GetFileName(filepath);
    144.                     string to = Path.Combine(targetDir, fileName);
    145.  
    146.                
    147.                     File.Copy(FixForwardSlashes(filepath),FixForwardSlashes(to), overwrite);
    148.                 }
    149.             }
    150.  
    151.             // Go into sub directories
    152.             if (recursive)
    153.             {
    154.                 foreach (string subdirectorypath in Directory.GetDirectories(sourceDir))
    155.                 {
    156.                     if (filtercallback(subdirectorypath))
    157.                     {
    158.                         string directoryName = Path.GetFileName(subdirectorypath);
    159.                       CopyDirectoryFiltered(Path.Combine(sourceDir, directoryName), Path.Combine(targetDir, directoryName), overwrite, filtercallback, recursive);
    160.                     }
    161.                 }
    162.             }
    163.         }
    164.  
    165.         internal struct RegexMatcher
    166.         {
    167.             public Regex exclude;
    168.             public bool CheckInclude(string s)
    169.             {
    170.                 return exclude == null || !exclude.IsMatch(s);
    171.             }
    172.         }
    173.  
    174.     }
    175.  
    176.     private class Paths
    177.     {
    178.         //Combine multiple paths using Path.Combine
    179.         public static string Combine(params string[] components)
    180.         {
    181.             if (components.Length < 1)
    182.             {
    183.                 throw new ArgumentException("At least one component must be provided!");
    184.             }
    185.             string str = components[0];
    186.             for (int i = 1; i < components.Length; i++)
    187.             {
    188.                 str = Path.Combine(str, components[i]);
    189.             }
    190.             return str;
    191.         }
    192.     }
    193.  
    194. }
    195.  
    196. #endif
    Good luck!
     
    ollieblanks and technicat like this.
  6. iMer

    iMer

    Joined:
    May 21, 2013
    Posts:
    13
    @ollieblanks
    ..and a month and a half later still nothing notable has happened

    Please find some time to fix all the smaller issues (looking over the feedback site: headless builds, being able to edit signing credentials, more predefined webhook endpoints, svn externals and more) people have been complaining about for YEARS.
    It's just mindboggling why Unity hasn't invested any time in sorting these sore spots in a otherwise fairly good service ESPECIALLY since cloud build is a fully fledged paid product under Unity Teams now

    I don't need a solution this instant, I just want to see something is happening at least.
    Give us a roadmap, update us, tell us what's going on. Please.
     
    Immu, thibouf, mmortall and 5 others like this.
  7. mmortall

    mmortall

    Joined:
    Dec 28, 2010
    Posts:
    78
    Looks like Unity not working on Unity Cloud anymore. All the same, as it was 2 years ago.
     
    StaffanEk likes this.
  8. Karsten

    Karsten

    Joined:
    Apr 8, 2012
    Posts:
    93
    Can we please have an option for a public download link for Builds OR if UT fears too much traffic an option to upload ready builds to FTP or Google Faildrive or Dropbox (FTP prefered because pro...) would be awesome.As it looks like the links from the Build success webhook work only for people with a Unity Teams seat/account .
    I will recommend you for the Alan Touring avard if you implement a way to share a public link or an upload to an alternate space.
    Thanks.
     
  9. darbotron

    darbotron

    Joined:
    Aug 9, 2010
    Posts:
    196
    Hi

    Firstly, love cloudbuild - it's a great bit of tech and has saved countless hours :)

    A couple of feature requests:

    1) public sharing links
    I think it would be great to be able to manage these separately from the individual builds.

    Ideally I'd like to be able to auto-remove links for builds as they move down the build queue (e.g. just keep them for the top X entries).

    2) Integrations
    (Yeah, I know these are beta)
    We have people from our publisher on our slack who don't have Unity accounts for our project, so it would be awesome if the integration for slack could optionally generate a public sharing link.​

    I'm sure I could implement these myself with the Unity / Slack webhook APIs but since I think these would be super useful features for lots of people using cloud build I thought I'd mention them here :)
     
    Last edited: Sep 14, 2018
    ollieblanks likes this.
  10. darbotron

    darbotron

    Joined:
    Aug 9, 2010
    Posts:
    196
    d'oh! I'll add this to the actual feature request site. my bad.
     
    ollieblanks likes this.
  11. TanselAltinel

    TanselAltinel

    Joined:
    Jan 7, 2015
    Posts:
    146
  12. FMaroy

    FMaroy

    Joined:
    Oct 8, 2015
    Posts:
    5
    What about Blender files support? Is it coming some time?
     
  13. james7132

    james7132

    Joined:
    Mar 6, 2015
    Posts:
    109
    A small one: use a different archive format for desktop platforms other than ZIP.

    When processing the result of the build in a continuous deployment system following a build, because the ZIP file format requires the file metadata to be stored at the end of a file instead of at the beginning. This means the entire file must be downloaded to disk to locally process the build. This can be quite costly when the build is several gigabyte while working in a low disk or even diskless environment.

    If possible, could we also get the build artifacts uploaded in some other fomat? Either as compressed individual files (w/file hash) or some archive format that supports stream decompression like *.tar.gz.
     
  14. jmanx18

    jmanx18

    Joined:
    Feb 6, 2013
    Posts:
    13
    Snupiman likes this.
  15. Snupiman

    Snupiman

    Joined:
    Sep 7, 2012
    Posts:
    34
    This is a perfect feature for us. We have many Android devices for testing. Typing URL or opening URL on all devices is a tedious job. Scanning QR codes save a ton of time.

    It would be even more awesome if QR code was visible to anyone and not only members of the cloud service. Eg. Member of SLACK channel (external QA tester) gets notified with new build available and link to download APK. If he doesn't want to have all testing devices connected to SLACK or manually type the URL, he has to generate his QR code to speed up the process. What do you think about this
    @ollieblanks ?

    Thanks.
     
    Last edited: Jan 25, 2019
  16. Snupiman

    Snupiman

    Joined:
    Sep 7, 2012
    Posts:
    34
    Hey guys!

    I often build for iOS TestFlight. It would be handy to have the option to override some "Player Settings" like version # and build # before clean build or build.

    This feature would be especially useful if a developer is making commits from Windows. As far as I am aware there is no option to change build number for the iOS target from Windows.

    @ollieblanks Please let me know if this is possible or we should find work around.
     
    andersemil and technicat like this.
  17. Snupiman

    Snupiman

    Joined:
    Sep 7, 2012
    Posts:
    34
    @ollieblanks Thank you for fixing our account!

    Since our account can Auto-Build which is extremely helpful, we suggest that you integrate opt-in delay to auto-build. The reason would be that we push several commits at once yet Unity cloud will only pick up on the first one and initiate the build which takes time. Not having to waste time we have to cancel manually and request to build the last commit manually. Thus it defeats the purpose of Auto-Build.
    BTW: We are RAPID PROTOTYPING, so there are several builds to a day.
     
    ollieblanks likes this.
  18. jmanx18

    jmanx18

    Joined:
    Feb 6, 2013
    Posts:
    13
    THANKS GUYS that QR update to the share page is extremely helpful true heroes.
     
    victorw likes this.
  19. ollieblanks

    ollieblanks

    Unity Technologies

    Joined:
    Aug 21, 2017
    Posts:
    134
    @jmanx18, :)

    @Snupiman, All of these are great feedback items! Please submit them to the Feedback page to raise awareness with our Product Managers and the community.

    • If you have further feedback you want to submit, please do so here.
    • If you have a support issue with the Cloud Build service, please log a ticket via the Cloud Build section of the Developer Dashboard
    Happy building everyone!!
     
    technicat likes this.
  20. dimib

    dimib

    Joined:
    Apr 16, 2017
    Posts:
    2