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