Beispiel #1
0
        public static BuildTargetResult ExpectedBuildArtifacts(BuildTargetContext c)
        {
            var config           = Environment.GetEnvironmentVariable("CONFIGURATION");
            var versionBadgeName = $"{Monikers.GetBadgeMoniker()}_{config}_version_badge.svg";

            c.BuildContext["VersionBadge"] = Path.Combine(Dirs.Output, versionBadgeName);

            var cliVersion             = c.BuildContext.Get <BuildVersion>("BuildVersion").NuGetVersion;
            var sharedFrameworkVersion = CliDependencyVersions.SharedFrameworkVersion;
            var hostVersion            = CliDependencyVersions.SharedHostVersion;
            var hostFxrVersion         = CliDependencyVersions.HostFxrVersion;

            // Generated Installers + Archives
            AddInstallerArtifactToContext(c, "dotnet-sdk", "Sdk", cliVersion);
            AddInstallerArtifactToContext(c, "dotnet-dev", "CombinedFrameworkSDKHost", cliVersion);
            AddInstallerArtifactToContext(c, "dotnet-sharedframework-sdk", "CombinedFrameworkSDK", cliVersion);
            AddInstallerArtifactToContext(c, "dotnet-sdk-debug", "SdkSymbols", cliVersion);

            //Downloaded Installers + Archives
            AddInstallerArtifactToContext(c, "dotnet-host", "SharedHost", hostVersion);
            AddInstallerArtifactToContext(c, "dotnet-hostfxr", "HostFxr", hostFxrVersion);
            AddInstallerArtifactToContext(c, "dotnet-sharedframework", "SharedFramework", sharedFrameworkVersion);
            AddInstallerArtifactToContext(c, "dotnet", "CombinedFrameworkHost", sharedFrameworkVersion);

            return(c.Success());
        }
        public override bool Execute()
        {
            base.Execute();

            var branchInfo = new BranchInfo(RepoRoot);

            var buildVersion = new BuildVersion()
            {
                Major         = int.Parse(branchInfo.Entries["MAJOR_VERSION"]),
                Minor         = int.Parse(branchInfo.Entries["MINOR_VERSION"]),
                Patch         = int.Parse(branchInfo.Entries["PATCH_VERSION"]),
                ReleaseSuffix = branchInfo.Entries["RELEASE_SUFFIX"],
                CommitCount   = _commitCount
            };

            VersionMajor        = buildVersion.Major;
            VersionMinor        = buildVersion.Minor;
            VersionPatch        = buildVersion.Patch;
            CommitCount         = buildVersion.CommitCountString;
            ReleaseSuffix       = buildVersion.ReleaseSuffix;
            VersionSuffix       = buildVersion.VersionSuffix;
            SimpleVersion       = buildVersion.SimpleVersion;
            NugetVersion        = buildVersion.NuGetVersion;
            MsiVersion          = buildVersion.GenerateMsiVersion();
            VersionBadgeMoniker = Monikers.GetBadgeMoniker();
            Channel             = branchInfo.Entries["CHANNEL"];
            BranchName          = branchInfo.Entries["BRANCH_NAME"];

            return(true);
        }
Beispiel #3
0
        public static BuildTargetResult RemovePackages(BuildTargetContext c)
        {
            // Ubuntu 16.04 Jenkins Machines don't have docker or debian package build tools
            // So we need to skip this target if the tools aren't present.
            // https://github.com/dotnet/core-setup/issues/167
            if (DebuildNotPresent())
            {
                c.Info("Debuild not present, skipping target: {nameof(RemovePackages)}");
                return(c.Success());
            }

            IEnumerable <string> orderedPackageNames = new List <string>()
            {
                CliMonikers.GetSdkDebianPackageName(c),
                Monikers.GetDebianSharedFrameworkPackageName(CliDependencyVersions.SharedFrameworkVersion),
                Monikers.GetDebianHostFxrPackageName(CliDependencyVersions.HostFxrVersion),
                Monikers.GetDebianSharedHostPackageName(c)
            };

            foreach (var packageName in orderedPackageNames)
            {
                RemovePackage(packageName);
            }

            return(c.Success());
        }
Beispiel #4
0
        public static BuildTargetResult GenerateSdkDeb(BuildTargetContext c)
        {
            var channel                   = c.BuildContext.Get <string>("Channel").ToLower();
            var packageName               = Monikers.GetSdkDebianPackageName(c);
            var version                   = c.BuildContext.Get <BuildVersion>("BuildVersion").NuGetVersion;
            var debFile                   = c.BuildContext.Get <string>("SdkInstallerFile");
            var manPagesDir               = Path.Combine(Dirs.RepoRoot, "Documentation", "manpages");
            var previousVersionURL        = $"https://dotnetcli.blob.core.windows.net/dotnet/{channel}/Installers/Latest/dotnet-ubuntu-x64.latest.deb";
            var sdkPublishRoot            = c.BuildContext.Get <string>("CLISDKRoot");
            var sharedFxDebianPackageName = Monikers.GetDebianSharedFrameworkPackageName(c);

            var objRoot = Path.Combine(Dirs.Output, "obj", "debian", "sdk");

            if (Directory.Exists(objRoot))
            {
                Directory.Delete(objRoot, true);
            }

            Directory.CreateDirectory(objRoot);

            Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-debian.sh"),
                "-v", version,
                "-i", sdkPublishRoot,
                "-o", debFile,
                "-p", packageName,
                "-m", manPagesDir,
                "--framework-debian-package-name", sharedFxDebianPackageName,
                "--framework-nuget-name", Monikers.SharedFrameworkName,
                "--framework-nuget-version", c.BuildContext.Get <string>("SharedFrameworkNugetVersion"),
                "--previous-version-url", previousVersionURL,
                "--obj-root", objRoot)
            .Execute()
            .EnsureSuccessful();
            return(c.Success());
        }
Beispiel #5
0
        public override bool Execute()
        {
            Rid          = RuntimeEnvironment.GetRuntimeIdentifier();
            Architecture = RuntimeEnvironment.RuntimeArchitecture;
            OSName       = Monikers.GetOSShortName();

            return(true);
        }
Beispiel #6
0
        public override bool Execute()
        {
            Rid          = string.IsNullOrEmpty(OverrideRid) ? RuntimeEnvironment.GetRuntimeIdentifier() : OverrideRid;
            Architecture = RuntimeEnvironment.RuntimeArchitecture;
            OSName       = Monikers.GetOSShortName();

            return(true);
        }
Beispiel #7
0
        public static BuildTargetResult PublishLatestVersionTextFile(BuildTargetContext c)
        {
            var osname            = Monikers.GetOSShortName();
            var latestVersionBlob = $"{Channel}/dnvm/latest.{osname}.{CurrentArchitecture.Current}.version";
            var latestVersionFile = Path.Combine(Dirs.Stage2, ".version");

            PublishFileAzure(latestVersionBlob, latestVersionFile);
            return(c.Success());
        }
Beispiel #8
0
        public static BuildTargetResult PublishDebFileToDebianRepo(BuildTargetContext c)
        {
            var packageName   = Monikers.GetDebianPackageName(c);
            var installerFile = c.BuildContext.Get <string>("InstallerFile");
            var uploadUrl     = $"https://dotnetcli.blob.core.windows.net/dotnet/{Channel}/Installers/{Version}/{Path.GetFileName(installerFile)}";
            var uploadJson    = GenerateUploadJsonFile(packageName, Version, uploadUrl);

            Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "publish", "repoapi_client.sh"), "-addpkg", uploadJson)
            .Execute()
            .EnsureSuccessful();

            return(c.Success());
        }
Beispiel #9
0
        public static BuildTargetResult PublishSharedHostDebToDebianRepo(BuildTargetContext c)
        {
            var version = SharedHostNugetVersion;

            var packageName   = Monikers.GetDebianSharedHostPackageName(c);
            var installerFile = c.BuildContext.Get <string>("SharedHostInstallerFile");
            var uploadUrl     = AzurePublisherTool.CalculateInstallerUploadUrl(installerFile, Channel, version);

            DebRepoPublisherTool.PublishDebFileToDebianRepo(
                packageName,
                version,
                uploadUrl);

            return(c.Success());
        }
Beispiel #10
0
        public static BuildTargetResult GenerateDeb(BuildTargetContext c)
        {
            var channel            = c.BuildContext.Get <string>("Channel").ToLower();
            var packageName        = Monikers.GetDebianPackageName(c);
            var version            = c.BuildContext.Get <BuildVersion>("BuildVersion").SimpleVersion;
            var debFile            = c.BuildContext.Get <string>("InstallerFile");
            var manPagesDir        = Path.Combine(Dirs.RepoRoot, "Documentation", "manpages");
            var previousVersionURL = $"https://dotnetcli.blob.core.windows.net/dotnet/{channel}/Installers/Latest/dotnet-ubuntu-x64.latest.deb";

            Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-debian.sh"),
                "-v", version, "-i", Dirs.Stage2, "-o", debFile, "-p", packageName, "-m", manPagesDir, "--previous-version-url", previousVersionURL)
            .Execute()
            .EnsureSuccessful();
            return(c.Success());
        }
Beispiel #11
0
        public static BuildTargetResult GenerateSdkDeb(BuildTargetContext c)
        {
            // Ubuntu 16.04 Jenkins Machines don't have docker or debian package build tools
            // So we need to skip this target if the tools aren't present.
            // https://github.com/dotnet/core-setup/issues/167
            if (DebuildNotPresent())
            {
                c.Info("Debuild not present, skipping target: {nameof(RemovePackages)}");
                return(c.Success());
            }

            var channel                   = c.BuildContext.Get <string>("Channel").ToLower();
            var packageName               = CliMonikers.GetSdkDebianPackageName(c);
            var version                   = c.BuildContext.Get <BuildVersion>("BuildVersion").NuGetVersion;
            var debFile                   = c.BuildContext.Get <string>("SdkInstallerFile");
            var manPagesDir               = Path.Combine(Dirs.RepoRoot, "Documentation", "manpages");
            var sdkPublishRoot            = c.BuildContext.Get <string>("CLISDKRoot");
            var sharedFxDebianPackageName = Monikers.GetDebianSharedFrameworkPackageName(CliDependencyVersions.SharedFrameworkVersion);
            var debianConfigFile          = Path.Combine(Dirs.DebPackagingConfig, "dotnet-debian_config.json");
            var postinstallFile           = Path.Combine(Dirs.DebPackagingConfig, "postinst");

            var debianConfigVariables = new Dictionary <string, string>()
            {
                { "SHARED_FRAMEWORK_DEBIAN_PACKAGE_NAME", sharedFxDebianPackageName },
                { "SHARED_FRAMEWORK_NUGET_NAME", Monikers.SharedFrameworkName },
                { "SHARED_FRAMEWORK_NUGET_VERSION", CliDependencyVersions.SharedFrameworkVersion },
                { "SHARED_FRAMEWORK_BRAND_NAME", Monikers.SharedFxBrandName },
                { "SDK_NUGET_VERSION", version },
                { "CLI_SDK_BRAND_NAME", Monikers.CLISdkBrandName }
            };

            var debCreator = new DebPackageCreator(
                DotNetCli.Stage2,
                Dirs.Intermediate);

            debCreator.CreateDeb(
                debianConfigFile,
                packageName,
                version,
                sdkPublishRoot,
                debianConfigVariables,
                debFile,
                manpagesDirectory: manPagesDir,
                versionManpages: true,
                debianFiles: new string[] { postinstallFile });

            return(c.Success());
        }
Beispiel #12
0
        public static BuildTargetResult PublishLatestSharedFrameworkVersionTextFile(BuildTargetContext c)
        {
            var version = SharedFrameworkNugetVersion;

            var osname = Monikers.GetOSShortName();
            var latestSharedFXVersionBlob = $"{Channel}/dnvm/latest.sharedfx.{osname}.{CurrentArchitecture.Current}.version";
            var latestSharedFXVersionFile = Path.Combine(
                Dirs.Stage2,
                "shared",
                CompileTargets.SharedFrameworkName,
                version,
                ".version");

            AzurePublisherTool.PublishFile(latestSharedFXVersionBlob, latestSharedFXVersionFile);
            return(c.Success());
        }
Beispiel #13
0
        public static BuildTargetResult RemovePackages(BuildTargetContext c)
        {
            IEnumerable <string> orderedPackageNames = new List <string>()
            {
                Monikers.GetSdkDebianPackageName(c),
                Monikers.GetDebianSharedFrameworkPackageName(c),
                Monikers.GetDebianSharedHostPackageName(c)
            };

            foreach (var packageName in orderedPackageNames)
            {
                RemovePackage(packageName);
            }

            return(c.Success());
        }
Beispiel #14
0
        public static BuildTargetResult GenerateSdkDeb(BuildTargetContext c)
        {
            // Ubuntu 16.04 Jenkins Machines don't have docker or debian package build tools
            // So we need to skip this target if the tools aren't present.
            // https://github.com/dotnet/core-setup/issues/167
            if (DebuildNotPresent())
            {
                c.Info("Debuild not present, skipping target: {nameof(RemovePackages)}");
                return(c.Success());
            }

            var channel                   = c.BuildContext.Get <string>("Channel").ToLower();
            var packageName               = CliMonikers.GetSdkDebianPackageName(c);
            var version                   = c.BuildContext.Get <BuildVersion>("BuildVersion").NuGetVersion;
            var debFile                   = c.BuildContext.Get <string>("SdkInstallerFile");
            var manPagesDir               = Path.Combine(Dirs.RepoRoot, "Documentation", "manpages");
            var previousVersionURL        = $"https://dotnetcli.blob.core.windows.net/dotnet/{channel}/Installers/Latest/dotnet-ubuntu-x64.latest.deb";
            var sdkPublishRoot            = c.BuildContext.Get <string>("CLISDKRoot");
            var sharedFxDebianPackageName = Monikers.GetDebianSharedFrameworkPackageName(CliDependencyVersions.SharedFrameworkVersion);

            var objRoot = Path.Combine(Dirs.Output, "obj", "debian", "sdk");

            if (Directory.Exists(objRoot))
            {
                Directory.Delete(objRoot, true);
            }

            Directory.CreateDirectory(objRoot);

            Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-debian.sh"),
                "-v", version,
                "-i", sdkPublishRoot,
                "-o", debFile,
                "-p", packageName,
                "-b", Monikers.CLISdkBrandName,
                "-m", manPagesDir,
                "--framework-debian-package-name", sharedFxDebianPackageName,
                "--framework-nuget-name", Monikers.SharedFrameworkName,
                "--framework-nuget-version", CliDependencyVersions.SharedFrameworkVersion,
                "--previous-version-url", previousVersionURL,
                "--obj-root", objRoot)
            .Execute()
            .EnsureSuccessful();
            return(c.Success());
        }
Beispiel #15
0
        private static void AddInstallerArtifactToContext(
            BuildTargetContext c,
            string artifactPrefix,
            string contextPrefix,
            string version)
        {
            var productName = Monikers.GetProductMoniker(c, artifactPrefix, version);

            var extension = CurrentPlatform.IsWindows ? ".zip" : ".tar.gz";

            c.BuildContext[contextPrefix + "CompressedFile"] = Path.Combine(Dirs.Packages, productName + extension);

            string installer = "";

            switch (CurrentPlatform.Current)
            {
            case BuildPlatform.Windows:
                if (contextPrefix.Contains("Combined"))
                {
                    installer = productName + ".exe";
                }
                else
                {
                    installer = productName + ".msi";
                }
                break;

            case BuildPlatform.OSX:
                installer = productName + ".pkg";
                break;

            case BuildPlatform.Ubuntu:
                installer = productName + ".deb";
                break;

            default:
                break;
            }

            if (!string.IsNullOrEmpty(installer))
            {
                c.BuildContext[contextPrefix + "InstallerFile"] = Path.Combine(Dirs.Packages, installer);
            }
        }
Beispiel #16
0
        public override bool Execute()
        {
            var badges = new Dictionary <string, bool>()
            {
                { "win_x86", false },
                { "win_x64", false },
                { "ubuntu_x64", false },
                { "ubuntu_16_04_x64", false },
                { "rhel_x64", false },
                { "osx_x64", false },
                { "debian_x64", false },
                { "centos_x64", false },
                { "fedora_23_x64", false },
                { "openSUSE_13_2_x64", false }
            };

            var versionBadgeName = $"{Monikers.GetBadgeMoniker()}";

            if (!badges.ContainsKey(versionBadgeName))
            {
                throw new ArgumentException($"A new OS build '{versionBadgeName}' was added without adding the moniker to the {nameof(badges)} lookup");
            }

            IEnumerable <string> blobs = AzurePublisherTool.ListBlobs(AzurePublisher.Product.Sdk, NugetVersion);

            foreach (string file in blobs)
            {
                string name = Path.GetFileName(file);
                foreach (string img in badges.Keys)
                {
                    if ((name.StartsWith($"{img}")) && (name.EndsWith(".svg")))
                    {
                        badges[img] = true;
                        break;
                    }
                }
            }

            HaveAllBuildsPublished = badges.Values.All(v => v).ToString();

            return(true);
        }
Beispiel #17
0
        private static bool CheckIfAllBuildsHavePublished()
        {
            Dictionary <string, bool> badges = new Dictionary <string, bool>()
            {
                { "Windows_x86", false },
                { "Windows_x64", false },
                { "Ubuntu_x64", false },
                { "Ubuntu_16_04_x64", false },
                { "RHEL_x64", false },
                { "OSX_x64", false },
                { "Debian_x64", false },
                { "CentOS_x64", false },
                { "Fedora_23_x64", false },
                { "openSUSE_13_2_x64", false }
            };

            var versionBadgeName = $"{Monikers.GetBadgeMoniker()}";

            if (!badges.ContainsKey(versionBadgeName))
            {
                throw new ArgumentException($"A new OS build '{versionBadgeName}' was added without adding the moniker to the {nameof(badges)} lookup");
            }

            IEnumerable <string> blobs = AzurePublisherTool.ListBlobs(AzurePublisher.Product.Sdk, CliNuGetVersion);

            foreach (string file in blobs)
            {
                string name = Path.GetFileName(file);
                foreach (string img in badges.Keys)
                {
                    if ((name.StartsWith($"{img}")) && (name.EndsWith(".svg")))
                    {
                        badges[img] = true;
                        break;
                    }
                }
            }

            return(badges.Values.All(v => v));
        }
Beispiel #18
0
        public static BuildTargetResult ExpectedBuildArtifacts(BuildTargetContext c)
        {
            var productName      = Monikers.GetProductMoniker(c);
            var config           = Environment.GetEnvironmentVariable("CONFIGURATION");
            var versionBadgeName = $"{CurrentPlatform.Current}_{CurrentArchitecture.Current}_{config}_version_badge.svg";

            c.BuildContext["VersionBadge"] = Path.Combine(Dirs.Output, versionBadgeName);

            var extension = CurrentPlatform.IsWindows ? ".zip" : ".tar.gz";

            c.BuildContext["CompressedFile"] = Path.Combine(Dirs.Packages, productName + extension);

            string installer = "";

            switch (CurrentPlatform.Current)
            {
            case BuildPlatform.Windows:
                installer = productName + ".exe";
                break;

            case BuildPlatform.OSX:
                installer = productName + ".pkg";
                break;

            case BuildPlatform.Ubuntu:
                installer = productName + ".deb";
                break;

            default:
                break;
            }

            if (!string.IsNullOrEmpty(installer))
            {
                c.BuildContext["InstallerFile"] = Path.Combine(Dirs.Packages, installer);
            }

            return(c.Success());
        }
Beispiel #19
0
        public static BuildTargetResult GenerateSharedHostDeb(BuildTargetContext c)
        {
            var packageName = Monikers.GetDebianSharedHostPackageName(c);
            var version     = c.BuildContext.Get <BuildVersion>("BuildVersion").NuGetVersion;
            var inputRoot   = c.BuildContext.Get <string>("SharedHostPublishRoot");
            var debFile     = c.BuildContext.Get <string>("SharedHostInstallerFile");
            var objRoot     = Path.Combine(Dirs.Output, "obj", "debian", "sharedhost");
            var manPagesDir = Path.Combine(Dirs.RepoRoot, "Documentation", "manpages");

            if (Directory.Exists(objRoot))
            {
                Directory.Delete(objRoot, true);
            }

            Directory.CreateDirectory(objRoot);

            Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-sharedhost-debian.sh"),
                "--input", inputRoot, "--output", debFile, "--obj-root", objRoot, "--version", version, "-m", manPagesDir)
            .Execute()
            .EnsureSuccessful();
            return(c.Success());
        }
        public override bool Execute()
        {
            base.Execute();

            var buildVersion = new BuildVersion()
            {
                Major         = VersionMajor,
                Minor         = VersionMinor,
                Patch         = VersionPatch,
                ReleaseSuffix = ReleaseSuffix,
                CommitCount   = _commitCount
            };

            CommitCount         = buildVersion.CommitCountString;
            VersionSuffix       = buildVersion.VersionSuffix;
            SimpleVersion       = buildVersion.SimpleVersion;
            NugetVersion        = buildVersion.NuGetVersion;
            MsiVersion          = buildVersion.GenerateMsiVersion();
            VersionBadgeMoniker = Monikers.GetBadgeMoniker();

            return(true);
        }
Beispiel #21
0
        public static BuildTargetResult GenerateSharedFrameworkDeb(BuildTargetContext c)
        {
            var packageName = Monikers.GetDebianSharedFrameworkPackageName(c);
            var version     = c.BuildContext.Get <string>("SharedFrameworkNugetVersion");
            var inputRoot   = c.BuildContext.Get <string>("SharedFrameworkPublishRoot");
            var debFile     = c.BuildContext.Get <string>("SharedFrameworkInstallerFile");
            var objRoot     = Path.Combine(Dirs.Output, "obj", "debian", "sharedframework");

            if (Directory.Exists(objRoot))
            {
                Directory.Delete(objRoot, true);
            }

            Directory.CreateDirectory(objRoot);

            Cmd(Path.Combine(Dirs.RepoRoot, "scripts", "package", "package-sharedframework-debian.sh"),
                "--input", inputRoot, "--output", debFile, "--package-name", packageName, "-b", Monikers.SharedFxBrandName,
                "--framework-nuget-name", Monikers.SharedFrameworkName,
                "--framework-nuget-version", c.BuildContext.Get <string>("SharedFrameworkNugetVersion"),
                "--obj-root", objRoot, "--version", version)
            .Execute()
            .EnsureSuccessful();
            return(c.Success());
        }