Skip to content
This repository was archived by the owner on Mar 15, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0c1325c
feat: API 테스트 스케줄링 workflow 작성
sangwonsheep Mar 1, 2025
f141264
Merge pull request #1166 from Kernel360/cicd/workflow
sangwonsheep Mar 1, 2025
764f0f4
chore: workflow 수정
sangwonsheep Mar 1, 2025
6625d95
Merge pull request #1167 from Kernel360/cicd/workflow
sangwonsheep Mar 1, 2025
ff4a27c
chore: workflow 수정
sangwonsheep Mar 1, 2025
ae2b6d9
Merge pull request #1168 from Kernel360/cicd/workflow
sangwonsheep Mar 1, 2025
4b34e3d
[FIX] 검색창 남던 부분 제거 (#1174)
dmdgpdi Mar 3, 2025
ce91434
[FIX] 폴더 변경 후 폴더 닫히지 않는 문제 및 아이콘 변경 문제 수정 (#1175)
dmdgpdi Mar 3, 2025
474bcba
[FIX] 추천 페이지에서 휴지통으로 생성 차단 (#1178)
dmdgpdi Mar 3, 2025
d69c2f7
[FIX] 공유 폴더 페이지 OG Image 생성 안되는 문제 수정 (#1179)
dmdgpdi Mar 3, 2025
26eabc0
[FIX] 프론트엔드 관련 버그 제거
dmdgpdi Mar 3, 2025
098ef80
Revert "[FIX] 프론트엔드 관련 버그 제거"
sangwonsheep Mar 3, 2025
92ad0d3
Merge pull request #1181 from Kernel360/revert-1180-develop_fe
sangwonsheep Mar 3, 2025
b72687e
Revert "Merge pull request #1181 from Kernel360/revert-1180-develop_fe"
dmdgpdi Mar 3, 2025
a8a2bde
Merge pull request #1183 from Kernel360/front/fix/revert
dmdgpdi Mar 3, 2025
0d77db6
feat: influxdb token 방식 사용하는 workflow 생성
sangwonsheep Mar 3, 2025
3aaff2e
Merge pull request #1184 from Kernel360/cicd/workflow
sangwonsheep Mar 3, 2025
29cc70e
fix: 불필요한 workflow 제거
sangwonsheep Mar 3, 2025
f52b79f
Merge pull request #1185 from Kernel360/cicd/workflow
sangwonsheep Mar 3, 2025
5bede7b
Merge pull request #1188 from Kernel360/develop_be
sangwonsheep Mar 3, 2025
f5190e4
fix: 스테이징 로그백 설정
kimminkyeu Mar 4, 2025
3b69db8
Merge pull request #1189 from Kernel360/back/fix/staging-logback
kimminkyeu Mar 4, 2025
ac09585
fix: 배포 스크립트에 모듈명 업데이트
kimminkyeu Mar 4, 2025
b72d642
Merge pull request #1192 from Kernel360/back/fix/workflow-dix
kimminkyeu Mar 4, 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
71 changes: 71 additions & 0 deletions .github/workflows/baguni.api.automation.test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Baguni Automation Api-Test CI/CD

on:
schedule:
# 매 1시간마다 (UTC 기준, 0분에 실행)
- cron: '0 */1 * * *'
workflow_dispatch: # 수동으로 workflow 실행 시 필요

jobs:
deploy:
runs-on: ubuntu-latest
env:
api-endpoint: https://api.staging.minlife.me

steps:
# 저장소 Checkout
- name: Checkout source code
uses: actions/checkout@v4

# 서버가 완전히 기동될 때까지 대기하는 단계 (항상 서버가 떠있어야 테스트 가능)
- name: Wait for API Server to be Ready
run: |
echo "🔍 Checking API server status..."
attempt=0
max_attempts=10

while true; do
http_status=$(curl -o /dev/null -s -w "%{http_code}" ${{ env.api-endpoint }})

if [ "$http_status" -ne 502 ]; then
echo "✅ API Server responded Continuing..."
break
fi

attempt=$((attempt+1))
if [ $attempt -ge $max_attempts ]; then
echo "❌ API Server is still returning 502 after $max_attempts attempts. Exiting..."
exit 1
fi

echo "⏳ API Server still returning 502 (Bad Gateway), retrying in 5 seconds... (Attempt: $attempt)"
sleep 5
done

# Node 설치
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 20

# Newman, InfluxDB reporter 설치
- name: Install newman and InfluxDB reporter
run: |
npm install -g newman
npm install -g git+https://github.com/sangwonsheep/newman-reporter-influxdb.git

# Newman API 테스트 실행 결과 InfluxDB에 적재
- name: Run Postman collection
run: |
newman run ${{ secrets.POSTMAN_COLLECTION_URL }} \
-r influxdb \
--reporter-influxdb-org ${{ secrets.INFLUXDB_ORG }} \
--reporter-influxdb-name ${{ secrets.INFLUXDB_BUCKET }} \
--reporter-influxdb-username ${{ secrets.INFLUXDB_USERNAME }} \
--reporter-influxdb-password ${{ secrets.INFLUXDB_PASSWORD }} \
--reporter-influxdb-token ${{ secrets.INFLUXDB_TOKEN }} \
--reporter-influxdb-version 2 \
--reporter-influxdb-measurement newman_metrics \
--reporter-influxdb-server influxdb.minlife.me \
--reporter-influxdb-mode https \
--reporter-influxdb-port 443
2 changes: 1 addition & 1 deletion .github/workflows/baguni.develop.api.deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- 'develop_be' # 배포 대상 브랜치
paths:
- 'backend/baguni-common/**'
- 'backend/baguni-domain/**'
- 'backend/baguni-infra/**'
- 'backend/baguni-api/**'
workflow_dispatch:

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/baguni.develop.batch.deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- 'develop_be' # 배포 대상 브랜치
paths:
- 'backend/baguni-common/**'
- 'backend/baguni-domain/**'
- 'backend/baguni-infra/**'
- 'backend/baguni-batch/**'
workflow_dispatch:

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/baguni.prod.api.deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- 'main' # 배포 대상 브랜치
paths:
- 'backend/baguni-common/**'
- 'backend/baguni-domain/**'
- 'backend/baguni-infra/**'
- 'backend/baguni-api/**'
workflow_dispatch:

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/baguni.prod.batch.deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- 'main' # 배포 대상 브랜치
paths:
- 'backend/baguni-common/**'
- 'backend/baguni-domain/**'
- 'backend/baguni-infra/**'
- 'backend/baguni-batch/**'
workflow_dispatch:

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/baguni.staging.api.deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- 'staging' # 배포 대상 브랜치
paths:
- 'backend/baguni-common/**'
- 'backend/baguni-domain/**'
- 'backend/baguni-infra/**'
- 'backend/baguni-api/**'
workflow_dispatch:

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/baguni.staging.batch.deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- 'staging' # 배포 대상 브랜치
paths:
- 'backend/baguni-common/**'
- 'backend/baguni-domain/**'
- 'backend/baguni-infra/**'
- 'backend/baguni-batch/**'
workflow_dispatch:

Expand Down
13 changes: 13 additions & 0 deletions backend/baguni-api/src/main/resources/logback-spring.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,19 @@
</root>
</springProfile>

<springProfile name="staging">
<logger name="org.hibernate.orm.jdbc.bind" level="trace" additivity="false"/> <!-- exclude query -->
<logger name="org.hibernate.SQL" level="debug" additivity="false"/> <!-- exclude query -->
<logger name="org.hibernate" level="debug" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="OpenTelemetry"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="OpenTelemetry"/>
</root>
</springProfile>

<springProfile name="prod">
<logger name="org.hibernate.orm.jdbc.bind" level="trace" additivity="false"/> <!-- exclude query -->
<logger name="org.hibernate.SQL" level="debug" additivity="false"/> <!-- exclude query -->
Expand Down
13 changes: 13 additions & 0 deletions backend/baguni-batch/src/main/resources/logback-spring.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,19 @@
</root>
</springProfile>

<springProfile name="staging">
<logger name="org.hibernate.orm.jdbc.bind" level="trace" additivity="false"/> <!-- exclude query -->
<logger name="org.hibernate.SQL" level="debug" additivity="false"/> <!-- exclude query -->
<logger name="org.hibernate" level="debug" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="OpenTelemetry"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="OpenTelemetry"/>
</root>
</springProfile>

<springProfile name="prod">
<logger name="org.hibernate.orm.jdbc.bind" level="trace" additivity="false"/> <!-- exclude query -->
<logger name="org.hibernate.SQL" level="debug" additivity="false"/> <!-- exclude query -->
Expand Down
45 changes: 29 additions & 16 deletions frontend/techpick/src/app/api/generate-og-image/route.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,16 @@ const styles = {

async function isValidImageUrl(url: string): Promise<boolean> {
try {
const res = await fetch(url, { method: 'HEAD' });
return (
res.ok && res.headers.get('Content-Type')?.startsWith('image/') === true
);
const res = await fetch(url, { method: 'GET' });
if (!res.ok) return false;

const contentType = res.headers.get('Content-Type');
const validTypes = ['image/png', 'image/jpeg', 'image/webp'];
return validTypes.some((type) => contentType?.startsWith(type));
} catch {
return false;
}
}

const getImageStyle = (index: number) => {
return styles[index as keyof typeof styles] || styles[16];
};
Expand Down Expand Up @@ -95,17 +96,29 @@ export async function GET(req: NextRequest) {
}}
>
{images.map((url: string, index: number) => (
<img
// biome-ignore lint/a11y/noRedundantAlt: <explanation>
alt="open graph image"
// biome-ignore lint/suspicious/noArrayIndexKey: <explanation>
key={index}
src={url}
style={{
...getImageStyle(imageCount),
objectFit: 'cover',
}}
/>
// biome-ignore lint/suspicious/noArrayIndexKey: <explanation>
<div key={index} style={{ display: 'flex', position: 'relative' }}>
<img
alt=""
src={url}
style={{
...getImageStyle(imageCount),
objectFit: 'cover',
opacity: '0.5',
}}
/>
<img
alt=""
src={url}
style={{
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
objectFit: 'scale-down',
}}
/>
</div>
))}
</div>,
{ width, height },
Expand Down
7 changes: 6 additions & 1 deletion frontend/techpick/src/components/Search2/searchDialog.css.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { dialogContentLayoutStyle } from '@/styles/dialogStyle.css';
import { style } from '@vanilla-extract/css';
import { desktop } from 'techpick-shared';

export const dialogContent = style([
dialogContentLayoutStyle,
Expand All @@ -8,7 +9,11 @@ export const dialogContent = style([
padding: '16px',
width: '100%',
minWidth: '300px',
maxWidth: '800px',
'@media': {
[desktop]: {
maxWidth: '800px',
},
},
},
]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ export function FolderNavigationItem({ folderId }: FolderNavigationItemProps) {
const isShared = !!folderInfo?.folderAccessToken;
let folderIcon = FolderClosedIcon;

if (isActive) {
folderIcon = FolderOpenIcon;
} else if (isShared) {
if (isShared) {
folderIcon = FolderUpIcon;
} else if (isActive) {
folderIcon = FolderOpenIcon;
}

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ export function UpdateFolderNameInput({
!containerRef.current.contains(event.target as Node)
) {
onSubmit();
onCloseUpdateFolderInput();
}
};

Expand All @@ -62,7 +63,7 @@ export function UpdateFolderNameInput({
document.removeEventListener('mousedown', handleClickOutside);
};
},
[onSubmit],
[onSubmit, onCloseUpdateFolderInput],
);

useEffect(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
'use client';
import { useEventLogger } from '@/libs/@eventlog/useEventLogger';
import { useCreatePick } from '@/queries/useCreatePick';
import { useFetchBasicFolders } from '@/queries/useFetchBasicFolders';
import { useDraggingRecommendPickStore } from '@/stores/draggingRecommendPickStore';
import { isPickToFolderDroppableObject } from '@/utils/isPickToFolderDroppableObject';
import { isRecommendPickDraggableObject } from '@/utils/isRecommendPickDraggableObject';
import { notifySuccess } from '@/utils/toast';
import { notifyError, notifySuccess } from '@/utils/toast';
import { useDndMonitor } from '@dnd-kit/core';
import type {
DragEndEvent,
Expand All @@ -16,6 +17,7 @@ import type {
* @description 추천 목록에서 folder로 dnd를 할 때의 이벤트를 감지하고 동작하는 hook입니다.
*/
export function useRecommendPickToFolderDndMonitor() {
const { data: basicFolderRecord } = useFetchBasicFolders();
const { mutate: createPick } = useCreatePick();
const { setIsDragging, setDraggingPickInfo } =
useDraggingRecommendPickStore();
Expand Down Expand Up @@ -64,6 +66,11 @@ export function useRecommendPickToFolderDndMonitor() {

const { url, title, imageUrl, description } = activeObject;

if (overObject.id === basicFolderRecord?.RECYCLE_BIN.id) {
notifyError('휴지통에는 추가할 수 없습니다!');
return;
}

createPick(
{
title,
Expand Down