buildAndRelease.yml 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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@v2
  21. with:
  22. java-version: '17'
  23. - name: Build with Gradle
  24. run: |
  25. chmod +x ./gradlew
  26. ./gradlew clean build test
  27. dockerize:
  28. name: Dockerize Application
  29. needs: build-and-test
  30. runs-on: ubuntu-latest
  31. steps:
  32. - uses: actions/checkout@v3
  33. - name: Set up Docker Buildx
  34. uses: docker/setup-buildx-action@v1
  35. - name: Cache Docker layers
  36. uses: actions/cache@v2
  37. with:
  38. path: /tmp/.buildx-cache
  39. key: ${{ runner.os }}-buildx-${{ github.sha }}
  40. restore-keys: ${{ runner.os }}-buildx-
  41. - name: Set up JDK
  42. uses: actions/setup-java@v2
  43. with:
  44. java-version: '17'
  45. - name: Build the Docker image
  46. run: ./gradlew bootBuildImage --no-daemon --info --stacktrace
  47. deploy:
  48. name: Deploy to Server
  49. needs: dockerize
  50. runs-on: ubuntu-latest
  51. steps:
  52. - name: Deploy to Server
  53. uses: appleboy/ssh-action@master
  54. with:
  55. host: ${{ secrets.SERVER_IP }}
  56. username: ${{ secrets.SERVER_USER }}
  57. key: ${{ secrets.SSH_PRIVATE_KEY }}
  58. script: |
  59. docker pull lhamacorp/stocks-be:latest
  60. docker stop stocks-be || true
  61. docker rm stocks-be || true
  62. 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
  63. cleanup:
  64. name: Clean ups
  65. needs: deploy
  66. runs-on: ubuntu-latest
  67. steps:
  68. - name: Clean up Server
  69. uses: appleboy/ssh-action@master
  70. with:
  71. host: ${{ secrets.SERVER_IP }}
  72. username: ${{ secrets.SERVER_USER }}
  73. key: ${{ secrets.SSH_PRIVATE_KEY }}
  74. script: |
  75. docker image prune -a -f