@@ -26,8 +26,7 @@ mkdir -p "${bundle_dir}" "${dist_dir}" "${cache_dir}"
2626STREAMLINK_PYTHON_ARCH=${STREAMLINK_PYTHON_ARCH:- win32}
2727STREAMLINK_PYTHON_VERSION=${STREAMLINK_PYTHON_VERSION:- 3.9.7}
2828STREAMLINK_CHECKOUT_DIR=" ${ROOT_DIR} /streamlink"
29- STREAMLINK_ASSETS_REPO=" ${STREAMLINK_ASSETS_REPO:- streamlink/ streamlink-assets} "
30- STREAMLINK_ASSETS_RELEASE=" ${STREAMLINK_ASSETS_RELEASE:- latest} "
29+ STREAMLINK_ASSETS_FILE=" ${STREAMLINK_CHECKOUT_DIR} /script/makeinstaller-assets.json"
3130PYTHON_PLATFORM=${STREAMLINK_PYTHON_ARCH}
3231
3332if [[ " ${STREAMLINK_PYTHON_ARCH} " == " amd64" ]]; then
@@ -71,50 +70,43 @@ cp "${ROOT_DIR}/NOTICE" "${bundle_dir}/NOTICE.txt"
7170cp -r " ${STREAMLINK_CHECKOUT_DIR} /win32/config" " ${bundle_dir} /streamlinkrc.template"
7271cp -r " ${STREAMLINK_CHECKOUT_DIR} /win32/THIRD-PARTY.txt" " ${bundle_dir} /THIRD-PARTY.txt"
7372
74- # download binary assets like ffmpeg and rtmpdump from the streamlink assets repo
75- # parse the data.json manifest, validate archives and copy specific files to their destination
76- log " Fetching assets data from \" ${STREAMLINK_ASSETS_REPO} \" (${STREAMLINK_ASSETS_RELEASE} )"
77- assets_release_data=$( curl -s --fail \
78- -H ' Accept: application/vnd.github.v3+json' \
79- -H " User-Agent: ${GITHUB_REPOSITORY:- " streamlink/streamlink" } " \
80- " https://api.github.com/repos/${STREAMLINK_ASSETS_REPO} /releases/${STREAMLINK_ASSETS_RELEASE} " \
81- || err " Could not fetch release data"
82- )
83- assets_release_tag=$( echo " ${assets_release_data} " | jq -r " .tag_name" )
84- assets_data=$( curl -s --fail \
85- -H " User-Agent: ${GITHUB_REPOSITORY:- " streamlink/streamlink" } " \
86- " https://raw.githubusercontent.com/${STREAMLINK_ASSETS_REPO} /${assets_release_tag} /data.json" \
87- || err " Could not fetch manifest data"
88- )
89-
90- log " Retrieving assets"
91- while read -r filename size url; do
92- if ! [[ -f " ${cache_dir} /${filename} " ]]; then
93- log " Downloading asset: ${filename} (${size} Bytes)"
94- curl -s -L --output " ${cache_dir} /${filename} " " ${url} "
95- fi
96- checksum=$( jq -r " [.[] | select(.filename == \" ${filename} \" )] | first | .checksum" <<< " ${assets_data}" )
97- echo " ${checksum} ${cache_dir} /${filename} " | sha256sum --check -
98- done < <( jq -r ' .assets[] | "\(.name) \(.size) \(.browser_download_url)"' <<< " ${assets_release_data}" )
99-
100- log " Assembling files directory"
101- TEMP=$( mktemp -d) && trap " rm -rf ${TEMP} " EXIT || exit 255
102- for (( i= $(jq length <<< "${assets_data} ") - 1 ; i >= 0 ; -- i)) ; do
103- read -r filename sourcedir targetdir \
104- < <( jq -r " .[$i ] | \" \(.filename) \(.sourcedir) \(.targetdir)\" " <<< " ${assets_data}" )
105- sourcedir=" ${TEMP} /${sourcedir} "
106- case " ${filename} " in
107- * .zip)
108- unzip " ${cache_dir} /${filename} " -d " ${TEMP} "
109- ;;
110- * )
111- sourcedir=" ${cache_dir} "
112- ;;
113- esac
114- while read -r from to; do
115- install -v -D -T " ${sourcedir} /${from} " " ${bundle_dir} /${targetdir} /${to} "
116- done < <( jq -r " .[$i ].files[] | \" \(.from) \(.to)\" " <<< " ${assets_data}" )
117- done
73+ ASSETS_DATA=$( cat " ${STREAMLINK_ASSETS_FILE} " )
74+
75+ assets_prepare () {
76+ log " Preparing assets"
77+ while read -r filename sha256 url; do
78+ if ! [[ -f " ${cache_dir} /${filename} " ]]; then
79+ log " Downloading asset: ${filename} "
80+ curl -L -o " ${cache_dir} /${filename} " " ${url} "
81+ fi
82+ echo " ${sha256} ${cache_dir} /${filename} " | sha256sum --check -
83+ done < <( jq -r ' .[] | "\(.filename) \(.sha256) \(.url)"' <<< " ${ASSETS_DATA}" )
84+ }
85+
86+ assets_assemble () {
87+ log " Assembling files directory"
88+ local tmp=$( mktemp -d) && trap " rm -rf '${tmp} '" RETURN || exit 255
89+ for (( i= $(jq length <<< "${ASSETS_DATA} ") - 1 ; i >= 0 ; -- i)) ; do
90+ read -r type filename sourcedir targetdir \
91+ < <( jq -r " .[$i ] | \" \(.type) \(.filename) \(.sourcedir) \(.targetdir)\" " <<< " ${ASSETS_DATA}" )
92+ case " ${type} " in
93+ zip)
94+ mkdir -p " ${tmp} /${i} "
95+ unzip " ${cache_dir} /${filename} " -d " ${tmp} /${i} "
96+ sourcedir=" ${tmp} /${i} /${sourcedir} "
97+ ;;
98+ * )
99+ sourcedir=" ${cache_dir} "
100+ ;;
101+ esac
102+ while read -r from to; do
103+ install -v -D -T " ${sourcedir} /${from} " " ${bundle_dir} /${targetdir} /${to} "
104+ done < <( jq -r " .[$i ].files[] | \" \(.from) \(.to)\" " <<< " ${ASSETS_DATA}" )
105+ done
106+ }
107+
108+ assets_prepare
109+ assets_assemble
118110
119111# remove the rtmpdump and ffmpeg template lines
120112sed -i " /^rtmpdump=.*/d" " ${bundle_dir} /streamlinkrc.template"
0 commit comments