Toaster future release planning: Difference between revisions

From Yocto Project
Jump to navigationJump to search
No edit summary
Line 143: Line 143:
==  Toaster Enhancements for 2.1 ==
==  Toaster Enhancements for 2.1 ==
{{#bugzilla:
{{#bugzilla:
   |columns=id,milestone,summary,status,priority
   |columns=id,to,estimated,summary,priority,from,qa,milestone,status,resolution,whiteboard
   |milestone=2.1, 2.1 M1, 2.1 M2, 2.1 M3, 2.1 M4
   |milestone=2.1, 2.1 M1, 2.1 M2, 2.1 M3, 2.1 M4
   |sort=priority
   |sort=priority

Revision as of 11:39, 25 November 2015


2.1 Planning

Wish lists

Michael's

  • Finish image-customisation 8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091
  • Remove pseudo API cruft / template context to json response stuff
  • Consolidate used API into it's own view
  • Finish toaster tables porting
  • Get selenium test wrapper
  • Create a toasterclient.py to interact with toaster to avoid need for 'command line builds'
    • This would use toaster's API as the entry point to using bitbake
    • It could be called by CI systems
    • It could be used by auto builders etc
    • Means that there are no two modes anywhere in Toaster
    • Allows project configuration to be changed in toaster from the command line

Brian's

The Ordered Part

  1. Django 1.8 aka LTS
  2. Image Customization
  3. Testing and Stability
  4. One way to start/One code path


This is *not* ordered! This is more of a brain dump :)

  • Collapse analysis and managed mode
  • Working CI for each commit into toaster-next as well as for project peoples testME branches on poky-contrib:
    • run django tests
    • run selenium tests
    • leverage sstate to make runs generally shorter
  • remove git assumptions from code
  • rationalize/simplify the configuration scripts
  • if bitbake-memres comes out, interact with it gracefully (this is my preferred method of collapsing analysis and managed)
  • fix the tmpdir/release build issue &/or discuss the need to support building old releases with a UI rather than limiting toaster to build the release it is part of. This is inherently fragile.
  • ask bb to parse any layer added to a project and such as imported layers, and layers specified in the configuration file to give us recipe information.
  • improve our build event following:
    • note parse events
    • update/retrieve ui so that we can tell something is happening before the first build event comes
    • eliminate the remaining random tracebacks from try/except failures.
  • allow configuration in addition to the addition/removal of layers/packages
    • kernel config
  • add user control/authentication
  • update to Django 1.8. Always stay on Django LTS versions
  • add layer update from layers.openembedded.org to the UI
  • add Django tests for building e.g. we should be able to build core-image-sato from a django test and validate the db
  • add mysql script to simplify setup with mysql/apache
  • pull in new look and feel
  • add django tests to validate all artifacts - if we say they can download it and it appears on a page anywhere, it should have a test
  • improve docs of code on wiki. We have a nice start (ty E & M); I'd like to improve it.
    • events - more info and list types supported
    • what logic is in jscript , what is in python
    • database schema definition and description esp interrelationships.
    • list django tests, mostly so we can see what we are missing.
  • build mode triggerred off of database entry, not autonomous process.
  • add asynchronicity. I have noted a number of places where commands result in a sluggish ui. I'm nervous about this one.
    • for example, starting a build that requires us to clone layers has a noticeable delay as compared to starting a local only project build.
  • verify we can stop builds cleanly.
  • get the rest of our logs into our local toaster dir
  • allow us to run and stop 2 toasters on the same machine without them interfering with each other
  • (2.2 or later for sure) discuss how to support multiple back end bb servers.
    • probably will need to be able to add servers/remove servers/see server status/build state
  • be able to see more details about build. For example, see the "jobs" being processed like you can in knotty
  • revisit what variables we let people change. sstate_dir and dl_dir should certainly be allowed to change
  • discuss way we do migrations. possibly change. thoughts:
    • only support migrations from last release to current. (e.g. if you were running toaster jethro you could update to jethro++, but could not from fido to jethro)
    • take migration from the startup script. it's only for releasetorelease.
      • allow it to be in for master and ease of development w/in a release and pull at end as we do with moving releases.
    • whatever we decide, add a test set for it so we know it works
  • Be able to delete things from the ui
    • old builds
    • old projects
    • imported layers we no longer want
  • Be able to set from the ui a policy to delete all builds/recipes/packages that are older than XXX &/or be able to set maximum size on db and delete everything older than XXX when we near that size
  • update the builds on the web page so we dont have to hit refresh to see the build progress.

Elliot's

  • Make sure all files lint properly
  • Include lint in CI builds
  • Improve test coverage of all areas of the UI and back-end
  • Clean up toasterui.py so it's easier to see what's going on in there
  • Fix localhostbecontroller so it doesn't rely on what's in the log file when figuring out whether the bitbake server has started
  • Provide a way to modify settings in settings.py without editing that file (e.g. with a local overlay configuration file)
  • Move the logic, environment variables, directory setup and script calls from bin/toaster into Django commands: this would allow you to run toaster correctly, with all the required setup, without having to use bin/toaster; it would also mean that we could provide cleaner production setup instructions, as a user could run a series of Django commands (with their own parameters) to setup their environment; bin/toaster would then just execute a series of Django commands

Belén's

  • Implement new custom theme (already in progress, aiming for end of M1: Dec 7th). Related bugs: 8417
  • Finish image customisation. Related bugs: 8070, 8081, 8082, 8103, 8104, 8117, 8128, 8132, 8091
  • Review interaction with layers: as it is, imposes heavy restrictions on users. Some of the questions I would like to consider:
    • Should the import layer action be global instead of per project, so that you can reuse imported layers across projects?
    • Should we allow users to override the release layer branch, setting a particular layer index layer to a different branch or commit?
    • Should we allow users to set a different git repo for layer index layers?
    • Should we allow users to override the bitbake revision set by the release in a project?
    • Related bugs: 6640, 6701, 7574, 8426, 8429
  • Access control (a simple one to start, with very basic permissions). Related bugs: 6233, 6234
  • WIC integration (getting a step closer to the holy grail of 'click button' > 'image deployed in board')
  • Fix the variable history (this is one of the features users have highly praised, and it is a bit broken in 2.0). Related bugs: 5811, 8488, 8190, 8189, 8188
  • Get Toaster to collect build data from Jenkins builds. Once again, repeatedly requested by users. Related bugs: 7527

Ed's

  • Merge analysis and managed modes
  • Fix as much pending bugs as possible.
  • Finish image customisation.
  • Support Django LTS
  • Increase test coverage. It would be good to set realistic goals, e.g. cover specific modules or increase coverage to 10% and follow the plan.
  • Include production configuration into testing
  • Cover views.py with tests and split it into modules. Currently it's huge and hard to maintain. I suspect there are a lot of unused APIs in there.
  • Finish refactoring of buildcontroller code. This work is started in ed/toaster/bec and sitting there for quite long time.
  • Bring patchset support to toaster patchwork.
  • Add 'submitted upstream' and 'merged upstream' statuses to patchwork. Make the statuses updated automatically when patch is accepted to toaster-next or bitbake master.
  • Clean up the code. Set realistic goals for pylint scores and follow them.
  • Enhance Jenkins CI jobs to run all possible django, tts and pylint tests

Sujith's

  • Get toaster working with non-git repos. Related bugs: 8456
  • minor, but would be good to have :- Once user launches toaster, it would be nice to see the progress bar updated without user refreshing the page. Related bugs: 8328
  • Cancellation of build. Related bugs: 6787

Would love to take up more tasks.

David's

  • Finish the effort around Toaster "extensions", started by Farrell. This will enable Toaster customization for commercial partners, as per branding and

alternate pages (for extended project creation).

All bugs for 2.1+

IDMilestoneSummary (188 tasks) StatusP
86692.1 M1Wrong password encoding syntax error in "bash -c"VERIFIEDHigh
80562.1 M3Image customisation front end implementationVERIFIEDHigh
91012.1 M4Dependencies dialog when adding packages to an image does not always workVERIFIEDHigh
83642.1 M1Upgrade Toaster to use Django 1.8VERIFIEDHigh
89102.1 M2Toaster builds fail at the rootfs stageVERIFIEDHigh
92402.1 M4builds don't start in production setup modeVERIFIEDHigh
8095FutureTable results should be sorted in alphabetical order and other secondary criterias.NEWLow
9856FutureMigrate remaining tables to ToasterTableNEWLow
8577FutureAdd a global UI widget to show progress of buildsNEWLow
9117FutureAllow "project builds" and "all builds" to be sorted by time and recipe nameNEWLow
8807Futurelocal cached layers don't get the branch checked outNEWLow
6604FutureClone a Toaster projectNEWLow
71612.1Inconsistent presentation of builds with more than one targetVERIFIEDLow
4402FutureCustomise the summary of all the information available for one build + image recipe combinationNEWLow
86952.1No default sorting applied in recipes and machines layer details tablesVERIFIEDLow
8858FutureWe should keep sorting state in our tablesNEWLow
93262.1 M4'type the recipe you want to build' help says use semicolon but shows colonVERIFIEDLow
10205FutureThe layer typeahead shows the project release branch for non-git layersNEWLow
8860FutureThe 'clear search' icon in ToasterTable tables should clear any applied filterNEWLow
9435FutureToaster throws an exception for images that have files on the / levelNEWLow
6778FutureAdd "import layer" to layer suggestions drop downNEWLow
8769FutureIntegrating wic into ToasterNEWLow
7294FutureFor QA Issues errors and warnings, toaster should recognize the error and provide suggestions to the user on how the error can be repairedNEWLow
10281FutureConfiguration variables: I can set a value for standard shell environment variable http_proxyNEWLow
9141Futuretoaster when xmlrpc/cooker dies the web didn't tell the user about itNEWLow
84762.1mysql port must be specified in settings.py even though marked as optionalVERIFIEDLow
8036FutureRequest to allow people to set pagination to allNEWLow
8248FutureToaster recipe page: missing empty stateNEWLow
73182.1Managed mode must use sessions to remember user search/orderby preferencesVERIFIEDLow
85112.1Import layer page, "Add layer" button remains enabled when layer text input is emptyVERIFIEDLow
87912.1 M3Software recipes table is not sort by any column by defaultVERIFIEDLow
9839FutureThe "clear search" button on the – "Add | Remove packages table" - does not clearNEWLow
9209FutureThe unique name validation for custom images happens across projectsACCEPTEDLow
6978FutureFor the local release in Toaster, show local path to layer directory instead of Git URLNEWLow
86512.1Toaster: Loading icon remains on screen and nothing appears in the project pageVERIFIEDLow
84212.1Configure default columns for the image image recipes and software recipes tablesVERIFIEDLow
8685FutureEnter button doesn't apply your modification to bitbake variablesNEWLow
9118FutureDead paths for meta-toaster-custom layer left behind in bblayers.confNEWLow
8857FutureDisplay number of search / filter results consistently across tablesNEWLow
8425FutureToaster: A warning should be displayed when you delete a layer dependencyNEWLow
6670Futureall compatible recipes page should link to layer source recipe with the layer nameNEWLow
7219FutureShow the file size of the license manifest when available for download in the build dashboardNEWLow
9977FutureTime, CPU and Disk I/O tables have the wrong core columnsNEWLow
91222.1 M3Name your custom image text box not showing properlyVERIFIEDLow
8859FutureProvide a way of specifying the default sort direction in ToasterTableNEWLow
8434FutureToaster: package classes (rpm, ipk or deb) should be display in the build configuration pageNEWLow
10206FutureThe add layer dependencies type ahead shows layers already in the list of dependenciesNEWLow
8865FutureThe project "updated" field shows the last time a project was saved, not its last activityNEWLow
82472.1The build form in the project page does not interact with adding / removing layersVERIFIEDLow
7297Futureneed Toaster iconVERIFIEDLow
82502.1In the 'new build' button, the project name link does not workVERIFIEDLow
9670FutureToaster does not set a correct MIME type for tasks' logs filesNEWLow
91652.1 M4Replace 'delete' with 'remove' in the context of project layer manipulationVERIFIEDLow
8326FutureBuild time counts the time a build spent queuedNEWLow
7457FutureSplit "Previous Build" tasksNEWLow
5811Futurethe variable history should collect and display the variable value for each modification sequenceACCEPTEDLow
89052.1 M3Toaster: add layer button from project configuration page remains sensitiveVERIFIEDLow
85462.1Toaster: add layer button from project configuration page remains sensitive if you select a layer with dependenciesVERIFIEDLow
87922.1 M3Errors column and project column does not disappear when unchecked from edit columns menuVERIFIEDMedium
92062.1 M4Building custom images based on custom images failsVERIFIEDMedium
8366FutureBuild the specific recipe versionNEWMedium
6166FutureToaster collects no information about buildsVERIFIEDMedium
6953FutureBranding SupportNEWMedium
91112.1 M4Custom images should not be listed in the image recipes tableVERIFIEDMedium
87962.1 M3Remove all manual transaction managementVERIFIEDMedium
92292.1 M4Layers from layer index not available when using local Yocto releaseVERIFIEDMedium
83792.1"sorting" doesn't work well on "Recipe file" columnVERIFIEDMedium
7742FutureToaster: Remove constraints when setting the layers checkout directoryNEWMedium
6239FutureToaster utility commands for shared databasesVERIFIEDMedium
7038FutureFor cached tasks, indicate in which URL the sstate object was foundNEWMedium
9914FutureFor imported layers, remember the value of the last directory and the last Git repositoryNEWMedium
8424FutureToaster: Compatible recipes tab should display the machine compatible recipesNEWMedium
7748FutureProvide a way to do a Toaster cleanup and start again if you get the initial set up wrongNEWMedium
89442.1 M3Compatible metadata is shared across projects using the local releaseVERIFIEDMedium
9969FutureDisplay target:task correctly on build dashboard (and elsewhere)ACCEPTEDMedium
8426FutureImprove how we display layer dependenciesNEWMedium
7794FutureDesign Toaster First UseNEWMedium
6706FutureInclude maintainers list for layersCLOSEDMedium
7234Futurewarn the user if the project configuration settings aren't reflected in the buildNEWMedium
49482.1create tests for Toaster APIVERIFIEDMedium
84492.1Toaster: add layer button from project configuration page remains sensitive after you delete from text boxVERIFIEDMedium
79772.1Toaster fails to start with Django 1.7VERIFIEDMedium
8218FutureProvide a way to update layer information from the Toaster GUINEWMedium
5255FutureProvide access to tasks executable output in ToasterACCEPTEDMedium
8959FutureAllow Toaster to run images on simulator, even a custom oneNEWMedium
6794FutureAdd last commit information to ToasterNEWMedium
8866FutureHome-brew JSON encoding is ad hoc and incompleteNEWMedium
9518FutureRationalise the directory structure generated by ToasterNEWMedium
13245FutureToaster visualization proposalsNEWMedium
87762.1We need to catch the error: WARNING: Could not connect to server at 0.0.0.0:46572 (Could not register UI event handler) ERROR: Could not connect to server 0.0.0.0:46572 : Could not register UI event handlerVERIFIEDMedium
91562.1 M4Adding a package that was a dependency doesn't always look rightVERIFIEDMedium
5539FutureDesign Project Management REST APIVERIFIEDMedium
6897FutureCustomise the Django admin interfaceNEWMedium
9153FutureEnhance build performance dataNEWMedium
8896FutureEnable sorting by number of dependenciesNEWMedium
9617FutureCreate Toaster Docker production containerNEWMedium
87822.1toastermain settings.py hardcoded filecache locationVERIFIEDMedium
9164FutureThe toaster-custom-images layer should not show like any other layer, and should not be removableNEWMedium
7452Futurebuild mode path fields in the analysis pages should be a link to the specific details pageVERIFIEDMedium
5648FutureAdd a field license_files to package informationACCEPTEDMedium
90582.1Bad project MACHINE setting in conf/toaster.conf causes command line builds to failVERIFIEDMedium
6910FutureUse sticky headers for long tablesNEWMedium
9684Future"Edit Columns" Button on the Compatible layers view is missingNEWMedium
85282.1Toaster does not recognize image recipes when it builds them on local projectVERIFIEDMedium
92002.1 M4we are disabling file based git urls in imported (actually all) layersVERIFIEDMedium
7596Futurevariable type support in project configuration pagesNEWMedium
6095FutureRetrieve full build information independently of task executionNEWMedium
6916FutureToaster should turn QA check names in warnings / errors into linksNEWMedium
85722.1Json import error: Openembedded branches include local branchVERIFIEDMedium
9109FutureApply sleep 0.5 to other database operationsNEWMedium
87952.1In the build history information, layer names equal their directory name, not the layer nameVERIFIEDMedium
7727Futuretoaster: show bbappend information for recipesNEWMedium
6234FutureImplement model for project owner / userNEWMedium
9895FutureProvide UI to allow local layers to be published to layerindex.NEWMedium
8806FutureRefactor localhostbecontrollerACCEPTEDMedium
7747FutureImprove messaging when Toaster is launched with no releases setACCEPTEDMedium
6603FutureExport / Import Toaster projectsNEWMedium
7110FutureBuilds of "world" are pretty ugly in toaster UINEWMedium
4331FutureVisualising single package sizeNEWMedium
9918FutureUse bitbakes fetcher code to grab layers, do checkouts, etc.NEWMedium
9297FutureToaster: Simplify building extensible SDKNEWMedium
7751FutureToaster allows me to build when no machine is set in the default configurationNEWMedium
81482.1Sorting the content of the Layer/Machines table doesn't workVERIFIEDMedium
4624FutureShow the content of the run files in the task information pagesVERIFIEDMedium
8955FutureRecipe explorerNEWMedium
8705FutureStore valid values for variables in the Toaster databaseNEWMedium
6712FutureModify the default Bootstrap behaviour of tooltips and popovers triggered on hoverNEWMedium
8189FutureVariable history shows full paths to files inside the /bitbake directoryNEWMedium
7235Futurewarn the user about unexpected configuration changes in variable historyNEWMedium
5192Futurenon-existent URLs listed in the "Layer index URL" columnVERIFIEDMedium
89582.1 M4Toaster does not build with the Jethro releaseVERIFIEDMedium
91372.1 M4Improve handling of builds without package dataVERIFIEDMedium
9485FutureFix typeaheads for Bootstrap 3NEWMedium
84502.1Toaster: Build more recipes from Most build recipes failsVERIFIEDMedium
67872.1Cancelling builds at any point in the build processVERIFIEDMedium
10633FutureAdd optional layers selection toolNEWMedium
87752.1check to see if port is in use early and exitVERIFIEDMedium
5385FutureCreate users data model.VERIFIEDMedium
9005FutureProvide build cancellation functionality for command line buildsACCEPTEDMedium
6840FutureSeeing builds delta in ToasterNEWMedium
91422.1 M4ca-certificates have non ascii characters in filenames which causes toaster to be unhappyVERIFIEDMedium
9519FutureConsolidate used API into it's own viewIN PROGRESS IMPLEMENTATIONMedium
8488FutureCollect variable information for the image scopeNEWMedium
80422.1Layerdetails/layers to show full dependency treeVERIFIEDMedium
87812.1Cannot build lsb imagesVERIFIEDMedium
91632.1 M4Add reverse dependencies column to the image details pagesVERIFIEDMedium
73342.1The 'machine' information is not searchable in the all builds, all projects and project builds tablesVERIFIEDMedium
5564Futuretoaster document REST APIs dynamically using SwaggerVERIFIEDMedium
6898FutureDesign Toaster configuration interfaceNEWMedium
88992.1Change project release not workingVERIFIEDMedium
85272.1Sorting in layer details page jumps back to the default tab (layer details)VERIFIEDMedium
8790FutureBoostrapping package information for image customisation purposesNEWMedium
90872.1 M4Toaster hangs when you start a build specifying an invalid taskVERIFIEDMedium
6915FutureToaster should handle ASSUME_PROVIDEDNEWMedium
9812FutureAdd hints to project configuration page that recipes may overwrite or modify settings during the buildNEWMedium
91082.1 M4The image recipe details page show the list of packages built, instead of the list of packages installedVERIFIEDMedium+
76032.1 M3Toaster is not storing in its database information about SDK artifactsVERIFIEDMedium+
89172.1 M3Remove the ability to change the project releaseVERIFIEDMedium+
81042.1 M3Implement building a custom imageVERIFIEDMedium+
4315FutureCreate a local bitbake run managerVERIFIEDMedium+
89272.1 M3Custom image package list does not show packages installed via IMAGE_LINGUASVERIFIEDMedium+
92662.1 M4Image builds aren't identified as imagesVERIFIEDMedium+
81282.1 M3Implement downloading custom image recipe filesVERIFIEDMedium+
91212.1 M4Remove reverse dependencies when removing packages from custom imagesVERIFIEDMedium+
81542.1 M1Remove the master release from fidoVERIFIEDMedium+
89562.1 M4Toaster doesn't display build artifactsVERIFIEDMedium+
87252.1 M3Impossible to access the command line builds project page (project 1)VERIFIEDMedium+
91232.1 M4Build history pages are missing the image customisation linksVERIFIEDMedium+
90212.1 M3Toaster merges builds started from its web UI with builds started from CLIVERIFIEDMedium+
82792.1Provide a single way of starting ToasterVERIFIEDMedium+
89012.1 M3Split package groups from all other packages in build informationVERIFIEDMedium+
80812.1 M1Implement the 'new custom image' pageVERIFIEDMedium+
80912.1 M3Implement the 'custom images' pageVERIFIEDMedium+
83732.1 M1Toaster in analysis mode downloads the wrong cooker logsVERIFIEDMedium+
81032.1 M3Implement creating a custom imageVERIFIEDMedium+
89252.1 M3Custom image package list does not show kernel-related packagesVERIFIEDMedium+
91162.1 M3migrations fail to apply on mysqlVERIFIEDMedium+
81172.1 M1Implementing adding and removing packages to / from custom imagesVERIFIEDMedium+
89332.1 M3Image customisation package list does not show packages installed via dependenciesVERIFIEDMedium+
93852.1 M4After a project's initial image build of sato, building a custom minimal never shows packagesVERIFIEDMedium+
78802.1 M4Toaster uses the same /tmp dir across releasesVERIFIEDMedium+
87382.1 M3Build and Projects tables not using ToasterTablesVERIFIEDMedium+
80262.1Toaster start up directories incorrectVERIFIEDMedium+
88952.1 M3Lsupdates throw error using mysqlVERIFIEDMedium+
90512.1 M3IDs missing from toaster main pageVERIFIEDMedium+
91542.1 M4The custom image details page needs a custom 'no search results' pageVERIFIEDMedium+
80702.1 M3Implement image recipe details pageVERIFIEDMedium+
80822.1 M3Implement the 'custom image details' pageVERIFIEDMedium+

Bugzilla query

Toaster Enhancements for 2.1

IDAssigneeESummary (14 tasks) PRequesterQAMilestoneStatusResolutionWhiteboard
8056Michael Wood4Image customisation front end implementationHighMichael WoodCristina Agurida2.1 M3VERIFIEDFIXED
4948Mihail Stanciu4create tests for Toaster APIMediumCalin DragomirMihail Stanciu2.1VERIFIEDOBSOLETE
6787Sujith H4Cancelling builds at any point in the build processMediumBelen Barros Pena 2.1VERIFIEDFIXEDGUI design available
7977UnassignedToaster fails to start with Django 1.7MediumMihail StanciuAlexandru Roman2.1VERIFIEDNOTABUG
8042Belen Barros Pena1Layerdetails/layers to show full dependency treeMediumMichael WoodAlexandru Roman2.1VERIFIEDINVALID
8279Ed BartoshProvide a single way of starting ToasterMedium+Belen Barros PenaMihail Stanciu2.1VERIFIEDFIXED
8081Michael Wood4Implement the 'new custom image' pageMedium+Belen Barros PenaAlexandru Roman2.1 M1VERIFIEDFIXEDGUI design available
8117Michael Wood4Implementing adding and removing packages to / from custom imagesMedium+Belen Barros PenaMihail Stanciu2.1 M1VERIFIEDFIXEDGUI design available
8070Michael Wood4Implement image recipe details pageMedium+Belen Barros PenaCristina Agurida2.1 M3VERIFIEDFIXEDGUI design available
8082Michael Wood4Implement the 'custom image details' pageMedium+Belen Barros PenaMihail Stanciu2.1 M3VERIFIEDFIXEDGUI design available
8091Michael Wood4Implement the 'custom images' pageMedium+Belen Barros PenaMihail Stanciu2.1 M3VERIFIEDFIXEDGUI design available
8103Michael Wood4Implement creating a custom imageMedium+Belen Barros PenaMihail Stanciu2.1 M3VERIFIEDFIXEDGUI design available
8104Michael Wood4Implement building a custom imageMedium+Belen Barros PenaMihail Stanciu2.1 M3VERIFIEDFIXEDGUI design available
8128Michael Wood4Implement downloading custom image recipe filesMedium+Belen Barros PenaMihail Stanciu2.1 M3VERIFIEDFIXEDGUI design available