mirror of
https://git.mirrors.martin98.com/https://github.com/actions/toolkit
synced 2026-04-23 13:18:05 +08:00
[Artifacts] Save md5 hash for each artifact upload (#1494)
* Hash artifact upload using md5 * Add imports * Small tweaks * PR feedback * PR Feedback
This commit is contained in:
@@ -3,6 +3,8 @@ import {TransferProgressEvent} from '@azure/core-http'
|
||||
import {ZipUploadStream} from './zip'
|
||||
import {getUploadChunkSize} from '../shared/config'
|
||||
import * as core from '@actions/core'
|
||||
import * as crypto from 'crypto'
|
||||
import * as stream from 'stream'
|
||||
|
||||
export interface BlobUploadResponse {
|
||||
/**
|
||||
@@ -14,6 +16,11 @@ export interface BlobUploadResponse {
|
||||
* The total reported upload size in bytes. Empty if the upload failed
|
||||
*/
|
||||
uploadSize?: number
|
||||
|
||||
/**
|
||||
* The MD5 hash of the uploaded file. Empty if the upload failed
|
||||
*/
|
||||
md5Hash?: string
|
||||
}
|
||||
|
||||
export async function uploadZipToBlobStorage(
|
||||
@@ -41,15 +48,31 @@ export async function uploadZipToBlobStorage(
|
||||
onProgress: uploadCallback
|
||||
}
|
||||
|
||||
let md5Hash: string | undefined = undefined
|
||||
const uploadStream = new stream.PassThrough()
|
||||
const hashStream = crypto.createHash('md5')
|
||||
|
||||
zipUploadStream.pipe(uploadStream) // This stream is used for the upload
|
||||
zipUploadStream.pipe(hashStream).setEncoding('hex') // This stream is used to compute a hash of the zip content that gets used. Integrity check
|
||||
|
||||
try {
|
||||
core.info('Beginning upload of artifact content to blob storage')
|
||||
|
||||
await blockBlobClient.uploadStream(
|
||||
zipUploadStream,
|
||||
uploadStream,
|
||||
bufferSize,
|
||||
maxBuffers,
|
||||
options
|
||||
)
|
||||
|
||||
core.info('Finished uploading artifact content to blob storage!')
|
||||
|
||||
hashStream.end()
|
||||
md5Hash = hashStream.read() as string
|
||||
core.info(`MD5 hash of uploaded artifact zip is ${md5Hash}`)
|
||||
|
||||
} catch (error) {
|
||||
core.info(`Failed to upload artifact zip to blob storage, error: ${error}`)
|
||||
core.warning(`Failed to upload artifact zip to blob storage, error: ${error}`)
|
||||
return {
|
||||
isSuccess: false
|
||||
}
|
||||
@@ -62,12 +85,9 @@ export async function uploadZipToBlobStorage(
|
||||
}
|
||||
}
|
||||
|
||||
core.info(
|
||||
`Successfully uploaded all artifact file content. Total reported size: ${uploadByteCount}`
|
||||
)
|
||||
|
||||
return {
|
||||
isSuccess: true,
|
||||
uploadSize: uploadByteCount
|
||||
uploadSize: uploadByteCount,
|
||||
md5Hash: md5Hash
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user