PrintReleases(string searchPattern, bool latest = false, bool printReleaseNotes = false, bool listPreReleases = false)
        {
            PyRevitCLIAppCmds.PrintHeader("Releases");
            List <PyRevitRelease> releasesToList = new List <PyRevitRelease>();

            // determine latest release
            if (latest)
            {
                var latestRelease = PyRevitRelease.GetLatestRelease(includePreRelease: listPreReleases);

                if (latestRelease == null)
                {
                    throw new pyRevitException("Can not determine latest release.");
                }

                releasesToList.Add(latestRelease);
            }
            else
            {
                if (searchPattern != null)
                {
                    releasesToList = PyRevitRelease.FindReleases(searchPattern, includePreRelease: listPreReleases);
                }
                else
                {
                    releasesToList = PyRevitRelease.GetReleases().Where(r => r.IsPyRevitRelease).ToList();
                }
            }

            foreach (var prelease in releasesToList)
            {
                Console.WriteLine(prelease);
                if (printReleaseNotes)
                {
                    Console.WriteLine(prelease.ReleaseNotes.Indent(1));
                }
            }
        }