@zairakai/js-dev-tools 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +86 -0
- package/.gitlab/ci/pipeline-js-app.yml +75 -0
- package/.gitlab/ci/pipeline-js-package.yml +360 -0
- package/LICENSE +21 -0
- package/README.md +206 -0
- package/config/.markdownlint.json +7 -0
- package/config/.markdownlintignore +5 -0
- package/config/.prettierignore +11 -0
- package/config/.stylelintignore +7 -0
- package/config/eslint.config.js +198 -0
- package/config/knip.config.js +40 -0
- package/config/prettier.config.js +121 -0
- package/config/stylelint.config.js +56 -0
- package/config/tsconfig.base.json +20 -0
- package/config/vitest.config.js +25 -0
- package/index.js +24 -0
- package/package.json +148 -0
- package/scripts/build.sh +58 -0
- package/scripts/ci-quality.sh +51 -0
- package/scripts/config.sh +254 -0
- package/scripts/doctor.sh +74 -0
- package/scripts/eslint-fix.sh +38 -0
- package/scripts/eslint.sh +49 -0
- package/scripts/install-bats.sh +227 -0
- package/scripts/install-hooks.sh +167 -0
- package/scripts/install-markdownlint.sh +31 -0
- package/scripts/install-shellcheck.sh +232 -0
- package/scripts/knip.sh +40 -0
- package/scripts/markdownlint-fix.sh +8 -0
- package/scripts/markdownlint.sh +84 -0
- package/scripts/outdated.sh +70 -0
- package/scripts/prettier-fix.sh +52 -0
- package/scripts/prettier.sh +53 -0
- package/scripts/setup-project.sh +816 -0
- package/scripts/stylelint-fix.sh +64 -0
- package/scripts/stylelint.sh +66 -0
- package/scripts/test.sh +40 -0
- package/scripts/typecheck.sh +41 -0
- package/scripts/validate-shellcheck.sh +70 -0
- package/stubs/githooks/commit-msg +34 -0
- package/stubs/githooks/pre-commit +58 -0
- package/stubs/githooks/pre-push +57 -0
- package/stubs/githooks/prepare-commit-msg +39 -0
- package/stubs/gitlab-ci/gitlab-ci.yml.stub +18 -0
- package/stubs/gitlab-ci/gitlab-pipeline-js-app.yml.stub +16 -0
- package/stubs/governance/CODE_OF_CONDUCT.md.stub +8 -0
- package/stubs/governance/CONTRIBUTING.md.stub +39 -0
- package/stubs/governance/SECURITY.md.stub +41 -0
- package/stubs/quality/eslint.config.js.stub +18 -0
- package/stubs/quality/knip.config.js.stub +14 -0
- package/stubs/style/prettier.config.js.stub +16 -0
- package/stubs/style/stylelint.config.js.stub +17 -0
- package/stubs/testing/vitest.config.js.stub +18 -0
- package/stubs/typescript/tsconfig.json.stub +10 -0
- package/tools/make/bats.mk +49 -0
- package/tools/make/code-style.mk +20 -0
- package/tools/make/core.mk +56 -0
- package/tools/make/help.mk +32 -0
- package/tools/make/knip.mk +7 -0
- package/tools/make/markdownlint.mk +17 -0
- package/tools/make/quality.mk +19 -0
- package/tools/make/shellcheck.mk +14 -0
- package/tools/make/stylelint.mk +11 -0
- package/tools/make/test.mk +19 -0
- package/tools/make/typescript.mk +10 -0
- package/tools/make/utils.mk +44 -0
- package/tools/make/variables.mk +42 -0
- package/tools/scripts/git-cleanup.sh +53 -0
- package/tools/scripts/git-update.sh +37 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Vitest configuration.
|
|
3
|
+
* Extends the @zairakai/js-dev-tools base config — customize as needed.
|
|
4
|
+
*
|
|
5
|
+
* Example of adding project-specific settings (e.g. Vue plugin, jsdom):
|
|
6
|
+
* import vue from '@vitejs/plugin-vue'
|
|
7
|
+
* export default mergeConfig(baseConfig, defineConfig({
|
|
8
|
+
* plugins: [vue()],
|
|
9
|
+
* test: {
|
|
10
|
+
* environment: 'jsdom',
|
|
11
|
+
* },
|
|
12
|
+
* }))
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { defineConfig, mergeConfig } from 'vitest/config'
|
|
16
|
+
import baseConfig from '@zairakai/js-dev-tools/config/vitest.config.js'
|
|
17
|
+
|
|
18
|
+
export default mergeConfig(baseConfig, defineConfig({}))
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/tsconfig",
|
|
3
|
+
"extends": "@zairakai/js-dev-tools/config/tsconfig.base.json",
|
|
4
|
+
"compilerOptions": {
|
|
5
|
+
"outDir": "dist",
|
|
6
|
+
"rootDir": "src"
|
|
7
|
+
},
|
|
8
|
+
"include": ["src/**/*"],
|
|
9
|
+
"exclude": ["node_modules", "dist", "build", "**/*.test.ts", "**/*.spec.ts"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# BATS Testing Targets
|
|
2
|
+
# Shell script testing with Bash Automated Testing System
|
|
3
|
+
|
|
4
|
+
## —— 🧪 Shell Script Testing ——
|
|
5
|
+
.PHONY: bats
|
|
6
|
+
bats:: ## Run shell script tests (BATS)
|
|
7
|
+
@if ! command -v bats &>/dev/null; then \
|
|
8
|
+
echo "❌ BATS not installed - run: make install-bats"; \
|
|
9
|
+
exit 1; \
|
|
10
|
+
fi; \
|
|
11
|
+
FILES=$$(find tests/bats -name "*.bats" 2>/dev/null); \
|
|
12
|
+
if [ -z "$$FILES" ]; then \
|
|
13
|
+
echo "ℹ️ No BATS tests found — skipping"; \
|
|
14
|
+
else \
|
|
15
|
+
bats $$FILES; \
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
.PHONY: bats-unit
|
|
19
|
+
bats-unit:: ## Run BATS unit tests
|
|
20
|
+
@if ! command -v bats &>/dev/null; then \
|
|
21
|
+
echo "❌ BATS not installed - run: make install-bats"; \
|
|
22
|
+
exit 1; \
|
|
23
|
+
fi; \
|
|
24
|
+
if [ ! -d tests/bats/unit ] || [ -z "$$(find tests/bats/unit -name "*.bats" 2>/dev/null)" ]; then \
|
|
25
|
+
echo "ℹ️ No BATS unit tests found — skipping"; \
|
|
26
|
+
else \
|
|
27
|
+
bats tests/bats/unit/*.bats; \
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
.PHONY: bats-integration
|
|
31
|
+
bats-integration:: ## Run BATS integration tests
|
|
32
|
+
@if ! command -v bats &>/dev/null; then \
|
|
33
|
+
echo "❌ BATS not installed - run: make install-bats"; \
|
|
34
|
+
exit 1; \
|
|
35
|
+
fi; \
|
|
36
|
+
if [ ! -d tests/bats/integration ] || [ -z "$$(find tests/bats/integration -name "*.bats" 2>/dev/null)" ]; then \
|
|
37
|
+
echo "ℹ️ No BATS integration tests found — skipping"; \
|
|
38
|
+
else \
|
|
39
|
+
bats tests/bats/integration/*.bats; \
|
|
40
|
+
fi
|
|
41
|
+
.PHONY: test-all
|
|
42
|
+
test-all:: test bats ## Run all tests (Vitest + BATS)
|
|
43
|
+
@echo ""
|
|
44
|
+
@echo "✅ All tests passed"
|
|
45
|
+
|
|
46
|
+
##
|
|
47
|
+
.PHONY: install-bats
|
|
48
|
+
install-bats:: ## Install BATS framework
|
|
49
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/install-bats.sh
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# ESLint + Prettier Code Style Targets
|
|
2
|
+
|
|
3
|
+
## —— 🎨 Code Style ——
|
|
4
|
+
|
|
5
|
+
.PHONY: eslint
|
|
6
|
+
eslint: ## Check code style
|
|
7
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/eslint.sh
|
|
8
|
+
|
|
9
|
+
.PHONY: eslint-fix
|
|
10
|
+
eslint-fix: ## Fix code style automatically
|
|
11
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/eslint-fix.sh
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
.PHONY: prettier
|
|
15
|
+
prettier: ## Check formatting
|
|
16
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/prettier.sh
|
|
17
|
+
|
|
18
|
+
.PHONY: prettier-fix
|
|
19
|
+
prettier-fix: ## Fix formatting automatically
|
|
20
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/prettier-fix.sh
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Core Makefile — Zairakai NPM Dev Tools
|
|
2
|
+
# Aggregates all modular targets for JavaScript/TypeScript/Vue projects.
|
|
3
|
+
#
|
|
4
|
+
# Usage in a consumer project (Makefile):
|
|
5
|
+
# DEV_TOOLS_NPM := node_modules/@zairakai/js-dev-tools
|
|
6
|
+
# include $(DEV_TOOLS_NPM)/tools/make/core.mk
|
|
7
|
+
#
|
|
8
|
+
# Or generate via:
|
|
9
|
+
# bash node_modules/@zairakai/js-dev-tools/scripts/setup-project.sh --with-makefile
|
|
10
|
+
|
|
11
|
+
# Default goal (only if not already set by the project Makefile)
|
|
12
|
+
ifeq ($(origin .DEFAULT_GOAL), undefined)
|
|
13
|
+
.DEFAULT_GOAL := help
|
|
14
|
+
endif
|
|
15
|
+
|
|
16
|
+
SHELL := /bin/bash
|
|
17
|
+
|
|
18
|
+
# Resolve make files directory from the current MAKEFILE_LIST entry
|
|
19
|
+
NPM_DIRECTORY_TOOLS_MAKE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
|
|
20
|
+
|
|
21
|
+
# Include variables first (paths, colors, project info)
|
|
22
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)variables.mk
|
|
23
|
+
|
|
24
|
+
# Include specialized make files in logical development workflow order:
|
|
25
|
+
# 1. Help system (discover available commands)
|
|
26
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)help.mk
|
|
27
|
+
|
|
28
|
+
# 2. Documentation linting (Markdown)
|
|
29
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)markdownlint.mk
|
|
30
|
+
|
|
31
|
+
# 3. ShellCheck validation
|
|
32
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)shellcheck.mk
|
|
33
|
+
|
|
34
|
+
# 4. Code style — ESLint + Prettier
|
|
35
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)code-style.mk
|
|
36
|
+
|
|
37
|
+
# 5. CSS/SCSS — Stylelint (optional)
|
|
38
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)stylelint.mk
|
|
39
|
+
|
|
40
|
+
# 6. Dead code detection (Knip)
|
|
41
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)knip.mk
|
|
42
|
+
|
|
43
|
+
# 7. TypeScript type checking and build
|
|
44
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)typescript.mk
|
|
45
|
+
|
|
46
|
+
# 8. Quality aggregation (combines all checks)
|
|
47
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)quality.mk
|
|
48
|
+
|
|
49
|
+
# 9. Testing (Vitest)
|
|
50
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)test.mk
|
|
51
|
+
|
|
52
|
+
# 10. BATS shell script testing
|
|
53
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)bats.mk
|
|
54
|
+
|
|
55
|
+
# 11. Utilities (git, npm)
|
|
56
|
+
include $(NPM_DIRECTORY_TOOLS_MAKE_DIR)utils.mk
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Help target
|
|
2
|
+
|
|
3
|
+
## —— 📚 Help ——
|
|
4
|
+
|
|
5
|
+
.PHONY: help
|
|
6
|
+
help:: ## Show available commands
|
|
7
|
+
@echo ""
|
|
8
|
+
@printf "$(NPM_DIRECTORY_TOOLS_COLOR_HEADER_FG)$(NPM_DIRECTORY_TOOLS_COLOR_HEADER_BG)%*s$(NPM_DIRECTORY_TOOLS_COLOR_RESET)\n" $(NPM_DIRECTORY_TOOLS_HELP_WIDTH) ""
|
|
9
|
+
@printf "$(NPM_DIRECTORY_TOOLS_COLOR_HEADER_FG)$(NPM_DIRECTORY_TOOLS_COLOR_HEADER_BG) %-*s$(NPM_DIRECTORY_TOOLS_COLOR_RESET)\n" $$(($(NPM_DIRECTORY_TOOLS_HELP_WIDTH)-3)) "$(NPM_DIRECTORY_TOOLS_PROJECT_NAME) - Available Commands"
|
|
10
|
+
@printf "$(NPM_DIRECTORY_TOOLS_COLOR_HEADER_FG)$(NPM_DIRECTORY_TOOLS_COLOR_HEADER_BG)%*s$(NPM_DIRECTORY_TOOLS_COLOR_RESET)\n" $(NPM_DIRECTORY_TOOLS_HELP_WIDTH) ""
|
|
11
|
+
@echo ""
|
|
12
|
+
@grep -hE '(^[[:alnum:]_.-]+:.*?##.*$$)|(^##)' $(MAKEFILE_LIST) \
|
|
13
|
+
| awk 'BEGIN {FS=":.*?## "; color_section="$(NPM_DIRECTORY_TOOLS_COLOR_SECTION)"; color_target="$(NPM_DIRECTORY_TOOLS_COLOR_TARGET)"; color_reset="$(NPM_DIRECTORY_TOOLS_COLOR_RESET)"} \
|
|
14
|
+
/^##/ { \
|
|
15
|
+
gsub(/^##[[:space:]]*/, "", $$0); \
|
|
16
|
+
if ($$0 != "") { \
|
|
17
|
+
if (!seen_sections[$$0]++) { \
|
|
18
|
+
if (NR > 1) { printf "\n" } \
|
|
19
|
+
printf "%s%s%s\n", color_section, $$0, color_reset \
|
|
20
|
+
} \
|
|
21
|
+
} else { \
|
|
22
|
+
printf "\n" \
|
|
23
|
+
} \
|
|
24
|
+
next \
|
|
25
|
+
} \
|
|
26
|
+
!seen_targets[$$1]++ { printf " %s%-28s%s %s\n", color_target, $$1, color_reset, $$2 }'
|
|
27
|
+
@echo ""
|
|
28
|
+
@printf "$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_FG)$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_BG)%*s$(NPM_DIRECTORY_TOOLS_COLOR_RESET)\n" $(NPM_DIRECTORY_TOOLS_HELP_WIDTH) ""
|
|
29
|
+
@printf "$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_FG)$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_BG) Twitch: %-*s$(NPM_DIRECTORY_TOOLS_COLOR_RESET)\n" $$(($(NPM_DIRECTORY_TOOLS_HELP_WIDTH)-11)) "$(NPM_DIRECTORY_TOOLS_TWITCH_URL)"
|
|
30
|
+
@printf "$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_FG)$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_BG) GitLab: %-*s$(NPM_DIRECTORY_TOOLS_COLOR_RESET)\n" $$(($(NPM_DIRECTORY_TOOLS_HELP_WIDTH)-11)) "$(NPM_DIRECTORY_TOOLS_GITLAB_URL)"
|
|
31
|
+
@printf "$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_FG)$(NPM_DIRECTORY_TOOLS_COLOR_FOOTER_BG)%*s$(NPM_DIRECTORY_TOOLS_COLOR_RESET)\n" $(NPM_DIRECTORY_TOOLS_HELP_WIDTH) ""
|
|
32
|
+
@echo ""
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Markdownlint Targets
|
|
2
|
+
# Delegates to scripts/markdownlint.sh
|
|
3
|
+
|
|
4
|
+
## —— 📝 Markdownlint (Documentation Linting) ——
|
|
5
|
+
|
|
6
|
+
.PHONY: markdownlint
|
|
7
|
+
markdownlint: ## Validate Markdown documentation style and formatting
|
|
8
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/markdownlint.sh
|
|
9
|
+
|
|
10
|
+
.PHONY: markdownlint-fix
|
|
11
|
+
markdownlint-fix: ## Fix Markdown documentation issues automatically
|
|
12
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/markdownlint-fix.sh
|
|
13
|
+
|
|
14
|
+
##
|
|
15
|
+
.PHONY: install-markdownlint
|
|
16
|
+
install-markdownlint: ## Install Markdownlint
|
|
17
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/install-markdownlint.sh
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Quality Gate Targets
|
|
2
|
+
## —— ✅ Quality Gates ——
|
|
3
|
+
|
|
4
|
+
.PHONY: quality
|
|
5
|
+
quality:: markdownlint shellcheck eslint prettier stylelint knip ## Run all quality checks
|
|
6
|
+
@echo "✅ All quality checks passed"
|
|
7
|
+
|
|
8
|
+
.PHONY: quality-fix
|
|
9
|
+
quality-fix:: eslint-fix prettier-fix stylelint-fix markdownlint-fix ## Auto-fix all fixable issues
|
|
10
|
+
@echo "✅ All auto-fixes applied"
|
|
11
|
+
|
|
12
|
+
.PHONY: quality-fast
|
|
13
|
+
quality-fast:: ## Run fast quality checks only (ESLint + Prettier + Markdownlint)
|
|
14
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/ci-quality.sh
|
|
15
|
+
|
|
16
|
+
.PHONY: ci
|
|
17
|
+
ci:: quality typecheck test bats ## Full CI validation (quality + typecheck + tests + BATS)
|
|
18
|
+
@echo ""
|
|
19
|
+
@echo "✅ CI validation passed"
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# ShellCheck Targets
|
|
2
|
+
# Delegates to scripts/validate-shellcheck.sh
|
|
3
|
+
|
|
4
|
+
## —— 🐚 ShellCheck (Shell Script Validation) ——
|
|
5
|
+
|
|
6
|
+
.PHONY: shellcheck
|
|
7
|
+
shellcheck: ## Validate shell scripts with ShellCheck (100% compliance required)
|
|
8
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/validate-shellcheck.sh
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
##
|
|
12
|
+
.PHONY: install-shellcheck
|
|
13
|
+
install-shellcheck: ## Install shellcheck
|
|
14
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/install-shellcheck.sh
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Stylelint Targets
|
|
2
|
+
# Delegates to scripts/stylelint.sh
|
|
3
|
+
|
|
4
|
+
## —— 🎨 Stylelint ——
|
|
5
|
+
.PHONY: stylelint
|
|
6
|
+
stylelint: ## Check CSS/SCSS style (Stylelint)
|
|
7
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/stylelint.sh
|
|
8
|
+
|
|
9
|
+
.PHONY: stylelint-fix
|
|
10
|
+
stylelint-fix: ## Fix CSS/SCSS style automatically
|
|
11
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/stylelint-fix.sh
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Vitest Testing Targets
|
|
2
|
+
# Delegates to scripts/test.sh with appropriate environment variables
|
|
3
|
+
## —— 🧪 Testing ——
|
|
4
|
+
|
|
5
|
+
.PHONY: test
|
|
6
|
+
test:: ## Run all tests (without coverage)
|
|
7
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/test.sh
|
|
8
|
+
|
|
9
|
+
.PHONY: test-coverage
|
|
10
|
+
test-coverage:: ## Run tests with coverage report
|
|
11
|
+
@COVERAGE=true bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/test.sh
|
|
12
|
+
|
|
13
|
+
.PHONY: test-watch
|
|
14
|
+
test-watch:: ## Run tests in watch mode
|
|
15
|
+
@$(NPM_DIRECTORY_TOOLS_PROJECT_ROOT)/node_modules/.bin/vitest
|
|
16
|
+
|
|
17
|
+
.PHONY: test-ci
|
|
18
|
+
test-ci:: ## Run tests in CI mode (strict + coverage)
|
|
19
|
+
@CI=true bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/test.sh
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## —— 🧩 Typescript ——
|
|
2
|
+
|
|
3
|
+
.PHONY: typecheck
|
|
4
|
+
typecheck: ## Type-check TypeScript without emitting files (tsc --noEmit)
|
|
5
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/typecheck.sh
|
|
6
|
+
|
|
7
|
+
.PHONY: build
|
|
8
|
+
build: ## Transpile TypeScript to JavaScript (tsup preferred, tsc fallback)
|
|
9
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/build.sh
|
|
10
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Utility Targets
|
|
2
|
+
# Miscellaneous commands for development
|
|
3
|
+
|
|
4
|
+
## —— 🎼 Package Manager ——
|
|
5
|
+
.PHONY: package-install
|
|
6
|
+
package-install: ## Install dependencies
|
|
7
|
+
@echo "📦 Installing dependencies…"
|
|
8
|
+
@npm install
|
|
9
|
+
|
|
10
|
+
.PHONY: package-update
|
|
11
|
+
package-update: ## Update dependencies
|
|
12
|
+
@echo "⬆️ Updating dependencies…"
|
|
13
|
+
@npm update
|
|
14
|
+
|
|
15
|
+
.PHONY: package-normalize
|
|
16
|
+
package-normalize: ## Normalize package.json structure (sort-package-json)
|
|
17
|
+
@$(NPM_DIRECTORY_TOOLS_PROJECT_ROOT)/node_modules/.bin/sort-package-json package.json
|
|
18
|
+
|
|
19
|
+
.PHONY: package-validate
|
|
20
|
+
package-validate: ## Validate package.json and lockfile sync
|
|
21
|
+
@echo "🔍 Validating package.json and lockfile…"
|
|
22
|
+
@npm install --package-lock-only --dry-run
|
|
23
|
+
@$(NPM_DIRECTORY_TOOLS_PROJECT_ROOT)/node_modules/.bin/sort-package-json --check package.json
|
|
24
|
+
|
|
25
|
+
## —— 🧰 Utils ——
|
|
26
|
+
.PHONY: doctor
|
|
27
|
+
doctor: ## Run environment diagnostics
|
|
28
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/doctor.sh
|
|
29
|
+
|
|
30
|
+
.PHONY: outdated
|
|
31
|
+
outdated: ## Check for outdated npm dependencies
|
|
32
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/outdated.sh
|
|
33
|
+
|
|
34
|
+
.PHONY: install-hooks
|
|
35
|
+
install-hooks: ## Install git hooks into .git/hooks
|
|
36
|
+
@bash $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)/install-hooks.sh
|
|
37
|
+
|
|
38
|
+
.PHONY: git-update
|
|
39
|
+
git-update: ## Fast-forward all local branches that track a remote
|
|
40
|
+
@bash $(NPM_DIRECTORY_TOOLS_PACKAGE_ROOT)/tools/scripts/git-update.sh
|
|
41
|
+
|
|
42
|
+
.PHONY: git-cleanup
|
|
43
|
+
git-cleanup: ## Remove local branches whose remote tracking branch no longer exists
|
|
44
|
+
@bash $(NPM_DIRECTORY_TOOLS_PACKAGE_ROOT)/tools/scripts/git-cleanup.sh
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Variables - Zairakai NPM Dev Tools
|
|
2
|
+
# Shared configuration and styling
|
|
3
|
+
|
|
4
|
+
# Critical path detection — works from any inclusion depth
|
|
5
|
+
NPM_DIRECTORY_TOOLS_MAKE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
|
6
|
+
NPM_DIRECTORY_TOOLS_PACKAGE_ROOT := $(abspath $(NPM_DIRECTORY_TOOLS_MAKE_DIR)../../)/
|
|
7
|
+
NPM_DIRECTORY_TOOLS_SCRIPTS_DIR := $(NPM_DIRECTORY_TOOLS_PACKAGE_ROOT)scripts/
|
|
8
|
+
NPM_DIRECTORY_TOOLS_TOOLS_SCRIPTS_DIR := $(NPM_DIRECTORY_TOOLS_PACKAGE_ROOT)tools/scripts/
|
|
9
|
+
|
|
10
|
+
# Project root (caller context). Prefer $(shell pwd) over $(CURDIR).
|
|
11
|
+
NPM_DIRECTORY_TOOLS_PROJECT_ROOT ?= $(shell pwd)
|
|
12
|
+
|
|
13
|
+
# Validate paths exist
|
|
14
|
+
ifeq ($(wildcard $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR)),)
|
|
15
|
+
$(error Zairakai scripts directory not found: $(NPM_DIRECTORY_TOOLS_SCRIPTS_DIR))
|
|
16
|
+
endif
|
|
17
|
+
|
|
18
|
+
# Project information (can be overridden in project Makefile BEFORE including core.mk)
|
|
19
|
+
NPM_DIRECTORY_TOOLS_PROJECT_NAME ?= Zairakai Project
|
|
20
|
+
NPM_DIRECTORY_TOOLS_TWITCH_URL ?= https://twitch.tv/zairakai
|
|
21
|
+
NPM_DIRECTORY_TOOLS_GITLAB_URL ?= https://gitlab.com/zairakai
|
|
22
|
+
|
|
23
|
+
# Help styling
|
|
24
|
+
NPM_DIRECTORY_TOOLS_HELP_WIDTH := 70
|
|
25
|
+
|
|
26
|
+
# ANSI Colors (only used in Make, not exported to scripts)
|
|
27
|
+
NPM_DIRECTORY_TOOLS_COLOR_RESET := \033[0m
|
|
28
|
+
NPM_DIRECTORY_TOOLS_COLOR_HEADER_BG := \033[46m
|
|
29
|
+
NPM_DIRECTORY_TOOLS_COLOR_HEADER_FG := \033[1;37m
|
|
30
|
+
NPM_DIRECTORY_TOOLS_COLOR_SECTION := \033[1;33m
|
|
31
|
+
NPM_DIRECTORY_TOOLS_COLOR_TARGET := \033[32m
|
|
32
|
+
NPM_DIRECTORY_TOOLS_COLOR_FOOTER_BG := \033[44m
|
|
33
|
+
NPM_DIRECTORY_TOOLS_COLOR_FOOTER_FG := \033[1;37m
|
|
34
|
+
|
|
35
|
+
# Export only what shell scripts need
|
|
36
|
+
export NPM_DIRECTORY_TOOLS_PROJECT_ROOT
|
|
37
|
+
export NPM_DIRECTORY_TOOLS_PACKAGE_ROOT
|
|
38
|
+
export NPM_DIRECTORY_TOOLS_SCRIPTS_DIR
|
|
39
|
+
export NPM_DIRECTORY_TOOLS_TOOLS_SCRIPTS_DIR
|
|
40
|
+
export NPM_DIRECTORY_TOOLS_PROJECT_NAME
|
|
41
|
+
export NPM_DIRECTORY_TOOLS_TWITCH_URL
|
|
42
|
+
export NPM_DIRECTORY_TOOLS_GITLAB_URL
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
echo ""
|
|
5
|
+
echo "==== Git Branch Cleanup ===="
|
|
6
|
+
echo "This script will DELETE local branches whose remote has been deleted."
|
|
7
|
+
echo ""
|
|
8
|
+
|
|
9
|
+
# List local branches whose remote has been deleted
|
|
10
|
+
gone_branches=$(git for-each-ref --format='%(refname:short) %(upstream:track)' refs/heads/ | grep '\[gone\]' | awk '{print $1}' || true)
|
|
11
|
+
|
|
12
|
+
if [ -z "$gone_branches" ]; then
|
|
13
|
+
echo "No branches with deleted remotes found. ✅"
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
current_branch=$(git symbolic-ref --short HEAD)
|
|
18
|
+
|
|
19
|
+
echo "Found branches with deleted remotes:"
|
|
20
|
+
echo "━━━━━━━━━━━━━━━━"
|
|
21
|
+
echo "$gone_branches"
|
|
22
|
+
echo "━━━━━━━━━━━━━━━━"
|
|
23
|
+
echo ""
|
|
24
|
+
echo "⚠️ WARNING: This will permanently delete these local branches!"
|
|
25
|
+
echo ""
|
|
26
|
+
|
|
27
|
+
# Count branches
|
|
28
|
+
count=$(echo "$gone_branches" | wc -l)
|
|
29
|
+
echo "Total: $count branch(es) to delete"
|
|
30
|
+
echo ""
|
|
31
|
+
|
|
32
|
+
# Ask for confirmation
|
|
33
|
+
read -rp "Continue? [y/N] " -n 1
|
|
34
|
+
echo ""
|
|
35
|
+
|
|
36
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
37
|
+
echo "Aborted. No branches deleted."
|
|
38
|
+
exit 0
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
echo ""
|
|
42
|
+
echo "==== Deleting branches ===="
|
|
43
|
+
for branch in $gone_branches; do
|
|
44
|
+
if [ "$branch" != "$current_branch" ]; then
|
|
45
|
+
echo "Deleting: $branch"
|
|
46
|
+
git branch -D "$branch"
|
|
47
|
+
else
|
|
48
|
+
echo "⚠️ Skipping $branch (currently checked out)"
|
|
49
|
+
fi
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
echo ""
|
|
53
|
+
echo "==== Cleanup completed ===="
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Fetch and prune remote refs
|
|
5
|
+
git fetch --all --prune
|
|
6
|
+
|
|
7
|
+
# Abort if working tree is dirty
|
|
8
|
+
if ! git diff-index --quiet HEAD --; then
|
|
9
|
+
echo "Working tree dirty. Commit/stash changes before running this script."
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
current_branch=$(git symbolic-ref --short HEAD)
|
|
14
|
+
|
|
15
|
+
echo ""
|
|
16
|
+
echo "==== Updating local branches ===="
|
|
17
|
+
for branch in $(git for-each-ref --format='%(refname:short)' refs/heads/); do
|
|
18
|
+
upstream=$(git rev-parse --abbrev-ref "$branch@{upstream}" 2>/dev/null || true)
|
|
19
|
+
if [ -n "$upstream" ]; then
|
|
20
|
+
echo "---- Updating $branch from $upstream ----"
|
|
21
|
+
git checkout "$branch"
|
|
22
|
+
# Fast-forward only; will fail if a merge is required
|
|
23
|
+
if git merge --ff-only "$upstream"; then
|
|
24
|
+
echo "Updated $branch ✅"
|
|
25
|
+
else
|
|
26
|
+
echo "Cannot fast-forward $branch (diverged). Skipping."
|
|
27
|
+
fi
|
|
28
|
+
fi
|
|
29
|
+
done
|
|
30
|
+
|
|
31
|
+
# Return to original branch
|
|
32
|
+
git checkout "$current_branch"
|
|
33
|
+
|
|
34
|
+
echo ""
|
|
35
|
+
echo "==== Update completed ===="
|
|
36
|
+
echo ""
|
|
37
|
+
echo "💡 Tip: Use 'make git-cleanup' to remove local branches with deleted remotes"
|