We make Umbraco Packages ๐ฆ.
- uSync
- Translation Manager
Public Issue tracker and roadmap for uSync.Complete
Home Page: https://jumoo.co.uk/usync/complete/
Relates to uSync issue: KevinJump/uSync#38
The Published TemplateID is not included in the config file, we need to derive this from the publishedTemplateId as we are using published content.
If the AppId/AppKey settings are in the server section for the config then saving the server settings via the UI loses these key values.
Fix: Make sure the server-specific id/key values are saved when the UI saves a server setting.
Culture and Hostnames (DomainService) can currently be tracked and published via settings, this feature means that they can also be tracked as part of a content publish between sites. making the push cover more of the 'content' bits
Is your feature request related to a problem? Please describe.
When I use the static publisher, it copies the static folders ~/css and ~/scripts, but I have a few additional folders I'd love to copy for my site.
Describe the solution you'd like
Add an entry to the server record in the uSync.Publish.config file, like was done for the "deployer" element, to specify which folders should be saved.
Describe alternatives you've considered
Another alternative might be to make the StaticSitePublisher class inheritable, with virtual methods, so that we could override just the GatherFiles method to customize the list ourselves.
Members don't always get created properly with uSync.PeopleEdition, we are missing a null check on some properties.
If you disable the MediaHandler in the default handler group in the main uSync8.config file, no media files are copied between servers.
When you push media between servers, there is a point when the source server asks the target what media files it requires. This is done by comparing the file hashes of the media file on disk with those in the config files passed by the source site.
at this point the target server uses the "default" handler group to compare the media files, if you have disabled the media handler in the default group this returns an empty list, and no media is copied.
the fix is to make sure the media compare is done with the 'publisher' group which exists for this purpose and is used by all other functions in the sync.
Not all the dialog buttons are disabled when you do an push or pull of content ,
we just need to ensure the buttons remain disabled while work is in progress.
Transferring large amounts of content via Publisher can cause timeouts on either the source or destination, or can exceed the maximum file sizes allowed. Additionally, if the network drops part of the way through, you can lose everything and have to restart. There are a few things that would need to be done to circumvent this.
First, make publishing a background process, with the UI simply checking on the status of the process. This would eliminate the request timeouts between the client and source system.
Second, once the publish package is constructed, break it into smaller pieces, the specific size should have a reasonable default of say 10 MB, but should be configurable on a per-publish-destination basis. Transfer the package in pieces, and include code to try a transfer multiple times, with a reasonable delay between, in case the connection is going up and down.
This could reuse the same code which I'm proposing for Exporter in a separate feature request. The publisher process could create an actual .usync file, then use the exporter's enhanced upload method to push it up, and finally trigger the import of the uploaded file.
Proposed Feature: ability to just send the settings via the publisher dashboard.
At the moment you can push/pull content and media and depending on what settings you choose you get the settings too.
this feature would add a new dashboard area on the uSync.Publisher node in settings, which let you sync just settings (or maybe just confirm that they are in sync) so you can sync settings and have editors not have to worry about that at all.
At the moment the publish and pull items are in the action menu, it would be nice to explore the possibilities of putting those actions into the Umbraco Save & Publish buttons (and possibly renaming the current actions).
for example, when on a stage site you might want
Also options to schedule the publish
Currently the publishing progress bar moves up and down quite a lot during a publish, this is because we are intercepting the progress messages uSync usally gives us, and as we move between items this can change.
This fix means we also combine both the individual update progress bars with the overall process progress bar resulting in a smoother progress.
the only issue at the moment is less chaos seems slower.
Describe the bug
Additional folders not syncing or appearing in snapshots. I am trying to sync two additional folders in my VS project named /img and /webfonts.
Expected behavior
I've added the above paths to the snapshot settings and the uSync.Publish.config. When I publish with uSync, changes in the /img and /webfonts folder are not making it to the test server. When I create a snapshot, these directories are not appearing in the snapshot zip file as well.
Desktop (please complete the following information):
I know I could publish these files via Visual Studio, but I was hoping to use uSync. That way we can move changes around Dev to Test, and eventually Live. Any help is greatly appreciated. Thank you!
Describe the bug
When having import on startup (or importing doc types from the models) turned on, we are unable to push or pull content, when we click on the send to server button it returns an error message "Step returned false" there is nothing in the logs to indicate any errors.
the content pushing worked fine until we used the import feature for the first time
This is a fresh install of Umbraco 8.5.5 with uSync.Complete 8.5.1
EDIT
It's worth noting that we're trying to achieve doc type and data types transfer via source control and content transferring via the back office
Expected behavior
for the content to be sent to the server
Screenshots
If applicable, add screenshots to help explain your problem.
If you use AppDataTemp folder setting & your username is long & you are logging on via a domain / roaming profile you "may" experience an issue where exporting/publishing via uSync doesn't work as expected (errors, or nothing found to publish).
This is because Windows may (in some circumstanced) shorten the directory names (sometimes!), and internally uSync.Complete gets confused
If you set Umbraco to use AppData as the temp folder.
<add key="Umbraco.Core.LocalTempStorage" value="AspNetTemp" />
The the Umbraco temp folder will be moved to the AspNet Temp folder, which by default will be in the user profile the site runs under (e.g the your account).
e.g
C:\Users\username\AppData\Local\temp\UmbracoData
If your username is long (e.g MySuperUserName) and you are logging into a domain then this may be shortened by the OS, c:\users\MySup~1\AppData\Local\temp\UmbracoData
When uSync gets a list of files from a folder the OS will return them expanded, but the orginal refrence maybe shortened.
we need to ensure all local directory paths are expanded before we do any comparasions between them when generating our zip folders.
if the site url starts with umbraco (e.g https://umbraco.mysite.com/umbraco) then the displayed URL in the dashboard will show https://umbraco.
This isn't critical, as the URL is for display purposes, so an admin can copy it into config - it is not used in the actuall publish / pull process.
you can guess whats happening here
Exporter uses the 'Default' handler set - which means if you disable things (such as content) from the main set - then they don't appear in the exporter.
We should have a value you can set in the config to use a different handler set for the exporter.
e.g to use the publisher set ...
<Exporter>
<HandlerSet>publisher</HandlerSet>
</Exporter>
Is your feature request related to a problem? Please describe.
I have certain pages where, when I publish, I need to update access keys for third-party services. I need a way to alter the saved HTML before it gets pushed to the destination.
Describe the solution you'd like
Create a new IHtmlTransform interface with a single method that takes the IContent object and the generated HTML content, and returns an updated HTML content. Instances of this interface can be stored in dependency injection and loaded in the StaticSiteService as a collection. Then in SaveHtml, after calling the GenerateItemHtml method, you call all the transforms. If at the end, the HTML is null, you don't save that page. Otherwise you save the transformed HTML.
Describe alternatives you've considered
Make all the methods in StaticSiteService virtual, so that we could extend that class and override the specific methods we want to update. We could then override the GenerateItemHtml method to call the base version, then alter the returned HTML. This is less ideal though because GenerateItemHtml doesn't get the IContent object, and so wouldn't know the content type or other properties of the object (which could make it hard to know when to make a change).
If a user picks Include Decendents and Include Ancestors while publishing a child content node, the resultant report back from the other server indicates that some content nodes (just ids) will be deleted.
they are not deleted but the report says they will be.
Fix: Make sure the ancestor nodes have the include descendants flag removed before being reported on.
The default upload limits for a umbraco site are set at 5mb,
rather than changing the global upload limits we should add some that only affect the upload urls used for media /files, this will minimise the impact on default installs.
adding the below to a transform used during install should do it.
<location path="umbraco/uSyncReceive">
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483648" />
</requestFiltering>
</security>
</system.webServer>
<system.web>
<httpRuntime maxRequestLength="2097152" />
</system.web>
</location>
Sync relation types and (optionally) relations between servers.
this is a uSync 8.7 feature, Complete adds support for calculating the relations at sync time.
The docs link in usync publish section to the url https://jumoo.co.uk/usync/publisher/modes/ errors out with a 404
uSync.Complete is a closed commercial package as such the source code is not generally available.
The purpose of this repository is to track issues and features of the product. we also put all our release notes here,
uSync 8 which forms the bases for uSync.Complete that is open source and code can be found here:
https://github.com/KevinJump/uSync8
When you try to access the context menu, for partials within Umbraco you get an error :(
this is because of uSync.Exporter is trying to load its import/export menus, and is expecting the node to be a number when it's not.
It shouldn't load the menu and we should parse the node value before assuming its an int.
Right now if I want to transfer 15-20 individual pages on a site through Publisher, I have to right-click on each one and go through the entire publishing process and wizard. This can not only add time to the process, but if the content on the pages are related, or if there are significantly more than 15-20 pages, it can greatly increase the amount of time between when some content shows up and when others does. Additionally, if changes are happening across multiple days, but a push to production is desired at a single point in time, an external system is needed for tracking what has changed and what is ready for publishing.
What I would propose is adding a persistent queue. Adding items to the queue should be able to be a different permission than actually publishing the changes. While it doesn't have to be configured as different by default, this would enable a workflow where entry-level content editors can make changes, and queue items for transfer. A more senior content editor can see the pending queue, which should have links to the changed pages so they can go see what was changed, and then be able to push those changes into production.
Editors should be able to add items to the queue in two ways. First, through the right-click menu, add a Queue for Publish option that adds to the queue. They can choose if they want children, ancestors, and dependencies included. Similarly, on the queue page itself, have an option to add items in bulk, similar to when adding to an export pack via the Exporter back-office.
Publishers from the queue should be able to select a sub-set of what was queued, or the entire queue, and publish it. They should have the option of whether or not to remove it from the queue on a successful publish, in case they want to publish to multiple locations.
Configuration changes would just be adding the Add to Queue permission that can be configured the same way the publish permission is configured now.
I was testing uSync with user groups having access and landed up in a weird scenario. Here is some info
I have a master site which publishes out to a UK site and German site.
I create a super users user group with access to usync publisher in default permissions
I choose not to add the super user group as allowed user group to my Germany or UK publisher settings.
In the CMS I do not see the usync publish options in the action menu, but I can see the publish to server
I dont know whether this is the expected result.
Problem to Solve
We have a client who has a structured editing team, with some users able to generate content in their authoring site, other users able to approve those changes, and a more limited set who can make the changes happen in production. I think Publisher could handle this.
Proposed solution
Add a queue, allowing anyone with Publish permission the ability to add items to the queue. The queue can then be transferred in bulk to the destination. Umbraco handles the publish permission, but Publisher would need to allow for restricting who is allowed to transfer the queue to specific remotes.
Alternatives
Another alternative would to create a workflow in Publisher, so that editors could submit proposed changes for someone to explicitly authorize one at a time. This would act as a sort-of-queue, but wouldn't bulk transfer.
Additional context
The ability for the publisher to approve or deny individual requests would be ideal, although that could lead to some complicated dependency conflicts. A first pass of just having an all-or-nothing queue would be a great start.
Add an option so you don't have to include the physical media files as part of any sync between servers.
if someone is controlling the physical media another way we don't need to do all the file hashing, and media file copying between boxes.
It looks to be an issue in Umbraco v8 when using version numbers with 4 parts.
Attached are screenshots of the above steps and the Umbraco log file. I've changed the extension to .txt to allow it to be uploaded here.
The Nested Content Dependency Checker, doesn't find all the dependencies (it only works out doctype dependencies, not media or linked elements).
this is in fact a core element but only effects the uSync.Complete tools.
Summary:
uSync.Audit provides an audit trail mechanism for changes to settings,
This extension uses uSync to compare a before and after version of an item when it is saved in umbraco and pings that to an Audit class which will store it in either a file, the database, or ping some external service.
Depending on how you upgrade, the options you choose or the code you commit, it might be that you end up with bits of the uSync8.config or uSync.Publisher.Config file missing. if this happens uSync.Complete will still work, but it might report that there is nothing to import.
you can get template settings files from this repo in the config folder: https://github.com/Jumoo/uSync.Complete.Issues/tree/master/configs
Summary:
Ability to publish to a queue/schedule the publish from one site to another.
The Publishing mechanism in uSync.Publisher is an interface, at the moment (as of v8.2.0) there is only a 'realtime' publisher which moves things between sites as you ask for it.
we should develop new 'publisher' classes to allow items to be published via a queue server or azure service bus or similar.
Split the Enable on the server config, so a server can be configured for the push and pull dialogues separately.
new config option and the dialogues need to ask for the servers that are enabled for them
When you choose "Delete missing pages on target" then uSync.Publisher will delete missing pages on the target.
if there is a mistake this makes recovery difficult.
to mitigate this, delete should move the items to the recycle bin so they can be recovered in the event of a mistake.
When a contract resolver has been set up globally on a project to force all objects to camelCase, some of the uSync Publisher code fails, because it is expecting PascalCase.
Friends don't let friends set ContractResolvers globally.*
uSync (and Umbraco.Core) overcome people setting this by using an NamingStrategy attribute on classes
for historical reasons, and ones that don't need to start a code war, uSync preferred DefaultNamingStrategy which passes the c# classes over as is (PascalCase).
[JsonObject(NamingStrategyType = typeof(DefaultNamingStrategy))]
Umbraco actually does it the other way with camel case.
However there are places where we have missed some class attributes and that causes the publish actions to get mixed up - we just need to ensure that all classes that get pushed out via an API have the correct attribute settings on them.
*If you have complete control of a project then by all means set a contract resolver, but if you have other people's code inside a project you should force your classes into the case you want by using the attributes (either on the classes or the controllers). uSync did need to be fixes, but that will break other peoples' code.
Including files (views/css) in a sync pack can result in an error, if the target site does not share a path with the source.
this is caused because the code to compare relative file paths (between site files) can sometimes fail when listing file changes.
Now that there is a v8 version - we should add support for calculating the dependencies inside a doc type grid editor component.
Describe the bug
When publishing a folder with child items (media files) in the media library, the items get published but not within the designated folder. Everything gets put in the root of the media library on the targeted server.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
The folder gets created on the targeted server and the media items are put in the folder.
Desktop (please complete the following information):
uSync:
I set up a doctype collection - Blog Landing Page and Blog Page on my master and receiver site. I published the blog landing page which published smoothly on to receiver site. Then I deleted the blog landing page on the receiver site to see whether I can publish child items alone. Then I tried to publish a blog page from my master to receiver. It failed but I could see the page was on the receiver as a child page to the deleted blog landing page. I expected it not to fail and created beneath the site "Home" page. Now I emptied my recycle bin and the tried publishing a blog page from master to receiver. This time blog page was added as a child to site root
At the moment the list of changes returned to the user is in the order in which they are checked, which puts media/content last,
ideally, people care more about content and media changes, so we should reverse the list and show content then media in the list of changes.
update the dependencies on uSync to the lastest version. (fixes deleted media issue)
It is theoretically possible for uSyncExporter/Snapshots and Publisher to sync the app_plugins and bin folders (packages) but it might be highly risky,
when you copy files into the bin folder you are starting a site reboot, if there are other things to do then they might not get done.
at the moment folders get copied first (because for example, you need view files before you create the template in the DB).
This ticket is for us to play around with order, restarts, etc, and see if we can indeed deliver binary files between installations safely.
Syncing of Public Access settings between sites -
Public Access settings between servers - calculated as a dependency on a content item, (so sent when you publish a page)
When I try to sync the nodes with uSync publisher, I get the error below. It worked perfectly fine till today, now it suddenly fails. When I try to create an export package with the exporter, I get the notification: Export failed. An error occured downloading the file.
Object reference not set to an instance of an object. at uSync8.BackOffice.SyncHandlers.SyncHandlerBase
2.Export(Udi udi, String folder, HandlerSettings settings)
at uSync.Expansions.Core.Services.uSyncDependencyService.ExportDependency(uSyncDependency dependency, SyncPackOptions options)
at uSync.Expansions.Core.Services.uSyncDependencyService.CreateSyncPack(IEnumerable1 dependencies, SyncPackOptions options) at uSync.Publisher.Publishers.SyncRealTimeStepPublisher.<Export_Export>d__13.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at uSync.Publisher.Controllers.uSyncPublisherApiController.<PerformStep>d__7.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__1
1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ExceptionFilterResult.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Controllers.ExceptionFilterResult.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext()`
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.