Coder Social home page Coder Social logo

teammate's Introduction

TeamMate

CI

TeamMate Logo

TeamMate is an application for managing Azure Dev Ops (ADO) work items and pull requests.

TeamMate was designed from the ground up to manage, search and collaborate on bugs easily. It is built for power users. You can search for or create bugs from anywhere using global keyboard shortcuts. You can track any and all of your ADO queries.

Managing work item queries is simple. You can pin several queries as tiles, filter/group work items on common fields, receive toast notifications when work items change, quickly filter a list of work items using search terms, or do a global search of work items in your local pinned queries.

Pull Requests (PRs) are also first class citizens, and treated almost identically to work items. You get notifications, filtering, search, and quick digests and status of a set of reviews.

TeamMate Home Demo

Installation

The easiest way to install is using winget. On Windows 10 version 1709 and newer or Windows 11, open a prompt and run this command:

winget install --id Microsoft.TeamMate

Alternatively:

  • Go to the Release Page
  • In the Assets for a desired release (recommended: choose the newest), download and install Microsoft.Tools.TeamMate.Production.msi.
  • (Alternatively, you can install Microsoft.Tools.TeamMate.Dev.msi if you want to debug it)

Documentation

Check out our wiki for more details on how to use and configure TeamMate.

Telemetry

TeamMate does NOT send any telemetry to Microsoft or anywhere else. None.

Authors

TeamMate was originally created by Ben Amodio.

Authors (in alphabetical order):

  • Ben Amodio
  • Justin Lam
  • Marcus Markiewicz
  • Vanya Kashperuk

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

teammate's People

Contributors

ivanv-microsoft avatar microsoft-github-operations[bot] avatar microsoftopensource avatar supermem613 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

teammate's Issues

Remove TODO, add TODO gate

Let's clean all TODOs in the code: either make each an issue, toss the comment or make it into a historical comment.

Next, add a GitHub action to comb the code for TODO. This allows contributors to use TODOs in the code as they work code, but not commit them.

Ability to log out

For some reason my TeamMate shows my account as "Unauthorized" - most likely due to expired token, would be great to be able to log out and back in if token should expire. Also to change tenancy with logout/login would be great.

Target .NET 6

.NET 6 has RTM'ed and is a long-term support release. We should move to it as we are sitting on essentially an unsupported .NET release.

Dark Mode

Allow for a dark mode, preferably following the system's setting.

Provide an option to group by Release

The "Group By" list in work items queries does not include Release. It would be nice if it did; perhaps even make it customizable enough to allow it to be grouped by any field.

Code Quality bot

GitHub allows turning on security and code quality bots as part of actions. We need to investigate what makes sense for us and deploy them.

Release Channel

Let's build, pack and publish it to winget. This will afford us a clear release channel with good update semantics.

README.md should be updated accordingly.

Create To-Do/Task from work item

One of the really useful features of another work item tracking tool is to Create a To-Do/Task from the work item's right-click menu. It would be great to see such a feature in TeamMate.

Remove Outlook / Office dependency

Not everybody use Outlook. If you use OWA or any other mail program, you're hosed. Lame.

Instead of using Outlook for "Reply", let's implement a Copy as Html to clipboard action that allows any mail client to be used.

TeamMate regularly consumes almost 1GB of memory within few seconds of starting

When I start TeamMate, it starts off consuming about 100MB of commit and active memory, and over the next few seconds, it climbs up to ~1GB and stays there forever. Is this by design? It almost feels like a memory leak. I only track 3 queries, each with about 30 results.

0.1.8-tags-0-1-8-ci-3-Branch-main-Sha-f818e18937ff8f2244f28c2674f83804f961e4ed.1+Branch.tags-0.1.8-ci.3-Branch.main.Sha.f818e18937ff8f2244f28c2674f83804f961e4ed.Sha.f818e18937ff8f2244f28c2674f83804f961e4ed

image

Double-clicking on bug will show error

Error:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NotSupportedException: Reference of type Microsoft.Tools.TeamMate.Model.PullRequestReference cannot be serialized
at Microsoft.Tools.TeamMate.Model.ProjectContextSerializer.WriteEntry(LastReadEntry entry)
at Microsoft.Tools.TeamMate.Model.ProjectContextSerializer.b__19_0(LastReadEntry e)
at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content) at Microsoft.Tools.TeamMate.Model.ProjectContextSerializer.WriteLastRead(TrackingInfo lastReadModel) at Microsoft.Tools.TeamMate.Services.ProjectDataService.FlushReadWorkItems() at Microsoft.Tools.TeamMate.Foundation.DeferredAction.Invoke() at Microsoft.Tools.TeamMate.Services.ProjectDataService.HandleLastReadChanged(Object sender, EventArgs e) at Microsoft.Tools.TeamMate.Model.TrackingInfo.MarkAsRead(Object key, Int32 revision) at Microsoft.Tools.TeamMate.Services.TrackingToken.MarkAsRead(Int32 revision) at Microsoft.Tools.TeamMate.Services.TrackingService.MarkAsRead(WorkItem workItem) at Microsoft.Tools.TeamMate.ViewModels.WorkItemRowViewModel.Open() at Microsoft.Tools.TeamMate.ViewModels.WorkItemsPageViewModel.OpenMany(ICollection1 items)
at Microsoft.Tools.TeamMate.Pages.WorkItemsPage.HandleItemsActivated(Object sender, ListViewItemsActivatedEventArgs e)
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Delegate.DynamicInvokeImpl(Object[] args)
at System.Windows.RoutedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data.ListView.HandleListBoxMouseDoubleClick(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.Controls.Control.OnMouseDoubleClick(MouseButtonEventArgs e)
at System.Windows.Controls.Control.HandleDoubleClick(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

Enable tracking a query of PRs I created

As much as i need to track PRs assigned to me (sooo many), I need to track all PRs i created so i can loop back and finish the after i have waited and appropriate amount of time

Update Project Documentation

Project documentation - the MD files - need to be updated with proper GIFs of the project to make sure what it does, go over the history and original contributors and so forth.

Use the Dev Ops "Follow work item" instead of custom local implementation

Right now, when you right click and Flag an item, it saved it in a local file and displays in a custom "For follow up" list.
DevOps online however has the same feature, that we should be able to re-use instead. That will maintain consistency when browsing on the web and when using Teammate

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.