Last active
April 24, 2019 11:49
-
-
Save maximal/db20551d9645656402ed to your computer and use it in GitHub Desktop.
Обновление тестовых версий (EAP) сред разработки компании JetBrains для Linux
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
## | |
# Обновление тестовых версий (EAP) сред разработки компании JetBrains для Linux. | |
# В данном случае скачивается PhpStorm и GoLand, но скрипт подойдёт для любой среды разработки, | |
# выкладываемой компанией JetBrains в EAP. | |
# | |
# | |
# @author MaximAL | |
# @since 2019-04-24 Добавил опцию командной строки `no-eap` для получения стабильных версий вместо EAP. | |
# @since 2019-03-18 Сделал получение релизов через официальное JSON API. | |
# @since 2015-08-27 Поменял паттерн `fileRegex` под текущие реалии. | |
# @since 2015-04-10 Первая версия | |
# @copyright © MaximAL 2015—2019 | |
## | |
## Продукты: PhpStorm, GoLand | |
products=('PS' 'GO') | |
# Базовая директория; как правило, `/opt` | |
baseDir='/opt' | |
# Ссылка на JSON с релизами | |
if [[ "$1" == "no-eap" ]]; then | |
releaseUrl="https://data.services.jetbrains.com/products/releases?latest=false&code=" | |
else | |
releaseUrl="https://data.services.jetbrains.com/products/releases?latest=false&type=eap&code=" | |
fi | |
# Регулярное выражение для ссылки на новую версию. | |
fileRegex='https?://[^\"]+\.tar\.gz' | |
# Поехали! | |
echo "Updating JetBrains IDEs…" | |
for product in "${products[@]}"; do | |
echo "Product: $product" | |
productUrl="$releaseUrl$product" | |
echo " Quering $productUrl…" | |
fileUrl=`wget -q -O - "$productUrl" | grep -Po "$fileRegex" | head -n1` | |
if [ -z $fileUrl ]; then | |
echo " URL $productUrl does not contain link like $fileRegex." | |
exit 1 | |
fi | |
echo " File URL: $fileUrl" | |
echo -n " Fetching directory name…" | |
dirName=`wget -q -O - "$fileUrl" | tar tz | head -n1 | grep --max-count=1 -Po '[^/]+' | head -n1` | |
echo -e "\b: $dirName" | |
if [ -e "$baseDir/$dirName" ]; then | |
echo " Directory $baseDir/$dirName already exists. Seems like you are using last version of $product." | |
else | |
linkName=`echo $dirName | grep -Po '^[^-]+'` | |
cd "$baseDir" | |
echo ' Getting archive…' | |
wget -O - "$fileUrl" | tar xzp | |
echo " Setting symbolic link…" | |
rm -f "$linkName" | |
ln -s "$dirName" "$linkName" | |
echo " Update done:" | |
echo " Directory: $baseDir/$dirName/" | |
echo " Symlink: $baseDir/$linkName" | |
fi | |
done |
у меня сейчас не работает, починил за счет добавки на sed:
https://gist.github.com/Mausglov/b2c466a131a2021d8489/revisions
@Mausglov, чуток поменял паттерн $fileRegex
под текущие реалии.
@Mausglov, новая версия!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Постараюсь сразу ответить на главный вопрос:
Во-первых, иногда обновления неинкрементальны (скорее вопрос к разработчикам, но видимо, на то есть свои причины), и не работают из самой среды, их нужно ставить вручную „начисто“. Скрипт, сам скачивающий новый архив и сохраняющий пути для файлов запуска с помощью символических ссылок, от этого избавляет.
Во-вторых, я кладу среду разработки в
/opt
, где у меня лежат всякие сторонние приложения не из репозиториев, либо из нетрастовых репозиториев. IDEA (как и её EAP) — не из репозиториев; считаю, что ей там самое место. Ну, и я преднамеренно не даю пользователю прав на запись в эту папку, поэтому скрипт, доступный только руту/судо, может обновлять Идею.Я далеко не эксперт в файловой системе Линукса, поправьте, если ошибаюсь, но для меня сейчас пока что такое расположение выглядит логичным.