From 608eb322a86c3980063fb725c634ddd2c4030679 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Fri, 27 May 2022 20:15:19 +0300 Subject: [PATCH] chore: Add .editorconfig, shfmt, shellcheck and subshell dir changes (#1649) --- .editorconfig | 16 +++++ .github/workflows/coder.yaml | 18 +++++- Makefile | 23 ++++++- coderd/audit/generate.sh | 10 +++- coderd/database/generate.sh | 60 ++++++++++--------- .../database/migrations/create_migration.sh | 17 +++--- scripts/check_unstaged.sh | 38 +++++++----- scripts/develop.sh | 14 +++-- scripts/sign_macos.sh | 30 ++++++---- scripts/yarn_install.sh | 58 +++++++++--------- site/.editorconfig | 10 ++++ 11 files changed, 191 insertions(+), 103 deletions(-) create mode 100644 .editorconfig create mode 100644 site/.editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..b54df526a6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = tab + +[*.{md,json,yaml,tf,tfvars}] +indent_style = space +indent_size = 2 + +[coderd/database/dump.sql] +indent_style = space +indent_size = 4 diff --git a/.github/workflows/coder.yaml b/.github/workflows/coder.yaml index 1511ee4f6f..6a32d6babc 100644 --- a/.github/workflows/coder.yaml +++ b/.github/workflows/coder.yaml @@ -44,6 +44,17 @@ jobs: with: version: v1.46.0 + style-lint-shellcheck: + name: style/lint/shellcheck + timeout-minutes: 5 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run ShellCheck + uses: ludeeus/action-shellcheck@1.1.0 + with: + ignore: node_modules + style-lint-typescript: name: "style/lint/typescript" timeout-minutes: 5 @@ -133,7 +144,12 @@ jobs: - name: Install node_modules run: ./scripts/yarn_install.sh - - run: "make --output-sync -j -B fmt" + - name: Install shfmt + run: go install mvdan.cc/sh/v3/cmd/shfmt@v3.5.0 + + - run: | + export PATH=${PATH}:$(go env GOPATH)/bin + make --output-sync -j -B fmt test-go: name: "test/go" diff --git a/Makefile b/Makefile index 35d2f54b06..61fb4a5537 100644 --- a/Makefile +++ b/Makefile @@ -41,20 +41,37 @@ fmt/terraform: $(wildcard *.tf) terraform fmt -recursive .PHONY: fmt/terraform -fmt: fmt/prettier fmt/terraform +fmt/shfmt: $(shell shfmt -f .) + @echo "--- shfmt" +# Only do diff check in CI, errors on diff. +ifdef CI + shfmt -d $(shell shfmt -f .) +else + shfmt -w $(shell shfmt -f .) +endif + +fmt: fmt/prettier fmt/terraform fmt/shfmt .PHONY: fmt gen: coderd/database/querier.go peerbroker/proto/peerbroker.pb.go provisionersdk/proto/provisioner.pb.go provisionerd/proto/provisionerd.pb.go site/src/api/typesGenerated.ts install: build + mkdir -p $(INSTALL_DIR) @echo "--- Copying from bin to $(INSTALL_DIR)" cp -r ./dist/coder-$(GOOS)_$(GOOS)_$(GOARCH)*/* $(INSTALL_DIR) @echo "-- CLI available at $(shell ls $(INSTALL_DIR)/coder*)" .PHONY: install -lint: +lint: lint/shellcheck lint/go + +lint/go: golangci-lint run -.PHONY: lint +.PHONY: lint/go + +# Use shfmt to determine the shell files, takes editorconfig into consideration. +lint/shellcheck: $(shell shfmt -f .) + @echo "--- shellcheck" + shellcheck $(shell shfmt -f .) peerbroker/proto/peerbroker.pb.go: peerbroker/proto/peerbroker.proto protoc \ diff --git a/coderd/audit/generate.sh b/coderd/audit/generate.sh index d6763c7b97..48ba4fa62f 100755 --- a/coderd/audit/generate.sh +++ b/coderd/audit/generate.sh @@ -8,8 +8,12 @@ # Usage: # ./generate.sh ... - set -euo pipefail -cd "$(dirname "$0")" && cd "$(git rev-parse --show-toplevel)" -go run ./scripts/auditgen ./coderd/database "$@" +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +PROJECT_ROOT=$(cd "$SCRIPT_DIR" && git rev-parse --show-toplevel) + +( + cd "$PROJECT_ROOT" + go run ./scripts/auditgen ./coderd/database "$@" +) diff --git a/coderd/database/generate.sh b/coderd/database/generate.sh index e8d9a24d21..e00b0ae73a 100755 --- a/coderd/database/generate.sh +++ b/coderd/database/generate.sh @@ -8,39 +8,43 @@ set -euo pipefail -cd "$(dirname "$0")" +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") -# The logic below depends on the exact version being correct :( -go run github.com/kyleconroy/sqlc/cmd/sqlc@v1.13.0 generate +( + cd "$SCRIPT_DIR" -first=true -for fi in queries/*.sql.go; do - # Find the last line from the imports section and add 1. - cut=$(grep -n ')' "$fi" | head -n 1 | cut -d: -f1) - cut=$((cut + 1)) + # The logic below depends on the exact version being correct :( + go run github.com/kyleconroy/sqlc/cmd/sqlc@v1.13.0 generate - # Copy the header from the first file only, ignoring the source comment. - if $first; then - head -n 6 < "$fi" | grep -v "source" > queries.sql.go - first=false - fi + first=true + for fi in queries/*.sql.go; do + # Find the last line from the imports section and add 1. + cut=$(grep -n ')' "$fi" | head -n 1 | cut -d: -f1) + cut=$((cut + 1)) - # Append the file past the imports section into queries.sql.go. - tail -n "+$cut" < "$fi" >> queries.sql.go -done + # Copy the header from the first file only, ignoring the source comment. + if $first; then + head -n 6 <"$fi" | grep -v "source" >queries.sql.go + first=false + fi -# Move the files we want. -mv queries/querier.go . -mv queries/models.go . + # Append the file past the imports section into queries.sql.go. + tail -n "+$cut" <"$fi" >>queries.sql.go + done -# Remove temporary go files. -rm -f queries/*.go + # Move the files we want. + mv queries/querier.go . + mv queries/models.go . -# Fix struct/interface names. -gofmt -w -r 'Querier -> querier' -- *.go -gofmt -w -r 'Queries -> sqlQuerier' -- *.go + # Remove temporary go files. + rm -f queries/*.go -# Ensure correct imports exist. Modules must all be downloaded so we get correct -# suggestions. -go mod download -goimports -w queries.sql.go + # Fix struct/interface names. + gofmt -w -r 'Querier -> querier' -- *.go + gofmt -w -r 'Queries -> sqlQuerier' -- *.go + + # Ensure correct imports exist. Modules must all be downloaded so we get correct + # suggestions. + go mod download + goimports -w queries.sql.go +) diff --git a/coderd/database/migrations/create_migration.sh b/coderd/database/migrations/create_migration.sh index 459d0935eb..3046e875e3 100755 --- a/coderd/database/migrations/create_migration.sh +++ b/coderd/database/migrations/create_migration.sh @@ -7,14 +7,17 @@ set -euo pipefail -cd "$(dirname "$0")" +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +( + cd "$SCRIPT_DIR" -# if migration name is an empty string exit -[[ -z "${*}" ]] && (echo "Must provide a migration name" && exit 1) + # if migration name is an empty string exit + [[ -z "${*}" ]] && (echo "Must provide a migration name" && exit 1) -# " " && "-" -> "_" -title="$(echo "${@}" | tr "[:upper:]" "[:lower:]" | sed -E -e "s/( |-)/_/g")" + # " " && "-" -> "_" + title="$(echo "${@}" | tr "[:upper:]" "[:lower:]" | sed -E -e "s/( |-)/_/g")" -migrate create -ext sql -dir . -seq "$title" + migrate create -ext sql -dir . -seq "$title" -echo "Run \"make gen\" to generate models." + echo "Run \"make gen\" to generate models." +) diff --git a/scripts/check_unstaged.sh b/scripts/check_unstaged.sh index 1f3d92679e..47bdd265ce 100755 --- a/scripts/check_unstaged.sh +++ b/scripts/check_unstaged.sh @@ -2,23 +2,29 @@ set -euo pipefail -FILES="$(git ls-files --other --modified --exclude-standard)" -if [[ "$FILES" != "" ]]; then - mapfile -t files <<<"$FILES" +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +PROJECT_ROOT=$(cd "$SCRIPT_DIR" && git rev-parse --show-toplevel) - echo "The following files contain unstaged changes:" - echo - for file in "${files[@]}"; do - echo " - $file" - done - echo +( + cd "${PROJECT_ROOT}" - echo "These are the changes:" - echo - for file in "${files[@]}"; do - git --no-pager diff "$file" - done - exit 1 -fi + FILES="$(git ls-files --other --modified --exclude-standard)" + if [[ "$FILES" != "" ]]; then + mapfile -t files <<<"$FILES" + echo "The following files contain unstaged changes:" + echo + for file in "${files[@]}"; do + echo " - $file" + done + echo + + echo "These are the changes:" + echo + for file in "${files[@]}"; do + git --no-pager diff "$file" + done + exit 1 + fi +) exit 0 diff --git a/scripts/develop.sh b/scripts/develop.sh index da481317ad..41418e4ae3 100755 --- a/scripts/develop.sh +++ b/scripts/develop.sh @@ -2,8 +2,8 @@ set -euo pipefail -PROJECT_ROOT="$(git rev-parse --show-toplevel)" -cd "${PROJECT_ROOT}" +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +PROJECT_ROOT=$(cd "$SCRIPT_DIR" && git rev-parse --show-toplevel) echo '== Run "make build" before running this command to build binaries.' echo '== Without these binaries, workspaces will fail to start!' @@ -19,8 +19,10 @@ export CODER_DEV_ADMIN_PASSWORD=password # to kill both at the same time. For more details, see: # https://stackoverflow.com/questions/3004811/how-do-you-run-multiple-programs-in-parallel-from-a-bash-script ( - trap 'kill 0' SIGINT - CODERV2_HOST=http://127.0.0.1:3000 INSPECT_XSTATE=true yarn --cwd=./site dev & - go run -tags embed cmd/coder/main.go server --dev --tunnel=true & - wait + cd "${PROJECT_ROOT}" + + trap 'kill 0' SIGINT + CODERV2_HOST=http://127.0.0.1:3000 INSPECT_XSTATE=true yarn --cwd=./site dev & + go run -tags embed cmd/coder/main.go server --dev --tunnel=true & + wait ) diff --git a/scripts/sign_macos.sh b/scripts/sign_macos.sh index 999039ce77..26d3fd181b 100755 --- a/scripts/sign_macos.sh +++ b/scripts/sign_macos.sh @@ -1,17 +1,23 @@ #!/usr/bin/env bash set -euo pipefail -cd "$(git rev-parse --show-toplevel)" -codesign -s $AC_APPLICATION_IDENTITY -f -v --timestamp --options runtime $1 +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +PROJECT_ROOT=$(cd "$SCRIPT_DIR" && git rev-parse --show-toplevel) -config="$(mktemp -d)/gon.json" -jq -r --null-input --arg path "$(pwd)/$1" '{ - "notarize": [ - { - "path": $path, - "bundle_id": "com.coder.cli" - } - ] -}' > $config -gon $config +( + cd "${PROJECT_ROOT}" + + codesign -s "$AC_APPLICATION_IDENTITY" -f -v --timestamp --options runtime "$1" + + config=$(mktemp -d)/gon.json + jq -r --null-input --arg path "$(pwd)/$1" '{ + "notarize": [ + { + "path": $path, + "bundle_id": "com.coder.cli" + } + ] + }' >"$config" + gon "$config" +) diff --git a/scripts/yarn_install.sh b/scripts/yarn_install.sh index 743a56a1cd..94cb0369cb 100755 --- a/scripts/yarn_install.sh +++ b/scripts/yarn_install.sh @@ -7,33 +7,37 @@ set -euo pipefail -PROJECT_ROOT=$(git rev-parse --show-toplevel) -cd "$PROJECT_ROOT/site" +SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") +PROJECT_ROOT=$(cd "$SCRIPT_DIR" && git rev-parse --show-toplevel) -yarn_flags=( - # Do not execute install scripts - # TODO: check if build works properly with this enabled - # --ignore-scripts +( + cd "$PROJECT_ROOT/site" - # Check if existing node_modules are valid - # TODO: determine if this is necessary - # --check-files + yarn_flags=( + # Do not execute install scripts + # TODO: check if build works properly with this enabled + # --ignore-scripts + + # Check if existing node_modules are valid + # TODO: determine if this is necessary + # --check-files + ) + + if [ -n "${CI:-}" ]; then + yarn_flags+=( + # Install dependencies from lockfile, ensuring builds are fully + # reproducible + --frozen-lockfile + # Suppress progress information + --silent + # Disable interactive prompts for build + --non-interactive + ) + fi + + # Append whatever is specified on the command line + yarn_flags+=("$@") + + echo "+ yarn install ${yarn_flags[*]}" + yarn install "${yarn_flags[@]}" ) - -if [ -n "${CI:-}" ]; then - yarn_flags+=( - # Install dependencies from lockfile, ensuring builds are fully - # reproducible - --frozen-lockfile - # Suppress progress information - --silent - # Disable interactive prompts for build - --non-interactive - ) -fi - -# Append whatever is specified on the command line -yarn_flags+=("$@") - -echo "+ yarn install ${yarn_flags[*]}" -yarn install "${yarn_flags[@]}" diff --git a/site/.editorconfig b/site/.editorconfig new file mode 100644 index 0000000000..2d95ff0f26 --- /dev/null +++ b/site/.editorconfig @@ -0,0 +1,10 @@ +[*] +indent_style = space +indent_size = 2 + +[*.go] +indent_style = tab +indent_size = unset + +[node_modules/**] +ignore = true