From df8e69bce2c7bf0c423e786f04204d197d9559cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20K=C3=B6rber?= Date: Thu, 16 Jun 2022 00:36:45 +0200 Subject: [PATCH] Enable autoformatting for shell scripts --- CONTRIBUTING.md | 3 +- Justfile | 4 ++- release.sh | 96 ++++++++++++++++++++++++++----------------------- 3 files changed, 56 insertions(+), 47 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7464058..c0fb0f6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,8 @@ If you want, add yourself to the `CONTRIBUTORS` file in your pull request. For Rust, just use `cargo fmt`. For Python, use [black](https://github.com/psf/black). I'd rather not spend any effort in -configuring the formatters (not possible for black anyway). +configuring the formatters (not possible for black anyway). For shell scripts, +use [`shfmt`](https://github.com/mvdan/sh). ## Tooling diff --git a/Justfile b/Justfile index 4e5c342..52a8cb8 100644 --- a/Justfile +++ b/Justfile @@ -14,14 +14,16 @@ clean: fmt: cargo fmt git ls-files | grep '\.py$' | xargs black + git ls-files | grep '\.sh$' | xargs -L 1 shfmt --indent 4 --write fmt-check: cargo fmt --check git ls-files | grep '\.py$' | xargs black --check + git ls-files | grep '\.sh$' | xargs -L 1 shfmt --indent 4 --diff lint: cargo clippy --no-deps -- -Dwarnings - find -name '*.sh' | xargs -L 1 shellcheck --norc + git ls-files | grep '\.sh$' | xargs -L 1 shellcheck --norc lint-fix: cargo clippy --no-deps --fix diff --git a/release.sh b/release.sh index 12fb3d3..67a01a3 100755 --- a/release.sh +++ b/release.sh @@ -8,7 +8,7 @@ usage() { printf '%s\n' "usage: $0 (master|minor|patch)" >&2 } -if (( $# != 1 )) ; then +if (($# != 1)); then usage exit 1 fi @@ -20,50 +20,50 @@ minor="$(printf '%s' "${current_version}" | grep -oP '\.\d+\.' | tr -d '.')" patch="$(printf '%s' "${current_version}" | grep -oP '\d+$' | tr -d '.')" case "$1" in - major) - (( major++ )) || true - minor=0 - patch=0 - ;; - minor) - (( minor++ )) || true - patch=0 - ;; - patch) - (( patch++ )) || true - ;; - *) - usage - exit 1 - ;; +major) + ((major++)) || true + minor=0 + patch=0 + ;; +minor) + ((minor++)) || true + patch=0 + ;; +patch) + ((patch++)) || true + ;; +*) + usage + exit 1 + ;; esac new_version="${major}.${minor}.${patch}" -if ! [[ "${new_version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] ; then +if ! [[ "${new_version}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then printf '%s\n' 'Version has to a complete semver' >&2 exit 1 fi current_branch="$(git rev-parse --abbrev-ref HEAD)" -if [[ "${current_branch}" != "develop" ]] ; then +if [[ "${current_branch}" != "develop" ]]; then printf '%s\n' 'You need to be on develop' >&2 exit 1 fi gitstatus="$(git status --porcelain)" -if [[ -n "${gitstatus}" ]] ; then +if [[ -n "${gitstatus}" ]]; then printf '%s\n' 'There are uncommitted changes' >&2 exit 1 fi -if git tag --list "v${new_version}" | grep -q . ; then +if git tag --list "v${new_version}" | grep -q .; then printf 'Tag %s already exists\n' "v${new_version}" >&2 exit 1 fi -for remote in $(git remote) ; do - if git ls-remote --tags "${remote}" | grep -q "refs/tags/v${new_version}$" ; then +for remote in $(git remote); do + if git ls-remote --tags "${remote}" | grep -q "refs/tags/v${new_version}$"; then printf 'Tag %s already exists on %s' "v${new_version}" "${remote}" >&2 exit 1 fi @@ -71,22 +71,22 @@ done git fetch --all -for remote in $(git remote) ; do - for branch in master develop ; do - if ! git diff --quiet "${remote}/${branch}..${branch}" ; then +for remote in $(git remote); do + for branch in master develop; do + if ! git diff --quiet "${remote}/${branch}..${branch}"; then printf 'Remote branch %s/%s not up to date, synchronize first!\n' "${remote}" "${branch}" >&2 exit 1 fi done done -if ! git merge-base --is-ancestor master develop ; then +if ! git merge-base --is-ancestor master develop; then printf '%s\n' 'Develop is not a straight descendant of master, rebase!' >&2 exit 1 fi changes="$(git log --oneline master..develop | wc -l)" -if (( changes == 0 )) ; then +if ((changes == 0)); then printf '%s\n' 'No changes between master and develop?' >&2 exit 1 fi @@ -100,29 +100,32 @@ sed -i "0,/^version/{s/^version.*$/version = \"${new_version}\"/}" Cargo.toml cargo update --package git-repo-manager --precise "${new_version}" diff="$(git diff --numstat)" -if (( $(printf '%s\n' "${diff}" | wc -l || true) != 2 )) ; then - printf '%s\n' 'Weird changes detected, bailing' >&2 - exit 1 +if (($(printf '%s\n' "${diff}" | wc -l || true) != 2)); then + printf '%s\n' 'Weird changes detected, bailing' >&2 + exit 1 fi -if ! printf '%s\n' "${diff}" | grep -Pq '^1\s+1\s+Cargo.lock$' ; then - printf '%s\n' 'Weird changes detected, bailing' >&2 - exit 1 +if ! printf '%s\n' "${diff}" | grep -Pq '^1\s+1\s+Cargo.lock$'; then + printf '%s\n' 'Weird changes detected, bailing' >&2 + exit 1 fi -if ! printf '%s\n' "${diff}" | grep -Pq '^1\s+1\s+Cargo.toml$' ; then - printf '%s\n' 'Weird changes detected, bailing' >&2 - exit 1 +if ! printf '%s\n' "${diff}" | grep -Pq '^1\s+1\s+Cargo.toml$'; then + printf '%s\n' 'Weird changes detected, bailing' >&2 + exit 1 fi git add Cargo.lock Cargo.toml git commit -m "Release v${new_version}" -git switch master 2>/dev/null || { [[ -d "../master" ]] && cd "../master" ; } || { printf '%s\n' 'Could not change to master' >&2 ; exit 1 ; } +git switch master 2>/dev/null || { [[ -d "../master" ]] && cd "../master"; } || { + printf '%s\n' 'Could not change to master' >&2 + exit 1 +} current_branch="$(git rev-parse --abbrev-ref HEAD)" -if [[ "${current_branch}" != "master" ]] ; then +if [[ "${current_branch}" != "master" ]]; then printf '%s\n' 'Looks like branch switching to master did not work' >&2 exit 1 fi @@ -130,24 +133,27 @@ fi git merge --no-ff --no-edit develop git tag "v${new_version}" -for remote in $(git remote) ; do - while ! git push "${remote}" "v${new_version}" master ; do +for remote in $(git remote); do + while ! git push "${remote}" "v${new_version}" master; do : done done -git switch develop 2>/dev/null || { [[ -d "../develop" ]] && cd "../develop" ; } || { printf '%s\n' 'Could not change to develop' >&2 ; exit 1 ; } +git switch develop 2>/dev/null || { [[ -d "../develop" ]] && cd "../develop"; } || { + printf '%s\n' 'Could not change to develop' >&2 + exit 1 +} current_branch="$(git rev-parse --abbrev-ref HEAD)" -if [[ "${current_branch}" != "develop" ]] ; then +if [[ "${current_branch}" != "develop" ]]; then printf '%s\n' 'Looks like branch switching to develop did not work' >&2 exit 1 fi git merge --ff-only master -for remote in $(git remote) ; do - while ! git push "${remote}" develop ; do +for remote in $(git remote); do + while ! git push "${remote}" develop; do : done done