/// <summary>
        /// Doing Step 2 of the release process which includes the following:
        /// <list type="number">
        /// <item><description>Builds samples</description></item>
        /// <item><description>Creates a release notes</description></item>
        /// <item><description>Commits, Tags and Pushes</description></item>
        /// </list>
        /// </summary>
        private void DoStep2()
        {
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("=========================");
            Console.WriteLine("Prerequisites for Step 2:");
            Console.WriteLine("You ran Step 1.");
            Console.WriteLine("You upgraded the Google.Apis NuGet packages for each sample in the samples " +
                "repository and pushed that change.");
            Console.WriteLine("=========================");
            if (!CanContinue())
            {
                return;
            }

            SamplesRepository = new Git(new Uri(string.Format(CloneUrlFormat, "-samples")), "samples");

            // if there are incoming changes those changes will be printed, otherwise we can continue in the 
            // process
            if (!HasIncomingChanges(AllRepositories))
            {
                // TODO(peleyal): Currently samples don't compile, compile&build manually. INVESTIGATE!
                // BuildSamples();
                var notes = GetChangelog();
                // TODO(peleyal): Save notes to some file, its content should be used by
                // https://developers.google.com/api-client-library/dotnet/release_notes.

                foreach (var repository in AllRepositories)
                {
                    repository.AddRemoveFiles();
                }

                Console.WriteLine("=========================");
                Console.WriteLine("Commit, Tag and Push");
                Console.WriteLine("=========================");
                if (!CanContinue())
                {
                    return;
                }

                // commit
                CommitAndTag();

                // push
                foreach (Git repository in AllRepositories)
                {
                    repository.Push();
                }

                // create branch
                PrintCreateBranch();

                // publish core components to NuGet
                if (!string.IsNullOrEmpty(options.NuGetApiKey))
                {
                    PublishPackagesToNuGet();
                    Console.WriteLine("Now... you should run the NuGet publisher to publish a new PCL "
                        + "for each generated Google API. Run: " +
                        "Google.Apis.NuGet.Publisher --all_apis true -m publisher -k [NUGET_KEY]");
                }
                else
                {
                    TraceSource.TraceEvent(TraceEventType.Error, "NuGet API key is empty!");
                }
            }
        }
        /// <summary>The main release logic for creating a new release of Google.Apis.</summary>
        private void Run()
        {
            DefaultRepository = new Git(new Uri(string.Format(CloneUrlFormat, "")), options.IsLocal ? null : "default");

            // Step 1 is only for creating the core Google.Apis packages.
            if (options.Step == 1)
            {
                DoStep1();
            }
            // Step 2 should be done after the NuGet publisher generated all the APIs and the samples repository was 
            // updated with the new packages
            else if (options.Step == 2)
            {
                DoStep2();
            }
        }