Модуль для автоматизации деплоя клиентов и профилей на GravitLauncher через HTTP API. Предназначен для использования в CI/CD пайплайнах (GitHub Actions, GitLab CI и т.д.).
- Загрузка профилей (JSON) через HTTP POST
- Загрузка клиентов (ZIP-архив) через HTTP POST
- Токен-авторизация с ограничением доступа по профилям/клиентам (glob-паттерны)
- Автоматическая синхронизация после загрузки
- Защита от path traversal
- Собрать модуль:
./gradlew jar
- Скопировать
build/libs/DeployModule.jarв директориюmodules/LaunchServer - Запустить LaunchServer — модуль создаст конфиг автоматически
Файл: config/DeployModule/Config.json
{
"enabled": true,
"tokens": [
{
"token": "technomagic-secret-token",
"allowedProfiles": ["TechnoMagic"],
"allowedClients": ["TechnoMagic-*"]
},
{
"token": "hitech-secret-token",
"allowedProfiles": ["HiTech"],
"allowedClients": ["HiTech-*"]
},
{
"token": "admin-token-full-access",
"allowedProfiles": [],
"allowedClients": []
}
]
}При первом запуске генерируется один случайный токен с полным доступом.
Модуль поддерживает неограниченное количество токенов. Каждый токен может быть привязан к конкретным сборкам — например, отдельный токен для TechnoMagic и отдельный для HiTech. Это позволяет разграничить доступ между CI-пайплайнами разных сборок.
| Поле | Описание |
|---|---|
token |
Секретный ключ для авторизации |
allowedProfiles |
Glob-паттерны разрешённых профилей |
allowedClients |
Glob-паттерны разрешённых клиентов |
- Пустой список
[]= доступ ко всему - Поддерживается
*как wildcard (напримерHiTech-*разрешаетHiTech-1.20.1,HiTech-1.19.4и т.д.)
POST /webapi/upload/profile?token=TOKEN
Content-Type: application/json
<тело JSON профиля>
POST /webapi/upload/client?name=ClientName&token=TOKEN
<бинарное тело ZIP-архива>
Токен можно передавать через query-параметр token или заголовок X-Upload-Token.
Все ответы в формате JSON:
{"message": "Profile 'MyProfile' uploaded successfully", "error": null}{"message": null, "error": "Invalid token"}# Загрузка профиля
curl -X POST "http://localhost:9274/webapi/upload/profile?token=TOKEN" \
-H "Content-Type: application/json" \
-d @profile.json
# Загрузка клиента
curl -X POST "http://localhost:9274/webapi/upload/client?name=MyClient&token=TOKEN" \
--data-binary @client.zipДля каждой сборки используется свой секрет с токеном:
# Деплой сборки TechnoMagic
- name: Deploy TechnoMagic profile
run: |
curl -X POST \
"${{ secrets.LAUNCHER_URL }}/webapi/upload/profile" \
-H "X-Upload-Token: ${{ secrets.TECHNOMAGIC_TOKEN }}" \
-d @technomagic-profile.json \
--fail --show-error
- name: Deploy TechnoMagic client
run: |
curl -X POST \
"${{ secrets.LAUNCHER_URL }}/webapi/upload/client?name=TechnoMagic-1.20.1" \
-H "X-Upload-Token: ${{ secrets.TECHNOMAGIC_TOKEN }}" \
--data-binary @client.zip \
--fail --show-error# Деплой сборки HiTech (отдельный пайплайн, свой токен)
- name: Deploy HiTech client
run: |
curl -X POST \
"${{ secrets.LAUNCHER_URL }}/webapi/upload/client?name=HiTech-1.20.1" \
-H "X-Upload-Token: ${{ secrets.HITECH_TOKEN }}" \
--data-binary @client.zip \
--fail --show-error- GravitLauncher 5.6.9+
- Java 21+
LocalProfileProviderв конфигурации LaunchServer
- Параметр
nameклиента проверяется на path traversal (..,/,\) - ZIP-записи проверяются на выход за пределы целевой директории
- Каждый токен может быть ограничен конкретными профилями и клиентами
- Модуль можно отключить через
enabled: false