buildAndRelease.yml 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. name: Release
  2. env:
  3. MONGO: ${{ secrets.MONGO }}
  4. on:
  5. push:
  6. branches: [ main ]
  7. jobs:
  8. build-and-test:
  9. name: Build and Test
  10. runs-on: ubuntu-latest
  11. steps:
  12. - uses: actions/checkout@v3
  13. - name: Cache Gradle packages
  14. uses: actions/cache@v2
  15. with:
  16. path: ~/.gradle/caches
  17. key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
  18. restore-keys: ${{ runner.os }}-gradle-
  19. - name: Set up JDK
  20. uses: actions/setup-java@v3
  21. with:
  22. java-version: '21'
  23. distribution: 'temurin'
  24. - name: Build with Gradle
  25. run: chmod +x ./gradlew && ./gradlew clean build test
  26. dockerize:
  27. name: Dockerize Application
  28. needs: build-and-test
  29. runs-on: ubuntu-latest
  30. steps:
  31. - uses: actions/checkout@v3
  32. - name: Set up Docker Buildx
  33. uses: docker/setup-buildx-action@v1
  34. - name: Cache Docker layers
  35. uses: actions/cache@v2
  36. with:
  37. path: /tmp/.buildx-cache
  38. key: ${{ runner.os }}-buildx-${{ github.sha }}
  39. restore-keys: ${{ runner.os }}-buildx-
  40. - name: Set up JDK
  41. uses: actions/setup-java@v3
  42. with:
  43. java-version: '21'
  44. distribution: 'temurin'
  45. - name: Build the Docker image
  46. run: ./gradlew build && docker build -t lhamacorp/stocks-be .
  47. - name: Login to Docker Hub
  48. uses: docker/login-action@v2
  49. with:
  50. username: ${{ secrets.DOCKERHUB_USERNAME }}
  51. password: ${{ secrets.DOCKERHUB_TOKEN }}
  52. - name: Push image
  53. run: docker push lhamacorp/stocks-be
  54. deploy:
  55. name: Deploy to Server
  56. needs: dockerize
  57. runs-on: ubuntu-latest
  58. steps:
  59. - name: Deploy to Server
  60. uses: appleboy/ssh-action@master
  61. with:
  62. host: ${{ secrets.SERVER_IP }}
  63. username: ${{ secrets.SERVER_USER }}
  64. key: ${{ secrets.SSH_PRIVATE_KEY }}
  65. script: |
  66. docker pull lhamacorp/stocks-be:latest
  67. docker stop stocks-be || true
  68. docker rm stocks-be || true
  69. docker run -d --name stocks-be -p 42902:8080 -e mongo=${{ secrets.MONGO }} -e database=${{ secrets.DATABASE }} -e stock_provider=${{ secrets.STOCK_PROVIDER_URL }} -e stock_key=${{ secrets.STOCK_PROVIDER_KEY }} -e exchange_provider=${{ secrets.EXCHANGE_PROVIDER_URL }} -e exchange_key=${{ secrets.EXCHANGE_PROVIDER_KEY }} lhamacorp/stocks-be:latest
  70. cleanup:
  71. name: Clean ups
  72. needs: deploy
  73. runs-on: ubuntu-latest
  74. steps:
  75. - name: Clean up Server
  76. uses: appleboy/ssh-action@master
  77. with:
  78. host: ${{ secrets.SERVER_IP }}
  79. username: ${{ secrets.SERVER_USER }}
  80. key: ${{ secrets.SSH_PRIVATE_KEY }}
  81. script: |
  82. docker image prune -a -f