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@v2 with: java-version: '17' - 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@v2 with: java-version: '17' - name: Build the Docker image run: ./gradlew bootBuildImage --no-daemon --info --stacktrace deploy: name: Deploy to Server needs: dockerize runs-on: ubuntu-latest steps: - name: Deploy to Server uses: appleboy/ssh-action@master with: host: ${{ secrets.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.SERVER_IP }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | docker image prune -a -f