zrythm builds (meta-repo used to build installers)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
5.6 KiB

#! /bin/bash
#
# Copyright (C) 2020 Alexandros Theodotou <alex at zrythm dot org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
distro=""
source zrythm-builds/scripts/common.sh.in
bundle_name="Zrythm $zrythm_pkg_ver"
echo "bundle name: $bundle_name"
get_product_name () {
os=$1
case "$os" in
"gnu-linux")
echo "$bundle_name (GNU/Linux)"
;;
"windows"*)
echo "$bundle_name (Windows 64bit)"
;;
"osx")
echo "$bundle_name (MacOS)"
;;
esac
}
sendowl_get () {
suffix=$1
sleep 2
curl -H "Accept: application/json" \
"https://$SENDOWL_KEY:$SENDOWL_SECRET@www.sendowl.com/api/v1/$suffix"
}
sendowl_post_or_put_json () {
suffix="$1"
json="$2"
protocol="$3"
sleep 2
>&2 echo "POST/PUT $suffix"
curl -X $protocol -H "Accept: application/json" \
-H "Content-type: application/json" \
-d "$json" \
"https://$SENDOWL_KEY:$SENDOWL_SECRET@www.sendowl.com/api/v1/$suffix" > out.log 2> err.log
}
sendowl_post_json () {
sendowl_post_or_put_json "$1" "$2" POST
}
sendowl_put_json () {
sendowl_post_or_put_json "$1" "$2" PUT
}
sendowl_post_form () {
suffix=$1
shift
sleep 2
>&2 echo "posting $1..."
cmd="curl -H \"Accept: application/json\" \
https://$SENDOWL_KEY:$SENDOWL_SECRET@www.sendowl.com/api/v1/$suffix "
for arg; do
cmd="$cmd -F \"$arg\""
done
eval "$cmd" > out.log 2> err.log
}
sendowl_delete () {
suffix=$1
sleep 2
>&2 echo "deleting $1..."
curl -X DELETE -H "Accept: application/json" \
"https://$SENDOWL_KEY:$SENDOWL_SECRET@www.sendowl.com/api/v1/$suffix" > out.log 2> err.log
}
# prefetch the installers not on this machine
prefetch () {
osx_pkg_name="$(get_package_filename osx)"
windows_pkg_name="$(get_package_filename windows10-msys)"
while ! [ -f "zrythm-installer/$osx_pkg_name" -a \
-f "zrythm-installer/$windows_pkg_name" ]; do
>&2 echo "$osx_pkg_name and $windows_pkg_name don't exist. fetching..."
$scp_cmd \
"$remote_ip:$remote_home/packages/osx/$osx_pkg_name" \
"zrythm-installer/$osx_pkg_name" > out.log 2> err.log || true
$scp_cmd \
"$remote_ip:$remote_home/packages/windows10-msys/$windows_pkg_name" \
"zrythm-installer/$windows_pkg_name" > out.log 2> err.log || true
sleep 12
done
}
# creates a product and returns the json
create_product ()
{
os=$1
sendowl_post_form \
"products" \
"product[name]=$(get_product_name $os)" \
"product[product_type]=digital" \
"product[price]=5.00" \
"product[attachment]=@$(pwd)/zrythm-installer/$(get_package_filename $os)" | jq '.product'
}
# creates or updates a product for the given type
# and returns the product ID
create_or_update_product () {
os=$1
all_products="$(sendowl_get products)"
this_product="null"
i=0
while true; do
cur_product=$(echo $all_products | \
jq ".[$i].product" || echo "null")
if [ "$cur_product" = "null" ]; then
break
fi
if [ "$(echo "$cur_product" | jq '.name' || \
echo null)" = \
"\"$(get_product_name $os)\"" ]; then
this_product="$cur_product"
break
fi
((i++))
done
# delete product if it exists
if [ "$this_product" != "null" ]; then
product_id="$(echo "$this_product" | jq '.id')"
sendowl_delete "products/$product_id"
fi
# create one
this_product="$(create_product $os)"
echo "$this_product" | jq '.id'
}
update_or_create_bundle () {
# create bundles on releases manually
return
gnu_linux_product_id=$1
osx_product_id=$2
windows_product_id=$3
all_bundles="$(sendowl_get packages)"
this_bundle="null"
i=0
while true; do
cur_bundle="$(echo "$all_bundles" | \
jq ".[$i].package" || echo "null")"
if [ "$cur_bundle" = "null" ]; then
break
fi
if [ "$(echo "$cur_bundle" | jq '.name' || echo "null")" = \
"\"$bundle_name\"" ]; then
this_bundle="$cur_bundle"
break
fi
((i++))
done
# prepare json
json="\
{ \
\"package\": { \
\"name\": \"$bundle_name\", \
\"price\": \"5.00\", \
\"price_is_minimum\": \"true\" \
\"components\": { \
\"product_ids\": \"[$gnu_linux_product_id, $osx_product_id, $windows_product_id]\" \
} \
} \
}"
# create or update bundle
if [ "$this_bundle" != "null" ]; then
# update
bundle_id="$(echo "$this_bundle" | jq '.id')"
sendowl_put_json "packages/$bundle_id" "$json"
else
# create
this_bundle="$(sendowl_post_json packages "$json" | \
jq '.package')"
fi
echo "$this_bundle" | jq '.id'
}
# fetch missing installers
echo "prefetching installers..."
prefetch
echo "done"
# create or update products
echo "creating products..."
gnu_linux_product_id="$(create_or_update_product "gnu-linux")"
osx_product_id="$(create_or_update_product "osx")"
windows_product_id="$(create_or_update_product "windows10-msys")"
echo "done"
echo "created products $gnu_linux_product_id, $osx_product_id and $windows_product_id"
bundle_id="$(update_or_create_bundle \
"$gnu_linux_product_id" \
"$osx_product_id" \
"$windows_product_id")"