static async Task Main(string[] args) { await Parser.Default.ParseArguments <Options>(args) .WithNotParsed(errors => throw new Exception("Invalid commandline: " + string.Join("; ", errors))) .WithParsedAsync(async options => { var validator = new SqlValidator(options.ConnectionString); var tokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(1d)); await WaitForReady(validator, tokenSource.Token); var dirInfo = new DirectoryInfo("."); var executor = new TestExecutor(options.ConnectionString, options.Pattern); var results = await executor.Validate(dirInfo); var writer = new GitHubErrorWriter(new ConsoleOutputWrapper()); writer.WriteErrors(results); if (results.Any(r => !r.Success)) { Environment.Exit(1); } }); }
private static async Task WaitForReady(SqlValidator validator, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { try { await validator.TestConnection(); return; } catch (Exception) { Console.WriteLine("Database connection failed, waiting a moment and trying again"); await Task.Delay(1000, cancellationToken); } } cancellationToken.ThrowIfCancellationRequested(); }