mirror of
https://github.com/microsoft/playwright.git
synced 2024-12-15 06:02:57 +03:00
a7e73cc389
By default, azure auto-computes MD5 for all blobs < 64MBs. However, many of our binaries exceed 64MB so md5 has to be computed manually. With this patch, MD5 hash will be set to all our CDN uploads and could be retrieved as `content-md5` header, e.g.: ```bash $ curl -I https://playwright.azureedge.net/builds/ffmpeg/1001/ffmpeg-win32.zip ``` Fixes #10173
79 lines
2.4 KiB
Bash
Executable File
79 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
set +x
|
|
|
|
trap "cd $(pwd -P)" EXIT
|
|
cd "$(dirname "$0")"
|
|
|
|
if [[ ($1 == '--help') || ($1 == '-h') ]]; then
|
|
echo "usage: $(basename "$0") [BLOB-PATH] [--check|ZIP-PATH]"
|
|
echo
|
|
echo "Upload ZIP-PATH to BLOB-PATH in 'builds' container."
|
|
echo
|
|
echo "--check pass |--check| as a second parameter instead of a zip-path to check for"
|
|
echo " existance of BLOB-PATH"
|
|
echo
|
|
echo "NOTE: \$AZ_ACCOUNT_KEY (azure account name) and \$AZ_ACCOUNT_NAME (azure account name)"
|
|
echo "env variables are required to upload builds to CDN."
|
|
exit 0
|
|
fi
|
|
|
|
if [[ (-z $AZ_ACCOUNT_KEY) || (-z $AZ_ACCOUNT_NAME) ]]; then
|
|
echo "ERROR: Either \$AZ_ACCOUNT_KEY or \$AZ_ACCOUNT_NAME environment variable is missing."
|
|
echo " 'Azure Account Name' and 'Azure Account Key' secrets that are required"
|
|
echo " to upload builds ot Azure CDN."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $# < 2 ]]; then
|
|
echo "not enought arguments!"
|
|
echo "try '$(basename "$0") --help' for more information"
|
|
exit 1
|
|
fi
|
|
|
|
BLOB_PATH="$1"
|
|
ZIP_PATH="$2"
|
|
|
|
if [[ ("$2" == '--check') ]]; then
|
|
EXISTS=$(az storage blob exists -c builds --account-key "$AZ_ACCOUNT_KEY" --account-name "$AZ_ACCOUNT_NAME" -n "$BLOB_PATH" --query "exists")
|
|
if [[ $EXISTS == "true" ]]; then
|
|
exit 0
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
GENERATE_MD5_HASH=$(cat <<EOF
|
|
const crypto = require('crypto');
|
|
const fs = require('fs');
|
|
const buffer = fs.readFileSync(process.argv[1]);
|
|
console.log(crypto.createHash('md5').update(buffer).digest('base64'));
|
|
EOF
|
|
)
|
|
|
|
MD5_HASH=$(node -e "${GENERATE_MD5_HASH}" "${ZIP_PATH}")
|
|
echo "MD5 hash: ${MD5_HASH}"
|
|
|
|
if ! [[ -f $ZIP_PATH ]]; then
|
|
echo "ERROR: ${ZIP_PATH} does not exist"
|
|
exit 1
|
|
fi
|
|
if [[ "${ZIP_PATH}" != *.zip && "${ZIP_PATH}" != *.gz ]]; then
|
|
echo "ERROR: ${ZIP_PATH} is not an archive (must have a .zip or .gz extension)"
|
|
exit 1
|
|
fi
|
|
if [[ $(uname) == MINGW* ]]; then
|
|
# Convert POSIX path to MSYS
|
|
WIN_PATH=$({ cd $(dirname "$ZIP_PATH") && pwd -W; } | sed 's|/|\\|g')
|
|
WIN_PATH="${WIN_PATH}\\$(basename "$ZIP_PATH")"
|
|
az storage blob upload -c builds --account-key "$AZ_ACCOUNT_KEY" --account-name "$AZ_ACCOUNT_NAME" -f "$WIN_PATH" -n "$BLOB_PATH" --content-md5 "${MD5_HASH}"
|
|
else
|
|
az storage blob upload -c builds --account-key "$AZ_ACCOUNT_KEY" --account-name "$AZ_ACCOUNT_NAME" -f "$ZIP_PATH" -n "$BLOB_PATH" --content-md5 "${MD5_HASH}"
|
|
fi
|
|
|
|
echo "UPLOAD SUCCESSFUL!"
|
|
echo "-- SRC: $ZIP_PATH"
|
|
echo "-- SIZE: $(du -h "$ZIP_PATH" | awk '{print $1}')"
|
|
echo "-- DST: $BLOB_PATH"
|
|
|