diff --git a/.github/workflows/staging-ci-cd.yml b/.github/workflows/staging-ci-cd.yml
index b9f2245a1ecb24e75818e76ec49a7ccfddf507ff..e2ff47c908ed1283568d78e9d1a9b05ec1cb4d1f 100644
--- a/.github/workflows/staging-ci-cd.yml
+++ b/.github/workflows/staging-ci-cd.yml
@@ -1,78 +1,90 @@
-name: CI/CD Pipeline for Staging
+name: Github CI
 
 on:
   push:
     branches:
       - staging
-  pull_request:
-    branches:
-      - staging
 
 jobs:
   build:
+    name: Build
     runs-on: ubuntu-latest
-
     steps:
-      - name: Checkout code
-        uses: actions/checkout@v2
-
-      - name: Set up JDK 21 (using Zulufx)
-        uses: actions/setup-java@v2
+      - name: Checkout Repository
+        uses: actions/checkout@v4
+      - name: Set up JDK 21
+        uses: actions/setup-java@v4
         with:
-          java-version: '21'
-          distribution: 'zulu'
-          java-package: jdk
-          architecture: x64
-
+          distribution: "temurin"
+          java-version: "21"
+          cache: "maven"
+      - name: Cache Maven dependencies
+        uses: actions/cache@v4
+        with:
+          path: ~/.m2
+          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+          restore-keys: |
+            ${{ runner.os }}-maven-
       - name: Build with Maven
-        run: mvn clean install
-
-      - name: Run Unit Tests
-        run: mvn test
-
-      - name: Run Regression Tests (JUnit 5, TestContainers)
-        run: mvn test -P regression-tests
+        run: |
+          mvn clean package -DskipTests
+      - name: Upload Artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: java-app
+          path: target/*.jar
 
-  build-and-deliver:
+  test:
+    name: Test
     runs-on: ubuntu-latest
+    needs: build
     steps:
-      - name: Checkout Code
-        uses: actions/checkout@v3
-
-      - name: Install the gcloud CLI
-        uses: google-github-actions/setup-gcloud@v2
+      - name: Checkout Repository
+        uses: actions/checkout@v4
+      - name: Set up JDK 21
+        uses: actions/setup-java@v4
         with:
-          project_id: ${{ secrets.GOOGLE_PROJECT }}
-          service_account_key: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
-          export_default_credentials: true
-
-      - name: Authenticate with GCP
-        uses: google-github-actions/auth@v1
+          distribution: "temurin"
+          java-version: "21"
+          cache: "maven"
+      - name: Cache Maven dependencies
+        uses: actions/cache@v4
         with:
-          credentials_json: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
-
-      - name: Build and Push Docker Image
-        env:
-          PRODUCTION: staging
-          GOOGLE_PROJECT: ${{ secrets.GOOGLE_PROJECT }}
-          JDBC_STAGING_DATABASE_PASSWORD: ${{ secrets.JDBC_STAGING_DATABASE_PASSWORD }}
-          JDBC_STAGING_DATABASE_URL: ${{ secrets.JDBC_STAGING_DATABASE_URL }}
-          JDBC_STAGING_DATABASE_USERNAME: ${{ secrets.JDBC_STAGING_DATABASE_USERNAME }}
+          path: ~/.m2
+          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+          restore-keys: |
+            ${{ runner.os }}-maven-
+      - name: Test with Maven
         run: |
-          gcloud auth configure-docker us-central1-docker.pkg.dev
-          docker build --build-arg PRODUCTION=$PRODUCTION --build-arg JDBC_STAGING_DATABASE_PASSWORD=$JDBC_STAGING_DATABASE_PASSWORD --build-arg JDBC_STAGING_DATABASE_URL=$JDBC_STAGING_DATABASE_URL --build-arg JDBC_STAGING_DATABASE_USERNAME=$JDBC_STAGING_DATABASE_USERNAME -t us-central1-docker.pkg.dev/$GOOGLE_PROJECT/staging-repository/authentication:latest .
-          docker push us-central1-docker.pkg.dev/$GOOGLE_PROJECT/staging-repository/authentication:latest
+          mvn verify
+          mvn test
+          mvn jacoco:report
+          mvn test -P regression-tests
+          mvn verify -P integration-tests
+          mvn test -P uat
 
-      - name: Install required components
-        run: |
-          gcloud components update
-          gcloud components install gke-gcloud-auth-plugin
-
-      - name: Deploy to GKE
+  publish:
+    name: Publish Docker Image
+    runs-on: ubuntu-latest
+    needs: test
+    steps:
+      - name: Checkout Repository
+        uses: actions/checkout@v4
+      - name: check directory
+        run: ls -al
+      - name: Download Artifact
+        uses: actions/download-artifact@v4
+        with:
+          name: java-app
+      - name: check directory
+        run: ls -al
+      - name: Docker login
         env:
-          GOOGLE_PROJECT: ${{ secrets.GOOGLE_PROJECT }}
-          GOOGLE_REPOSiTORY: staging-repository
+          DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
+        run: echo "$DOCKER_PASSWORD" | docker login -u ${{ secrets.REGISTRY_USER }} --password-stdin docker.io
+      - name: Set Docker BuildKit
+        run: export DOCKER_BUILDKIT=1
+      - name: Build Docker Image
         run: |
-          gcloud container clusters get-credentials safetypin-staging --region asia-southeast2
-          sed -i "s/GOOGLE_PROJECT/$GOOGLE_PROJECT/g" staging.yaml
-          kubectl apply -f staging.yaml
\ No newline at end of file
+          docker build --build-arg PRODUCTION=$staging --build-arg JDBC_STAGING_DATABASE_PASSWORD=${{ secrets.JDBC_STAGING_DATABASE_PASSWORD }} --build-arg JDBC_STAGING_DATABASE_URL=${{ secrets.JDBC_STAGING_DATABASE_URL }} --build-arg JDBC_STAGING_DATABASE_USERNAME=${{ secrets.JDBC_STAGING_DATABASE_USERNAME }} -t ${{ secrets.REGISTRY_USER }}/${{ secrets.IMAGE_NAME }}:${{ secrets.IMAGE_TAG }} .
+          docker push ${{ secrets.REGISTRY_USER }}/${{ secrets.IMAGE_NAME }}:${{ secrets.IMAGE_TAG }}
\ No newline at end of file