Skip to content
Merged
65 changes: 7 additions & 58 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,58 +1,3 @@
# name: Build and Push Docker Images

# on:
# push:
# branches:
# - build
# tags:
# - 'v*'

# jobs:
# build-and-push:
# runs-on: ubuntu-latest
# strategy:
# matrix:
# service:
# - user-management
# - order-management
# - service-management
# - notifications-service
# - wallet-service
# - search-and-discovery
# - review-and-feedback

# steps:
# - name: Checkout repository
# uses: actions/checkout@v4

# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v3

# - name: Log in to Docker Hub
# uses: docker/login-action@v3
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}

# - name: Extract metadata
# id: meta
# uses: docker/metadata-action@v5
# with:
# images: colauncha/fixserv-${{ matrix.service }}
# tags: |
# type=raw,value=latest,enable={{is_default_branch}}
# type=ref,event=tag
# type=sha,prefix=sha-

# - name: Build and push
# uses: docker/build-push-action@v6
# with:
# context: ./services/${{ matrix.service }}
# file: ./services/${{ matrix.service }}/Dockerfile
# push: true
# tags: ${{ steps.meta.outputs.tags }}
# labels: ${{ steps.meta.outputs.labels }}

name: Build and Push Docker Images to Docker Hub

on:
Expand All @@ -66,6 +11,7 @@ jobs:
runs-on: ubuntu-latest

strategy:
max-parallel: 4
matrix:
service:
- user-management
Expand All @@ -81,6 +27,9 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4

- name: Reset Docker builder context
run: docker buildx rm default || true

# 2️⃣ Set up Docker Buildx for modern builds
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
Expand All @@ -89,13 +38,13 @@ jobs:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

# 4️⃣ Build and Push each service image
- name: Build and push ${{ matrix.service }}
run: |
IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/fixserv-${{ matrix.service }}
IMAGE=${{ secrets.DOCKER_USERNAME }}/fixserv-${{ matrix.service }}

echo "🏗️ Building image for ${{ matrix.service }}..."

Expand Down
99 changes: 64 additions & 35 deletions services/notifications-service/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,60 +1,89 @@
# ---- STAGE 1: Builder ----
FROM node:18-alpine AS builder
# # ---- STAGE 1: Builder ----
# FROM node:18-alpine AS builder

WORKDIR /app
# WORKDIR /app

# Install pnpm globally
RUN npm install -g pnpm
# # Install pnpm globally
# RUN npm install -g pnpm

# Copy monorepo root files
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
# # Copy monorepo root files
# COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./

# Copy all service-level package.json files for dependency resolution
COPY services/notifications-service/package.json ./services/notifications-service/
COPY services/shared/package.json ./services/shared/
# # Copy all service-level package.json files for dependency resolution
# COPY services/notifications-service/package.json ./services/notifications-service/
# # COPY services/shared/package.json ./services/shared/

# Install all workspace dependencies (dev + prod)
RUN pnpm install --shamefully-hoist
# # Install all workspace dependencies (dev + prod)
# RUN pnpm install --shamefully-hoist

# Copy the rest of the workspace
COPY services ./services
# # Copy the rest of the workspace
# COPY services ./services

# Build shared package first
# RUN cd services/shared && pnpm run build
RUN pnpm --filter services/shared run build
# # Build shared package first
# # RUN cd services/shared && pnpm run build
# # RUN pnpm --filter services/shared run build

# 🔥 Run the build script from the root using workspace filter
RUN pnpm --filter services/notifications-service run build
# # 🔥 Run the build script from the root using workspace filter
# RUN cd pnpm install --shamefully-hoist
# RUN cd pnpm run build
# RUN ls -R /app/services/notifications-service

# ---- STAGE 2: Runtime ----
FROM node:18-alpine
# # ---- STAGE 2: Runtime ----
# FROM node:18-alpine

WORKDIR /app
# WORKDIR /app

#
#
COPY --from=builder /app/node_modules ./node_modules
# #
# #
# COPY --from=builder /app/node_modules ./node_modules

# Copy built shared package
# COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared
# # Copy built shared package
# # COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared



COPY --from=builder /app/services/notifications-service/dist ./dist
COPY --from=builder /app/services/notifications-service/package.json ./
# COPY --from=builder /app/services/notifications-service/dist ./dist
# COPY --from=builder /app/services/notifications-service/package.json ./

# Copy shared package into node_modules to simulate npm install
COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared/build
COPY --from=builder /app/services/shared/package.json ./node_modules/@fixserv-colauncha/shared/package.json
# # Copy shared package into node_modules to simulate npm install
# # COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared/build
# # COPY --from=builder /app/services/shared/package.json ./node_modules/@fixserv-colauncha/shared/package.json


# COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared
# # COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared


ENV NODE_ENV=production
COPY --from=builder /app/services/notifications-service/.env .env
# ENV NODE_ENV=production
# COPY --from=builder /app/services/notifications-service/.env .env




# CMD ["node", "dist/index.js"]

# ---- STAGE 1: Builder ----
FROM node:18-alpine AS builder
WORKDIR /app

RUN npm install -g pnpm

COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY services/notifications-service/package.json ./services/notifications-service/

RUN pnpm install --shamefully-hoist

COPY services ./services

RUN cd services/notifications-service && pnpm install --shamefully-hoist
RUN cd services/notifications-service && pnpm run build

# ---- STAGE 2: Runtime ----
FROM node:18-alpine
WORKDIR /app

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/services/notifications-service/dist ./dist
COPY --from=builder /app/services/notifications-service/package.json ./

ENV NODE_ENV=production
CMD ["node", "dist/index.js"]
99 changes: 64 additions & 35 deletions services/order-management/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,60 +1,89 @@
# ---- STAGE 1: Builder ----
FROM node:18-alpine AS builder
# # ---- STAGE 1: Builder ----
# FROM node:18-alpine AS builder

WORKDIR /app
# WORKDIR /app

# Install pnpm globally
RUN npm install -g pnpm
# # Install pnpm globally
# RUN npm install -g pnpm

# Copy monorepo root files
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
# # Copy monorepo root files
# COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./

# Copy all service-level package.json files for dependency resolution
COPY services/order-management/package.json ./services/order-management/
COPY services/shared/package.json ./services/shared/
# # Copy all service-level package.json files for dependency resolution
# COPY services/order-management/package.json ./services/order-management/
# # COPY services/shared/package.json ./services/shared/

# Install all workspace dependencies (dev + prod)
RUN pnpm install --shamefully-hoist
# # Install all workspace dependencies (dev + prod)
# RUN pnpm install --shamefully-hoist

# Copy the rest of the workspace
COPY services ./services
# # Copy the rest of the workspace
# COPY services ./services

# Build shared package first
# RUN cd services/shared && pnpm run build
RUN pnpm --filter services/shared run build
# # Build shared package first
# # RUN cd services/shared && pnpm run build
# # RUN pnpm --filter services/shared run build

# 🔥 Run the build script from the root using workspace filter
RUN pnpm --filter services/order-management run build
# # 🔥 Run the build script from the root using workspace filter
# RUN pnpm --filter services/order-management install --shamefully-hoist
# RUN pnpm --filter services/order-management run build

# ---- STAGE 2: Runtime ----
FROM node:18-alpine
# # ---- STAGE 2: Runtime ----
# FROM node:18-alpine

WORKDIR /app
# WORKDIR /app

#
#
COPY --from=builder /app/node_modules ./node_modules
# #
# #
# COPY --from=builder /app/node_modules ./node_modules

# Copy built shared package
# COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared
# # Copy built shared package
# # COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared



COPY --from=builder /app/services/order-management/dist ./dist
COPY --from=builder /app/services/order-management/package.json ./
# COPY --from=builder /app/services/order-management/dist ./dist
# COPY --from=builder /app/services/order-management/package.json ./

# Copy shared package into node_modules to simulate npm install
COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared/build
COPY --from=builder /app/services/shared/package.json ./node_modules/@fixserv-colauncha/shared/package.json
# # Copy shared package into node_modules to simulate npm install
# # COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared/build
# # COPY --from=builder /app/services/shared/package.json ./node_modules/@fixserv-colauncha/shared/package.json


# COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared
# # COPY --from=builder /app/services/shared/build ./node_modules/@fixserv-colauncha/shared


ENV NODE_ENV=production
COPY --from=builder /app/services/order-management/.env .env
# ENV NODE_ENV=production
# COPY --from=builder /app/services/order-management/.env .env




# CMD ["node", "dist/index.js"]


# ---- STAGE 1: Builder ----
FROM node:18-alpine AS builder
WORKDIR /app

RUN npm install -g pnpm

COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY services/order-management/package.json ./services/order-management/

RUN pnpm install --shamefully-hoist

COPY services ./services

RUN cd services/order-management && pnpm install --shamefully-hoist
RUN cd services/order-management && pnpm run build

# ---- STAGE 2: Runtime ----
FROM node:18-alpine
WORKDIR /app

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/services/order-management/dist ./dist
COPY --from=builder /app/services/order-management/package.json ./

ENV NODE_ENV=production
CMD ["node", "dist/index.js"]
Loading
Loading