public static async Task RunAsync()

in src/build/BullseyeTargets/FindPackageTarget.cs [15:106]


        public static async Task RunAsync(BuildContext ctx, string targetName)
        {
            var cmd = ctx.GetCommand();
            bool forceSwitch = (cmd as ISupportForceSwitch)?.ForceSwitch ?? false;

            if (!forceSwitch && !ctx.Config.ProductNames.Any(t => t.ToLower() == targetName))
                throw new InvalidDataException($"Invalid product '{targetName}'");

            var containerId = (cmd as ISupportRequiredContainerId).ContainerId;

            if (!QualifiedVersion.FromString(containerId, out var qv))
                throw new InvalidDataException($"Bad container id: '{containerId}'");

            Directory.CreateDirectory(ctx.InDir);

            if (!forceSwitch)
                Console.WriteLine($"Searching local directory {ctx.InDir} ...");

            var packageList = forceSwitch

                // When --force in effect, we always lookup from artifacts-api
                ? new List<ArtifactPackage>()

                // Lookup in the bin/in first
                : new DirectoryInfo(ctx.InDir)
                    .GetFiles(MagicStrings.Files.AllDotZip, SearchOption.TopDirectoryOnly)
                    .Select(fi =>
                    {
                        if (!ArtifactPackage.FromFilename(fi.Name, out var ap))
                            return null;

                        if (ap.TargetName != targetName)
                            return null;

                        if (ap.SemVer != qv.SemVer)
                            return null;

                        if (!fi.Name.Contains("-windows", StringComparison.OrdinalIgnoreCase))
                            return null;

                        return ap;
                    })
                    .Where(ap => ap?.Is64Bit ?? false)
                    .ToList();

            var actionPrefix = "<BUGBUG> ";

            ArtifactPackage ap = null;

            if (packageList.Count == 0)
            {
                // No local packages found, try Artifacts API
                Console.WriteLine($"Searching Artifacts API for {targetName}-{containerId} ...");

                packageList = (await ArtifactsApi.FindArtifact(targetName, filter =>
                {
                    filter.ContainerId = containerId;
                })).ToList();

                if (packageList.Count == 0)
                {
                    Console.WriteLine("ERR: Nothing found");

                    // TODO: should we skip or stop the build?
                    throw new Exception();
                }
                else
                    actionPrefix = "Will fetch file: ";
            }
            else
                actionPrefix = "Using local file: ";

            if (packageList.Count > 1)
            {
                Console.WriteLine("WARN: More than one possibility for product:");
                Console.WriteLine(string.Join(
                    Environment.NewLine,
                    packageList
                        .Select(itm => "  " + itm.FileName)
                    ));
            }

            ap = packageList.First();

            if (ap == null)
                throw new Exception("BUGBUG: ap = null");

            ctx.SetArtifactPackage(ap);

            Console.WriteLine(actionPrefix + ap.FileName);
            return;
        }