Windows 11, Pharo 11. Виртуальная машина http://files.pharo.org/get-files/110/pharo-vm-Windows-x86_64-stable.zip и имидж https://files.pharo.org/get-files/110/pharo64.zip . Launcher мне пока смотреть не хочется.
В наше время неприлично работать без SCM. Разработчики Pharo (к сожалению) выбрали Git (я хотел бы аналог ENVY). Для remote поддерживаются только https и ssh. Даже локальная файловая система не поддерживается (т.е., я хотел бы сделать её на зеркале Google Drive, но мне не дают). Сделай сам, да? Ну, я посмотрю. Вдруг, да и сделаю.
Из доступных вариантов мне более-менее привычен Github. Https там, к сожалению, они пустили коту под хвост, а для ssh зачем-то надо отдельный ключ на каждый репозитарий. Стало быть, начало проекта на Pharo начнём с созданием ключей.
Итак, я воспользовался ssh-keygen и создал ключи для проекта:
C:\Users\xxx\.ssh\id_rsa_xxx_pharo_test — приватный
C:\Users\xxx\.ssh\id_rsa_xxx_pharo_test.pub — публичный.
(Забегая вперёд — Pharo меня принудил переделать ключ на ed25519:
ssh-keygen -t ed25519 -C "some-email"
Типа-оправдание тут: https://github.com/pharo-project/pharo/issues/12115 )
На github'е создал репозиторий https://github.com/xxx/pharoTest со включённой опцией создания файла readme.md. За'deploy'ил туда указанный выше публичный ключ (с галочкой напротив allow write access). Надо ещё заметить, что по умолчанию там главной веткой main, а на моём компьютере был master, что привело к мелким неудобствам. Потом я это дело синхронизировал.
Теперь пошёл создавать локальный репозиторий. Он здесь:
C:\Pharo\pharoTestRep
Внутри него (нужен|желателен) каталог src, как написано в руководстве по Iceberg.
Создал и выполнил bat-файл с содержимым
cd C:\Pharo\pharoTestRep
git init
git remote add origin ssh://g...@github.com/xxx/pharoTest
git config core.sshCommand "ssh -o IdentitiesOnly=yes -i C:/Users/xxx/.ssh/id_rsa_xxx_pharo_test -F /dev/null"
git pull origin main
mkdir src
echo "dummy" > src\dummy.txt
git add src\dummy.txt
git commit -m "adding src directory"
git push --set-upstream origin main
Отлично. Репозиторий создан, файл readme.md приехал с Github'а, файл src\dummy.txt уехал на Github.
А ещё я добавил ключ ssh-agent'у:
ssh-add C:\Users\xxx\.ssh\id_rsa_xxx_pharo_test
Теперь уже можно взяться за Pharo.
Виртуальную машину скопировал в C:\Pharo\bin, имидж в C:\Pharo\1, написал bat-файл C:\Pharo\1\b.bat с содержимым:
path=C:\Pharo\bin;%path%
pharo Pharo11-SNAPSHOT-64bit-dc4ec9e.image
"Все" работают с github'ом, у «всех» не по одному репозитарию, каждый репозитарий требует отдельного ключа. Напрашивается что? Чтобы не только в Github'е, но и в Pharo можно было в настройках репозитария задать отдельный ключ. Но нет. Кнопка «Settings» есть, но (как минимум выглядит) как глобальная — для всех репозиториев разом. Почему??? (Кстати, у Eclipse аналогичная ситуация, хотя там можно несколько ключей не указать — но не индивидуально для репозитория).
Ну ладно. Судя по нагугленному, люди успешно и годами работают с ssh-agent. Та же самая ситуация, репозитарию конкретный ключ не сопоставляют, но ssh должен как-то снюхиваться.
Вот только у меня это не работает. Потому что я под Windows?
Запускаю Pharo, иду в Git Repositories Browser. Add -> Import From Existing Clone: "C:\Pharo\pharoTestRep". Выбираю получившийся репозитарий, в его контекстном меню выбираю «Repair repository» и далее «Create project metadata». Снова выбираю получившийся репозитарий, в его контекстном меню выбираю «Packages». Добавляю первый попавшийся пакет. Теперь можно сделать commit.
Авто-push не прошёл. При попытке что-то опубликвать получаю жалобы на rsa — типа-не-поддерживается. Убираю от ssh-agent все ключи, кроме ed25519 — сразу или при попытке опубликовать получаю «ERROR: Repository not found.».
Делаю вывод — ssh-agent как-то задействуется, но почему-то с Github'ом не снюхивается. Пробую указать ключи вручную.
Иду в Pharo->Settings. Тут новая комедия —
кривой GUI. (Кстати, если нажать там «Store settings», настройки идут в
C:\Users\xxx\AppData\Roaming\pharo\версия). Просто в поле ввода
ввести строку нельзя (она какбы вводится, но не подхватывается). Через
file open dialog ввести значение можно, но он сам кривой. Судя по
видимому поведению, он пытается просканировать файловую систему «до
дна», что и на SSD небыстро.
Славабогу, можно пойти в Browse->Playground и выполнить там
IceCredentialsProvider useCustomSsh: true.
IceCredentialsProvider sshCredentials
publicKey: 'C:\Users\xxx/.ssh\xxx_pharo_test_id_ed25519.pub';
privateKey: 'C:\Users\xxx/.ssh\xxx_pharo_test_id_ed25519'
(да, сработало даже с такими слешами).
Итак, push успешно сработал. И с этим как-то можно жить.