Smoother tweening with Gradient Rotation

Hello everyone, so while I was making a really cool button, I encountered a problem, when using UI gradient on borders
forForum
So here you can see my idea, You can also see that there are some borders
When I tried to use TweenService on it, I got the wanted result - tweening rotation, so it’s like animated and feels little bit more dynamic. But I encountered next problem:
For the reason that button isn’t cube shape, the gradient looks not right… It looks like it’s slower for the first time, faster after that and back to slow, but i want it to rotate perfectly at the same speed.
What can I do to fix that

Things that I know that will not help:

  1. Using client instead of server - I will do it, but it will look pretty much same, it will just make tweening smoother, but the difference between speeds will still be same

Code that I’m using right now:

local ts = game:GetService("TweenService")
while task.wait(3) do
	script.Parent.Rotation = -180
	ts:Create(script.Parent,TweenInfo.new(3),{Rotation = 180}):Play()
end

I’ll provide more information of the button if you ask. The code showed is located in the UIGradient.
The button is in the BillboardGui right now

Instead of running the same tween every three seconds, you can set the tween to infinitely loop using a parameter in the TweenInfo instance.

Example:

local tweenInfo = TweenInfo.new(
	3, --//Duration of the tween
	Enum.EasingStyle.Linear, --//Linear keeps constant speed
	Enum.EasingDirection.Out, --//EasingDirection is not of importance for linear
	-1, --//Setting this to -1 will make the tween run infinitely until the tween is manually destroyed
	false, --//If the tween loops. Setting this to true would 'un-twist' the gradient back to 0 before repeating
	0 --//Zero second delay between the repeating tween
)