diff --git a/.github/workflows/recommend-ci b/.github/workflows/recommend-ci new file mode 100644 index 0000000..368b4c0 --- /dev/null +++ b/.github/workflows/recommend-ci @@ -0,0 +1,111 @@ +# .github/workflows/recommend-ci.yml +name: Recommend CI + +on: + push: + branches: [ main, develop ] + paths: + - 'recommend/**' + - 'common/**' + - 'build.gradle' + - 'settings.gradle' + pull_request: + branches: [ main ] + paths: + - 'recommend/**' + - 'common/**' + - 'build.gradle' + - 'settings.gradle' + workflow_dispatch: + +env: + ACR_NAME: acrdigitalgarage03 + IMAGE_NAME: hiorder/recommend + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + with: + gradle-version: '8.13' + + - name: Cache Gradle packages + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Generate Gradle Wrapper + run: | + echo "Generating gradle wrapper..." + gradle wrapper --gradle-version 8.13 + chmod +x gradlew + echo "Testing gradle wrapper..." + ./gradlew --version + + - name: Build recommend module with dependencies + run: ./gradlew recommend:build -x test + + - name: Run recommend tests + run: ./gradlew recommend:test + + - name: Generate build timestamp + id: timestamp + run: echo "BUILD_TIME=$(date +'%y%m%d%H%M')" >> $GITHUB_OUTPUT + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Azure Container Registry + uses: azure/docker-login@v1 + with: + login-server: ${{ env.ACR_NAME }}.azurecr.io + username: ${{ secrets.ACR_USERNAME }} + password: ${{ secrets.ACR_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: ./recommend/Dockerfile + platforms: linux/amd64 + push: true + tags: | + ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ steps.timestamp.outputs.BUILD_TIME }} + ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:latest + + - name: Output image tags + run: | + echo "🎉 Image pushed successfully!" + echo "📦 Image: ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}" + echo "🏷️ Tags: ${{ steps.timestamp.outputs.BUILD_TIME }}, latest" + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: recommend-test-results + path: recommend/build/reports/tests/test/ + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + if: success() + with: + name: recommend-jar + path: recommend/build/libs/*.jar