Добавлен SHiNE-promo-solana-devnet в основной репозиторий без вложенного git

This commit is contained in:
AidarKC
2026-05-01 13:58:59 +03:00
parent 9b03273055
commit 3061bf3d1e
25 changed files with 1812 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.6'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'ru.shine'
version = '0.1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'com.mmorrell:solanaj:1.20.4'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
tasks.named('bootJar') {
archiveFileName = 'SHiNE-promo-solana-devnet.jar'
}
// ------------------------------------------------------------
// ДЕПЛОЙ ВРЕМЕННОГО СЕРВИСА "SHiNE-promo-solana-devnet"
//
// Назначение сервиса:
// - это отдельный продукт для тестовой раздачи SOL в devnet;
// - нужен для упрощённого онбординга тестовых пользователей;
// - работает как самостоятельное Spring Boot приложение.
//
// Почему отдельный деплой:
// - сервис изолирован от основного SHiNE-сервера;
// - его можно обновлять/перезапускать независимо;
// - жизненный цикл временного сервиса не должен ломать основной прод.
//
// ВАЖНО:
// - деплой по умолчанию выполняется ЧЕРЕЗ ДОМЕН (shineup.me), а не по IP;
// - целевая папка на сервере: /home/player/SHiNE/SHiNE-promo-solana-devnet;
// - целевой systemd-сервис: SHiNE-promo-solana-devnet.
// ------------------------------------------------------------
def deployHost = project.findProperty('deployHost') ?: 'root@shineup.me'
def deployPath = project.findProperty('deployPath') ?: '/home/player/SHiNE/SHiNE-promo-solana-devnet'
def remoteServiceName = project.findProperty('deployService') ?: 'SHiNE-promo-solana-devnet'
tasks.register('buildServerBundle', Copy) {
// Сборка минимального серверного бандла:
// 1) fat-jar приложения
// 2) шаблон application.properties (чтобы был эталон конфигурации)
dependsOn tasks.named('bootJar')
from(tasks.named('bootJar').flatMap { it.archiveFile }) {
rename { 'SHiNE-promo-solana-devnet.jar' }
}
from('config/application.example.properties') {
rename { 'application.properties' }
}
into(layout.buildDirectory.dir('server-bundle'))
}
tasks.register('deployToServerMkdir', Exec) {
// Шаг 1: гарантируем существование целевой директории на удалённом сервере.
dependsOn tasks.named('buildServerBundle')
commandLine 'bash', '-lc', "ssh ${deployHost} 'mkdir -p ${deployPath}'"
}
tasks.register('deployToServerJar', Exec) {
// Шаг 2: загружаем исполняемый jar.
dependsOn tasks.named('deployToServerMkdir')
commandLine 'bash', '-lc', "scp ${layout.buildDirectory.file('server-bundle/SHiNE-promo-solana-devnet.jar').get().asFile.absolutePath} ${deployHost}:${deployPath}/"
}
tasks.register('deployToServerConfig', Exec) {
// Шаг 3: загружаем конфиг-шаблон.
// На проде при необходимости его можно заменить на рабочий конфиг с секретами.
dependsOn tasks.named('deployToServerJar')
commandLine 'bash', '-lc', "scp ${layout.buildDirectory.file('server-bundle/application.properties').get().asFile.absolutePath} ${deployHost}:${deployPath}/"
}
tasks.register('deployToServerRestart', Exec) {
// Шаг 4: перезапускаем systemd-сервис и показываем статус.
// Если сервис не поднялся, ошибка будет видна сразу в этом шаге.
dependsOn tasks.named('deployToServerConfig')
commandLine 'bash', '-lc', "ssh ${deployHost} 'sudo systemctl restart ${remoteServiceName} && sudo systemctl --no-pager status ${remoteServiceName}'"
}
tasks.register('deployToServer') {
// Единая точка входа для деплоя временного сервиса.
// Запуск: ./gradlew deployToServer
dependsOn tasks.named('deployToServerRestart')
}