name: Release env: MONGO: ${{ secrets.MONGO }} on: push: branches: [ main ] jobs: build-and-test: name: Build and Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Cache Gradle packages uses: actions/cache@v2 with: path: ~/.gradle/caches key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: ${{ runner.os }}-gradle- - name: Set up JDK uses: actions/setup-java@v3 with: java-version: '21' distribution: 'temurin' - name: Build with Gradle run: chmod +x ./gradlew && ./gradlew clean build test dockerize: name: Dockerize Application needs: build-and-test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Cache Docker layers uses: actions/cache@v2 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: ${{ runner.os }}-buildx- - name: Set up JDK uses: actions/setup-java@v3 with: java-version: '21' distribution: 'temurin' - name: Build the Docker image run: ./gradlew build && docker build -t lhamacorp/stocks-be . - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Push image run: docker push lhamacorp/stocks-be deploy: name: Deploy to Server needs: dockerize runs-on: ubuntu-latest steps: - name: Deploy to Server uses: appleboy/ssh-action@master with: host: ${{ secrets.NEPTUNE_SERVER_IP }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | docker pull lhamacorp/stocks-be:latest docker stop stocks-be || true docker rm stocks-be || true 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 cleanup: name: Clean ups needs: deploy runs-on: ubuntu-latest steps: - name: Clean up Server uses: appleboy/ssh-action@master with: host: ${{ secrets.NEPTUNE_SERVER_IP }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | docker image prune -a -f