Update release.sh

This commit is contained in:
topjohnwu 2025-06-05 11:00:27 -07:00
parent 83426f7f36
commit 48d9fc24eb

View File

@ -23,7 +23,7 @@ grep_prop() {
sed -n "$REGEX" $FILES | head -n 1 sed -n "$REGEX" $FILES | head -n 1
} }
enable_version_config() { ensure_config() {
# Make sure version is not commented out and exists # Make sure version is not commented out and exists
sed -i "s:^# version=:version=:g" $CONFIG sed -i "s:^# version=:version=:g" $CONFIG
if ! grep -qE '^version=' $CONFIG; then if ! grep -qE '^version=' $CONFIG; then
@ -38,57 +38,72 @@ disable_version_config() {
sed -i "s:^version=:# version=:g" $CONFIG sed -i "s:^version=:# version=:g" $CONFIG
} }
# $1 = tag
update_readme_stable() {
sed -i "s:badge/Magisk-v.*:badge/Magisk-${1}-blue)](https\://github.com/topjohnwu/Magisk/releases/tag/$1):g" $README
}
# $1 = tag
update_readme_beta() {
sed -i "s:badge/Magisk%20Beta.*:badge/Magisk%20Beta-${1}-blue)](https\://github.com/topjohnwu/Magisk/releases/tag/$1):g" $README
}
# $1 = tag # $1 = tag
update_readme_canary() { update_readme_canary() {
sed -i "s:badge/Magisk-Canary.*:badge/Magisk-Canary-red)](https\://github.com/topjohnwu/Magisk/releases/tag/$1):g" $README sed -i "s:badge/Magisk-Canary.*:badge/Magisk-Canary-red)](https\://github.com/topjohnwu/Magisk/releases/tag/$1):g" $README
} }
# $1 = tag
update_readme_beta() {
update_readme_canary $1
sed -i "s:badge/Magisk%20Beta.*:badge/Magisk%20Beta-${1}-blue)](https\://github.com/topjohnwu/Magisk/releases/tag/$1):g" $README
}
# $1 = tag
update_readme_stable() {
update_readme_beta $1
sed -i "s:badge/Magisk-v.*:badge/Magisk-${1}-blue)](https\://github.com/topjohnwu/Magisk/releases/tag/$1):g" $README
}
# $1 = tag
# $2 = file name
gen_link() { gen_link() {
echo "https://github.com/topjohnwu/Magisk/releases/download/$1/$2" echo "https://github.com/topjohnwu/Magisk/releases/download/$1/$2"
} }
update_canary_json() { # $1 = version code
local ver=$(grep_prop version $CONFIG) is_canary() {
local code=$(grep_prop magisk.versionCode $GCONFIG) [ $(($1 % 100)) -ne 0 ]
local tag="canary-$code"
local json
json=$MAGISK_FILES/canary.json
jq ".magisk.version=\"$ver\"|.magisk.versionCode=\"$code\"|
.magisk.link=\"$(gen_link $tag app-release.apk)\"|
.magisk.note=\"$(gen_link $tag notes.md)\"" $json > ${json}.tmp
mv ${json}.tmp $json
json=$MAGISK_FILES/debug.json
jq ".magisk.version=\"$ver\"|.magisk.versionCode=\"$code\"|
.magisk.link=\"$(gen_link $tag app-debug.apk)\"|
.magisk.note=\"$(gen_link $tag notes.md)\"" $json > ${json}.tmp
mv ${json}.tmp $json
} }
# $1 = json path # $1 = json path
update_release_json() { # $2 = apk name
update_json() {
local json=$1 local json=$1
local apk=$2
local ver=$(grep_prop version $CONFIG) local ver=$(grep_prop version $CONFIG)
local code=$(grep_prop magisk.versionCode $GCONFIG) local code=$(grep_prop magisk.versionCode $GCONFIG)
local tag
if is_canary $code; then
tag="canary-$code"
else
tag="v$ver"
fi
jq ".magisk.version=\"$ver\"|.magisk.versionCode=\"$code\"| jq ".magisk.version=\"$ver\"|.magisk.versionCode=\"$code\"|
.magisk.link=\"$(gen_link v${ver} Magisk-v${ver}.apk)\"| .magisk.link=\"$(gen_link $tag $apk)\"|
.magisk.note=\"https://topjohnwu.github.io/Magisk/releases/${code}.md\"" $json > ${json}.tmp .magisk.note=\"$(gen_link $tag notes.md)\"" $json > ${json}.tmp
mv ${json}.tmp $json mv ${json}.tmp $json
} }
build_canary() { update_canary_json() {
update_json $MAGISK_FILES/canary.json app-release.apk
update_json $MAGISK_FILES/debug.json app-debug.apk
}
update_beta_json() {
update_json $MAGISK_FILES/canary.json Magisk-v${ver}.apk
update_json $MAGISK_FILES/debug.json app-debug.apk
cp -vf $MAGISK_FILES/canary.json $MAGISK_FILES/beta.json
}
update_stable_json() {
update_beta_json
cp -vf $MAGISK_FILES/beta.json $MAGISK_FILES/stable.json
}
bump_canary_version() {
# Update version code # Update version code
local code=$(grep_prop magisk.versionCode $GCONFIG) local code=$(grep_prop magisk.versionCode $GCONFIG)
code=$((code + 1)) code=$((code + 1))
@ -105,47 +120,35 @@ build_canary() {
# Update version name # Update version name
local ver=$(git rev-parse --short=8 HEAD) local ver=$(git rev-parse --short=8 HEAD)
sed -i "s:version=.*:version=${ver}:g" $CONFIG sed -i "s:version=.*:version=${ver}:g" $CONFIG
sed -i "s:## Magisk (.*:## Magisk (${ver}) (${code}):g" $NOTES sed -i "1s:.*:## Magisk (${ver}) (${code}):" $NOTES
# Update and commit JSON
update_canary_json update_canary_json
# Commit json files
cd $MAGISK_FILES cd $MAGISK_FILES
git add -u . git add -u .
git status git status
git commit -m "Update Canary Channel: Upstream to $ver" git commit -m "Update Canary Channel: Upstream to $ver"
cd $CWD cd $CWD
# Build
$BUILDCMD clean
$BUILDCMD all
$BUILDCMD -r all
} }
# $1 = ver, $2 = stable? # $1 = ver, $2 = stable?
build_release() { set_version() {
# Update version configs
local ver=$1 local ver=$1
local stable=$2 local stable=$2
local code=$(echo - | awk "{ print $ver * 1000 }") local code=$(echo - | awk "{ print $ver * 1000 }")
local tag="v$ver" local tag="v$ver"
sed -i "s:versionCode=.*:versionCode=${code}:g" $GCONFIG sed -i "s:versionCode=.*:versionCode=${code}:g" $GCONFIG
sed -i "s:version=.*:version=${ver}:g" $CONFIG sed -i "s:version=.*:version=${ver}:g" $CONFIG
sed -i "1s:.*:## $(date +'%Y.%-m.%-d') Magisk v$ver:" $NOTES
# Update and commit JSON
if $stable; then if $stable; then
update_readme_stable $tag update_readme_stable $tag
update_readme_beta $tag update_stable_json
update_release_json $MAGISK_FILES/stable.json
cp -vf $MAGISK_FILES/stable.json $MAGISK_FILES/beta.json
else else
update_readme_beta $tag update_readme_beta $tag
update_release_json $MAGISK_FILES/beta.json update_beta_json
fi fi
cd $MAGISK_FILES
git add -u .
git status
git commit -m "Release Magisk v$ver"
cd $CWD
# Commit version code changes # Commit version code changes
git add -u . git add -u .
@ -153,24 +156,46 @@ build_release() {
git commit -m "Release Magisk v$ver" -m "[skip ci]" git commit -m "Release Magisk v$ver" -m "[skip ci]"
git tag $tag git tag $tag
# Build # Commit json files
cd $MAGISK_FILES
git add -u .
git status
git commit -m "Release Magisk v$ver"
cd $CWD
}
build_apk() {
$BUILDCMD clean $BUILDCMD clean
$BUILDCMD all
$BUILDCMD -r all $BUILDCMD -r all
} }
stable() { build_canary() {
[ -z $1 ] && exit 1 bump_canary_version
local ver=$1 build_apk
build_release $ver true
} }
beta() { # $1 = ver
build_beta() {
[ -z $1 ] && exit 1 [ -z $1 ] && exit 1
local ver=$1 local ver=$1
build_release $ver false set_version $ver false
build_apk
} }
pub() { # $1 = ver
build_stable() {
[ -z $1 ] && exit 1
local ver=$1
set_version $ver true
build_apk
}
upload() {
# Verify pattern
[[ "$1" =~ canary|beta|stable ]]
local type=$1
gh auth status gh auth status
local latest_tag=$(git describe --abbrev=0 --tags) local latest_tag=$(git describe --abbrev=0 --tags)
@ -186,32 +211,43 @@ pub() {
git push origin master git push origin master
git push --tags git push --tags
if [ $(($code % 100)) -ne 0 ]; then # Prepare release notes
tag="canary-$code" tail -n +3 $NOTES > release.md
title="Magisk ($ver) ($code)"
# Assert tag format case $type in
[ $latest_tag = $tag ] "canary" )
tag="canary-$code"
title="Magisk ($ver) ($code)"
# Publish release # Assert tag format
tail -n +3 $NOTES > release.md [ $latest_tag = $tag ]
gh release create --verify-tag $tag -p -t "$title" -F release.md $out/app-release.apk $out/app-debug.apk $NOTES
else
tag="v$ver"
title="Magisk v$ver"
# Assert tag format # Publish release
[ $latest_tag = $tag ] gh release create --verify-tag $tag -p -t "$title" -F release.md $out/app-release.apk $out/app-debug.apk $NOTES
;;
"beta|stable" )
tag="v$ver"
title="Magisk v$ver"
# Publish release # Assert tag format
tail -n +3 docs/releases/$code.md > release.md [ $latest_tag = $tag ]
local release_apk="Magisk-v${ver}.apk"
cp $out/app-release.apk $release_apk # Publish release
gh release create --verify-tag $tag -t "$title" -F release.md $release_apk local release_apk="Magisk-v${ver}.apk"
rm -f $release_apk cp $out/app-release.apk $release_apk
gh release create --verify-tag $tag -p -t "$title" -F release.md $release_apk $out/app-debug.apk $NOTES
rm -f $release_apk
;;
esac
# If publishing stable, make it not prerelease and explicitly latest
if [ $type = "stable" ]; then
gh release edit $tag --prerelease=false --latest
fi fi
rm -f release.md rm -f release.md
# Finally upload jsons
cd $MAGISK_FILES cd $MAGISK_FILES
git push origin master git push origin master
cd $CWD cd $CWD
@ -236,12 +272,12 @@ fi
git pull git pull
trap disable_version_config EXIT trap disable_version_config EXIT
enable_version_config ensure_config
case $1 in case $1 in
"canary" ) build_canary ;; "canary" ) build_canary ;;
"stable" ) stable $2 ;; "beta" ) build_beta $2 ;;
"beta" ) beta $2 ;; "stable" ) build_stable $2 ;;
"pub" ) pub ;; "upload" ) upload $2 ;;
"revert" ) revert ;; "revert" ) revert ;;
* ) exit 1 ;; * ) exit 1 ;;
esac esac