Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ public static RootCommand GenerateCommandLineOptions(Func<DefaultOptions, Task>
getDefaultValue: () => false);
universalOption.AddAlias("-u");

var breakGlassOption = new Option<bool>(
name: "--breakGlass",
description: "Flag; Ignore secret push protection results when pushing.",
getDefaultValue: () => false);
breakGlassOption.AddAlias("-b");

var collectedArgs = new Argument<string[]>("args")
{
Expand Down Expand Up @@ -92,9 +97,10 @@ public static RootCommand GenerateCommandLineOptions(Func<DefaultOptions, Task>
root.Add(startCommand);

var pushCommand = new Command("push", "Push the assets, referenced by assets.json, into git.");
pushCommand.AddOption(breakGlassOption);
pushCommand.AddOption(assetsJsonPathOption);
pushCommand.SetHandler(async (pushOpts) => await callback(pushOpts),
new PushOptionsBinder(storageLocationOption, storagePluginOption, assetsJsonPathOption)
new PushOptionsBinder(storageLocationOption, storagePluginOption, assetsJsonPathOption, breakGlassOption)
);
root.Add(pushCommand);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,31 @@ namespace Azure.Sdk.Tools.TestProxy.CommandOptions
/// </summary>
public class PushOptions : CLICommandOptions
{
public bool BreakGlass { get; set; }
}

public class PushOptionsBinder : BinderBase<PushOptions>
{
private readonly Option<string> _storageLocationOption;
private readonly Option<string> _storagePluginOption;
private readonly Option<string> _assetsJsonPathOption;
private readonly Option<bool> _breakGlassOption;

public PushOptionsBinder(Option<string> storageLocationOption, Option<string> storagePluginOption, Option<string> assetsJsonPathOption)
public PushOptionsBinder(Option<string> storageLocationOption, Option<string> storagePluginOption, Option<string> assetsJsonPathOption, Option<bool> breakGlassOption)
{
_storageLocationOption = storageLocationOption;
_storagePluginOption = storagePluginOption;
_assetsJsonPathOption = assetsJsonPathOption;
_breakGlassOption = breakGlassOption;
}

protected override PushOptions GetBoundValue(BindingContext bindingContext) =>
new PushOptions
{
StorageLocation = bindingContext.ParseResult.GetValueForOption(_storageLocationOption),
StoragePlugin = bindingContext.ParseResult.GetValueForOption(_storagePluginOption),
AssetsJsonPath = bindingContext.ParseResult.GetValueForOption(_assetsJsonPathOption)
AssetsJsonPath = bindingContext.ParseResult.GetValueForOption(_assetsJsonPathOption),
BreakGlass = bindingContext.ParseResult.GetValueForOption(_breakGlassOption),
};
}
}
10 changes: 7 additions & 3 deletions tools/test-proxy/Azure.Sdk.Tools.TestProxy/Store/GitStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,9 @@ public bool CheckForSecrets(GitAssetsConfiguration assetsConfiguration, string[]
/// Pushes a set of changed files to the assets repo. Honors configuration of assets.json passed into it.
/// </summary>
/// <param name="pathToAssetsJson"></param>
/// <param name="ignoreSecretProtection"></param>
/// <returns></returns>
public async Task Push(string pathToAssetsJson) {
public async Task Push(string pathToAssetsJson, bool ignoreSecretProtection = false) {
var config = await ParseConfigurationFile(pathToAssetsJson);

var initialized = IsAssetsRepoInitialized(config);
Expand All @@ -145,8 +146,11 @@ public async Task Push(string pathToAssetsJson) {
{
if (CheckForSecrets(config, pendingChanges))
{
Environment.ExitCode = -1;
return;
if (!ignoreSecretProtection)
{
Environment.ExitCode = -1;
return;
}
}

try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ public interface IAssetsStore
/// Given a configuration, push the changes made by the test-proxy into the remote store.
/// </summary>
/// <param name="pathToAssetsJson"></param>
public abstract Task Push(string pathToAssetsJson);
/// <param name="ignoreSecretProtection"></param>
public abstract Task Push(string pathToAssetsJson, bool ignoreSecretProtection = false);

/// <summary>
/// Given a configuration, pull any remote resources down into the provided contextPath.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace Azure.Sdk.Tools.TestProxy.Store
{
public class NullStore : IAssetsStore
{
public Task Push(string pathToAssetsJson) { return null; }
public Task Push(string pathToAssetsJson, bool ignoreSecretProtection = false) { return null; }

public Task<string> Restore(string pathToAssetsJson) { return null; }

Expand Down