diff --git a/.gitea/workflows/code_check.yml b/.gitea/workflows/code_check.yml index e5c27307..77d23ab5 100644 --- a/.gitea/workflows/code_check.yml +++ b/.gitea/workflows/code_check.yml @@ -95,11 +95,12 @@ jobs: npx biome check . --linter-enabled=false --organize-imports-enabled=false - name: Lint Go backend - uses: golangci/golangci-lint-action@v6 - with: - version: v1.59 - working-directory: backend - args: --enable-only=gofmt,gofumpt + run: | + docker run --rm \ + -v "${PWD}/backend:/app" \ + -w /app \ + golangci/golangci-lint:v2.10.1 \ + golangci-lint fmt -E gofmt -E gofumpt -d - name: Sync userfront locales run: | diff --git a/Makefile b/Makefile index bd75229a..87e0a8f0 100644 --- a/Makefile +++ b/Makefile @@ -107,11 +107,30 @@ logs-app: docker compose -f $(COMPOSE_APP) logs -f # --- 로컬 통합 코드 체크 --- -.PHONY: code-check code-check-i18n code-check-go-lint code-check-userfront-lint code-check-front-lint code-check-backend-tests code-check-userfront-tests code-check-adminfront-tests code-check-devfront-tests code-check-userfront-e2e-tests +ifeq ($(CI),) +PLAYWRIGHT_INSTALL_ALL := npx playwright install +PLAYWRIGHT_INSTALL_CHROMIUM := npx playwright install chromium +else +PLAYWRIGHT_INSTALL_ALL := npx playwright install --with-deps +PLAYWRIGHT_INSTALL_CHROMIUM := npx playwright install --with-deps chromium +endif -code-check: code-check-i18n code-check-go-lint code-check-userfront-lint code-check-front-lint code-check-backend-tests code-check-userfront-tests code-check-adminfront-tests code-check-devfront-tests code-check-userfront-e2e-tests +.PHONY: code-check code-check-lint code-check-test-jobs code-check-i18n code-check-go-lint code-check-sync-userfront-locales code-check-userfront-install code-check-userfront-lint code-check-front-lint code-check-backend-tests code-check-userfront-tests code-check-adminfront-tests code-check-devfront-tests code-check-userfront-e2e-tests + +code-check: code-check-lint code-check-test-jobs @echo "code-check complete." +code-check-lint: code-check-i18n code-check-front-lint code-check-go-lint code-check-sync-userfront-locales code-check-userfront-install code-check-userfront-lint + +code-check-test-jobs: + @echo "==> run CI-equivalent test jobs (parallel)" + @$(MAKE) --no-print-directory -j5 --output-sync=target \ + code-check-backend-tests \ + code-check-userfront-tests \ + code-check-userfront-e2e-tests \ + code-check-adminfront-tests \ + code-check-devfront-tests + code-check-i18n: @echo "==> i18n resource check" @mkdir -p reports @@ -122,60 +141,83 @@ code-check-i18n: code-check-go-lint: @echo "==> go lint/format check" @if command -v golangci-lint >/dev/null 2>&1; then \ - cd backend && golangci-lint run --enable-only=gofmt,gofumpt; \ + cd backend && golangci-lint fmt -E gofmt -E gofumpt -d; \ + elif command -v docker >/dev/null 2>&1; then \ + docker run --rm \ + -v "$$(pwd)/backend:/app" \ + -w /app \ + golangci/golangci-lint:v2.10.1 \ + golangci-lint fmt -E gofmt -E gofumpt -d; \ else \ - echo "WARN: golangci-lint not found, fallback to gofmt check only."; \ - unformatted="$$(cd backend && gofmt -l .)"; \ - if [ -n "$$unformatted" ]; then \ - echo "gofmt required:"; \ - echo "$$unformatted"; \ - exit 1; \ - fi; \ + echo "ERROR: golangci-lint not found and docker is unavailable."; \ + echo "Install golangci-lint v2.10.1 or Docker to match CI lint step."; \ + exit 1; \ fi +code-check-sync-userfront-locales: + @echo "==> sync userfront locales" + /bin/sh ./scripts/sync_userfront_locales.sh + +code-check-userfront-install: + @echo "==> install userfront dependencies" + cd userfront && flutter pub get + code-check-userfront-lint: @echo "==> userfront format/analyze" - cd userfront && flutter pub get - cd userfront && dart format --output=show --set-exit-if-changed lib test + cd userfront && dart format --output=none --set-exit-if-changed lib test cd userfront && flutter analyze --no-fatal-warnings --no-fatal-infos code-check-front-lint: @echo "==> adminfront biome lint/format check" + rm -rf adminfront/playwright-report adminfront/test-results cd adminfront && npm ci - cd adminfront && npx biome check src tests playwright.config.ts --formatter-enabled=false --organize-imports-enabled=false - cd adminfront && npx biome check src tests playwright.config.ts --linter-enabled=false --organize-imports-enabled=false + cd adminfront && npx biome check . --formatter-enabled=false --organize-imports-enabled=false + cd adminfront && npx biome check . --linter-enabled=false --organize-imports-enabled=false @echo "==> devfront biome lint/format check" + rm -rf devfront/playwright-report devfront/test-results cd devfront && npm ci - cd devfront && npx biome check src tests playwright.config.ts --formatter-enabled=false --organize-imports-enabled=false - cd devfront && npx biome check src tests playwright.config.ts --linter-enabled=false --organize-imports-enabled=false + cd devfront && npx biome check . --formatter-enabled=false --organize-imports-enabled=false + cd devfront && npx biome check . --linter-enabled=false --organize-imports-enabled=false code-check-backend-tests: @echo "==> backend tests" cd backend && go test -v ./... code-check-userfront-tests: - @echo "==> userfront tests" - cd userfront && flutter test + @echo "==> userfront tests (isolated workspace)" + @tmp_dir="$$(mktemp -d /tmp/baron-sso-userfront-tests.XXXXXX)"; \ + trap 'rm -rf "$$tmp_dir"' EXIT INT TERM; \ + mkdir -p "$$tmp_dir/scripts"; \ + cp scripts/sync_userfront_locales.sh "$$tmp_dir/scripts/"; \ + cp -R locales "$$tmp_dir/locales"; \ + if command -v rsync >/dev/null 2>&1; then \ + rsync -a --delete \ + --exclude '.dart_tool' \ + --exclude 'build' \ + --exclude '.pub-cache' \ + --exclude '.flutter-plugins' \ + --exclude '.flutter-plugins-dependencies' \ + userfront/ "$$tmp_dir/userfront/"; \ + else \ + cp -R userfront "$$tmp_dir/userfront"; \ + rm -rf "$$tmp_dir/userfront/.dart_tool" "$$tmp_dir/userfront/build"; \ + fi; \ + cd "$$tmp_dir" && /bin/sh ./scripts/sync_userfront_locales.sh; \ + cd "$$tmp_dir/userfront" && flutter test code-check-adminfront-tests: @echo "==> adminfront tests" - @mkdir -p reports/adminfront - @rm -rf reports/adminfront/playwright-report reports/adminfront/test-results - @status=0; \ - (cd adminfront && npx playwright install) || status=$$?; \ - if [ $$status -eq 0 ]; then \ - (cd adminfront && npm test) || status=$$?; \ - fi; \ - [ -d adminfront/playwright-report ] && cp -R adminfront/playwright-report reports/adminfront/ || true; \ - [ -d adminfront/test-results ] && cp -R adminfront/test-results reports/adminfront/ || true; \ - exit $$status + ./scripts/run_adminfront_ci_tests.sh adminfront-tests code-check-devfront-tests: @echo "==> devfront tests" @mkdir -p reports/devfront @rm -rf reports/devfront/playwright-report reports/devfront/test-results @status=0; \ - (cd devfront && npx playwright install) || status=$$?; \ + (cd devfront && npm ci) || status=$$?; \ + if [ $$status -eq 0 ]; then \ + (cd devfront && $(PLAYWRIGHT_INSTALL_ALL)) || status=$$?; \ + fi; \ if [ $$status -eq 0 ]; then \ (cd devfront && npm test) || status=$$?; \ fi; \ @@ -184,20 +226,47 @@ code-check-devfront-tests: exit $$status code-check-userfront-e2e-tests: - @echo "==> userfront wasm playwright e2e tests" + @echo "==> userfront wasm playwright e2e tests (isolated workspace)" @mkdir -p reports/userfront-e2e @rm -rf reports/userfront-e2e/playwright-report reports/userfront-e2e/test-results - @status=0; \ - (cd userfront && flutter build web --wasm --release) || status=$$?; \ + @tmp_dir="$$(mktemp -d /tmp/baron-sso-userfront-e2e-tests.XXXXXX)"; \ + trap 'rm -rf "$$tmp_dir"' EXIT INT TERM; \ + mkdir -p "$$tmp_dir/scripts"; \ + cp scripts/sync_userfront_locales.sh "$$tmp_dir/scripts/"; \ + cp -R locales "$$tmp_dir/locales"; \ + if command -v rsync >/dev/null 2>&1; then \ + rsync -a --delete \ + --exclude '.dart_tool' \ + --exclude 'build' \ + --exclude '.pub-cache' \ + --exclude '.flutter-plugins' \ + --exclude '.flutter-plugins-dependencies' \ + userfront/ "$$tmp_dir/userfront/"; \ + rsync -a --delete \ + --exclude 'node_modules' \ + --exclude 'playwright-report' \ + --exclude 'test-results' \ + userfront-e2e/ "$$tmp_dir/userfront-e2e/"; \ + else \ + cp -R userfront "$$tmp_dir/userfront"; \ + rm -rf "$$tmp_dir/userfront/.dart_tool" "$$tmp_dir/userfront/build"; \ + cp -R userfront-e2e "$$tmp_dir/userfront-e2e"; \ + rm -rf "$$tmp_dir/userfront-e2e/node_modules" "$$tmp_dir/userfront-e2e/playwright-report" "$$tmp_dir/userfront-e2e/test-results"; \ + fi; \ + status=0; \ + (cd "$$tmp_dir" && /bin/sh ./scripts/sync_userfront_locales.sh) || status=$$?; \ if [ $$status -eq 0 ]; then \ - (cd userfront-e2e && npm ci) || status=$$?; \ + (cd "$$tmp_dir/userfront-e2e" && npm ci) || status=$$?; \ fi; \ if [ $$status -eq 0 ]; then \ - (cd userfront-e2e && npx playwright install --with-deps chromium) || status=$$?; \ + (cd "$$tmp_dir/userfront" && flutter build web --wasm --release) || status=$$?; \ fi; \ if [ $$status -eq 0 ]; then \ - (cd userfront-e2e && npm test) || status=$$?; \ + (cd "$$tmp_dir/userfront-e2e" && $(PLAYWRIGHT_INSTALL_CHROMIUM)) || status=$$?; \ fi; \ - [ -d userfront-e2e/playwright-report ] && cp -R userfront-e2e/playwright-report reports/userfront-e2e/ || true; \ - [ -d userfront-e2e/test-results ] && cp -R userfront-e2e/test-results reports/userfront-e2e/ || true; \ + if [ $$status -eq 0 ]; then \ + (cd "$$tmp_dir/userfront-e2e" && npm test) || status=$$?; \ + fi; \ + [ -d "$$tmp_dir/userfront-e2e/playwright-report" ] && cp -R "$$tmp_dir/userfront-e2e/playwright-report" reports/userfront-e2e/ || true; \ + [ -d "$$tmp_dir/userfront-e2e/test-results" ] && cp -R "$$tmp_dir/userfront-e2e/test-results" reports/userfront-e2e/ || true; \ exit $$status diff --git a/adminfront/playwright-report/index.html b/adminfront/playwright-report/index.html index c67d9584..a369469d 100644 --- a/adminfront/playwright-report/index.html +++ b/adminfront/playwright-report/index.html @@ -82,4 +82,4 @@ Error generating stack: `+a.message+`