Ejemplo n.º 1
0
        private VersionTaggedCommit GetVersion(IRepository gitRepo, IGitHelper gitHelper)
        {
            var branch = gitHelper.GetBranch(gitRepo, "master");
            var tags   = gitRepo.Tags.Select(t =>
            {
                SemanticVersion version;
                if (SemanticVersionParser.TryParse(t.Name, out version))
                {
                    return(new VersionTaggedCommit((Commit)t.Target, version));
                }
                return(null);
            })
                         .Where(a => a != null)
                         .ToArray();
            var olderThan        = branch.Tip.Committer.When;
            var lastTaggedCommit =
                branch.Commits.FirstOrDefault(c => c.Committer.When <= olderThan && tags.Any(a => a.Commit == c));

            if (lastTaggedCommit != null)
            {
                return(tags.Last(a => a.Commit.Sha == lastTaggedCommit.Sha));
            }

            // Create a next version txt as 0.1.0
            var filePath = Path.Combine(_workingDirectory, "NextVersion.txt");

            if (!File.Exists(filePath))
            {
                File.WriteAllText(filePath, "0.1.0");
            }

            var commit = branch.Commits.Last();

            return(new VersionTaggedCommit(commit, new SemanticVersion(0, 0, 0)));
        }
 public BuildNumberCalculatorTests()
 {
     var gitRepo = Substitute.For<IRepository>();
     _nextSemver = Substitute.For<INextSemverCalculator>();
     _lastTaggedReleaseFinder = Substitute.For<ILastTaggedReleaseFinder>();
     _gitHelper = Substitute.For<IGitHelper>();
     _buildServer = Substitute.For<IBuildServer>();
     _sut = new BuildNumberCalculator(_nextSemver, _lastTaggedReleaseFinder, _gitHelper, gitRepo, _buildServer);
 }
        public BuildNumberCalculatorTests()
        {
            var gitRepo = Substitute.For <IRepository>();

            _nextSemver = Substitute.For <INextSemverCalculator>();
            _lastTaggedReleaseFinder = Substitute.For <ILastTaggedReleaseFinder>();
            _gitHelper   = Substitute.For <IGitHelper>();
            _buildServer = Substitute.For <IBuildServer>();
            _sut         = new BuildNumberCalculator(_nextSemver, _lastTaggedReleaseFinder, _gitHelper, gitRepo, _buildServer);
        }
 public BuildNumberCalculator(
     INextSemverCalculator nextSemverCalculator,
     ILastTaggedReleaseFinder lastTaggedReleaseFinder,
     IGitHelper gitHelper, IRepository gitRepo, 
     IBuildServer buildServer)
 {
     _nextSemverCalculator = nextSemverCalculator;
     _lastTaggedReleaseFinder = lastTaggedReleaseFinder;
     _gitHelper = gitHelper;
     _gitRepo = gitRepo;
     _buildServer = buildServer;
 }
Ejemplo n.º 5
0
 public BuildNumberCalculator(
     INextSemverCalculator nextSemverCalculator,
     ILastTaggedReleaseFinder lastTaggedReleaseFinder,
     IGitHelper gitHelper, IRepository gitRepo,
     IBuildServer buildServer)
 {
     _nextSemverCalculator    = nextSemverCalculator;
     _lastTaggedReleaseFinder = lastTaggedReleaseFinder;
     _gitHelper   = gitHelper;
     _gitRepo     = gitRepo;
     _buildServer = buildServer;
 }
Ejemplo n.º 6
0
        private static TaggedCommit GetLastTaggedCommit(IRepository gitRepo, IGitHelper gitHelper, Func<TaggedCommit, bool> filterTags)
        {
            var branch = gitHelper.GetBranch(gitRepo, "master");
            var tags = gitRepo.Tags
                .Select(t => new TaggedCommit((Commit)t.Target, t.Name))
                .Where(filterTags)
                .ToArray();
            var olderThan = branch.Tip.Committer.When;
            var lastTaggedCommit =
                branch.Commits.FirstOrDefault(c => c.Committer.When <= olderThan && tags.Any(a => a.Commit == c));

            if (lastTaggedCommit != null)
                return tags.Single(a => a.Commit.Sha == lastTaggedCommit.Sha);

            return new TaggedCommit(branch.Commits.Last(), "Initial Commit");
        }
        private static VersionTaggedCommit GetVersion(IRepository gitRepo, IGitHelper gitHelper)
        {
            var branch = gitHelper.GetBranch(gitRepo, "master");
            var tags = gitRepo.Tags.Select(t =>
            {
                SemanticVersion version;
                if (SemanticVersionParser.TryParse(t.Name, out version))
                {
                    return new VersionTaggedCommit((Commit) t.Target, version);
                }
                return null;
            })
                .Where(a => a != null)
                .ToArray();
            var olderThan = branch.Tip.Committer.When;
            var lastTaggedCommit =
                branch.Commits.FirstOrDefault(c => c.Committer.When <= olderThan && tags.Any(a => a.Commit == c));

            if (lastTaggedCommit != null)
                return tags.Single(a => a.Commit.Sha == lastTaggedCommit.Sha);

            throw new Exception("Cant find last tagged version");
        }
Ejemplo n.º 8
0
 public LastTaggedReleaseFinder(IRepository gitRepo, IGitHelper gitHelper, string workingDirectory)
 {
     _workingDirectory  = workingDirectory;
     _lastTaggedRelease = new Lazy <VersionTaggedCommit>(() => GetVersion(gitRepo, gitHelper));
 }
 public LastTaggedReleaseFinder(IRepository gitRepo, IGitHelper gitHelper)
 {
     _lastTaggedRelease = new Lazy<VersionTaggedCommit>(()=>GetVersion(gitRepo, gitHelper));
 }
Ejemplo n.º 10
0
 public GitService(IGitHelper gitHelper)
 {
     _gitHelper = gitHelper;
 }
Ejemplo n.º 11
0
 public TaggedCommitFinder(IRepository gitRepo, IGitHelper gitHelper)
 {
     _gitRepo = gitRepo;
     _gitHelper = gitHelper;
 }
Ejemplo n.º 12
0
        static void Main(string[] args)
        {
            // Build configuration
            configuration = new ConfigurationBuilder()
                            .SetBasePath(AppContext.BaseDirectory)
                            .AddJsonFile("appsettings.json", false)
                            .AddEnvironmentVariables()
                            .Build();

            string userName = configuration["Git::UserName"];
            string password = configuration["Git::Password"];
            string gitToken = configuration["Git::Token"];

            // DI
            var serviceProvider = new ServiceCollection()
                                  .AddLogging()
                                  .AddSingleton <IConfiguration>(configuration)
                                  .AddSingleton <IGitHelper>(new Lib2GitHelper())
                                  .AddSingleton <IGitRepositoryReporter>(new GitHubRepositoryReporter(gitToken))
                                  .BuildServiceProvider();

            List <string>          repositoriesToScan = (serviceProvider.GetRequiredService <IGitRepositoryReporter>()).List();
            List <IThreatAssessor> threatAssessors    = new List <IThreatAssessor>()
            {
                new CachedThreatAssessor(),
                new OSSThreatAssessor(configuration["SonaType::UserName"], configuration["SonaType::APIToken"])
            };

            IGitHelper gitHelper = serviceProvider.GetRequiredService <IGitHelper>();

            gitHelper.Connect(userName, password);

            foreach (string repositoryUrl in repositoriesToScan)
            {
                string localPath = @"c:\temp";
                gitHelper.Clone(repositoryUrl, localPath, true);
                List <string> commits = gitHelper.History(localPath);

                string[] projectFiles = Directory.GetFiles(localPath, "*.csproj", new EnumerationOptions()
                {
                    RecurseSubdirectories = true, MatchCasing = MatchCasing.CaseInsensitive
                });

                foreach (string projectFile in projectFiles)
                {
                    IProjectScanner      projectScanner = ProjectScannerFactory.Get(projectFile);
                    ProjectScannerResult scanResult     = projectScanner.Scan(File.ReadAllText(projectFile));

                    foreach (var packageReference in scanResult.Packages)
                    {
                        ThreatAssessment assessment = null;
                        foreach (IThreatAssessor threatAssessor in threatAssessors)
                        {
                            assessment = threatAssessor.Assess(packageReference);
                            if (assessment != null)
                            {
                                break;
                            }
                        }

                        if (assessment != null)
                        {
                            // Cache to any assessor that allows caching
                            foreach (IThreatAssessor threatAssessor in threatAssessors.Where(thr => thr.CanSave))
                            {
                                threatAssessor.Save(assessment);
                            }
                        }
                    }
                }
            }
        }