Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b419b32
:bento: assets: add full favicon set and enrich webmanifest (name, st…
dorae222 Nov 9, 2025
239be0c
:sparkles: feat: enable PWA (service worker, offline fallback, import…
dorae222 Nov 9, 2025
29c1f9d
:truck: chore: strengthen .gitignore for backend/gradle and frontend/…
dorae222 Nov 9, 2025
cf163a1
:bricks: ci: add backend+frontend build workflow on dev/integration
dorae222 Nov 9, 2025
ca0c364
:recycle: refactor: replace initial Vite template with new TypeScript…
dorae222 Nov 9, 2025
baa3882
:memo: docs: update README; :wrench: chore: adjust deploy script
dorae222 Nov 9, 2025
63744fc
:see_no_evil: chore: ignore local backup folders (itdaing-web_backup_*)
dorae222 Nov 9, 2025
7b1fdd4
:lipstick: style: remove redundant 전체보기 buttons from main sections
dorae222 Nov 10, 2025
ff19876
remove mobile version : button
dorae222 Nov 10, 2025
5b2eb55
add: Folder dist
dorae222 Nov 10, 2025
05462d7
✅ test: 전체 테스트 통과를 위한 수정 사항 적용
dorae222 Nov 10, 2025
e40faa6
📝 docs: 문서 구조 개편 - 역할별 분류
dorae222 Nov 10, 2025
a944565
📝 docs: 배포 가이드 및 데이터 초기화 문서 추가, API 타입 생성
dorae222 Nov 10, 2025
956b256
📝 docs: 배포 가이드 및 API 타입 생성, workflow 수정
dorae222 Nov 10, 2025
c382fae
🐛 fix: vitest.config.ts Vite 버전 충돌 해결
dorae222 Nov 10, 2025
a9c74b3
🐛 fix: pnpm 버전 명시 및 vitest 타입 에러 수정
dorae222 Nov 10, 2025
9f6edcd
📝 docs(openapi): API 문서 정보 업데이트
dorae222 Nov 10, 2025
2de24c4
🔧 chore(netlify): pnpm 빌드 환경 설정
dorae222 Nov 10, 2025
b189f42
🔥 chore(ci): 중복 workflow 파일 제거
dorae222 Nov 10, 2025
358600f
🧩 config(openapi): servers/tags/externalDocs 추가 및 동적 버전 주입; YAML 구조 오…
dorae222 Nov 10, 2025
90e6a85
🔧 ci: Gradle project.version→APP_VERSION 주입 체인 확립 및 FE pnpm 안정화
dorae222 Nov 10, 2025
ee2bcaa
🔧 chore(frontend): npm package-lock 제거 및 pnpm 표준화
dorae222 Nov 10, 2025
57d6bf1
📝 docs: OpenAPI 버전 흐름/워크플로 설명 보강
dorae222 Nov 10, 2025
ae0d42c
🔧 ci: project.version→APP_VERSION 주입 체인 및 Swagger gh-pages 자동 배포 활성화
dorae222 Nov 10, 2025
24c0d4e
🚀 ci(pages): API 문서 배포 단일 워크플로로 통합 및 레거시 워크플로 manual 전환
dorae222 Nov 10, 2025
5d8faca
브랜치 리뷰
dorae222 Nov 10, 2025
74244a1
🚀 ci(pages): dev/integration은 Pages 배포 스킵하고 아티팩트만 업로드; main/master에서만…
dorae222 Nov 11, 2025
ab06ffb
🔧 ci(pages): note-when-skipped 단계 YAML 구문 수정 (env로 ref 전달)
dorae222 Nov 11, 2025
3ca029c
Merge remote-tracking branch 'origin/main' into dev/integration
dorae222 Nov 11, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Summary
- [ ] FE / [ ] BE / [ ] CONTRACT / [ ] HOTFIX

### 변경 요약
(간단히 무엇을 왜 변경했는지)

## Tests
- [ ] Unit
- [ ] Integration (DB/S3)
- [ ] E2E (선택)

## Breaking?
- [ ] OpenAPI 변경 (브레이킹 여부: Yes / No)
- [ ] DB 마이그레이션(Flyway)

## Checklist
- [ ] 변경 라인수 ±300 내 유지
- [ ] 관련 문서/주석 업데이트
- [ ] 필요 시 피처 플래그 추가/조정

## Screenshots / API Samples (Optional)
(필요하면 첨부)
27 changes: 27 additions & 0 deletions .github/workflows/be-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: BE CI
on:
pull_request:
branches: [ "dev/integration", "main" ]
paths:
- 'build.gradle.kts'
- 'settings.gradle*'
- 'gradle/**'
- 'src/**'
- '.github/workflows/be-ci.yml'
jobs:
be:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
cache: gradle
- name: Gradle Test
run: |
./gradlew --version
./gradlew clean test -i
34 changes: 34 additions & 0 deletions .github/workflows/be-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: BE Integration (Optional)
on:
workflow_dispatch:
pull_request:
branches: [ "dev/integration", "main" ]
paths:
- 'src/**'
- 'build.gradle.kts'
- '.github/workflows/be-integration.yml'
jobs:
integration-tests:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8
env:
MYSQL_DATABASE: app
MYSQL_ROOT_PASSWORD: root
ports:
- 3306:3306
options: >-
--health-cmd="mysqladmin ping -h 127.0.0.1 -proot"
--health-interval=10s --health-timeout=5s --health-retries=10
steps:
- uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
cache: gradle
- name: Run Integration Tests
run: |
./gradlew test -i -Pintegration
42 changes: 42 additions & 0 deletions .github/workflows/contract-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Contract Check
on:
pull_request:
branches: [ "dev/integration", "main" ]
paths:
- 'build.gradle.kts'
- 'src/**'
- '.github/workflows/contract-check.yml'
jobs:
openapi-diff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
cache: gradle
- name: Generate OpenAPI (springdoc plugin)
run: |
VER=$(./gradlew properties -q | grep '^version:' | awk '{print $2}')
export APP_VERSION=${VER}
./gradlew generateOpenApiDocs -q || ./gradlew generateOpenApiDocs
ls -R build/openapi || true
- name: Copy generated spec
run: |
cp build/openapi/openapi.yaml openapi-pr.yaml || echo '{}' > openapi-pr.yaml
- name: Fetch base spec from dev/integration
run: |
git fetch origin dev/integration:refs/remotes/origin/dev/integration
git show origin/dev/integration:build/openapi/openapi.yaml > openapi-base.yaml || echo '{}' > openapi-base.yaml
- name: Setup Node for diff
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install redocly CLI & diff
run: |
npm i -g @redocly/cli
redocly diff openapi-base.yaml openapi-pr.yaml --fail-on='breaking-changes' || { echo 'OpenAPI breaking changes detected'; exit 1; }
37 changes: 37 additions & 0 deletions .github/workflows/fe-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: FE CI
on:
pull_request:
branches: [ "dev/integration", "main" ]
paths:
- 'itdaing-web/**'
- '.github/workflows/fe-ci.yml'
jobs:
fe:
runs-on: ubuntu-latest
defaults:
run:
working-directory: itdaing-web
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
cache-dependency-path: 'itdaing-web/pnpm-lock.yaml'
- name: Enable corepack & install deps
run: |
corepack enable
corepack prepare pnpm@9.15.0 --activate
pnpm --version
pnpm install --frozen-lockfile
- name: Lint
run: pnpm lint
- name: Typecheck
run: pnpm typecheck
- name: Unit Tests
run: pnpm test
- name: Build
run: pnpm build
120 changes: 120 additions & 0 deletions .github/workflows/publish-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Publish API Docs (OpenAPI + Swagger UI)

# 단일 워크플로로 통합하여 gh-pages 경쟁/취소 문제 해결
# actions/upload-pages-artifact + actions/deploy-pages 사용 (GitHub Pages 권장 방식)

on:
workflow_dispatch:
push:
branches: [ dev/integration, main, master ]
paths:
- 'src/**'
- 'docs/**'
- 'README.md'
- 'build.gradle.kts'
- 'settings.gradle.kts'
- 'src/main/resources/application-openapi.yml'
- '.github/workflows/publish-docs.yml'

permissions:
contents: read # 소스 읽기
pages: write # Pages 배포 권한
id-token: write # deploy-pages OIDC 필요

concurrency:
group: pages-publish
cancel-in-progress: true

jobs:
build-docs:
runs-on: ubuntu-latest
env:
SPRING_PROFILES_ACTIVE: openapi
SERVER_PORT: 8080
JWT_SECRET: ci-docs-secret-please-replace-0123456789-abcdefghijklmnopqrstuvwxyz-long-key
JWT_ISSUER: itdaing-server
JWT_ACCESS_TOKEN_EXPIRATION: "900000"
JWT_REFRESH_TOKEN_EXPIRATION: "604800000"
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'

- name: Prepare Gradle wrapper
run: chmod +x ./gradlew

- name: Generate OpenAPI spec
run: |
VER=$(./gradlew properties -q | grep '^version:' | awk '{print $2}')
export APP_VERSION=${VER}
./gradlew --no-daemon clean generateOpenApiDocs
ls -lah build/openapi || true

- name: Assemble static site
run: |
SITE=site
mkdir -p "$SITE"
cp build/openapi/openapi.yaml "$SITE/openapi.yaml"
cat > "$SITE/index.html" <<'EOF'
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>DA-ITDAING API Docs</title>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css" />
<style>body{margin:0;font-family:system-ui,-apple-system} .topbar{display:none}</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
<script>
fetch('./openapi.yaml')
.then(r => r.json())
.then(spec => {
document.title = `${(spec.info?.title||'API Docs')} - ${(spec.info?.version||'v')}`;
window.ui = SwaggerUIBundle({
spec,
dom_id: '#swagger-ui',
layout: 'BaseLayout'
});
});
</script>
</body>
</html>
EOF
echo "Site assembled: $(ls -1 $SITE)"

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: site

deploy:
needs: build-docs
runs-on: ubuntu-latest
# dev/integration은 환경 보호 규칙으로 배포 금지되어 있어 스킵
if: ${{ github.ref_name == 'main' || github.ref_name == 'master' }}
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

note-when-skipped:
needs: build-docs
runs-on: ubuntu-latest
if: ${{ github.ref_name != 'main' && github.ref_name != 'master' }}
steps:
- name: Note skipped deploy
env:
REF_NAME: ${{ github.ref_name }}
run: |
echo "Deploy skipped: Branch '${REF_NAME}' is not permitted to deploy to GitHub Pages by environment protection rules. Artifact uploaded instead."
17 changes: 6 additions & 11 deletions .github/workflows/publish-openapi.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
name: Publish OpenAPI to GitHub Pages
name: (legacy) Publish OpenAPI to GitHub Pages

on:
# 수동으로만 실행되도록 전환 (자동 푸시는 publish-docs.yml 단일 워크플로 사용)
workflow_dispatch:
push:
branches: [ backend, main, master ]
paths:
- 'src/**'
- 'docs/**'
- 'README.md'
- 'build.gradle.kts'
- 'settings.gradle.kts'
- '.github/workflows/publish-openapi.yml'

# Ensure the GITHUB_TOKEN can push to gh-pages
permissions:
Expand Down Expand Up @@ -46,7 +38,10 @@ jobs:
uses: gradle/actions/setup-gradle@v3

- name: Generate OpenAPI docs
run: ./gradlew --no-daemon clean generateOpenApiDocs
run: |
VER=$(./gradlew properties -q | grep '^version:' | awk '{print $2}')
export APP_VERSION=${VER}
./gradlew --no-daemon clean generateOpenApiDocs

- name: Prepare static Swagger site
run: |
Expand Down
Loading