diff --git a/.jenkinsfile b/.jenkinsfile index 42c8473..81e21bc 100644 --- a/.jenkinsfile +++ b/.jenkinsfile @@ -6,20 +6,18 @@ pipeline { } environment { - GITEA_API_URL = "https://di9.ru/git/api/v1" - GITEA_REPO_OWNER = "Voomra" - GITEA_REPO_NAME = "ss14-launcher-extractor" + GITEA_API_URL = "https://di9.ru/git/api/v1/repos/Voomra/ss14-launcher-extractor/releases" GITEA_TOKEN = credentials("JENKINS_GITEA_ACCESS_TOKEN") } stages { - stage("Build") { + stage("Сборка") { steps { - sh "./gradlew shadowJar" + sh "./gradlew clean shadowJar" } } - stage("Create Gitea Release") { + stage("Создание релиза") { steps { script { def version = sh(script: './gradlew properties -q | grep "version:" | awk \'{print $2}\'', returnStdout: true).trim() @@ -34,16 +32,67 @@ pipeline { } """ - def apiResponse = sh(script: ''' - curl -X POST \ - -H "Authorization: token ${GITEA_TOKEN}" \ - -H "Content-Type: application/json" \ - -d ''' + "'${releaseData}'" + ''' \ - "${GITEA_API_URL}/repos/${GITEA_REPO_OWNER}/${GITEA_REPO_NAME}/releases" - ''', returnStdout: true).trim() + def connection = new URL(env.GITEA_API_URL).openConnection() as HttpURLConnection + connection.setRequestMethod("POST") + connection.setRequestProperty("Authorization", "token ${env.GITEA_TOKEN}") + connection.setRequestProperty("Content-Type", "application/json") + connection.doOutput = true - echo "📥 Ответ от Gitea API:" - echo apiResponse + def writer = new OutputStreamWriter(connection.outputStream) + writer.write(releaseData) + writer.flush() + writer.close() + + def responseCode = connection.responseCode + def responseBody = connection.inputStream.text + + if (responseCode != 201) { + error """ + ❌ Ошибка: Gitea вернул HTTP код ${responseCode}. Ожидался 201. + Тело ответа: ${responseBody} + """ + } + + def releaseId = new groovy.json.JsonSlurper().parseText(responseBody).id + env.RELEASE_ID = releaseId + } + } + } + + stage("Загрузка файлов в релиз") { + steps { + script { + if (!env.RELEASE_ID) { + error "❌ ID релиза не определен. Пропускаем загрузку артефактов." + } + + def files = findFiles(glob: 'build/libs/*.jar') + if (files.isEmpty()) { + echo "⚠️ Нет артефактов для загрузки." + return + } + + files.each { file -> + def fileName = file.name + echo "Загружаем файл: ${fileName}" + + def connection = new URL("${env.GITEA_API_URL}/${env.RELEASE_ID}/assets?name=${fileName}").openConnection() as HttpURLConnection + connection.setRequestMethod("POST") + connection.setRequestProperty("Authorization", "token ${env.GITEA_TOKEN}") + connection.setRequestProperty("Content-Type", "application/octet-stream") + connection.doOutput = true + + def fileBytes = new File("build/libs/${fileName}").bytes + connection.outputStream.write(fileBytes) + + def uploadResponseCode = connection.responseCode + if (uploadResponseCode != 201) { + echo """ + ⚠️ Ошибка загрузки ${fileName}: статус ${uploadResponseCode} + Тело ответа: ${connection.inputStream.text} + """ + } + } } } }