+```
+
## License
This work is licensed under MIT license. See [LICENSE](./LICENSE.md).
diff --git a/man/RocketBase.Rd b/man/RocketBase.Rd
index c524aad..89681e3 100644
--- a/man/RocketBase.Rd
+++ b/man/RocketBase.Rd
@@ -88,7 +88,8 @@ client <- rocketbase::RocketBase$new(
\if{html}{\out{}}
\if{latex}{\out{\hypertarget{method-RocketBase-info}{}}}
\subsection{Method \code{info()}}{
-Prints rudimentary information about the remote PocketBase API instance.
+Prints rudimentary information about the remote
+PocketBase API instance.
\subsection{Usage}{
\if{html}{\out{}}\preformatted{RocketBase$info()}\if{html}{\out{
}}
}
diff --git a/release.sh b/release.sh
new file mode 100755
index 0000000..ddb2c44
--- /dev/null
+++ b/release.sh
@@ -0,0 +1,91 @@
+#!/usr/bin/env bash
+
+## Stop on errors:
+set -eo pipefail
+
+## Helper function to print log messages.
+_log() {
+ echo "[RELEASE LOG]" "${@}"
+}
+
+## Helper function to print errors.
+_error() {
+ echo 1>&2 "[RELEASE ERROR]" "${@}"
+}
+
+## Helper function to print usage.
+_usage() {
+ echo "Usage: $0 [-h] -n "
+}
+
+## Declare variables:
+_version=""
+
+## Parse command line arguments:
+while getopts "n:h" o; do
+ case "${o}" in
+ n)
+ _version="${OPTARG}"
+ ;;
+ h)
+ _usage
+ exit 0
+ ;;
+ *)
+ _usage 1>&2
+ exit 1
+ ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+_log "Checking variables..."
+if [ -z "${_version}" ]; then
+ _usage 1>&2
+ exit 1
+else
+ _log "Version is \"${_version}\". Proceeding..."
+fi
+
+_log "Checking git repository state..."
+if [[ -z "$(git status --porcelain)" ]]; then
+ _log "Git repository is clean. Proceeding..."
+else
+ _error "Git repository is not clean. Aborting..."
+ exit 1
+fi
+
+_log "Updating application version..."
+sed -i -E "s/^Version:([ ]+).*/Version:\\1${_version}/g" DESCRIPTION
+
+_log "Generating changelog..."
+git-chglog --output NEWS.md --next-tag "${_version}"
+
+_log "Staging changes..."
+git add NEWS.md DESCRIPTION
+
+_log "Committing changes..."
+git commit -m "chore(release): ${_version}"
+
+_log "Tagging version..."
+git tag -a -m "Release ${_version}" "${_version}"
+
+_log "Pushing changes to remote..."
+git push --follow-tags origin main
+
+_log "Creating the release..."
+gh release create "${_version}" --title "${_version}" --generate-notes
+
+_log "Updating application version for development..."
+sed -i -E "s/^Version:([ ]+).*/Version:\\1${_version}.9000/g" DESCRIPTION
+
+_log "Staging changes..."
+git add DESCRIPTION
+
+_log "Committing changes..."
+git commit -m "chore: bump development version to ${_version}.9000"
+
+_log "Pushing changes to remote..."
+git push
+
+_log "Finished!"
diff --git a/shell.nix b/shell.nix
index 86f16d5..24c5159 100644
--- a/shell.nix
+++ b/shell.nix
@@ -4,6 +4,7 @@ let
devDependencies = [
pkgs.rPackages.devtools
+ pkgs.rPackages.languageserver
pkgs.rPackages.roxygen2
];
@@ -20,6 +21,7 @@ in
pkgs.mkShell {
buildInputs = [
thisR
+ pkgs.git-chglog
pkgs.pocketbase
];