nixpkgs/pkgs/applications/audio/castopod/update.sh
2023-09-25 10:17:44 +04:00

90 lines
1.8 KiB
Bash
Executable File

#! /usr/bin/env nix-shell
#! nix-shell -i bash -p curl jq
set -euo pipefail
nixpkgs="$(git rev-parse --show-toplevel)"
castopod_nix="$nixpkgs/pkgs/applications/audio/castopod/default.nix"
# https://www.meetup.com/api/guide/#p02-querying-section
query='
query allReleases($fullPath: ID!, $first: Int, $last: Int, $before: String, $after: String, $sort: ReleaseSort) {
project(fullPath: $fullPath) {
id
releases(
first: $first
last: $last
before: $before
after: $after
sort: $sort
) {
nodes {
...Release
__typename
}
__typename
}
__typename
}
}
fragment Release on Release {
id
name
tagName
releasedAt
createdAt
upcomingRelease
historicalRelease
assets {
links {
nodes {
id
name
url
directAssetUrl
linkType
__typename
}
__typename
}
__typename
}
__typename
}
'
variables='{
"fullPath": "adaures/castopod",
"first": 1,
"sort": "RELEASED_AT_DESC"
}'
post=$(cat <<EOF
{"query": "$(echo $query)", "variables": $(echo $variables)}
EOF
)
json="$(curl -s -X POST https://code.castopod.org/api/graphql \
-H 'Content-Type: application/json' \
-d "$post")"
echo "$json"
TAG=$(echo $json | jq -r '.data.project.releases.nodes[].tagName')
ASSET_URL=$(echo $json | jq -r '.data.project.releases.nodes[].assets.links.nodes[].url' | grep .tar.gz$)
CURRENT_VERSION=$(nix eval -f "$nixpkgs" --raw castopod.version)
VERSION=${TAG:1}
if [[ "$CURRENT_VERSION" == "$VERSION" ]]; then
echo "castopod is up-to-date: ${CURRENT_VERSION}"
exit 0
fi
SHA256=$(nix-prefetch-url "$ASSET_URL")
URL=$(echo $ASSET_URL | sed -e 's/[\/&]/\\&/g')
sed -e "s/version =.*;/version = \"$VERSION\";/g" \
-e "s/url =.*;/url = \"$URL\";/g" \
-e "s/sha256 =.*;/sha256 = \"$SHA256\";/g" \
-i "$castopod_nix"