From 820b914291464af6a630a1b48460d03eba43f3a6 Mon Sep 17 00:00:00 2001 From: Julien Neuhart Date: Sun, 2 Mar 2025 18:04:21 +0100 Subject: [PATCH] feat(formatting): add prettier-plugin-sh --- .dockerignore | 2 +- .env | 6 +- .github/actions/build-push/build-push.sh | 26 ++++---- .github/actions/clean/clean.sh | 76 ++++++++++++------------ .github/actions/merge/merge.sh | 55 +++++++++-------- .prettierignore | 1 + .prettierrc | 2 +- Makefile | 8 ++- package-lock.json | 53 ++++++++++++++++- package.json | 3 +- 10 files changed, 144 insertions(+), 88 deletions(-) diff --git a/.dockerignore b/.dockerignore index 191381ee..6b8710a7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1 @@ -.git \ No newline at end of file +.git diff --git a/.env b/.env index 1a590e55..6c1c2a5a 100644 --- a/.env +++ b/.env @@ -5,9 +5,9 @@ GOTENBERG_VERSION=snapshot GOTENBERG_USER_GID=1001 GOTENBERG_USER_UID=1001 NOTO_COLOR_EMOJI_VERSION=v2.047 # See https://github.com/googlefonts/noto-emoji/releases. -PDFTK_VERSION=v3.3.3 # See https://gitlab.com/pdftk-java/pdftk/-/releases - Binary package. -PDFCPU_VERSION=v0.8.1 # See https://github.com/pdfcpu/pdfcpu/releases. -GOLANGCI_LINT_VERSION=v1.64.2 # See https://github.com/golangci/golangci-lint/releases. +PDFTK_VERSION=v3.3.3 # See https://gitlab.com/pdftk-java/pdftk/-/releases - Binary package. +PDFCPU_VERSION=v0.8.1 # See https://github.com/pdfcpu/pdfcpu/releases. +GOLANGCI_LINT_VERSION=v1.64.2 # See https://github.com/golangci/golangci-lint/releases. GOTENBERG_VERSION=snapshot DOCKERFILE=build/Dockerfile DOCKERFILE_CLOUDRUN=build/Dockerfile.cloudrun diff --git a/.github/actions/build-push/build-push.sh b/.github/actions/build-push/build-push.sh index 2aba1756..c83bb028 100755 --- a/.github/actions/build-push/build-push.sh +++ b/.github/actions/build-push/build-push.sh @@ -16,7 +16,7 @@ dry_run="" while [[ $# -gt 0 ]]; do case $1 in --version) - version="${2//v}" + version="${2//v/}" shift 2 ;; --platform) @@ -47,11 +47,11 @@ echo "Target platform: $platform" if [ -n "$alternate_repository" ]; then DOCKER_REPOSITORY=$alternate_repository echo "⚠️ Using $alternate_repository for DOCKER_REPOSITORY" - fi +fi - if [ "$dry_run" = "true" ]; then - echo "🚧 Dry run" - fi +if [ "$dry_run" = "true" ]; then + echo "🚧 Dry run" +fi # Build tags arrays. tags=() @@ -142,20 +142,20 @@ cmd="docker buildx build \ run_cmd "$cmd" if [ "$platform" != "linux/amd64" ]; then - echo "⚠️ Skip Cloud Run variant(s)" - echo "✅ Done!" - echo "tags=$(join "," "${tags[@]}")" >> "$GITHUB_OUTPUT" - echo "tags_cloud_run=$(join "," "${tags_cloud_run[@]}")" >> "$GITHUB_OUTPUT" - exit 0 + echo "⚠️ Skip Cloud Run variant(s)" + echo "✅ Done!" + echo "tags=$(join "," "${tags[@]}")" >> "$GITHUB_OUTPUT" + echo "tags_cloud_run=$(join "," "${tags_cloud_run[@]}")" >> "$GITHUB_OUTPUT" + exit 0 fi source_tag_cloud_run="$DOCKER_REGISTRY/$DOCKER_REPOSITORY:$version-${arch[1]}" cmd="docker pull $source_tag_cloud_run" run_cmd "$cmd" - target_tag_cloud_run="$DOCKER_REGISTRY/$DOCKER_REPOSITORY:$version" - cmd="docker image tag $source_tag_cloud_run $target_tag_cloud_run" - run_cmd "$cmd" +target_tag_cloud_run="$DOCKER_REGISTRY/$DOCKER_REPOSITORY:$version" +cmd="docker image tag $source_tag_cloud_run $target_tag_cloud_run" +run_cmd "$cmd" cmd="docker build \ --build-arg DOCKER_REGISTRY=$DOCKER_REGISTRY \ diff --git a/.github/actions/clean/clean.sh b/.github/actions/clean/clean.sh index 4cfbc1dc..b89a9536 100755 --- a/.github/actions/clean/clean.sh +++ b/.github/actions/clean/clean.sh @@ -19,7 +19,7 @@ while [[ $# -gt 0 ]]; do shift 2 ;; --snapshot-version) - snapshot_version="${2//v}" + snapshot_version="${2//v/}" shift 2 ;; --dry-run) @@ -47,9 +47,9 @@ for tag in "${tags_to_delete[@]}"; do echo "- $tag" done - if [ "$dry_run" = "true" ]; then - echo "🚧 Dry run" - fi +if [ "$dry_run" = "true" ]; then + echo "🚧 Dry run" +fi echo # Delete tags. @@ -61,28 +61,28 @@ if [ "$dry_run" = "true" ]; then echo "🚧 Dry run - would call $base_url to get a token" echo else - echo "🌐 Get token from $base_url" + echo "🌐 Get token from $base_url" - readarray -t lines < <( - curl -s -X POST \ - -H "Content-Type: application/json" \ - -d "{\"username\":\"$DOCKERHUB_USERNAME\", \"password\":\"$DOCKERHUB_TOKEN\"}" \ - -w "\n%{http_code}" \ - "$base_url/users/login" - ) + readarray -t lines < <( + curl -s -X POST \ + -H "Content-Type: application/json" \ + -d "{\"username\":\"$DOCKERHUB_USERNAME\", \"password\":\"$DOCKERHUB_TOKEN\"}" \ + -w "\n%{http_code}" \ + "$base_url/users/login" + ) - http_code="${lines[-1]}" - unset 'lines[-1]' - json_body=$(printf "%s\n" "${lines[@]}") + http_code="${lines[-1]}" + unset 'lines[-1]' + json_body=$(printf "%s\n" "${lines[@]}") - if [ "$http_code" -ne "200" ]; then - echo "❌ Wrong HTTP status - $http_code" - echo "$json_body" - exit 1 - fi + if [ "$http_code" -ne "200" ]; then + echo "❌ Wrong HTTP status - $http_code" + echo "$json_body" + exit 1 + fi - token=$(jq -r '.token' <<< "$json_body") - echo + token=$(jq -r '.token' <<< "$json_body") + echo fi if [ -z "$token" ]; then @@ -95,26 +95,26 @@ for tag in "${tags_to_delete[@]}"; do echo "🚧 Dry run - would call $base_url to delete tag $tag" echo else - echo "🌐 Delete tag $tag" - IFS=':' read -ra tag_parts <<< "$tag" + echo "🌐 Delete tag $tag" + IFS=':' read -ra tag_parts <<< "$tag" - readarray -t lines < <( - curl -s -X DELETE \ - -H "Authorization: Bearer $token" \ - -w "\n%{http_code}" \ - "$base_url/repositories/${tag_parts[0]}/tags/${tag_parts[1]}/" - ) + readarray -t lines < <( + curl -s -X DELETE \ + -H "Authorization: Bearer $token" \ + -w "\n%{http_code}" \ + "$base_url/repositories/${tag_parts[0]}/tags/${tag_parts[1]}/" + ) - http_code="${lines[-1]}" - unset 'lines[-1]' + http_code="${lines[-1]}" + unset 'lines[-1]' - if [ "$http_code" -ne "200" ] && [ "$http_code" -ne "204" ]; then - echo "❌ Wrong HTTP status - $http_code" - printf '%s\n' "${lines[@]}" - exit 1 - fi + if [ "$http_code" -ne "200" ] && [ "$http_code" -ne "204" ]; then + echo "❌ Wrong HTTP status - $http_code" + printf '%s\n' "${lines[@]}" + exit 1 + fi - echo + echo fi done diff --git a/.github/actions/merge/merge.sh b/.github/actions/merge/merge.sh index 50ef2fa2..951bba22 100755 --- a/.github/actions/merge/merge.sh +++ b/.github/actions/merge/merge.sh @@ -46,23 +46,23 @@ if [ -n "$alternate_registry" ]; then echo "⚠️ Will also push to $alternate_registry registry" fi - if [ "$dry_run" = "true" ]; then - echo "🚧 Dry run" - fi +if [ "$dry_run" = "true" ]; then + echo "🚧 Dry run" +fi - echo +echo - # Build merge map. - declare -A merge_map +# Build merge map. +declare -A merge_map - for tag in "${tags_to_merge[@]}"; do - target_tag="${tag//-amd64/}" - target_tag="${target_tag//-arm64/}" - target_tag="${target_tag//-arm/}" - target_tag="${target_tag//-386/}" +for tag in "${tags_to_merge[@]}"; do + target_tag="${tag//-amd64/}" + target_tag="${target_tag//-arm64/}" + target_tag="${target_tag//-arm/}" + target_tag="${target_tag//-386/}" - merge_map["$target_tag"]+="$tag " - done + merge_map["$target_tag"]+="$tag " +done # Merge tags. run_cmd() { @@ -80,30 +80,29 @@ run_cmd() { fi } - for target in "${!merge_map[@]}"; do - IFS=' ' read -ra source_tags <<< "${merge_map[$target]}" +for target in "${!merge_map[@]}"; do + IFS=' ' read -ra source_tags <<< "${merge_map[$target]}" - cmd="docker buildx imagetools create \ + cmd="docker buildx imagetools create \ -t $target \ ${source_tags[*]} " - run_cmd "$cmd" + run_cmd "$cmd" - echo "➡️ $target pushed" - echo - if [ -n "$alternate_registry" ]; then - alternate_target="${target/$DOCKER_REGISTRY/$alternate_registry}" - cmd="docker buildx imagetools create \ + echo "➡️ $target pushed" + echo + if [ -n "$alternate_registry" ]; then + alternate_target="${target/$DOCKER_REGISTRY/$alternate_registry}" + cmd="docker buildx imagetools create \ -t $alternate_target \ $target " - run_cmd "$cmd" - - echo "➡️ $alternate_target pushed" - echo - fi - done + run_cmd "$cmd" + echo "➡️ $alternate_target pushed" + echo + fi +done echo "✅ Done!" exit 0 diff --git a/.prettierignore b/.prettierignore index e69de29b..378eac25 100644 --- a/.prettierignore +++ b/.prettierignore @@ -0,0 +1 @@ +build diff --git a/.prettierrc b/.prettierrc index 8046bd73..6d1814a3 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,3 @@ { - "plugins": ["prettier-plugin-gherkin"] + "plugins": ["prettier-plugin-gherkin", "prettier-plugin-sh"] } diff --git a/Makefile b/Makefile index 9906a508..c3b3576f 100644 --- a/Makefile +++ b/Makefile @@ -188,19 +188,23 @@ tests-integration: ## Run integration tests go test -tags=integration -v github.com/gotenberg/gotenberg/v8/test/integration .PHONY: lint -lint: ## Lint the code. +lint: ## Lint codebase. #golangci-lint run npx prettier --check . # go install mvdan.cc/gofumpt@latest # go install github.com/daixiang0/gci@latest .PHONY: fmt -fmt: ## Format the code and "optimize" the dependencies +fmt: ## Format codebase and "optimize" the dependencies gofumpt -l -w . gci write -s standard -s default -s "prefix(github.com/gotenberg/gotenberg/v8)" --skip-generated --skip-vendor --custom-order . npx prettier --write . go mod tidy +.PHONY: todo +todo: ## Find TODOs in codebase. + golangci-lint run --no-config --disable-all --enable godox + # go install golang.org/x/tools/cmd/godoc@latest .PHONY: godoc godoc: ## Run a webserver with Gotenberg godoc diff --git a/package-lock.json b/package-lock.json index 52398fe4..ce352287 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,8 @@ "": { "devDependencies": { "prettier": "3.5.2", - "prettier-plugin-gherkin": "^3.1.1" + "prettier-plugin-gherkin": "^3.1.1", + "prettier-plugin-sh": "^0.15.0" } }, "node_modules/@cucumber/gherkin": { @@ -76,6 +77,13 @@ "dev": true, "license": "MIT" }, + "node_modules/mvdan-sh": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/mvdan-sh/-/mvdan-sh-0.10.1.tgz", + "integrity": "sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/prettier": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", @@ -104,6 +112,26 @@ "prettier": "^3.0.0" } }, + "node_modules/prettier-plugin-sh": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-sh/-/prettier-plugin-sh-0.15.0.tgz", + "integrity": "sha512-U0PikJr/yr2bzzARl43qI0mApBj0C1xdAfA04AZa6LnvIKawXHhuy2fFo6LNA7weRzGlAiNbaEFfKMFo0nZr/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mvdan-sh": "^0.10.1", + "sh-syntax": "^0.4.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + }, + "peerDependencies": { + "prettier": "^3.0.3" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -111,6 +139,29 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/sh-syntax": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/sh-syntax/-/sh-syntax-0.4.2.tgz", + "integrity": "sha512-/l2UZ5fhGZLVZa16XQM9/Vq/hezGGbdHeVEA01uWjOL1+7Ek/gt6FquW0iKKws4a9AYPYvlz6RyVvjh3JxOteg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", diff --git a/package.json b/package.json index 69805b72..9d4beff8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "devDependencies": { "prettier": "3.5.2", - "prettier-plugin-gherkin": "^3.1.1" + "prettier-plugin-gherkin": "^3.1.1", + "prettier-plugin-sh": "^0.15.0" } }