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; }
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"); }
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)); }
public GitService(IGitHelper gitHelper) { _gitHelper = gitHelper; }
public TaggedCommitFinder(IRepository gitRepo, IGitHelper gitHelper) { _gitRepo = gitRepo; _gitHelper = gitHelper; }
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); } } } } } }