Хаос в АйТи

error: Unable to append to .git/logs/refs/heads/xxx: Permission denied

Проблема возникаем, когда владельцем папок и файлов в корневой директории сайта является не тот пользователь, с помощью которого вы подключаетесь по ssh. В этом случае git будет ругаться примерно следующим образом:

error: Unable to append to .git/logs/refs/heads/bugfix: Permission denied
fatal: Cannot update the ref 'HEAD'.

Это решается командой chown, которая изменяет владельца для всех файлов и папок.

sudo chown -R userID:groupID /path/to/www/dir/

Где userID и groupID — идентификационный номер пользователя и идентификационный номер основной группы пользователя соответственно.

Для просмотра списка пользователей и групп, существующих в системе, достаточно в командной строке ввести:

cat /etc/passwd

Строки в этом файле имеют следующий формат:

account:password:userID:groupID:GID:GECOS:directory:shell

где:

account — имя пользователя
password — зашифрованный пароль пользователя
userID  — идентификационный номер пользователя
groupID — идентификационный номер основной группы пользователя
GECOS — необязательное поле, используемое для указания дополнительной информации о пользователе (например, полное имя пользователя)
directory — домашний каталог ($HOME) пользователя
shell — командный интерпретатор пользователя (обычно /bin/sh)
22 мая   git   how to   ssh

Bitrise.io — сборка приложений as a service

— В этом посте будет рассматриваться добавление проекта из Gitlab репозитория. Но принцип одинаков и для всех других вариантов, предлагаемых сервисом + Описание минимальных настроек для сборки проектов.

Общая информация и подготовка проекта

  • Для подключения используем ssh протокол;
  • Во время добавления проекта необходимо отметить Stack: лучше всего использовать последние версии;
  • Webhook автоматически настраивается при интеграции с Gitlab.

После того, как пройдены все шаги и проект добавлен в систему, его нужно настроить.

Настройка сборки iOS

Подготовка данных для сборки

Во вкладке Workflow, панель Code signing & Files необходимо добавить Provisioning Profile, а также сертификат организации.

Во вкладке Workflow, панель Triggers необходимо указать:

  • для Push: push branch — master; workflow — deploy;
  • для Pull Request: source branch — master; workflow — deploy.

Настройка процесса сборки

  1. Выбираем вкладку Workflow ➞ Workflow editor ➞ deploy ➞ шаг Xcode Archive for iOS. В пункте Select method for export выбираем ad-hoc.
  2. Настройка инкремента версии После шага Git Clone Repository добавляем еще один новый: Set Xcode Project Build Number. В поле Info.plist file path добавляем строчку:
    $BITRISE_SOURCE_DIR/app_name/Application/Info.plist
    (/app_name/Application/Info.plist — расположение файла зависит от проекта).
  3. Настройка загрузки в fabric.io. После шага Deploy to Bitrise.io, добавить новый workflow: Fabric / Crashlytics deployer. В настройках указать:
    Fabric: API Key,
    Fabric: Build Secret,
    Notify: Group Aliases — alias группы, по которой будет автоматически рассылаться успешная сборка *

Настройка сборки Android

Подготовка данных для сборки

Во вкладке Workflow, панель Code signing & Files необходимо добавить Keystore проекта и заполнить необходимую информацию.

Во вкладке Workflow, панель Triggers необходимо указать:

  • для Push: push branch — master; workflow — primary;
  • для Pull Request: source branch — master; workflow — primary.

Настройка процесса сборки

Выбираем вкладку Workflow ➞ App Env Vars ➞ GRADLE_TASK. Отметить галочку Replace variables in input?, в поле «=» вставить:

assembleRelease -PversionCode=${BITRISE_BUILD_NUMBER} crashlyticsUploadDistributionRelease

Подготовка проекта Android

Необходимо внести изменения в файл build.gradle

  1. Добавить секцию signing configs
    android { 
    … 
      signingConfigs { 
        release { 
          keyAlias System.getenv("BITRISEIO_ANDROID_KEYSTORE_ALIAS") 
          keyPassword System.getenv("BITRISEIO_ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD") 
          storeFile file(System.getenv("BITRISE_SOURCE_DIR") + "/keystores/keystore.jks") 
          storePassword System.getenv("BITRISEIO_ANDROID_KEYSTORE_PASSWORD") 
        } 
      } 
    … 
     }
  2. Обновить секцию build types (данная секция должна быть расположена после signingConfigs)
    android { 
    … 
      buildTypes { 
    … 
        release { 
          … 
            signingConfig signingConfigs.release 
            ext.betaDistributionGroupAliases = “alias группы, по которой будет автоматически рассылаться успешная сборка *" 
          … 
        } 
    … 
      } 
    … 
     }
  3. Объявить функцию получения версии (перед основной секцией android)
    def getVersionCode = { -> 
        def code = project.hasProperty('versionCode') ? versionCode.toInteger() + 15 : 1; // 15 – offset, может быть любое число, если сборки в bitrise начались позже, чтобы компенсировать разницу 
        return code 
    }
  4. Обновить поле получения версии
    android { 
    … 
      defaultConfig { 
        … 
        versionCode getVersionCode() 
        … 
      } 
    … 
    }



* Заходим в fabric.io ➞ переходим в проект ➞ Manage Groups ➞ Выбираем нужную группу (или создаем ее).

11 мая   android   bitrise   ci   fabric   ios

UUID вашего Apple девайса

Для дистрибуции тестовых версий на ваш iPhone или iPad, нужно знать их UUID.

UUID (Universally Unique Identifier) — это стандарт идентификации, используемый в создании программного обеспечения, стандартизированный Open Software Foundation (OSF) как часть DCE — среды распределённых вычислений (Distributed Computing Environment (англ.)).

Источник

Есть несколько вариантов его получения.

Вариант 1

Используя online сервис.

  1. Запускаем браузер Safari
  2. Переходим по адресу http://get.udid.io
  3. Нажимаем на «Tap to find UDID»
  4. Далее нажимаем «Установить»
  5. Вводим PIN
  6. Еще раз «Установить»
  7. Произойдет переход на страницу, где будет указан UUID устройства.

Вариант 2

Используя iTunes.

  1. Запускаем iTunes, подключаем устройство.
  2. Переходим в устройство
  3. Видим строку «Серийный номер xxxxxxxxxxx»
  4. Кликаем один раз по этой строке и она меняется на UUID
  5. Кликаем правой кнопкой мыши по строке и копируем UUID
4 мая   mobile development

Laravel + Яндекс.Почта

Для подключения отправки почтовых сообщений в Laravel, используя Яндекс Почту или Яндекс ПДД, в .env нужно прописать следующий код:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.yandex.ru
MAIL_PORT=587
MAIL_FROM_ADDRESS=адрес отправителя
MAIL_FROM_NAME=имя отправителя
MAIL_USERNAME=пользователь*
MAIL_PASSWORD=пароль
MAIL_ENCRYPTION=tls

*Если пользователь является пользователем Яндекс.ПДД, то вводим полный email: name@domain.ru

2017   how to   laravel   mail   yandex

VIM: краткая памятка

В Git редактором по умолчанию является Vim. Для людей, не посвященных в его возможности, первое знакомство с этим редактором обычно вызывает лишь психологическую боль. Для того, что бы закоммитить изменения через консоль и не повредить свою нервную систему, нужно лишь понять, какие команды требуется выполнить.
Чаще всего с этим редактором столкновение происходит при выполнении следующей команды:

git commit -a

После выполнения открывается редактор:

Редактор может работать в различных режимах:

  1. командный режим,
  2. режим вставки,
  3. режим ex mode.

После запуска, по умолчанию, редактор открывается в командном режиме. Нам, для продолжения работы нужно перейти в режим вставку. Нажимаем «i» и получаем возможность редактирования текста. Пишем Commit Message и нажимаем ESC. Vim перейдет в командный режим.
В этом режиме можно использовать следующие команды:

:q для выхода (сокращение от :quit)
:q! для выхода без сохранения (сокращение от :quit!)
:wq для сохранения и выхода
:wq! для сохранения и выхода, даже если файл имеет статус "только для чтения"
:x для сохранения и записи, тоже самое что и :wq, но если изменений нет, то выйдет просто без сохранения

Что бы избежать работы с редактором, при использовании git commit, нужно добавить еще один параметр «-m» и после него написать описание коммита.

git commit -a -m Commit message
2017   how to   vim

Git: создать и залить новую локальную ветку в удаленный репозиторий

Обе ниже описаные команды создадут ветку на тот коммит, на котором вы сейчас находитесь. Так что перед созданием, обязательно убедитесь что вы находитесь в той ветке, из которой вы хотите создать новую. Делается это следующим образом:

git status

В ответ должно вывестись следующее:

On branch master

Где master — название ветки, в который вы находитесь на данный момент.


Создаем новую ветку и сразу в нее переходим командой:

git checkout -b develop

Текущая команда является шорткатом к этим двум:

git branch develop
git checkout develop



Публикация в удаленном репозитории:

git push --set-upstream origin develop

Или шорткатом:

git push -u origin develop

Опция —set-upstream позволит сделать ветку develop, на удаленном репозитории, связанной с локальной, а значит и отслеживаемой. Это позволит отправлять/принимать изменения без использования алиасов для сервера и удаленных веток.

2017   git   how to

Git: как удалить или переименовать ветку

Удаление ветки

Удаленный репозиторий:

git push origin --delete <branchName>

Локальный репозиторий:

git branch -d <branchName>

Переименование ветки

git branch -m master old_version

В этом случае ветка master переименуется в old_version.
Не забываем, что в случае, если вы создаете новую ветку со старым названием, то это приведет к проблемам при pull у всех разработчиков, которые продолжали работать над master, поэтому им нужно будет сделать у себя

git reset --hard origin/master
2017   git   how to