Add RuneLite-specific scripts

master
Jordan Atwood 2 years ago
parent 992b50e382
commit d7c65303dd
Signed by: nightfirecat
GPG Key ID: 615A619C2D73A6DF
  1. 98
      src/.bin/open-runelite.sh
  2. 175
      src/.bin/runelite-blog.sh

@ -0,0 +1,98 @@
#!/usr/bin/env bash
###
### Quick-start build-and-run script for RuneLite, merging dev branches for a
### custom build.
###
# OPTIONS
RUNELITE_REPO_DIR="$HOME/Documents/git/runelite"
BRANCHES_TO_MERGE=(
add-tablecomponent-to-overlay-ui
# dev-update-opponent-info-table-bounty-target
lookup-players-that-despawn
#differentiate-gauntlet-loots # conflicts with discord sub-regions
charlie-texts
discord-sub-regions
toa-consumables
multi-step-cryptic-spade
quest-speedrunning-widget-overlays
)
MAX_AGE_BEFORE_REBUILD="$(( 24 * 60 * 60 ))" # 1 day
UPSTREAM_REMOTE='upstream'
UPSTREAM_BRANCH='master'
for branch in "${BRANCHES_TO_MERGE[@]}"; do
if grep -qE '^internal' <<< "$branch"; then
UPSTREAM_REMOTE='internal-upstream'
UPSTREAM_BRANCH='internal'
break
fi
done
# Show exit output on script completion
# On script error, wait for user input to close
function orl_exit {
exit_code=$?
if [ "$exit_code" -eq 0 ]; then
echo 'Running runelite!'
sleep 3
else
echo 'An error occurred while running command'
echo " ${BASH_COMMAND}"
echo 'Press any key to exit...'
read -n1 -r
fi
}
trap orl_exit EXIT
RUNELITE_TARGET_COMMIT_FILENAME='runelite-client/target/commit'
function build_client {
# Update local dev branch and build
git checkout dev || git checkout -b dev upstream/master
git reset --hard upstream/master
git merge --no-gpg-sign --no-edit "${BRANCHES_TO_MERGE[@]}" || exit 1
mvn clean package -DskipTests -U || exit 1
git checkout -
echo "$UPSTREAM_MASTER_COMMIT" > "$RUNELITE_TARGET_COMMIT_FILENAME"
}
set -e
# go to repo
cd "$RUNELITE_REPO_DIR"
# check if jar is up-to-date with latest upstream tag
git fetch -q "$UPSTREAM_REMOTE"
UPSTREAM_MASTER_COMMIT="$(git rev-parse "$UPSTREAM_REMOTE"/"$UPSTREAM_BRANCH")"
# TODO: use `git describe [--abbrev=0]` ? (may not work due to point releases)
# TODO: add --exclude to ^ to avoid describing point releases (TODO: don't do that--we need point release for latest hub plugins)
PREVIOUS_TAG="$(git tag -l | grep -v 'internal' | sort -rV | head -n 1 | sed -r -e 's/.*-(.+)/\1/')"
MAJOR_VERSION="$(cut -d '.' -f 1 <<< "$PREVIOUS_TAG")"
MINOR_VERSION="$(cut -d '.' -f 2 <<< "$PREVIOUS_TAG")"
PATCH_VERSION="$(cut -d '.' -f 3 <<< "$PREVIOUS_TAG")"
NEXT_VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.$((PATCH_VERSION + 1))"
SHADED_JAR=runelite-client/target/client-"${NEXT_VERSION}"-SNAPSHOT-shaded.jar
# build a new client if one doesn't already exist or if the current shaded jar
# is older than the max rebuild age and is behind upstream master's commit
if ! [ -f "$SHADED_JAR" ]; then
echo "No build exists for current snapshot; rebuilding"
build_client
else
SHADED_JAR_MTIME="$(stat -c %Y "$SHADED_JAR")"
CURRENT_MTIME="$(date +%s)"
if [ "$(( "$CURRENT_MTIME" - "$SHADED_JAR_MTIME" ))" -gt "$MAX_AGE_BEFORE_REBUILD" ]; then
if ! [ -f "$RUNELITE_TARGET_COMMIT_FILENAME" ] \
|| [ "$UPSTREAM_MASTER_COMMIT" != "$(cat "$RUNELITE_TARGET_COMMIT_FILENAME")" ]; then
echo "Current built client is old enough for rebuild and master has new commits; rebuilding"
build_client
else
echo "Current built client is old enough for rebuild, but there no new commits to build; skipping rebuild"
fi
else
echo "Current built client is not beyond max age before rebuild; skipping rebuild"
fi
fi
# run the dev client
nohup java -ea -Drunelite.pluginhub.version="${PREVIOUS_TAG}" -jar runelite-client/target/client-"${NEXT_VERSION}"-SNAPSHOT-shaded.jar --developer-mode --debug </dev/null >/dev/null 2>&1 &

@ -0,0 +1,175 @@
#!/usr/bin/env bash
###
### Helper script for quickly setting up a git branch and directory/file
### structure for creating a new release post for runelite.net
###
set -e
description() {
echo 'Creates a new branch and file structure for the weekly release blog post in the runelite.net repository'
}
helpdoc() {
echo
echo "usage: $(basename "$0") [<options>]"
echo
echo 'options:'
echo ' -a <author> first name to use, defaults to `git config user.name'"'"
echo ' -f <version> version number to generate shortlog from, defaults to previous'
echo ' major release'
echo ' -n <version> version number to increment to, defaults to a patch version'
echo ' bump'
echo ' -p <path> path of runelite repository relative to runelite.net repo,'
echo ' defaults to `../runelite'"'"
echo ' -t mark the blog post for today'"'"'s date, not tomorrow'"'"'s date'
}
# process args
while getopts ':a:f:n:p:th' arg; do
case "$arg" in
a)
blog_author="$OPTARG"
;;
f)
previous_version="$OPTARG"
;;
h)
description
helpdoc
exit 0
;;
n)
version="$OPTARG"
;;
p)
runelite_repo_path="$OPTARG"
;;
t)
blog_date='today'
;;
\?)
echo "Invalid option: ${OPTARG}" >&2
helpdoc
exit 1
;;
:)
echo "Option -${OPTARG} requires an argument." >&2
helpdoc
exit 1
;;
esac
done
# remove args processed with getopts
shift $(( OPTIND-1 ))
# ensure shell is in runelite.net repo, navigate to root dir if necessary, fetch upstream
if ! (git remote -v | grep -q -E 'upstream[[:space:]]+git@github.com:runelite/runelite.net.git'); then
echo 'You do not appear to be in a clone of the runelite.net repository!' >&2
exit 1
fi
cd "$(git rev-parse --show-toplevel)"
git fetch -q upstream
# ensure runelite repo path is correct, fetch upstream in runelite repo
default_path='../runelite'
repo_path="${runelite_repo_path:-$default_path}"
if ! (git -C "$repo_path" remote -v | grep -q -E 'upstream[[:space:]]+git@github.com:runelite/runelite.git'); then
echo "The repo path '${repo_path}' does not appear to be a clone of the runelite repository!" >&2
exit 1
fi
(git -C "$repo_path" git fetch -q upstream) >/dev/null
# validate versions
latest_tag="$(git -C "$repo_path" tag -l | grep -v 'internal' | sort -rV | head -n 1 | sed -r -e 's/(.*-)([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+).*/\1\2/')"
LATEST_TAG_VERSION="${latest_tag##*-}"
if [ -z "$previous_version" ]; then
: # no-op
elif ! [[ "$previous_version" =~ ^[1-9][[:digit:]]*\.([[:digit:]]|[1-9][[:digit:]]*)\.([[:digit:]]|[1-9][[:digit:]]*)(\.([[:digit:]]|[1-9][[:digit:]]*))?$ ]]; then
echo "Invalid previous version number: '$previous_version'" >&2
helpdoc
exit 1
else
latest_tag="runelite-parent-${previous_version}"
fi
if [ -z "$version" ]; then
patch_number="${LATEST_TAG_VERSION##*.}"
version="${LATEST_TAG_VERSION%.*}.$((patch_number + 1))"
elif ! [[ "$version" =~ ^[1-9][[:digit:]]*\.[1-9][[:digit:]]*\.[1-9][[:digit:]]*$ ]]; then
echo "Invalid version number: '$version'" >&2
helpdoc
exit 1
fi
NEW_VERSION="$version"
# get data, define vars
git_username_trimmed="$(git config user.name | cut -d ' ' -f '1')"
default_date='+1 day'
BLOG_DATE="${blog_date:-$default_date}"
BLOG_AUTHOR="${blog_author:-$git_username_trimmed}"
git_shortlog_options=(--no-merges --perl-regexp '--author=^((?!Runelite auto updater|RuneLite Cache-Code Autoupdater).*)$' "${latest_tag}"..upstream/master)
SHORTLOG_SINCE_LAST_TAG="$(git -C "$repo_path" --no-pager shortlog "${git_shortlog_options[@]}")"
NUMBER_OF_CONTRIBUTORS="$(git -C "$repo_path" --no-pager shortlog -s "${git_shortlog_options[@]}" | wc -l)"
BLOG_POST_DATE="$(date -d "${BLOG_DATE} 10:00am" +'%Y-%m-%d-%H-%M')"
# create new branch, deleting branch of same name if it exists
git checkout master >/dev/null 2>&1
if git branch | grep -q "$NEW_VERSION"; then
git branch -D "$NEW_VERSION" >/dev/null 2>&1
fi
(git pull --ff-only && git checkout -b "$NEW_VERSION") >/dev/null 2>&1
# create dirs and files
relative_img_path="img/blog/${NEW_VERSION}-Release"
img_name="placeholder.png"
IMAGE_DIR="public/${relative_img_path}/${img_name}"
PLACEHOLDER_IMAGE_PATH="${relative_img_path}/${img_name}"
BLOG_FILE_PATH="src/_posts/${BLOG_POST_DATE}-${NEW_VERSION}-Release.md"
install -Dv /dev/null "${IMAGE_DIR}" >/dev/null
tee "${BLOG_FILE_PATH}" >/dev/null 2>&1 <<EOF
---
title: '${NEW_VERSION} Release'
description: 'TODO: A major feature, an important bug fix, and other important news'
author: ${BLOG_AUTHOR}
---
TODO: The RuneLite plugin now has a new major feature. Thanks to [@Test](https://github.com/test) for
this contribution.
TODO: ![Alt text for this new feature](/${PLACEHOLDER_IMAGE_PATH})
TODO: Another plugin has a new feature. Thanks to [@Example](https://github.com/example) for this
contribution.
TODO: ![Alt text for this new feature](/${PLACEHOLDER_IMAGE_PATH})
TODO: Other information, such as more major features (with or without images), important news, or other
information such as removal of features/plugins can be placed here.
There are also several smaller improvements and bug fixes, including:
- TODO: use real changes below
- The RuneLite plugin will no longer cause the client to crash
- Obstacle highlighting has been added for the Test area
- The idle notifier will notify you when you've stopped writing code
- etc...
Enjoy!
\\- ${BLOG_AUTHOR}
### New commits
We had ${NUMBER_OF_CONTRIBUTORS} contributors this release!
\`\`\`
${SHORTLOG_SINCE_LAST_TAG}
\`\`\`
EOF
echo 'Blog branch and structure created!'
Loading…
Cancel
Save