Skip to content

Commit

Permalink
chore(dev): add release script
Browse files Browse the repository at this point in the history
  • Loading branch information
vst committed Dec 2, 2022
1 parent 2141eb3 commit 60e02b9
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 0 deletions.
1 change: 1 addition & 0 deletions .Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
^.vscode
^LICENSE\.md$
^nix
^release.sh
^shell.nix$
^tmp
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,21 @@ my_data <- jsonlite::fromJSON(response$parse(encoding = "UTF-8"))
print(my_data)
```

## Releasing

Make sure that your `main` branch is up to date:

```sh
git checkout main
git pull
```

Then, run the release script with new version information:

```sh
./release.sh -n <X.Y.Z>
```

## License

This work is licensed under MIT license. See [LICENSE](./LICENSE.md).
91 changes: 91 additions & 0 deletions release.sh
Original file line number Diff line number Diff line change
@@ -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 <VERSION>"
}

## 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!"

0 comments on commit 60e02b9

Please sign in to comment.