Githawk: Альтернативы Buddybuild?

Созданный на 2 янв. 2018  ·  71Комментарии  ·  Источник: GitHawkApp/GitHawk

Как только я с ним знакомился ....

Существующие бесплатные планы для начинающих и разработка приложений для Android будут прекращены 1 марта 2018 г.

Мы почти наверняка потеряем поддержку этого проекта. Пора найти новый CI. Какие-либо предложения?

Я читаю эту статью, которая предлагает:

Я читал о Buildkite и AppCenter в Hacker News.

Я также рассматриваю самостоятельные решения с открытым исходным кодом, чтобы подобное не повторилось:

❔ question

Самый полезный комментарий

Я явно предвзят;) но с App Center такого не случится.
Пожалуйста, свяжитесь с нами, если вы заинтересованы.

Все 71 Комментарий

Хотите выбрать другой вариант с самостоятельным размещением - TeamCity (https://www.jetbrains.com/teamcity)?

Обычно очередь заданий CircleCI для проектов с открытым исходным кодом намного менее загружена, чем TravisCI.

Мои 0,02 доллара от управления некоторыми репозиториями RxSwiftCommunity.

Трэвис - абсолютный мусор (или стал со временем).
Очередь невыносима и замедляет разработку (ожидание 50-минутной сборки 90-х недопустимо), а настройка довольно раздражает.

Мы медленно, но верно перемещаем большинство репозиториев в CirlceCI и остались очень довольны этим. Очередь действительно быстрая и честная, а конфигурация относительно проста.

Также слышал много хорошего о Bitrise в этом смысле.

Очень жаль BB, будет интересно следить за ним, потому что я не думаю, что Apple убьет его - но да

Имеет опыт работы со старой версией Jenkins, в качестве инструмента, на который она определенно способна, но потребует довольно много обслуживания / настройки и в искусстве поддерживать открытость и совместную работу, вероятно, не самое лучшее, честно говоря

Кроме того, если мы обратимся к другому «крупному» провайдеру, мы рискуем, что его просто захватит другая фирма, играющая в монополию.

Я бы хотел попробовать Bitrise, мои 2 цента

Я явно предвзят;) но с App Center такого не случится.
Пожалуйста, свяжитесь с нами, если вы заинтересованы.

cc @Palleas

Отправлено с помощью GitHawk

Https://Buildozer.io поддерживает как iOS, так и Android. (раскрытие: я один из его основателей)

Мы использовали CircleCI во всех проектах Artsy iOS, которым требуется Mac для CI - очереди OSS не были такой проблемой, как Трэвис.

Я провел целый день, пробуя Bitrise и App Center. Пока что они не выглядят такими простыми в использовании и волшебными, как BuddyBuild ...
Я счастлив за команду BB (и горжусь тем, что тоже нахожусь в Ванкувере), но очень зол как пользователь ...
BuddyBuild был одним из тех сервисов, которые просто работают, почти не нуждаясь в настройке.

Мне очень понравилось, как работает Buddybuild. Я и раньше устал от Circle CI, но есть некоторые вещи, на которые стоит обратить внимание: он использует Fastlane для подписи и развертывания в тестовом полете, автоматическая подпись не может использоваться. нужно использовать "Вручную"

Я нашел время, чтобы поболтать с

Проверьте https://buildkite.com/, они предлагают бесплатную учетную запись для OSS

Огромный поклонник bitrise здесь. Мы часто используем это с нашим решением https://www.appaloosa-store.com/

@sregg, что именно у вас не работало в Центре приложений? Я был бы рад помочь со всем, что касается сборки.

Например, @derpixeldan , интеграция со Slack выполняется вручную с использованием веб-перехватчиков, а не только с помощью флажка с BB. Кроме того, нет возможности начать номер сборки с указанного номера (т.е. моего текущего номера сборки на BB). Наконец, подписание приложения iOS выглядело не так просто, как BB (я думаю, что я дал им только свое имя пользователя и пароль Apple ID, и они автоматически управляли сертификатом и подготовкой)

Я технический менеджер в Microsoft по сборке центра приложений. У нас отличная команда, которая каждую неделю вносит улучшения, и мы стремимся к многоплатформенной поддержке.

@sregg отличная обратная связь, и я думаю, что улучшения во всех этих областях находятся в нашей очереди.

Также не стесняйтесь писать мне в Твиттере по адресу https://twitter.com/0xlukekim с любыми проблемами / проблемами / отзывами.

Я должен сказать, что был очень впечатлен Центром приложений, главным образом в "мета" смысле:

  • Усилия по разработке, которые Microsoft вкладывает в это.
  • Принадлежность и заботу некоторые сотрудники демонстрируют, комментируя здесь.
  • Я видел это в действии на AltConf в прошлом году, и это действительно показалось мне довольно приятным.

Не имею достаточного опыта, но вроде тоже достойный конкурент :)

Всем привет, я Виктор из https://www.bitrise.io (технический директор и соучредитель).

Всем спасибо за рекомендацию, это очень много значит для нашей команды!

Просто хотел сказать привет 👋 и убедиться, что мы, конечно, слушаем, не стесняйтесь пинговать нас в любое время через любой из наших каналов поддержки, и я буду рад ответить на любые ваши вопросы здесь!

Ха-ха, я думаю, мы можем начать войну ставок прямо сейчас 😄

Мой GitHawk выносит все ИТ на свой двор 🤓

Также есть https://buddy.works. Я не пользовался их услугами, поэтому сложно сказать, хороши ли они. У них определенно крутое имя; P

Я перешел с BuddyBuild на Bitrise (нам действительно нужно одно место для iOS и Android). Это потребовало некоторого чтения документации, а также некоторых репозиториев git шага, но все прошло довольно гладко, заняло около дня наряду с другими делами.

@sregg Просто упомяну, что мы используем шаг «Adjust BuildNumber» до + = 640, так как мы использовали его для versionCode и выполняли автоматическое развертывание с BB.

Ключевые различия, которые я обнаружил с Bitrise по сравнению с BuddyBuild (кроме того, что почти все, что в BB основано на графическом интерфейсе пользователя), заключались в разделении сборки Gradle на несколько этапов. BuddyBuild (возможно, более эффективно) построит все, что вы просите, а затем вытащит соответствующий материал для, скажем, электронных писем о развертывании или публикации в Play Store, с Bitrise у вас есть несколько вариантов, которые я мог видеть: 1. разделить его на несколько шагов сборки / Gradle, например, для тестов UI / Android, для ваших тестовых сборок [2x3 = 6 вариантов для нас], один для артефактов развертывания в App / Play Store, с некоторыми этапами очистки между ними (например, я меняю папку развертывания после на предотвращать отправку электронных писем там, где недостаточно фильтров) ... или 2. быть комфортным с сценарием bash и иметь шаг сценария, который разбивает переменные ENV карты каналов, чтобы их было легче использовать на более поздних этапах.

Также было бы неплохо иметь больше примеров, установив в сообщениях резервирования что-то вроде тех, которые BB отправлял по умолчанию, например, неплохо иметь возможность настраивать, но в целом мы просто хотим вернуться к написанию кода.

Другими могут быть функции, которые мы не использовали, управление тестером (мы используем Play Store Alpha и TestFlight) и встряхивание для регистрации сбоев / сбоев (мы предпочитаем Firebase).

Одна из действительно интересных функций - это возможность не просто просматривать и редактировать рабочий процесс в виде файла .yml, но и загружать и запускать его локально с помощью интерфейса командной строки.

Если честно, работы намного больше, чем мы привыкли, в этом смысл платить ежемесячно, верно? Но это в значительной степени разовая вещь, и бонусом является дополнительная настраиваемость. В целом, он выполняет свою работу очень хорошо и за хорошую цену. Я доволен этим переключателем. Я уверен, что CircleCI тоже хорош (мы используем его для нашей серверной части).

Также стоит отметить, что вся инфраструктура bitrise - это OSS - https://github.com/bitrise-io/bitrise.io

Спасибо @richardleggett за отзыв, я

Особенно Slack - я думаю, что уже давно пора иметь там «более интересное» (более полезное) сообщение по умолчанию, вместо того, чтобы требовать, чтобы вы создавали сообщение своей «мечты» сразу после перехода на шаг в первый раз. Гибкость важна, но не менее важны значения / настройки по умолчанию (и скорость). После этого вы все равно можете настроить сообщение, чтобы не было проблем с тем, чтобы сделать сообщение по умолчанию более подробным.

Gradle: обсудим это с командой разработчиков, спасибо за выделение!

Я пинал это (медленно увеличивая мое беспокойство). Хотел дать ссылку на это сообщение в блоге, исследуя альтернативы, на случай, если там есть дополнительная информация.

Я хочу провести некоторое время с @orta и @krausefx в городе, чтобы обсудить мое видение «северной звезды» для автоматизации этого проекта (помимо CI). Отчитаюсь, как только наберусь энергии, чтобы действительно поработать над этим.

Спасибо за сообщение об этом @rnystrom. Я чувствую тебя. 😕

@rnystrom благодарит за сообщение в блоге и сожалеет, что у вас возникли проблемы с настройкой распространения на bitrise. Не уверен, видели ли вы это, но теперь у нас есть встроенная функция Auto Provisioning для подписи кода, которая после настройки может автоматически управлять файлами подписи iOS для вас: https://blog.bitrise.io/ios-auto-provision-step

В любом случае, просто хотел сказать спасибо за то, что попробовали bitrise, и сообщить, что мы всегда рады помочь, если вы еще раз попробуете bitrise. Не стесняйтесь пинговать меня где угодно, например, в нашем Slack (http://chat.bitrise.io).

@viktorbenei Как бы то ни было, это не сообщение в блоге Райана!

Ой, моя беда, здесь еще рано утром 😅 Извините, господа, и спасибо, @Sherlouk !

На самом деле вчера вечером начал работу на Bitrise. Отчитаюсь!

Отправлено с помощью GitHawk

Билд Bitrise зеленый! Настроить так же просто, как и ББ. Я думаю, что у нас есть победитель.

Отправлено с помощью GitHawk

Рад слышать @rnystrom ! :)

Действительно, начальная настройка должна быть достаточно плавной, как у BB. Основное отличие - это пользовательский интерфейс конфигурации после этого. Подход BB заключался в предоставлении простого пользовательского интерфейса, который подразумевает, что некоторые вещи могут быть невозможны / не могут быть изменены, в то время как мы сосредоточились в основном на гибкости, чтобы вы могли указать каждый аспект процесса, если хотите (но это связано с определенным сложность и более крутая кривая обучения). Мы знаем, что эта кривая обучения может быть слишком сложной, особенно для хобби-проектов, и мы работаем над ее улучшением; в этом году запланировано довольно много вещей, чтобы упростить развертывание и т. д. конфиги;)

https://appcenter.ms кажется многообещающим

Во имя прозрачности, вот где мы сейчас находимся: у меня есть как Bitrise, так и App Center CI, создающий GitHawk. Обе службы довольно просты в использовании, поэтому я хочу попробовать использовать как для доставки нескольких бета-сборок, так и для одной сборки App Store, документируя мой процесс.

Вот мои первые мысли

Bitrise

Плюсы

  • Отличная поддержка (ч / т @viktorbenei)
  • Довольно быстрые сборки
  • Развертывание через скоростную полосу
  • Экстремальная настройка и детализация этапов сборки
  • Платформа с открытым исходным кодом (ish)
  • Автоматически отправлять сборки в ITC из master (я _love_ это)

Минусы

  • Нет бесплатного плана с открытым исходным кодом (_ еще_)
  • Запуск (может быть приобретен или исчезнет)

Центр приложений

Плюсы

  • Сборка выполняется очень быстро
  • Меньше настроек = больше оптимизации
  • Специально для развертывания iOS / Android
  • @TroubleMakerBen здорово 😄
  • При поддержке Microsoft

    • Наверное, скоро не уйдешь

    • ++ ресурсы

Минусы

  • Нет бесплатного плана с открытым исходным кодом (_ еще_)
  • Требуется общая цель для сборки
  • Автоматизированное развертывание tbd (подтверждено)
  • Слишком много вещей, которые мы не будем использовать (например, мне не нужен SDK App Center)
  • Вывод журнала _ очень подробный_, ошибки сборки трудно найти
  • Нет интеграции статуса GitHub

Спасибо, что поделились @rnystrom ! Только одно исправление: компонент веб-службы bitrise не является открытым исходным кодом, поэтому невозможно разместить API и веб-интерфейс самостоятельно (пока;)). Все инструменты, используемые для запуска конфигурации (редактор рабочего процесса, интерфейс командной строки бегуна, ...), имеют открытый исходный код, поэтому вы можете загрузить конфигурацию сборки и запустить ее на своем собственном Mac (или на любом Mac / Linux), аналогично скоростная трасса.

Просто вопрос, для сравнения

Bitrise: Минусы: нет бесплатного плана с открытым исходным кодом (пока)

Есть ли у AppCenter план с открытым исходным кодом? Возможно, пропустил, НАСКОЛЬКО, у них его тоже нет. Мне действительно просто любопытно, потому что я не нашел ничего похожего на сайте appcenter.

Нет интеграции статуса GitHub

Это большой

@viktorbenei обновит! Еще нет

Отправлено с помощью GitHawk

Эй, ребята,

Спасибо за отзывы и сравнение. Мне это нравится, и наши PM смотрят эту ветку.

Автоматизированное развертывание tbd (подтверждено)

В настоящее время мы упорно работаем над улучшением дистрибуции. Будьте на связи.

Есть ли у AppCenter план с открытым исходным кодом? Возможно, пропустил, НАСКОЛЬКО, у них его тоже нет. Мне действительно просто любопытно, потому что я не нашел ничего похожего на сайте appcenter.

У нас пока нет плана OSS.

Приветствую всех и хороших выходных!

Это может быть актуально сейчас https://github.com/fastlane/ci 👍

@KrauseFx Я видел это и очень рад этому.

Зачем запрашивать функции, если мы, как сообщество, можем их создать? Плюс, Google поддерживает это? не мог и желать большего.

На самом деле с нетерпением жду возможности внести свой вклад в этот процесс по мере его развития и применить его к нашему рабочему процессу по мере его развития.

Спасибо за все, что вы делаете для сообщества!

@KrauseFx игрок 3 вошел в игру

Отправлено с помощью GitHawk

лолз

Я не думаю, что центр приложений поддерживает синтаксис типа [ci skip] за фиксацию

@dkhamsing, к сожалению, нет (пока).

Один реальный плюс для buddybuild, который мне понравился, - это то, как они показывают до / после / различия в результатах тестирования, если модульный тест

Кто-нибудь знает, есть ли у какой-либо из этих других систем аналогичная функция?

Поддерживает ли Центр приложений сборку по запросу на вытягивание? Я очень запутался cc @TroubleMakerBen

@dkhamsing да!

редактировать: неважно 🙊

Отправлено с помощью GitHawk

@dkhamsing App Center поддерживает создание на основе PUSH, но пока не на основе PR (создание на основе слияния).

Ах я вижу. Спасибо, Райан, Бен

Отправлено с помощью GitHawk

После прочтения этой ветки кажется, что это гонка на двух лошадях: Bitrise и App Center. Тем не менее, никто не затронул тему тестов пользовательского интерфейса: мне понравилось, как в BB с помощью всего нескольких щелчков мыши можно запускать тесты эспрессо на виртуальном устройстве. Поддерживает ли это какая-либо из двух обсуждаемых платформ?

https://docs.microsoft.com/en-us/appcenter/test-cloud/

Отправлено с помощью GitHawk

@dkhamsing App Center Test фактически запускает тесты пользовательского интерфейса на физических устройствах - у нас их несколько тысяч. Неа, картинок не видно;)

На самом деле мы пытаемся найти новое решение CI.

  • AppCenter : похож на bb, но не обеспечивает PR-поддержки, я думаю, больше ориентирован на управленцев, также журналы не предоставляют стек, если какая-либо задача не выполняется.

  • Bitrise: очень настраиваемый, предлагает множество открытых «шагов», таких как охват кода, развертывание, подпись, unitTest, UITest, сборка, доставка, очистка и индивидуализация, потому что у вас есть возможность настроить его, просто немного запутались с файлами .yaml, вы может запускать шаги, заданные Push, PR и т. д.

  • Nevercode Очень настраиваемый, вы можете выбирать между задачей gradlew для каждой ветки, созданием PR и отсутствием бесплатного плана.

Я думаю, по крайней мере, Bitrise предлагает множество функций, которые мы можем использовать!

Из размещенной выше ссылки о тестировании в Центре приложений

  1. Просмотрите основные концепции
    Понимание основных концепций Test Cloud упрощает использование, навигацию и общение с поддержкой. Перед выполнением первых тестов рекомендуется ознакомиться с этими концепциями.

Какого черта ... Я не хочу пересматривать какие-либо концепции, основные или другие, я просто хочу, чтобы он работал с двумя щелчками мыши, как это было на BB :( У меня нет 10 часов, чтобы погрузиться в эту работу, Я программист, а не инженер DevOps ...

Да, документацию по центру приложений можно упростить.

Отправлено с помощью GitHawk

@acristescu

После прочтения этой ветки кажется, что это гонка на двух лошадях: Bitrise и App Center. Тем не менее, никто не затронул тему тестов пользовательского интерфейса: мне понравилось, как в BB с помощью всего нескольких щелчков мыши можно запускать тесты эспрессо на виртуальном устройстве. Поддерживает ли это какая-либо из двух обсуждаемых платформ?

Не (пока) одним щелчком, но также более мощный в нескольких отношениях: https://blog.bitrise.io/introduction-solid-and-snappy-virtual-device-testing-for-android

Мы работаем над тем, чтобы упростить настройку (поэтому она все еще «бета», а не из-за недостатка функциональности;)).

@acristescu @dkhamsing Мы в курсе! Продолжайте получать обратную связь.

@viktorbenei Я собираюсь попробовать, но, боже мой, этот художественный стиль отталкивает. Я вспомнил, почему я держался подальше от Bitrise в прошлом ... улыбающиеся облака, обнимающие друг друга? Акулы с привязанными к ним лазерами?!? Зеленые кнопки на ярком фиолетовом фоне? Возможно, я здесь просто показываю свой возраст, но как я могу порекомендовать этот инструмент клиенту, который ... скажем ... банк?

Нет проблем @acristescu , я определенно понимаю вашу точку зрения, честные отзывы всегда приветствуются, а обновление дизайна уже в разработке;)

Я решил попробовать их оба с помощью простого репо (https://github.com/acristescu/GreenfieldTemplate) и посмотреть, куда я попаду. Пока что я пробовал App Center и наткнулся на несколько препятствий:

  • решено (он не смог найти инструменты сборки gradle!), вам нужно вручную добавить репозиторий google() в Gradle вашего проекта
  • он перезапустил номер сборки с 1, тогда как я уже выпустил в магазине игр номер 42, Google просто отклонит сборку!)
  • Я не мог найти, как протестировать на виртуальном устройстве бесплатно, только на реальных устройствах с 30-дневной бесплатной пробной версией .
  • Я не уверен, что он запускал модульные тесты, потому что
##[warning]No test result files matching /Users/vsts/agent/2.127.0/work/1/s/**/build/test-results/TEST-*.xml were found, so publishing JUnit test results is being skipped.

Не уверен, что это такое ...

Bitrise: с другой стороны, установка была такой же безболезненной, хотя я думаю, что если мне нужно что-то изменить, мне нужно открыть файл yml и поиграть с ним (обновление: нашел вещь, называемую редактором рабочего процесса. Это выглядит страшно, но мощно) . Загвоздки:

  • он никогда не спрашивал меня, какой вариант построить, и выбирал не тот. Я хотел prodRelease но по какой-то причине он решил построить именно два других mockDebug и prodDebug . Не могу найти, где это изменить, но я уверен, что он должен быть.
  • сборка заняла больше времени, 4 минуты вместо 2 минут 16 для центра приложений. Возможно, это из-за вышеуказанной проблемы?
  • нигде в журналах нет упоминаний о тестах junit. Я сомневаюсь, что это им помогло. Непонятно, как их добавить, возможно, где-нибудь в редакторе рабочего процесса? (обновление возилось с редактором рабочего процесса около 10 минут и нашло его. Бонусные баллы за то, что позволили мне выбрать, какую цель test запустить)
  • Не уверен, какой идентификатор сборки он использовал, как мне это вообще увидеть?

Спасибо за размещение этих

Отправлено с помощью GitHawk

image

Спасибо @acristescu за подробный отзыв, мы очень ценим его. В частности, предупреждение для файлов отчета тестирования JUnit в Центре приложений не влияет на ваш фактический запуск теста и должно быть исправлено в ближайшее время.
Продолжайте!

Мне потребовалось два часа, но мне удалось убедить центр приложений загрузить в Google Play. Однако я не могу убедить его сделать это автоматически, мне пришлось загрузить подписанный APK из центра приложений, а затем загрузить его обратно в раздел развертывания / магазинов (!), Чтобы он заработал. Кажется ужасно запутанным, что я делаю не так?

PS: Чтобы добавить оскорбления к травме, BuddyBuild развернулся несколько раз за один и тот же промежуток времени, так как я забыл отключить его в начале, и он просто работает автоматически без какого-либо вмешательства человека ...

Привет @acristescu!

Re: https://github.com/rnystrom/GitHawk/issues/1330#issuecomment -368228417

он никогда не спрашивал меня, какой вариант построить, и выбирал не тот. Я хотел prodRelease, но по какой-то причине он решил построить именно два других mockDebug и prodDebug. Не могу найти, где это изменить, но я уверен, что он должен быть.

Действительно, наш текущий сканер добавит шаг Gradle Runner с настройкой assembleDebug для базового рабочего процесса. Мы понимаем, что это может быть недостаточно просто, но вкратце, если вы хотите построить prodRelease тогда задача градиента будет assembleProdRelease . Если вы хотите запустить lint, тогда задача gradle - lint . Вы можете сделать все это с помощью шага Gradle Runner, на самом деле gradle может обрабатывать несколько задач, поэтому для запуска lint а затем assembleProdRelease вы также можете указать это как задачу: lint assembleProdRelease который будет делать и то, и другое.

Мы работаем над новыми шагами и новыми конфигурациями сканера по умолчанию, которые сделают это проще, с более конкретными шагами (например, шаг «Lint», который запускает задачу gradle lint , вместо того, чтобы требовать от вас установки этой задачи в шаг "Gradle Runner") 😉

сборка заняла больше времени, 4 минуты вместо 2 минут 16 для центра приложений. Возможно, это из-за вышеуказанной проблемы?

Действительно, похоже, что это так, поскольку assembleDebug скорее всего, генерирует 2 отдельных APK / варианта в вашем случае вместо одного "ProdRelease".

нигде в журналах нет упоминаний о тестах junit. Я сомневаюсь, что это им помогло.

Укажите test в качестве входных данных задачи gradle шага Gradle Runner, который будет запускать ваши тесты - или добавьте шаг Gradle Unit Test, который настроен для запуска этой задачи gradle по умолчанию.

Не уверен, какой идентификатор сборки он использовал, как мне это вообще увидеть?

Если вы имеете в виду, устанавливаем ли мы номер сборки на номер сборки bitrise.io: по умолчанию мы этого не делаем, вы можете сделать это, например, добавив шаг « Изменить код версии

Еще раз спасибо за ваш отзыв, мы прислушиваемся и уже запланировали улучшить эти моменты настройки! ;)

Замечательное обсуждение. Мне было трудно найти альтернативу BuddyBuild, поддерживающую Carthage.

Заглянул в Nevercode, они поддерживают только коконады.

Я считаю, что Центр приложений поддерживает Carthage.

Любые другие?

@jamesone

Я думаю, что лучшим вариантом для вас может быть Bitrise, они предоставляют платформу, такую ​​как битбакет конвейеров , также вы можете настроить в соответствии с вашими потребностями с помощью шагов.

На самом деле мы перешли с bb на bitrise, используем Android и iOS, и все отлично!

Замечательно @cbedoy Что вы сделали с устанавливаемыми сборками, которые buddybuild предоставляет для всех ваших веток? Есть ли у Bitrise интеграция ИЛИ поддержка этого?

Вы можете запускать рабочие процессы (много _шагов_), когда вы нажимаете, создаете PR или тег.

Также вы можете запланировать сборки для каждой ветки.

Вы должны проверить:

https://devcenter.bitrise.io/bitrise-cli/workflows/
https://devcenter.bitrise.io/bitrise-cli/steps/

Когда вы понимаете, как работает bitrise, можно создавать рабочие процессы на основе того, что вам нужно, т.е. мне нужен рабочий процесс, в котором просто выполняется unitTesting, если кто-то создает PR, или мне нужен рабочий процесс, в котором создается и генерируется .ipa, когда мастер был помечен.

Bitrise - это что-то вроде образов докеров, где вы можете выбрать сторонние _steps_ для запуска unitTest, CodeCoverage или архивирования и развертывания.

Потрясаящий человек! Звучит действительно интересно. Я разберусь с этим.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги