release workflow configuration init

This commit is contained in:
Kingkor Roy Tirtho 2022-04-13 13:48:01 +06:00
parent d2b4a81029
commit 465135edae
4 changed files with 194 additions and 2 deletions

View File

@ -54,4 +54,4 @@ apk:
mv build/app/outputs/apk/release/app-release.apk build/Spotube-android-all-arch.apk mv build/app/outputs/apk/release/app-release.apk build/Spotube-android-all-arch.apk
gensums: gensums:
sh -c scripts/gensums.sh sh -c scripts/gensums.sh

View File

@ -1,11 +1,13 @@
pkgbase = spotube-bin pkgbase = spotube-bin
pkgdesc = A lightweight free Spotify crossplatform-client which handles playback manually, streams music using Youtube & no Spotify premium account is needed 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 pkgver = 2.0.0
pkgrel = 2 pkgrel = 3
url = https://github.com/KRTirtho/spotube/ url = https://github.com/KRTirtho/spotube/
arch = x86_64 arch = x86_64
license = BSD-4-Clause license = BSD-4-Clause
depends = libkeybinder3 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 source = https://github.com/KRTirtho/spotube/releases/download/v2.0.0/Spotube-linux-x86_64.tar.xz
md5sums = 55955fb42d7e3f960392d68d45e2030a md5sums = 55955fb42d7e3f960392d68d45e2030a

21
bin/verify-pkgbuild.dart Normal file
View File

@ -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");
}
});
}

169
scripts/pkgbuild2json.sh Executable file
View File

@ -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 <https://www.gnu.org/licenses/>.
usage() {
cat <<EOF >&2
usage: $0 <pkgbuild>
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 $*