Skip to content

Merge pull request #67 from TP-RENTPLACE/development #444

Merge pull request #67 from TP-RENTPLACE/development

Merge pull request #67 from TP-RENTPLACE/development #444

Workflow file for this run

name: Backend CI/CD
on:
push:
branches:
- main
- development
- feature/**
- bugfix/**
- release/**
paths:
- 'rentplace/**'
pull_request:
branches:
- main
- development
- feature/**
- bugfix/**
- release/**
paths:
- 'rentplace/**'
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: 'gradle'
- name: Fix gradlew permissions
working-directory: rentplace
run: chmod +x gradlew
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
working-directory: rentplace
- name: Build
working-directory: rentplace
run: ./gradlew build --no-daemon
- name: Test
working-directory: rentplace
run: ./gradlew test
build-and-push-docker-image:
runs-on: ubuntu-latest
needs: build-and-test
if: github.ref == 'refs/heads/development' || github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Setup Java 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: 'gradle'
- name: Fix gradlew permissions
working-directory: rentplace
run: chmod +x gradlew
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
working-directory: rentplace
- name: Build
working-directory: rentplace
run: ./gradlew build --no-daemon
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Build Docker image
working-directory: rentplace
run: docker build -t ${{ secrets.DOCKERHUB_BACKEND_IMAGE_NAME }} -f Dockerfile .
- name: Push Docker Image
working-directory: rentplace
run: docker push ${{ secrets.DOCKERHUB_BACKEND_IMAGE_NAME }}
deploy:
runs-on: ubuntu-latest
needs: build-and-push-docker-image
steps:
- name: Set up SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
eval $(ssh-agent -s)
ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
- name: List files
run: ls -la
- name: Create app.env file
run: |
echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env
echo "DB_USER=${{ secrets.DB_USER }}" >> .env
echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env
echo "JWT_SECRET_ACCESS=${{ secrets.JWT_SECRET_ACCESS }}" >> .env
echo "JWT_SECRET_REFRESH=${{ secrets.JWT_SECRET_REFRESH }}" >> .env
echo "JWT_EXPIRATION_TIME_IN_DAYS_REFRESH=${{ secrets.JWT_EXPIRATION_TIME_IN_DAYS_REFRESH }}" >> .env
echo "JWT_EXPIRATION_TIME_IN_MINUTES_ACCESS=${{ secrets.JWT_EXPIRATION_TIME_IN_MINUTES_ACCESS }}" >> .env
echo "MAIL_USERNAME=${{ secrets.MAIL_USERNAME }}" >> .env
echo "MAIL_PASSWORD =${{ secrets.MAIL_PASSWORD }}" >> .env
echo "COMMISSION_FOR_RENTER_IN_PERCENT=${{ secrets.COMMISSION_FOR_RENTER_IN_PERCENT }}" >> .env
echo "COMMISSION_FOR_OWNER_IN_PERCENT=${{ secrets.COMMISSION_FOR_OWNER_IN_PERCENT }}" >> .env
echo "OPENROUTER_API_URL=${{ secrets.OPENROUTER_API_URL }}" >> .env
echo "OPENROUTER_API_KEY=${{ secrets.OPENROUTER_API_KEY }}" >> .env
echo "OPENROUTER_API_MODEL=${{ secrets.OPENROUTER_API_MODEL }}" >> .env
echo "OPENROUTER_API_DEFAULT_SYSTEM_PROMPT=${{ secrets.OPENROUTER_API_DEFAULT_SYSTEM_PROMPT }}" >> .env
- name: Copy files to the server
run: |
eval $(ssh-agent -s)
scp ./.env ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }}:${{ secrets.APP_PATH }}/
- name: SSH Execute Commands
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd Deploy
docker compose down
docker rm $(docker ps -a -q)
docker pull ${{ secrets.DOCKERHUB_BACKEND_IMAGE_NAME }}
docker compose up -d --build