From ce67570cfb79221d5edca0e94422b18bbff2318f Mon Sep 17 00:00:00 2001 From: mohamad Date: Sat, 31 May 2025 14:08:40 +0200 Subject: [PATCH] feat: Update deployment workflow and enhance ListDetailPage functionality - Modified the production deployment workflow to trigger on pushes to the 'prod' branch and updated Docker registry login to use Gitea Container Registry. - Enhanced ListDetailPage.vue to improve loading states and error handling, introducing a new loading mechanism for items and utilizing session storage for cached data. - Implemented Intersection Observer for pre-fetching list details to optimize user experience during navigation. - Improved touch feedback for list cards and optimized styles for mobile responsiveness. --- .gitea/workflows/deploy-prod.yml | 60 ++------ fe/src/pages/ListDetailPage.vue | 232 ++++++++++++++++++++++++++++--- fe/src/pages/ListsPage.vue | 120 ++++++++++++++-- 3 files changed, 335 insertions(+), 77 deletions(-) diff --git a/.gitea/workflows/deploy-prod.yml b/.gitea/workflows/deploy-prod.yml index 95441f0..a97a786 100644 --- a/.gitea/workflows/deploy-prod.yml +++ b/.gitea/workflows/deploy-prod.yml @@ -1,9 +1,9 @@ -name: Deploy to Production +name: Deploy to Production, build images and push to Gitea Registry on: push: branches: - - main # Trigger deployment only on pushes to main + - prod # Trigger deployment only on pushes to main jobs: deploy: @@ -15,64 +15,30 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Log in to Docker Hub (or your registry) + - name: Log in to Gitea Container Registry uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - # For Gitea Container Registry, you might use: - # registry: your-gitea-instance.com:5000 - # username: ${{ gitea.actor }} - # password: ${{ secrets.GITEA_TOKEN }} + registry: git.vinylnostalgia.com:5000 # IMPORTANT: Verify this is your Gitea registry URL (e.g., git.vinylnostalgia.com or with a different port). + username: ${{ gitea.actor }} # Uses the user that triggered the action. You can replace with 'mo' if needed. + password: ${{ secrets.GITEA_TOKEN }} # IMPORTANT: Create a Gitea repository secret named GITEA_TOKEN with your password or access token. - - name: Build and push backend image + - name: Build and push backend image to Gitea Registry uses: docker/build-push-action@v4 with: context: ./be file: ./be/Dockerfile.prod push: true - tags: ${{ secrets.DOCKER_USERNAME }}/mitlist-backend:latest # Replace with your image name - # Gitea registry example: your-gitea-instance.com:5000/${{ gitea.repository_owner }}/${{ gitea.repository_name }}-backend:latest + tags: git.vinylnostalgia.com:5000/${{ gitea.repository_owner }}/${{ gitea.repository_name }}-backend:latest # IMPORTANT: Verify registry URL matches the login step. + # Ensure gitea.repository_owner and gitea.repository_name resolve as expected for your image path. - - name: Build and push frontend image + - name: Build and push frontend image to Gitea Registry uses: docker/build-push-action@v4 with: context: ./fe file: ./fe/Dockerfile.prod push: true - tags: ${{ secrets.DOCKER_USERNAME }}/mitlist-frontend:latest # Replace with your image name - # Gitea registry example: your-gitea-instance.com:5000/${{ gitea.repository_owner }}/${{ gitea.repository_name }}-frontend:latest + tags: git.vinylnostalgia.com:5000/${{ gitea.repository_owner }}/${{ gitea.repository_name }}-frontend:latest # IMPORTANT: Verify registry URL matches the login step. + # Ensure gitea.repository_owner and gitea.repository_name resolve as expected for your image path. build-args: | - VITE_API_URL=${{ secrets.VITE_API_URL }} + VITE_API_URL=${{ secrets.VITE_API_URL }} VITE_SENTRY_DSN=${{ secrets.VITE_SENTRY_DSN }} - - - name: Deploy to server - uses: appleboy/ssh-action@master - with: - host: ${{ secrets.SERVER_HOST }} - username: ${{ secrets.SERVER_USERNAME }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - port: ${{ secrets.SERVER_PORT || 22 }} - script: | - cd /path/to/your/app # e.g., /srv/mitlist - echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}" > .env.production - echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}" >> .env.production - echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}" >> .env.production - echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env.production - echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env.production - echo "SESSION_SECRET_KEY=${{ secrets.SESSION_SECRET_KEY }}" >> .env.production - echo "GEMINI_API_KEY=${{ secrets.GEMINI_API_KEY }}" >> .env.production - echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" >> .env.production - echo "SENTRY_DSN=${{ secrets.SENTRY_DSN }}" >> .env.production - echo "CORS_ORIGINS=${{ secrets.CORS_ORIGINS }}" >> .env.production - echo "FRONTEND_URL=${{ secrets.FRONTEND_URL }}" >> .env.production - echo "VITE_API_URL=${{ secrets.VITE_API_URL }}" >> .env.production - echo "VITE_SENTRY_DSN=${{ secrets.VITE_SENTRY_DSN }}" >> .env.production - echo "ENVIRONMENT=production" >> .env.production - echo "LOG_LEVEL=INFO" >> .env.production - - # Ensure docker-compose.prod.yml is present on the server or copy it - # git pull # If repo is cloned on server - docker-compose -f docker-compose.prod.yml pull - docker-compose -f docker-compose.prod.yml up -d --remove-orphans - docker image prune -af \ No newline at end of file diff --git a/fe/src/pages/ListDetailPage.vue b/fe/src/pages/ListDetailPage.vue index adaf609..f50b1da 100644 --- a/fe/src/pages/ListDetailPage.vue +++ b/fe/src/pages/ListDetailPage.vue @@ -1,11 +1,11 @@