コード例 #1
0
        /// <summary>
        /// Packages the file.
        /// </summary>
        /// <param name="artifact">Single file artifact.</param>
        /// <param name="workingDirectory">The working directory.</param>
        /// <param name="zip">if set to <c>true</c> [zip].</param>
        /// <param name="s3">Interface to S3</param>
        /// <param name="logger">Interface to logger.</param>
        /// <returns>A <see cref="ResourceUploadSettings"/></returns>
        public static async Task <ResourceUploadSettings> PackageFile(
            FileInfo artifact,
            string workingDirectory,
            bool zip,
            IPSS3Util s3,
            ILogger logger)
        {
            ResourceUploadSettings resourceToUpload;

            if (zip && string.Compare(
                    Path.GetExtension(artifact.Name),
                    ".zip",
                    StringComparison.OrdinalIgnoreCase) != 0)
            {
                // Zip if zipping is required and file is not already zipped
                var fileToUpload = Path.Combine(
                    workingDirectory,
                    $"{Path.GetFileNameWithoutExtension(artifact.Name)}.zip");

                resourceToUpload = new ResourceUploadSettings
                {
                    File      = new FileInfo(fileToUpload),
                    Hash      = artifact.MD5(),
                    HashMatch = true,
                    KeyPrefix = s3.KeyPrefix
                };

                if (await s3.ObjectChangedAsync(resourceToUpload))
                {
                    logger.LogVerbose($"Zipping '{artifact.FullName}' to {Path.GetFileName(fileToUpload)}");

                    // Compute hash before zipping as zip hashes not idempotent due to temporally changing attributes in central directory
                    Zipper.Zip(
                        new CrossPlatformZipSettings
                    {
                        Artifacts        = artifact.FullName,
                        CompressionLevel = 9,
                        LogMessage       = m => logger.LogVerbose(m),
                        LogError         = e => logger.LogError(e),
                        ZipFile          = fileToUpload,
                        TargetPlatform   = ZipPlatform.Unix
                    });

                    resourceToUpload.HashMatch = false;
                }
            }
            else
            {
                resourceToUpload = new ResourceUploadSettings {
                    File = artifact, Hash = artifact.MD5()
                };
                resourceToUpload.HashMatch = !await s3.ObjectChangedAsync(resourceToUpload);
            }

            return(resourceToUpload);
        }
コード例 #2
0
        /// <summary>
        /// Package a directory to a zip.
        /// </summary>
        /// <param name="artifact">Path to artifact directory.</param>
        /// <param name="workingDirectory">The working directory.</param>
        /// <param name="s3">Interface to S3</param>
        /// <param name="logger">Interface to logger.</param>
        /// <returns>A <see cref="ResourceUploadSettings"/></returns>
        public static async Task <ResourceUploadSettings> PackageDirectory(
            DirectoryInfo artifact,
            string workingDirectory,
            IPSS3Util s3,
            ILogger logger)
        {
            // Property value points to a directory, which must always be zipped.
            var fileToUpload = Path.Combine(workingDirectory, $"{artifact.Name}.zip");

            // Compute hash before zipping as zip hashes not idempotent due to temporally changing attributes in central directory
            var resourceToUpload = new ResourceUploadSettings
            {
                File      = new FileInfo(fileToUpload),
                Hash      = artifact.MD5(),
                HashMatch = true,
                KeyPrefix = s3.KeyPrefix
            };

            if (await s3.ObjectChangedAsync(resourceToUpload))
            {
                logger.LogVerbose($"Zipping directory '{artifact.FullName}' to {Path.GetFileName(fileToUpload)}");

                Zipper.Zip(
                    new CrossPlatformZipSettings
                {
                    Artifacts        = artifact.FullName,
                    CompressionLevel = 9,
                    LogMessage       = m => logger.LogVerbose(m),
                    LogError         = e => logger.LogError(e),
                    ZipFile          = fileToUpload,
                    TargetPlatform   = ZipPlatform.Unix
                });

                resourceToUpload.HashMatch = false;
            }

            return(resourceToUpload);
        }