diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml deleted file mode 100644 index f472681..0000000 --- a/.gitea/workflows/build.yml +++ /dev/null @@ -1,191 +0,0 @@ -name: Build Docker Image - -on: - push: - branches: [main, develop] - tags: - - 'v*' - workflow_dispatch: - -env: - REGISTRY: gitea0213.kro.kr - IMAGE_NAME: ${{ github.repository }} - DOCKER_HOST: tcp://172.17.0.1:2375 - -jobs: - build-and-push: - runs-on: ubuntu-24.04-arm - permissions: - contents: write - packages: write - - outputs: - image-tag: ${{ steps.meta.outputs.tags }} - image-digest: ${{ steps.build.outputs.digest }} - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Log in to Gitea Container Registry - run: | - echo "${{ secrets.GITEAREGISTRY }}" | docker login ${{ env.REGISTRY }} -u bluemayne --password-stdin - - - name: Lowercase repository name - id: lowercase - run: | - echo "repo=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT - - - name: Extract metadata (tags, labels) - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY }}/${{ steps.lowercase.outputs.repo }} - tags: | - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=sha,prefix={{branch}}-sha-,format=long - type=raw,value=latest,enable={{is_default_branch}} - - - name: Build and push Docker image - id: build - run: | - TAGS="${{ steps.meta.outputs.tags }}" - - # Build the image - docker build \ - -t $(echo "$TAGS" | head -n 1) \ - -f ./deploy/docker/Dockerfile.prod \ - ./services/nextjs - - # Tag all versions - FIRST_TAG=$(echo "$TAGS" | head -n 1) - echo "$TAGS" | while read tag; do - if [ "$tag" != "$FIRST_TAG" ]; then - docker tag "$FIRST_TAG" "$tag" - fi - done - - # Push all tags - echo "$TAGS" | while read tag; do - docker push "$tag" - done - - # Get digest - DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' "$FIRST_TAG" | cut -d'@' -f2) - echo "digest=$DIGEST" >> $GITHUB_OUTPUT - - - name: Extract SHA tag - id: extract-tag - run: | - # Extract the SHA-based tag from the tags list - TAGS="${{ steps.meta.outputs.tags }}" - echo "All tags:" - echo "$TAGS" - echo "---" - - # Get commit SHA (full 40 characters) - COMMIT_SHA="${{ github.sha }}" - - # Get current branch name - BRANCH_NAME="${{ github.ref_name }}" - echo "Branch: $BRANCH_NAME" - - # Method 1: Extract the full SHA tag from docker/metadata-action output - # docker/metadata-action creates: -sha- - SHA_TAG=$(echo "$TAGS" | grep -oE "${BRANCH_NAME}-sha-[a-f0-9]{40}" | head -n 1) - - # Method 2: If not found, try to extract any branch-sha- tag (fallback) - if [ -z "$SHA_TAG" ]; then - SHA_TAG=$(echo "$TAGS" | grep -oE "${BRANCH_NAME}-sha-[a-f0-9]+" | head -n 1) - if [ -n "$SHA_TAG" ]; then - echo "⚠️ Found SHA tag (may not be full 40 chars): $SHA_TAG" - fi - fi - - # Method 3: Fallback to commit SHA directly (construct the tag) - if [ -z "$SHA_TAG" ]; then - SHA_TAG="${BRANCH_NAME}-sha-$COMMIT_SHA" - echo "⚠️ Could not extract from tags, using commit SHA: $SHA_TAG" - fi - - if [ -z "$SHA_TAG" ]; then - echo "❌ ERROR: Failed to extract SHA tag" - exit 1 - fi - - echo "sha-tag=$SHA_TAG" >> $GITHUB_OUTPUT - echo "✅ Extracted SHA tag: $SHA_TAG" - - - name: Update kustomization with new image tag - env: - GITEA_TOKEN: ${{ secrets.GITEAREGISTRYTOKEN }} - run: | - git config --global user.name "gitea-actions[bot]" - git config --global user.email "gitea-actions[bot]@users.noreply.gitea.com" - - # Validate that SHA_TAG is not empty - SHA_TAG="${{ steps.extract-tag.outputs.sha-tag }}" - if [ -z "$SHA_TAG" ]; then - echo "❌ ERROR: SHA_TAG is empty, cannot update kustomization" - exit 1 - fi - - # Determine overlay based on branch - BRANCH_NAME="${{ github.ref_name }}" - if [ "$BRANCH_NAME" = "main" ]; then - OVERLAY="prod" - elif [ "$BRANCH_NAME" = "develop" ]; then - OVERLAY="dev" - else - echo "⚠️ Unknown branch: $BRANCH_NAME, skipping kustomization update" - exit 0 - fi - - KUSTOMIZATION_FILE="deploy/k8s/overlays/$OVERLAY/kustomization.yaml" - - # Check if kustomization file has images section - if grep -q "images:" "$KUSTOMIZATION_FILE"; then - echo "📝 Updating $KUSTOMIZATION_FILE with tag: $SHA_TAG" - - # Update kustomization.yaml with new image tag - # Handle both cases: newTag: (with value) and newTag: (empty) - sed -i.bak "s|newTag:.*|newTag: $SHA_TAG|" "$KUSTOMIZATION_FILE" - - # Verify the update was successful - if grep -q "newTag: $SHA_TAG" "$KUSTOMIZATION_FILE"; then - echo "✅ Successfully updated kustomization.yaml" - rm -f "$KUSTOMIZATION_FILE.bak" - else - echo "❌ ERROR: Failed to update kustomization.yaml" - cat "$KUSTOMIZATION_FILE" - exit 1 - fi - - # Commit and push if there are changes - if git diff --quiet; then - echo "No changes to commit" - else - git add "$KUSTOMIZATION_FILE" - git commit -m "Update $OVERLAY image to $SHA_TAG" - git push - echo "✅ Kustomization updated with new image tag: $SHA_TAG" - fi - else - echo "ℹ️ $OVERLAY overlay uses base image (latest tag), skipping kustomization update" - echo " Image built with tag: $SHA_TAG" - fi - - - name: Display image information - run: | - echo "✅ Image built and pushed successfully!" - echo "📦 Image tags:" - echo "${{ steps.meta.outputs.tags }}" - echo "🔖 SHA tag: ${{ steps.extract-tag.outputs.sha-tag }}" - echo "🔖 Digest: ${{ steps.build.outputs.digest }}" - echo "" - echo "🚀 Kustomization updated with new image tag" - echo " ArgoCD will automatically detect and deploy this new image" - echo " Monitor deployment at your ArgoCD dashboard" diff --git a/.gitea/workflows/build.yml.tmp b/.gitea/workflows/build.yml.tmp deleted file mode 100644 index e69de29..0000000 diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml deleted file mode 100644 index e2879a5..0000000 --- a/.gitea/workflows/ci.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: CI - -on: - push: - branches: [main, develop] - pull_request: - branches: [main, develop] - -jobs: - lint-and-build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - cache: 'npm' - cache-dependency-path: services/nextjs/package-lock.json - - - name: Install dependencies - working-directory: services/nextjs - run: npm ci - - - name: Run ESLint - working-directory: services/nextjs - run: npm run lint - - - name: Build Next.js application - working-directory: services/nextjs - run: npm run build - env: - NEXT_TELEMETRY_DISABLED: 1 - - - name: Check build output - working-directory: services/nextjs - run: | - if [ ! -d ".next" ]; then - echo "Build failed: .next directory not found" - exit 1 - fi - echo "✅ Build completed successfully" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a75539b..c7ee892 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,7 +2,7 @@ name: Build Docker Image on: push: - branches: [main, develop] + branches: [main] tags: - 'v*' workflow_dispatch: @@ -15,7 +15,7 @@ jobs: build-and-push: runs-on: ubuntu-24.04-arm permissions: - contents: write + contents: read packages: write outputs: @@ -47,19 +47,17 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ steps.lowercase.outputs.repo }} tags: | - type=ref,event=branch - type=ref,event=pr + type=sha,prefix=sha-,format=long + type=raw,value=latest,enable={{is_default_branch}} type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} - type=sha,prefix={{branch}}-sha-,format=long - type=raw,value=latest,enable={{is_default_branch}} - name: Build and push Docker image id: build uses: docker/build-push-action@v5 with: - context: ./services/nextjs - file: ./deploy/docker/Dockerfile.prod + context: ./nextjs + file: ./Dockerfile push: true platforms: linux/arm64 tags: ${{ steps.meta.outputs.tags }} @@ -67,115 +65,9 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - - name: Extract SHA tag - id: extract-tag - run: | - # Extract the SHA-based tag from the tags list - TAGS="${{ steps.meta.outputs.tags }}" - echo "All tags:" - echo "$TAGS" - echo "---" - - # Get commit SHA (full 40 characters) - COMMIT_SHA="${{ github.sha }}" - - # Get current branch name - BRANCH_NAME="${{ github.ref_name }}" - echo "Branch: $BRANCH_NAME" - - # Method 1: Extract the full SHA tag from docker/metadata-action output - # docker/metadata-action creates: -sha- - SHA_TAG=$(echo "$TAGS" | grep -oE "${BRANCH_NAME}-sha-[a-f0-9]{40}" | head -n 1) - - # Method 2: If not found, try to extract any branch-sha- tag (fallback) - if [ -z "$SHA_TAG" ]; then - SHA_TAG=$(echo "$TAGS" | grep -oE "${BRANCH_NAME}-sha-[a-f0-9]+" | head -n 1) - if [ -n "$SHA_TAG" ]; then - echo "⚠️ Found SHA tag (may not be full 40 chars): $SHA_TAG" - fi - fi - - # Method 3: Fallback to commit SHA directly (construct the tag) - if [ -z "$SHA_TAG" ]; then - SHA_TAG="${BRANCH_NAME}-sha-$COMMIT_SHA" - echo "⚠️ Could not extract from tags, using commit SHA: $SHA_TAG" - fi - - if [ -z "$SHA_TAG" ]; then - echo "❌ ERROR: Failed to extract SHA tag" - exit 1 - fi - - echo "sha-tag=$SHA_TAG" >> $GITHUB_OUTPUT - echo "✅ Extracted SHA tag: $SHA_TAG" - - - name: Update kustomization with new image tag - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - - # Validate that SHA_TAG is not empty - SHA_TAG="${{ steps.extract-tag.outputs.sha-tag }}" - if [ -z "$SHA_TAG" ]; then - echo "❌ ERROR: SHA_TAG is empty, cannot update kustomization" - exit 1 - fi - - # Determine overlay based on branch - BRANCH_NAME="${{ github.ref_name }}" - if [ "$BRANCH_NAME" = "main" ]; then - OVERLAY="prod" - elif [ "$BRANCH_NAME" = "develop" ]; then - OVERLAY="dev" - else - echo "⚠️ Unknown branch: $BRANCH_NAME, skipping kustomization update" - exit 0 - fi - - KUSTOMIZATION_FILE="deploy/k8s/overlays/$OVERLAY/kustomization.yaml" - - # Check if kustomization file has images section - if grep -q "images:" "$KUSTOMIZATION_FILE"; then - echo "📝 Updating $KUSTOMIZATION_FILE with tag: $SHA_TAG" - - # Update kustomization.yaml with new image tag - # Handle both cases: newTag: (with value) and newTag: (empty) - sed -i.bak "s|newTag:.*|newTag: $SHA_TAG|" "$KUSTOMIZATION_FILE" - - # Verify the update was successful - if grep -q "newTag: $SHA_TAG" "$KUSTOMIZATION_FILE"; then - echo "✅ Successfully updated kustomization.yaml" - rm -f "$KUSTOMIZATION_FILE.bak" - else - echo "❌ ERROR: Failed to update kustomization.yaml" - cat "$KUSTOMIZATION_FILE" - exit 1 - fi - - # Commit and push if there are changes - if git diff --quiet; then - echo "No changes to commit" - else - git add "$KUSTOMIZATION_FILE" - git commit -m "Update $OVERLAY image to $SHA_TAG" - git push - echo "✅ Kustomization updated with new image tag: $SHA_TAG" - fi - else - echo "ℹ️ $OVERLAY overlay uses base image (latest tag), skipping kustomization update" - echo " Image built with tag: $SHA_TAG" - fi - - name: Display image information run: | - echo "✅ Image built and pushed successfully!" - echo "📦 Image tags:" + echo "Image built and pushed successfully!" + echo "Image tags:" echo "${{ steps.meta.outputs.tags }}" - echo "🔖 SHA tag: ${{ steps.extract-tag.outputs.sha-tag }}" - echo "🔖 Digest: ${{ steps.build.outputs.digest }}" - echo "" - echo "🚀 Kustomization updated with new image tag" - echo " ArgoCD will automatically detect and deploy this new image" - echo " Monitor deployment at your ArgoCD dashboard" + echo "Digest: ${{ steps.build.outputs.digest }}" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06d7e61..afbf679 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: [main, develop] + branches: [main] pull_request: - branches: [main, develop] + branches: [main] jobs: lint-and-build: @@ -19,28 +19,27 @@ jobs: with: node-version: '20' cache: 'npm' - cache-dependency-path: services/nextjs/package-lock.json + cache-dependency-path: nextjs/package-lock.json - name: Install dependencies - working-directory: services/nextjs + working-directory: nextjs run: npm ci - name: Run ESLint - working-directory: services/nextjs + working-directory: nextjs run: npm run lint - name: Build Next.js application - working-directory: services/nextjs + working-directory: nextjs run: npm run build env: NEXT_TELEMETRY_DISABLED: 1 - name: Check build output - working-directory: services/nextjs + working-directory: nextjs run: | if [ ! -d ".next" ]; then echo "Build failed: .next directory not found" exit 1 fi - echo "✅ Build completed successfully" - + echo "Build completed successfully" diff --git a/deploy/docker/Dockerfile.prod b/Dockerfile similarity index 100% rename from deploy/docker/Dockerfile.prod rename to Dockerfile diff --git a/deploy/argocd/application-dev.yaml b/deploy/argocd/application-dev.yaml deleted file mode 100644 index 20950a1..0000000 --- a/deploy/argocd/application-dev.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: todo-dev - namespace: argocd -spec: - project: default - source: - repoURL: https://github.com/Mayne0213/todo.git - targetRevision: develop - path: deploy/k8s/overlays/dev - destination: - server: https://kubernetes.default.svc - namespace: todo-dev - syncPolicy: - automated: - prune: true - selfHeal: true - syncOptions: - - CreateNamespace=true diff --git a/deploy/argocd/application-prod.yaml b/deploy/argocd/application-prod.yaml deleted file mode 100644 index b7c0bfa..0000000 --- a/deploy/argocd/application-prod.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: todo-prod - namespace: argocd -spec: - project: default - source: - repoURL: https://github.com/Mayne0213/todo.git - targetRevision: main - path: deploy/k8s/overlays/prod - destination: - server: https://kubernetes.default.svc - namespace: todo - syncPolicy: - automated: - prune: true - selfHeal: true - syncOptions: - - CreateNamespace=true diff --git a/deploy/argocd/application.yaml b/deploy/argocd/application.yaml deleted file mode 100644 index 3344717..0000000 --- a/deploy/argocd/application.yaml +++ /dev/null @@ -1,36 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: todo - namespace: argocd - finalizers: - - resources-finalizer.argocd.argoproj.io -spec: - project: default - - source: - repoURL: https://github.com/Mayne0213/todo.git - targetRevision: main - path: deploy/argocd - - destination: - server: https://kubernetes.default.svc - namespace: argocd - - syncPolicy: - automated: - prune: true - selfHeal: true - allowEmpty: false - - syncOptions: - - CreateNamespace=true - - retry: - limit: 5 - backoff: - duration: 5s - factor: 2 - maxDuration: 3m - - revisionHistoryLimit: 10 diff --git a/deploy/argocd/kustomization.yaml b/deploy/argocd/kustomization.yaml deleted file mode 100644 index 374dd92..0000000 --- a/deploy/argocd/kustomization.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: - # App of Apps Application (self-managing) - - application.yaml - - # Application deployments (prod and dev) - - application-dev.yaml - - application-prod.yaml diff --git a/deploy/docker/Dockerfile.dev b/deploy/docker/Dockerfile.dev deleted file mode 100644 index 54f8189..0000000 --- a/deploy/docker/Dockerfile.dev +++ /dev/null @@ -1,30 +0,0 @@ -# trunk-ignore-all(checkov/CKV_DOCKER_3) -FROM node:20-alpine AS base - -# Install dependencies for development -RUN apk add --no-cache libc6-compat curl - -WORKDIR /app - -# Copy package files -COPY package.json package-lock.json* ./ - -# Install all dependencies (including dev dependencies) -RUN npm ci - -# Copy source code -COPY . . - -# Generate Prisma Client -RUN npx prisma generate - -# Expose port -EXPOSE 3000 - -# Health check -HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ - CMD curl -f http://localhost:3000/api/health || exit 1 - -# Default command (can be overridden in docker-compose) -CMD ["npm", "run", "dev"] - diff --git a/deploy/docker/docker-compose.dev.yml b/deploy/docker/docker-compose.dev.yml deleted file mode 100644 index 28b0028..0000000 --- a/deploy/docker/docker-compose.dev.yml +++ /dev/null @@ -1,64 +0,0 @@ -services: - # Next.js Application (Development) - Using External Database (same as Jotion) - app: - image: todo-app-dev - build: - context: ../../services/nextjs - dockerfile: ../../deploy/docker/Dockerfile.dev - container_name: todo-app-dev - restart: unless-stopped - labels: - kompose.namespace: todo-dev - ports: - - "3002:3000" - env_file: - - ../../.env - environment: - - NODE_ENV=development - networks: - - todo-network-dev - volumes: - - ../../services/nextjs:/app - - /app/node_modules - - /app/.next - - app_logs_dev:/app/logs - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 40s - command: > - sh -lc "npx prisma db push --skip-generate && npm run dev" - - # Prisma Studio - Connects to External Database - prisma-studio: - image: todo-app-dev - container_name: todo-prisma-studio - restart: unless-stopped - labels: - kompose.namespace: todo-dev - ports: - - "5556:5555" - env_file: - - ../../.env - environment: - - NODE_ENV=development - networks: - - todo-network-dev - volumes: - - ../../services/nextjs:/app - - /app/node_modules - command: npx prisma studio --port 5555 --hostname 0.0.0.0 - -volumes: - # Named volumes for data persistence - app_logs_dev: - driver: local - -networks: - todo-network-dev: - driver: bridge - ipam: - config: - - subnet: 172.22.0.0/16 diff --git a/deploy/docker/docker-compose.yml b/deploy/docker/docker-compose.yml deleted file mode 100644 index b60d844..0000000 --- a/deploy/docker/docker-compose.yml +++ /dev/null @@ -1,41 +0,0 @@ -services: - # Next.js Application - Using External Database (same as Jotion) - app: - image: todo-app - build: - context: ../../services/nextjs - dockerfile: ../../deploy/docker/Dockerfile.prod - container_name: todo-app - restart: unless-stopped - labels: - kompose.namespace: todo - ports: - - 3002:3000 - env_file: - - ../../.env - environment: - - NODE_ENV=production - networks: - - todo-network - volumes: - - app_logs:/app/logs - healthcheck: - test: [CMD, curl, -f, http://localhost:3000/api/health] - interval: 30s - timeout: 10s - retries: 3 - start_period: 40s - command: > - sh -lc "npx prisma db push --skip-generate && node server.js" - -volumes: - # Named volumes for data persistence - app_logs: - driver: local - -networks: - todo-network: - driver: bridge - ipam: - config: - - subnet: 172.21.0.0/16 diff --git a/deploy/k8s/base/deployment.yaml b/deploy/k8s/base/deployment.yaml deleted file mode 100644 index 8401e7b..0000000 --- a/deploy/k8s/base/deployment.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: todo-app - labels: - app: todo-app -spec: - replicas: 1 - selector: - matchLabels: - app: todo-app - strategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 1 - maxSurge: 1 - revisionHistoryLimit: 1 - template: - metadata: - labels: - app: todo-app - spec: - containers: - - name: todo-app - image: ghcr.io/mayne0213/todo:latest - imagePullPolicy: Always - ports: - - containerPort: 3000 - protocol: TCP - env: - - name: NODE_ENV - value: production - - name: DATABASE_URL - valueFrom: - secretKeyRef: - name: todo-secrets - key: database-url - resources: - requests: - memory: "100Mi" - cpu: "50m" - limits: - memory: "200Mi" - livenessProbe: - httpGet: - path: /api/health - port: 3000 - initialDelaySeconds: 30 - periodSeconds: 10 - readinessProbe: - httpGet: - path: /api/health - port: 3000 - initialDelaySeconds: 5 - periodSeconds: 5 - restartPolicy: Always - diff --git a/deploy/k8s/base/kustomization.yaml b/deploy/k8s/base/kustomization.yaml deleted file mode 100644 index 80ce064..0000000 --- a/deploy/k8s/base/kustomization.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -resources: - - deployment.yaml - - service.yaml - - serviceaccount.yaml - -commonLabels: - app.kubernetes.io/name: todo - app.kubernetes.io/component: web - -images: - - name: gitea0213.kro.kr/bluemayne/todo - newTag: latest - diff --git a/deploy/k8s/base/service.yaml b/deploy/k8s/base/service.yaml deleted file mode 100644 index 6da9d01..0000000 --- a/deploy/k8s/base/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: todo-service - labels: - app: todo-app -spec: - type: ClusterIP - ports: - - name: http - port: 80 - targetPort: 3000 - protocol: TCP - selector: - app: todo-app - diff --git a/deploy/k8s/base/serviceaccount.yaml b/deploy/k8s/base/serviceaccount.yaml deleted file mode 100644 index f1ff704..0000000 --- a/deploy/k8s/base/serviceaccount.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-secrets diff --git a/deploy/k8s/overlays/dev/deployment-patch.yaml b/deploy/k8s/overlays/dev/deployment-patch.yaml deleted file mode 100644 index 53501ce..0000000 --- a/deploy/k8s/overlays/dev/deployment-patch.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: todo-app - labels: - environment: development -spec: - replicas: 1 - template: - spec: - containers: - - name: todo-app - resources: - requests: - memory: "40Mi" - cpu: "15m" - limits: - memory: "100Mi" diff --git a/deploy/k8s/overlays/dev/externalsecret.yaml b/deploy/k8s/overlays/dev/externalsecret.yaml deleted file mode 100644 index dcde8f8..0000000 --- a/deploy/k8s/overlays/dev/externalsecret.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: external-secrets.io/v1beta1 -kind: ExternalSecret -metadata: - name: todo-secrets -spec: - refreshInterval: 1h - secretStoreRef: - name: vault-backend - kind: SecretStore - target: - name: todo-secrets - creationPolicy: Owner - deletionPolicy: Retain - data: - - secretKey: database-url - remoteRef: - key: todo/dev - property: DATABASE_URL diff --git a/deploy/k8s/overlays/dev/ingress.yaml b/deploy/k8s/overlays/dev/ingress.yaml deleted file mode 100644 index 57c5147..0000000 --- a/deploy/k8s/overlays/dev/ingress.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: todo-dev-ingress - annotations: - cert-manager.io/cluster-issuer: "letsencrypt-prod" -spec: - ingressClassName: traefik - tls: - - hosts: - - dev.todo0213.kro.kr - secretName: todo-dev-tls - rules: - - host: dev.todo0213.kro.kr - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: todo-service - port: - number: 80 diff --git a/deploy/k8s/overlays/dev/kustomization.yaml b/deploy/k8s/overlays/dev/kustomization.yaml deleted file mode 100644 index 9865f9d..0000000 --- a/deploy/k8s/overlays/dev/kustomization.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -namespace: todo-dev - -resources: - - ../../base - - resourcequota.yaml - - namespace.yaml - - secretstore.yaml - - externalsecret.yaml - - ingress.yaml - -commonLabels: - environment: development - -# 이미지 태그 설정 -images: - - name: gitea0213.kro.kr/bluemayne/todo - newTag: develop-sha-1a8d8cf79051d01d29c83356d54f318ab20fdc51 - -patchesStrategicMerge: - - deployment-patch.yaml diff --git a/deploy/k8s/overlays/dev/namespace.yaml b/deploy/k8s/overlays/dev/namespace.yaml deleted file mode 100644 index 7e6b966..0000000 --- a/deploy/k8s/overlays/dev/namespace.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: todo-dev - labels: - environment: development - app: todo diff --git a/deploy/k8s/overlays/dev/resourcequota.yaml b/deploy/k8s/overlays/dev/resourcequota.yaml deleted file mode 100644 index cb482d6..0000000 --- a/deploy/k8s/overlays/dev/resourcequota.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: ResourceQuota -metadata: - name: todo-dev-quota - namespace: todo-dev -spec: - hard: - requests.memory: "150Mi" - requests.cpu: "60m" - limits.memory: "300Mi" - pods: "6" diff --git a/deploy/k8s/overlays/dev/secretstore.yaml b/deploy/k8s/overlays/dev/secretstore.yaml deleted file mode 100644 index a4ab800..0000000 --- a/deploy/k8s/overlays/dev/secretstore.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: external-secrets.io/v1beta1 -kind: SecretStore -metadata: - name: vault-backend -spec: - provider: - vault: - server: http://vault.vault.svc.cluster.local:8200 - path: secret - version: v2 - auth: - kubernetes: - mountPath: kubernetes - role: todo-dev - serviceAccountRef: - name: external-secrets diff --git a/deploy/k8s/overlays/prod/deployment-patch.yaml b/deploy/k8s/overlays/prod/deployment-patch.yaml deleted file mode 100644 index c303cc1..0000000 --- a/deploy/k8s/overlays/prod/deployment-patch.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: todo-app - labels: - environment: production -spec: - replicas: 2 - template: - spec: - containers: - - name: todo-app - resources: - requests: - memory: "50Mi" - cpu: "20m" - limits: - memory: "120Mi" - diff --git a/deploy/k8s/overlays/prod/externalsecret.yaml b/deploy/k8s/overlays/prod/externalsecret.yaml deleted file mode 100644 index 840440e..0000000 --- a/deploy/k8s/overlays/prod/externalsecret.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: external-secrets.io/v1 -kind: ExternalSecret -metadata: - name: todo-secrets -spec: - refreshInterval: 1h - secretStoreRef: - name: vault-backend - kind: ClusterSecretStore - target: - name: todo-secrets - creationPolicy: Owner - deletionPolicy: Retain - data: - - secretKey: database-url - remoteRef: - key: todo/prod - property: DATABASE_URL diff --git a/deploy/k8s/overlays/prod/ingress.yaml b/deploy/k8s/overlays/prod/ingress.yaml deleted file mode 100644 index 9f24728..0000000 --- a/deploy/k8s/overlays/prod/ingress.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: todo-ingress - annotations: - nginx.ingress.kubernetes.io/rewrite-target: / - # HTTP를 HTTPS로 자동 리다이렉트 - nginx.ingress.kubernetes.io/ssl-redirect: "true" - # cert-manager가 인증서를 자동으로 발급하도록 설정 - cert-manager.io/cluster-issuer: "letsencrypt-prod" -spec: - ingressClassName: traefik - # TLS 설정 - tls: - - hosts: - - todo0213.kro.kr - - www.todo0213.kro.kr - secretName: todo-tls - rules: - - host: todo0213.kro.kr - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: todo-service - port: - number: 80 - - host: www.todo0213.kro.kr - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: todo-service - port: - number: 80 diff --git a/deploy/k8s/overlays/prod/kustomization.yaml b/deploy/k8s/overlays/prod/kustomization.yaml deleted file mode 100644 index 640f053..0000000 --- a/deploy/k8s/overlays/prod/kustomization.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization - -namespace: todo - -resources: - - ../../base - - resourcequota.yaml - - externalsecret.yaml - - ingress.yaml - -commonLabels: - environment: production - -# 이미지 태그 설정 -images: - - name: ghcr.io/mayne0213/todo - newTag: main-sha-6e069b27f1f9f196a61ed2f7941157d463edaa12 - -patchesStrategicMerge: - - deployment-patch.yaml \ No newline at end of file diff --git a/deploy/k8s/overlays/prod/resourcequota.yaml b/deploy/k8s/overlays/prod/resourcequota.yaml deleted file mode 100644 index 390ec5b..0000000 --- a/deploy/k8s/overlays/prod/resourcequota.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: ResourceQuota -metadata: - name: todo-quota - namespace: todo -spec: - hard: - requests.memory: "250Mi" - requests.cpu: "100m" - limits.memory: "500Mi" - pods: "9" - diff --git a/deploy/k8s/overlays/prod/secretstore.yaml b/deploy/k8s/overlays/prod/secretstore.yaml deleted file mode 100644 index 7785b1a..0000000 --- a/deploy/k8s/overlays/prod/secretstore.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: external-secrets.io/v1beta1 -kind: SecretStore -metadata: - name: vault-backend -spec: - provider: - vault: - server: http://vault.vault.svc.cluster.local:8200 - path: secret - version: v2 - auth: - kubernetes: - mountPath: kubernetes - role: todo - serviceAccountRef: - name: external-secrets diff --git a/services/nextjs/app/api/auth/password/route.ts b/nextjs/app/api/auth/password/route.ts similarity index 100% rename from services/nextjs/app/api/auth/password/route.ts rename to nextjs/app/api/auth/password/route.ts diff --git a/services/nextjs/app/api/health/route.ts b/nextjs/app/api/health/route.ts similarity index 100% rename from services/nextjs/app/api/health/route.ts rename to nextjs/app/api/health/route.ts diff --git a/services/nextjs/app/api/todos/[id]/route.ts b/nextjs/app/api/todos/[id]/route.ts similarity index 100% rename from services/nextjs/app/api/todos/[id]/route.ts rename to nextjs/app/api/todos/[id]/route.ts diff --git a/services/nextjs/app/api/todos/route.ts b/nextjs/app/api/todos/route.ts similarity index 100% rename from services/nextjs/app/api/todos/route.ts rename to nextjs/app/api/todos/route.ts diff --git a/services/nextjs/app/favicon.ico b/nextjs/app/favicon.ico similarity index 100% rename from services/nextjs/app/favicon.ico rename to nextjs/app/favicon.ico diff --git a/services/nextjs/app/globals.css b/nextjs/app/globals.css similarity index 100% rename from services/nextjs/app/globals.css rename to nextjs/app/globals.css diff --git a/services/nextjs/app/layout.tsx b/nextjs/app/layout.tsx similarity index 100% rename from services/nextjs/app/layout.tsx rename to nextjs/app/layout.tsx diff --git a/services/nextjs/app/page.tsx b/nextjs/app/page.tsx similarity index 100% rename from services/nextjs/app/page.tsx rename to nextjs/app/page.tsx diff --git a/services/nextjs/components.json b/nextjs/components.json similarity index 100% rename from services/nextjs/components.json rename to nextjs/components.json diff --git a/services/nextjs/eslint.config.mjs b/nextjs/eslint.config.mjs similarity index 100% rename from services/nextjs/eslint.config.mjs rename to nextjs/eslint.config.mjs diff --git a/services/nextjs/lib/utils.ts b/nextjs/lib/utils.ts similarity index 100% rename from services/nextjs/lib/utils.ts rename to nextjs/lib/utils.ts diff --git a/services/nextjs/middleware.ts b/nextjs/middleware.ts similarity index 100% rename from services/nextjs/middleware.ts rename to nextjs/middleware.ts diff --git a/services/nextjs/next.config.ts b/nextjs/next.config.ts similarity index 100% rename from services/nextjs/next.config.ts rename to nextjs/next.config.ts diff --git a/services/nextjs/package-lock.json b/nextjs/package-lock.json similarity index 100% rename from services/nextjs/package-lock.json rename to nextjs/package-lock.json diff --git a/services/nextjs/package.json b/nextjs/package.json similarity index 100% rename from services/nextjs/package.json rename to nextjs/package.json diff --git a/services/nextjs/postcss.config.mjs b/nextjs/postcss.config.mjs similarity index 100% rename from services/nextjs/postcss.config.mjs rename to nextjs/postcss.config.mjs diff --git a/services/nextjs/prisma/schema.prisma b/nextjs/prisma/schema.prisma similarity index 100% rename from services/nextjs/prisma/schema.prisma rename to nextjs/prisma/schema.prisma diff --git a/services/nextjs/public/file.svg b/nextjs/public/file.svg similarity index 100% rename from services/nextjs/public/file.svg rename to nextjs/public/file.svg diff --git a/services/nextjs/public/globe.svg b/nextjs/public/globe.svg similarity index 100% rename from services/nextjs/public/globe.svg rename to nextjs/public/globe.svg diff --git a/services/nextjs/public/next.svg b/nextjs/public/next.svg similarity index 100% rename from services/nextjs/public/next.svg rename to nextjs/public/next.svg diff --git a/services/nextjs/public/vercel.svg b/nextjs/public/vercel.svg similarity index 100% rename from services/nextjs/public/vercel.svg rename to nextjs/public/vercel.svg diff --git a/services/nextjs/public/window.svg b/nextjs/public/window.svg similarity index 100% rename from services/nextjs/public/window.svg rename to nextjs/public/window.svg diff --git a/services/nextjs/src/entities/todo/api/client.ts b/nextjs/src/entities/todo/api/client.ts similarity index 100% rename from services/nextjs/src/entities/todo/api/client.ts rename to nextjs/src/entities/todo/api/client.ts diff --git a/services/nextjs/src/entities/todo/api/index.ts b/nextjs/src/entities/todo/api/index.ts similarity index 100% rename from services/nextjs/src/entities/todo/api/index.ts rename to nextjs/src/entities/todo/api/index.ts diff --git a/services/nextjs/src/entities/todo/index.ts b/nextjs/src/entities/todo/index.ts similarity index 100% rename from services/nextjs/src/entities/todo/index.ts rename to nextjs/src/entities/todo/index.ts diff --git a/services/nextjs/src/entities/todo/model/constants.ts b/nextjs/src/entities/todo/model/constants.ts similarity index 100% rename from services/nextjs/src/entities/todo/model/constants.ts rename to nextjs/src/entities/todo/model/constants.ts diff --git a/services/nextjs/src/entities/todo/model/index.ts b/nextjs/src/entities/todo/model/index.ts similarity index 100% rename from services/nextjs/src/entities/todo/model/index.ts rename to nextjs/src/entities/todo/model/index.ts diff --git a/services/nextjs/src/entities/todo/model/store.ts b/nextjs/src/entities/todo/model/store.ts similarity index 100% rename from services/nextjs/src/entities/todo/model/store.ts rename to nextjs/src/entities/todo/model/store.ts diff --git a/services/nextjs/src/entities/todo/model/types.ts b/nextjs/src/entities/todo/model/types.ts similarity index 100% rename from services/nextjs/src/entities/todo/model/types.ts rename to nextjs/src/entities/todo/model/types.ts diff --git a/services/nextjs/src/entities/todo/ui/TodoItem.tsx b/nextjs/src/entities/todo/ui/TodoItem.tsx similarity index 100% rename from services/nextjs/src/entities/todo/ui/TodoItem.tsx rename to nextjs/src/entities/todo/ui/TodoItem.tsx diff --git a/services/nextjs/src/entities/todo/ui/TodoList.tsx b/nextjs/src/entities/todo/ui/TodoList.tsx similarity index 100% rename from services/nextjs/src/entities/todo/ui/TodoList.tsx rename to nextjs/src/entities/todo/ui/TodoList.tsx diff --git a/services/nextjs/src/entities/todo/ui/index.ts b/nextjs/src/entities/todo/ui/index.ts similarity index 100% rename from services/nextjs/src/entities/todo/ui/index.ts rename to nextjs/src/entities/todo/ui/index.ts diff --git a/services/nextjs/src/features/password-auth/index.ts b/nextjs/src/features/password-auth/index.ts similarity index 100% rename from services/nextjs/src/features/password-auth/index.ts rename to nextjs/src/features/password-auth/index.ts diff --git a/services/nextjs/src/features/password-auth/ui/PasswordModal.tsx b/nextjs/src/features/password-auth/ui/PasswordModal.tsx similarity index 100% rename from services/nextjs/src/features/password-auth/ui/PasswordModal.tsx rename to nextjs/src/features/password-auth/ui/PasswordModal.tsx diff --git a/services/nextjs/src/features/todo-create/index.ts b/nextjs/src/features/todo-create/index.ts similarity index 100% rename from services/nextjs/src/features/todo-create/index.ts rename to nextjs/src/features/todo-create/index.ts diff --git a/services/nextjs/src/features/todo-create/ui/TodoCreateForm.tsx b/nextjs/src/features/todo-create/ui/TodoCreateForm.tsx similarity index 100% rename from services/nextjs/src/features/todo-create/ui/TodoCreateForm.tsx rename to nextjs/src/features/todo-create/ui/TodoCreateForm.tsx diff --git a/services/nextjs/src/features/todo-filter/index.ts b/nextjs/src/features/todo-filter/index.ts similarity index 100% rename from services/nextjs/src/features/todo-filter/index.ts rename to nextjs/src/features/todo-filter/index.ts diff --git a/services/nextjs/src/features/todo-filter/ui/TodoFilter.tsx b/nextjs/src/features/todo-filter/ui/TodoFilter.tsx similarity index 100% rename from services/nextjs/src/features/todo-filter/ui/TodoFilter.tsx rename to nextjs/src/features/todo-filter/ui/TodoFilter.tsx diff --git a/services/nextjs/src/features/todo-search/index.ts b/nextjs/src/features/todo-search/index.ts similarity index 100% rename from services/nextjs/src/features/todo-search/index.ts rename to nextjs/src/features/todo-search/index.ts diff --git a/services/nextjs/src/features/todo-search/ui/SearchInput.tsx b/nextjs/src/features/todo-search/ui/SearchInput.tsx similarity index 100% rename from services/nextjs/src/features/todo-search/ui/SearchInput.tsx rename to nextjs/src/features/todo-search/ui/SearchInput.tsx diff --git a/services/nextjs/src/shared/api/config.ts b/nextjs/src/shared/api/config.ts similarity index 100% rename from services/nextjs/src/shared/api/config.ts rename to nextjs/src/shared/api/config.ts diff --git a/services/nextjs/src/shared/lib/auth.ts b/nextjs/src/shared/lib/auth.ts similarity index 100% rename from services/nextjs/src/shared/lib/auth.ts rename to nextjs/src/shared/lib/auth.ts diff --git a/services/nextjs/src/shared/lib/cors.ts b/nextjs/src/shared/lib/cors.ts similarity index 100% rename from services/nextjs/src/shared/lib/cors.ts rename to nextjs/src/shared/lib/cors.ts diff --git a/services/nextjs/src/shared/lib/prisma.ts b/nextjs/src/shared/lib/prisma.ts similarity index 100% rename from services/nextjs/src/shared/lib/prisma.ts rename to nextjs/src/shared/lib/prisma.ts diff --git a/services/nextjs/src/shared/lib/utils.ts b/nextjs/src/shared/lib/utils.ts similarity index 100% rename from services/nextjs/src/shared/lib/utils.ts rename to nextjs/src/shared/lib/utils.ts diff --git a/services/nextjs/src/shared/ui/button.tsx b/nextjs/src/shared/ui/button.tsx similarity index 100% rename from services/nextjs/src/shared/ui/button.tsx rename to nextjs/src/shared/ui/button.tsx diff --git a/services/nextjs/src/shared/ui/card.tsx b/nextjs/src/shared/ui/card.tsx similarity index 100% rename from services/nextjs/src/shared/ui/card.tsx rename to nextjs/src/shared/ui/card.tsx diff --git a/services/nextjs/src/shared/ui/checkbox.tsx b/nextjs/src/shared/ui/checkbox.tsx similarity index 100% rename from services/nextjs/src/shared/ui/checkbox.tsx rename to nextjs/src/shared/ui/checkbox.tsx diff --git a/services/nextjs/src/shared/ui/index.ts b/nextjs/src/shared/ui/index.ts similarity index 100% rename from services/nextjs/src/shared/ui/index.ts rename to nextjs/src/shared/ui/index.ts diff --git a/services/nextjs/src/shared/ui/input.tsx b/nextjs/src/shared/ui/input.tsx similarity index 100% rename from services/nextjs/src/shared/ui/input.tsx rename to nextjs/src/shared/ui/input.tsx diff --git a/services/nextjs/src/widgets/todo-app/index.ts b/nextjs/src/widgets/todo-app/index.ts similarity index 100% rename from services/nextjs/src/widgets/todo-app/index.ts rename to nextjs/src/widgets/todo-app/index.ts diff --git a/services/nextjs/src/widgets/todo-app/ui/TodoApp.tsx b/nextjs/src/widgets/todo-app/ui/TodoApp.tsx similarity index 100% rename from services/nextjs/src/widgets/todo-app/ui/TodoApp.tsx rename to nextjs/src/widgets/todo-app/ui/TodoApp.tsx diff --git a/services/nextjs/tailwind.config.ts b/nextjs/tailwind.config.ts similarity index 100% rename from services/nextjs/tailwind.config.ts rename to nextjs/tailwind.config.ts diff --git a/services/nextjs/tsconfig.json b/nextjs/tsconfig.json similarity index 100% rename from services/nextjs/tsconfig.json rename to nextjs/tsconfig.json