/// <summary> /// Configures a <see cref="LocalWorkspaceOptions"/> for use with a local backend. Useful for portable /// integration testing. /// </summary> /// <param name="options"></param> public static LocalWorkspaceOptions ConfigureForLocalBackend(this LocalWorkspaceOptions options) { options.EnvironmentVariables ??= new Dictionary <string, string?>(); options.EnvironmentVariables.Add(EnvironmentVariableKeys.ConfigPassphrase, "secret"); options.EnvironmentVariables.Add(EnvironmentVariableKeys.ConfigBackendUrl, "file://~"); return(options); }
static async Task <int> DeployStack( string stack, string name, string tier, string track, string version, string image, int percentage ) { var currentDir = Directory.GetCurrentDirectory(); Information("Starting with {Name} {Stack} in {CurrentDir}", name, stack, currentDir); var customStackPath = Path.Combine(currentDir, "deploy"); var usingCustomStack = Directory.Exists(customStackPath); if (usingCustomStack) { Information("Using the custom stack in {Directory}", customStackPath); } LocalWorkspaceOptions stackArgs = usingCustomStack ? new LocalProgramArgs(stack, customStackPath) : new InlineProgramArgs(name, stack, PulumiFn.Create <DefaultStack>()); using var workspace = await LocalWorkspace.CreateAsync(stackArgs); var appStack = await WorkspaceStack.CreateOrSelectAsync(stack, workspace); await appStack.RefreshAsync(); Information("Configuring stack {Stack}", stack); var appSettings = new AutoDevOpsSettings.AppSettings(name, tier, track, version); var deploymentSettings = await Settings.GetDeploymentSettings(); await appStack.SetJsonConfig("gitlab", Settings.GitLabSettings()); await appStack.SetJsonConfig("registry", Settings.RegistrySettings(), true); await appStack.SetJsonConfig("app", appSettings); await appStack.SetJsonConfig("deploy", Settings.DeploySettings(image, percentage)); await appStack.SetJsonConfig("service", deploymentSettings.Service); await appStack.SetJsonConfig("ingress", deploymentSettings.Ingress); await appStack.SetJsonConfig("prometheus", deploymentSettings.Prometheus); Information("Installing plugins"); await appStack.Workspace.InstallPluginAsync("kubernetes", "v3.3.0"); Information("Deploying stack {Stack}", stack); var result = await appStack.UpAsync( new UpOptions { OnStandardOutput = Information, OnStandardError = Error } ); Information("Deployment result: {Result}", result.Summary.Message); if (!Env.EnvironmentUrl.IsEmpty()) { Information("Environment URL: {EnvironmentUrl}", Env.EnvironmentUrl); } return(result.Summary.Result == UpdateState.Succeeded ? 0 : -1); }