Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: final MVP & Merge From staging Branch to production #33

Merged
merged 1 commit into from
Jun 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,9 @@ EXPRESS_PORT=8080

JWT_ACCESS_TOKEN_SECRET='<YOUR_RANDOM_STRING_FOR_JWT_ACCESS_TOKEN_SECRET>' # The JWT secret can be generate with this command `npm run generate:secret:jwt`
JWT_REFRESH_TOKEN_SECRET='<YOUR_RANDOM_STRING_FOR_JWT_REFRESH_TOKEN_SECRET>'

GCLOUD_PROJECT_ID="your-gcloud-project-id"
GCLOUD_BUCKET_NAME="your-bucket-name"

GENERATIVE_AI_SERVICE_URL="<YOUR_GENERATIVE_AI_SERVICE_URL>"
SUGGESTION_AI_SERVICE_URL="<YOUR_SUGGESTION_AI_SERVICE_URL>"
16 changes: 16 additions & 0 deletions .github/workflows/google-cloudrun-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ jobs:
echo "EXPRESS_PORT=${{ secrets.EXPRESS_PORT }}" >> .env.production
echo "JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}" >> .env.production
echo "JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}" >> .env.production
echo "GCLOUD_PROJECT_ID=${{ secrets.GCLOUD_PROJECT_ID }}" >> .env.production
echo "GCLOUD_BUCKET_NAME=${{ secrets.GCLOUD_BUCKET_NAME }}" >> .env.production
echo "GENERATIVE_AI_SERVICE_URL=${{ secrets.GENERATIVE_AI_SERVICE_URL }}" >> .env.production
echo "SUGGESTION_AI_SERVICE_URL=${{ secrets.SUGGESTION_AI_SERVICE_URL }}" >> .env.production
elif [[ "${GITHUB_REF##*/}" == "staging" ]]; then
echo "NODE_ENV=staging" >> $GITHUB_ENV
echo "DOCKER_TAG=staging-${{ github.sha }}" >> $GITHUB_ENV
Expand All @@ -95,6 +99,10 @@ jobs:
echo "EXPRESS_PORT=${{ secrets.EXPRESS_PORT }}" >> .env.staging
echo "JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}" >> .env.staging
echo "JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}" >> .env.staging
echo "GCLOUD_PROJECT_ID=${{ secrets.GCLOUD_PROJECT_ID }}" >> .env.staging
echo "GCLOUD_BUCKET_NAME=${{ secrets.GCLOUD_BUCKET_NAME }}" >> .env.staging
echo "GENERATIVE_AI_SERVICE_URL=${{ secrets.GENERATIVE_AI_SERVICE_URL }}" >> .env.staging
echo "SUGGESTION_AI_SERVICE_URL=${{ secrets.SUGGESTION_AI_SERVICE_URL }}" >> .env.staging
elif [[ "${GITHUB_REF##*/}" == "feat/setup-node" ]]; then
echo "NODE_ENV=dev" >> $GITHUB_ENV
echo "DOCKER_TAG=dev-${{ github.sha }}" >> $GITHUB_ENV
Expand All @@ -104,6 +112,10 @@ jobs:
echo "EXPRESS_PORT=${{ secrets.EXPRESS_PORT }}" >> .env.dev
echo "JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}" >> .env.dev
echo "JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}" >> .env.dev
echo "GCLOUD_PROJECT_ID=${{ secrets.GCLOUD_PROJECT_ID }}" >> .env.dev
echo "GCLOUD_BUCKET_NAME=${{ secrets.GCLOUD_BUCKET_NAME }}" >> .env.dev
echo "GENERATIVE_AI_SERVICE_URL=${{ secrets.GENERATIVE_AI_SERVICE_URL }}" >> .env.dev
echo "SUGGESTION_AI_SERVICE_URL=${{ secrets.SUGGESTION_AI_SERVICE_URL }}" >> .env.dev
else
echo "NODE_ENV=dev" >> $GITHUB_ENV
echo "DOCKER_TAG=dev-${{ github.sha }}" >> $GITHUB_ENV
Expand All @@ -113,6 +125,10 @@ jobs:
echo "EXPRESS_PORT=${{ secrets.EXPRESS_PORT }}" >> .env.dev
echo "JWT_ACCESS_TOKEN_SECRET=${{ secrets.JWT_ACCESS_TOKEN_SECRET }}" >> .env.dev
echo "JWT_REFRESH_TOKEN_SECRET=${{ secrets.JWT_REFRESH_TOKEN_SECRET }}" >> .env.dev
echo "GCLOUD_PROJECT_ID=${{ secrets.GCLOUD_PROJECT_ID }}" >> .env.dev
echo "GCLOUD_BUCKET_NAME=${{ secrets.GCLOUD_BUCKET_NAME }}" >> .env.dev
echo "GENERATIVE_AI_SERVICE_URL=${{ secrets.GENERATIVE_AI_SERVICE_URL }}" >> .env.dev
echo "SUGGESTION_AI_SERVICE_URL=${{ secrets.SUGGESTION_AI_SERVICE_URL }}" >> .env.dev
fi

- name: Clear Docker cache
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,6 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts

# gcp files
serviceaccount.json
39 changes: 34 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
FROM node:20
# Stage 1: Build stage
FROM node:20 AS build

# Define build argument
ARG NODE_ENV
Expand All @@ -7,20 +8,48 @@ ARG NODE_ENV
ENV NODE_ENV=${NODE_ENV}
ENV PORT=8080

RUN mkdir -p /opt/app
# Install tzdata and set timezone
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
RUN ln -fs /usr/share/zoneinfo/Asia/Jakarta /etc/localtime && dpkg-reconfigure -f noninteractive tzdata

# Create app directory
WORKDIR /opt/app

COPY package*.json .
# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application code
COPY . .

# Generate Prisma client
RUN npm install -g dotenv-cli

RUN npx prisma generate
RUN dotenv -e .env.${NODE_ENV} -- npx prisma migrate deploy

# Stage 2: Run stage
# FROM gcr.io/distroless/nodejs20-debian12
# FROM node:20-slim

# Install tzdata and set timezone
# RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
# RUN ln -fs /usr/share/zoneinfo/Asia/Jakarta /etc/localtime && dpkg-reconfigure -f noninteractive tzdata

# Copy built files from the build stage
# COPY --from=build /opt/app /opt/app

# Set the working directory
# WORKDIR /opt/app

# Set environment variable for runtime
# ENV NODE_ENV=${NODE_ENV}
# ENV PORT=8080
ENV TZ=Asia/Jakarta

# Expose the port
EXPOSE 8080

CMD ["sh", "-c", "npm run start:${NODE_ENV}"]
# Run the application using shell to ensure the environment variable is picked up
CMD ["sh", "-c", "npm run start:${NODE_ENV}"]
Loading
Loading