#pragma warning disable CS1998
        protected override async Task <bool> Execute(Context context)
        {
            var toolchainDirs = new List <string> {
                Path.GetFileName(context.Properties.GetRequiredValue(KnownProperties.AndroidSdkDirectory)),
                Path.GetFileName(context.Properties.GetRequiredValue(KnownProperties.AndroidNdkDirectory)),
            };

            var androidToolchain = new AndroidToolchain();
            var androidPackages  = new List <string> ();

            foreach (AndroidToolchainComponent component in androidToolchain.Components)
            {
                if (component == null)
                {
                    continue;
                }

                Uri pkgUrl;
                if (component.RelativeUrl != null)
                {
                    pkgUrl = new Uri(AndroidToolchain.AndroidUri, component.RelativeUrl);
                }
                else
                {
                    pkgUrl = AndroidToolchain.AndroidUri;
                }
                pkgUrl = new Uri(pkgUrl, $"{component.Name}.zip");
                androidPackages.Add($"{pkgUrl} {component.DestDir}");
            }

            var brewTaps     = new List <string> ();
            var brewPackages = new List <string> ();
            var pkgUrls      = new List <string> ();

            GatherMacPackages(brewTaps, brewPackages, pkgUrls);

            var sb = new StringBuilder(File.ReadAllText(Configurables.Paths.PackageImageDependenciesTemplate));

            sb.Replace("@TOOLCHAIN_DIRS@", MakeLines(toolchainDirs));
            sb.Replace("@PACKAGES@", MakeLines(androidPackages));
            sb.Replace("@BREW_TAPS@", MakeLines(brewTaps));
            sb.Replace("@BREWS@", MakeLines(brewPackages));
            sb.Replace("@PKG_URLS@", MakeLines(pkgUrls));

            string outputFile = Configurables.Paths.PackageImageDependenciesOutput;

            Log.StatusLine($"Generating ", outputFile, tailColor: ConsoleColor.White);
            File.WriteAllText(outputFile, sb.ToString());

            return(Utilities.MakeExecutable(outputFile, throwOnError: false));

            string MakeLines(List <string> list)
            {
                return(String.Join("\n", list));
            }
        }
        public override void Generate(Context context)
        {
            var inputData = new StringBuilder(File.ReadAllText(InputPath, Encoding.UTF8));

            foreach (var kvp in replacements)
            {
                string placeholder = kvp.Key.Trim();
                if (String.IsNullOrEmpty(placeholder))
                {
                    continue;
                }

                inputData.Replace(placeholder, kvp.Value ?? String.Empty);
            }

            EnsureOutputDir();
            string outputData = inputData.ToString();

            File.WriteAllText(OutputPath, outputData, Utilities.UTF8NoBOM);

            if (IsExecutable)
            {
                Utilities.MakeExecutable(OutputPath);
            }

            if (!EchoOutput)
            {
                return;
            }

            Log.DebugLine();
            Log.DebugLine("--------------------------------------------");
            Log.DebugLine(outputData);
            Log.DebugLine("--------------------------------------------");
            Log.DebugLine();
        }