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