diff --git a/Makefile b/Makefile index 0a7d7e2f..e317babc 100644 --- a/Makefile +++ b/Makefile @@ -54,4 +54,4 @@ apk: mv build/app/outputs/apk/release/app-release.apk build/Spotube-android-all-arch.apk gensums: - sh -c scripts/gensums.sh + sh -c scripts/gensums.sh \ No newline at end of file diff --git a/aur-struct/.SRCINFO b/aur-struct/.SRCINFO index 81167820..137357d4 100644 --- a/aur-struct/.SRCINFO +++ b/aur-struct/.SRCINFO @@ -1,11 +1,13 @@ pkgbase = spotube-bin pkgdesc = A lightweight free Spotify crossplatform-client which handles playback manually, streams music using Youtube & no Spotify premium account is needed pkgver = 2.0.0 - pkgrel = 2 + pkgrel = 3 url = https://github.com/KRTirtho/spotube/ arch = x86_64 license = BSD-4-Clause depends = libkeybinder3 + depends = gst-plugins-good + depends = webkit2gtk source = https://github.com/KRTirtho/spotube/releases/download/v2.0.0/Spotube-linux-x86_64.tar.xz md5sums = 55955fb42d7e3f960392d68d45e2030a diff --git a/bin/verify-pkgbuild.dart b/bin/verify-pkgbuild.dart new file mode 100644 index 00000000..9b23ae99 --- /dev/null +++ b/bin/verify-pkgbuild.dart @@ -0,0 +1,21 @@ +import 'dart:convert'; +import 'dart:io'; + +void main() { + Process.run("sh", ["-c", '"./scripts/pkgbuild2json.sh aur-struct/PKGBUILD"']) + .then((result) { + try { + final pkgbuild = jsonDecode(result.stdout); + if (pkgbuild["version"] != + Platform.environment["RELEASE_VERSION"]?.substring(1)) { + throw Exception( + "PKGBUILD version doesn't match current RELEASE_VERSION"); + } + if (pkgbuild["release"] != "1") { + throw Exception("In new releases pkgrel should be 1"); + } + } catch (e) { + print("[Failed to parse PKGBUILD] $e"); + } + }); +} diff --git a/scripts/pkgbuild2json.sh b/scripts/pkgbuild2json.sh new file mode 100755 index 00000000..605879c8 --- /dev/null +++ b/scripts/pkgbuild2json.sh @@ -0,0 +1,169 @@ +#!/bin/bash + +# pkgbuild2json: Parses and converts Arch Linux PKGBUILDS into JSON +# Copyright (C) 2020 Michael Connor Buchan +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser 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 General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +usage() { + cat <&2 +usage: $0 +Convert the metadata in a pkgbuild file to json. +Positional Arguments: + pkgbuild: Path to a PKGBUILD file. +EOF +} + +error() { + echo "$0: error: $*" >&2 + exit 1 +} + +# Trim whitespace from strings. +trim() { + echo -e "${1}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' +} + +# Convert a Bash array to a JSON array. +toArray() { + # Make $arr a reference to the variabl named by $1 +declare -n arr="$1" + if [ "$arr" = "" ]; then + # Variable is empty + echo '[]' + else + printf "%s\n" "${arr[@]}" | jq -R . | jq -s . + fi +} + +main() { + if [ "$#" -lt 1 ]; then + usage + exit 1 + elif [ -f "$1" ] && [ -r "$1" ]; then + PKGBUILD="$1" + # PKGBUILD is readable + # Read the maintainer info (if any) + declare -a maintainers=() + while read maintainer_text; do + maintainer_name="$(echo "$maintainer_text" | cut -d: -f2 | cut -d '<' -f1)" + maintainer_email="$(echo "$maintainer_text" | cut -d '<' -f2 | cut -d '>' -f1)" + maintainers+=("$(jq -n \ + --arg name "$(trim "$maintainer_name")" \ + --arg email "$(trim "$maintainer_email")" \ + '{"name": $name, "email": $email}')") + done < <(grep '\# Maintainer: .\+ <.\+@.\+>' "$PKGBUILD") + if [ "${#maintainers[@]}" -gt 0 ]; then + maintainers_json="$(printf "%s\n" "${maintainers[@]}" | jq -s .)" + else + maintainers_json='[]' + fi + + # Source the PKGBUILD to get the rest of the variables + source "$PKGBUILD" || error "Failed to source $1." + + # Convert the arrays to json + pkg_name="$(toArray pkgname)" + pkg_arch="$(toArray arch)" + pkg_license="$(toArray license)" + pkg_groups="$(toArray groups)" + pkg_depends="$(toArray depends)" + pkg_makedepends="$(toArray makedepends)" + pkg_checkdepends="$(toArray checkdepends)" + pkg_optdepends="$(toArray optdepends)" + pkg_provides="$(toArray provides)" + pkg_conflicts="$(toArray conflicts)" + pkg_replaces="$(toArray replaces)" + pkg_backup="$(toArray backup)" + pkg_options="$(toArray options)" + pkg_source="$(toArray source)" + pkg_noextract="$(toArray noextract)" + pkg_md5sums="$(toArray md5sums)" + pkg_sha1sums="$(toArray sha1sums)" + pkg_sha224sums="$(toArray sha224sums)" + pkg_sha256sums="$(toArray sha224sums)" + pkg_sha512sums="$(toArray sha512sums)" + pkg_b2sums="$(toArray b2sums)" + pkg_validpgpkeys="$(toArray validpgpkeys)" + +# Output the converted JSON +jq -n \ + --argjson maintainers "$maintainers_json" \ + --argjson name "$pkg_name" \ + --arg version "$pkgver" \ + --arg release "$pkgrel" \ + --arg epoch "$epoch" \ + --arg desc "$pkgdesc" \ + --argjson arch "$pkg_arch" \ + --argjson license "$pkg_license" \ + --arg url "$url" \ + --argjson groups "$pkg_groups" \ + --argjson depends "$pkg_depends" \ + --argjson makedepends "$pkg_makedepends" \ + --argjson checkdepends "$pkg_checkdepends" \ + --argjson optdepends "$pkg_optdepends" \ + --argjson provides "$pkg_provides" \ + --argjson conflicts "$pkg_conflicts" \ + --argjson replaces "$pkg_replaces" \ + --argjson backup "$pkg_backup" \ + --argjson options "$pkg_options" \ + --arg install "$install" \ + --arg changelog "$changelog" \ + --argjson source "$pkg_source" \ + --argjson noextract "$pkg_noextract" \ + --argjson md5sums "$pkg_md5sums" \ + --argjson sha1sums "$pkg_sha1sums" \ + --argjson sha224sums "$pkg_sha224sums" \ + --argjson sha256sums "$pkg_sha256sums" \ + --argjson sha512sums "$pkg_sha512sums" \ + --argjson b2sums "$pkg_b2sums" \ + --argjson validpgpkeys "$pkg_validpgpkeys" \ + '{ + "maintainers": $maintainers, + "name": $name, + "version": $version, + "release": $release, + "epoch": $epoch, + "desc": $desc, + "arch": $arch, + "url": $url, + "license": $license, + "groups": $groups, + "depends": $depends, + "makedepends": $makedepends, + "checkdepends": $checkdepends, + "optdepends": $optdepends, + "provides": $provides, + "conflicts": $conflicts, + "replaces": $replaces, + "backup": $backup, + "options": $options, + "install": $install, + "changelog": $changelog, + "source": $source, + "noextract": $noextract, + "md5sums": $md5sums, + "sha1sums": $sha1sums, + "sha224sums": $sha224sums, + "sha256sums": $sha256sums, + "sha512sums": $sha512sums, + "b2sums": $b2sums, + "validpgpkeys": $validpgpkeys + }' + else + error "$1 is not a readable file." + fi +} + +main $* \ No newline at end of file