name: Build & Deploy run-name: ${{ gitea.event_name }} by ${{ gitea.actor }} on: push: branches: [main, master, dev] pull_request: branches: [main, master] jobs: build: runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v4 - name: Set up JDK 21 from Yandex mirror run: | sudo sed -i 's|//archive.ubuntu.com|//mirror.yandex.ru|g; s|//security.ubuntu.com|//mirror.yandex.ru|g' /etc/apt/sources.list 2>/dev/null || true sudo sed -i 's|//archive.ubuntu.com|//mirror.yandex.ru|g; s|//security.ubuntu.com|//mirror.yandex.ru|g' /etc/apt/sources.list.d/*.sources 2>/dev/null || true sudo apt-get update sudo apt-get install -y openjdk-21-jdk echo "JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64" >> $GITHUB_ENV - name: Grant Gradle executable run: chmod +x gradlew - name: Build run: ./gradlew --no-daemon build - name: Test run: ./gradlew --no-daemon test deploy: runs-on: ubuntu-24.04 needs: build if: gitea.event_name == 'pull_request' && gitea.base_ref == 'master' && gitea.head_ref == 'dev' steps: - name: Checkout uses: actions/checkout@v4 - name: Set up JDK 21 from Yandex mirror run: | sudo sed -i 's|//archive.ubuntu.com|//mirror.yandex.ru|g; s|//security.ubuntu.com|//mirror.yandex.ru|g' /etc/apt/sources.list 2>/dev/null || true sudo sed -i 's|//archive.ubuntu.com|//mirror.yandex.ru|g; s|//security.ubuntu.com|//mirror.yandex.ru|g' /etc/apt/sources.list.d/*.sources 2>/dev/null || true sudo apt-get update sudo apt-get install -y openjdk-21-jdk echo "JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64" >> $GITHUB_ENV - name: Grant Gradle executable run: chmod +x gradlew - name: Build distribution run: ./gradlew --no-daemon installDist - name: Login to Container Registry run: echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ secrets.REGISTRY_URL }} -u "${{ secrets.REGISTRY_USER }}" --password-stdin - name: Build Docker image run: | docker build -t ${{ secrets.REGISTRY_URL }}/${{ gitea.repository }}:${{ gitea.sha }} -t ${{ secrets.REGISTRY_URL }}/${{ gitea.repository }}:latest . - name: Push Docker image run: | docker push ${{ secrets.REGISTRY_URL }}/${{ gitea.repository }}:${{ gitea.sha }} docker push ${{ secrets.REGISTRY_URL }}/${{ gitea.repository }}:latest - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.DEPLOY_HOST }} port: ${{ secrets.DEPLOY_PORT || '22' }} username: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_SSH_KEY }} script: | set -e cd ${{ secrets.DEPLOY_PATH }} cat > .env << EOF REGISTRY_URL=${{ secrets.REGISTRY_URL }} IMAGE_NAME=${{ gitea.repository }} IMAGE_TAG=${{ gitea.sha }} DATABASE_JDBC_URL=${{ secrets.DATABASE_JDBC_URL }} DATABASE_USER=${{ secrets.DATABASE_USER }} DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }} DATABASE_POOL_SIZE=${DATABASE_POOL_SIZE:-10} HOST_PORT=${HOST_PORT:-8080} EOF docker compose -f docker-compose.remote.yml pull docker compose -f docker-compose.remote.yml up -d --remove-orphans docker image prune -f