mtholyoke / jorge
MHC 的命令行工具,用于自动化开发任务
Requires
- php: >=7.1.0
- composer/composer: 1.9.3
- psr/log: ^1.0.2
- symfony/console: ^4.0
- symfony/process: ^4.1
- symfony/yaml: ^4.0
Requires (Dev)
README
Jorge 是一个实验性的命令行工具,用于管理 Drush、Git、Lando 和 Terminus 之间的复杂交互,以自动化常见任务。
注意: Jorge 不存储有关各种服务的连接信息,也不提供任何额外权限;您的账户必须已经能够访问 GitHub 和 Pantheon 上的各种项目(理想情况下通过 SSH 密钥或令牌),Jorge 将使用这些凭据代表您操作。
安装
推荐:使用 Composer/CGR 安装
这不是在项目中 require 的东西;它是您工作站的工具。Composer 通过 composer global require 来促进这一点,但该命令在管理事物的方式上存在一些缺陷,所以我们更喜欢 cgr。
要安装 cgr,运行 composer global require consolidation/cgr,它将被添加到您家目录下的 .composer 目录。您还需要告诉系统您正在将可执行文件添加到新的位置。在您的家目录中,可以有一个名为 .bash_profile 或 .profile 的文件,它在每次您登录时都会运行。编辑该文件(如果不存在则创建一个)并在末尾添加一行
export PATH="$PATH:~/.composer/vendor/bin"
为了使新的 PATH 生效,您可以注销并重新登录,或者运行 source .bash_profile(或 source .profile)。您可以通过运行 cgr --help 来测试它是否成功;它应该显示帮助而不是错误消息。
完成所有这些后,您应该能够运行 cgr mtholyoke/jorge:*。如果它成功安装,jorge --version 将报告“找不到项目根”和版本。如果您只想安装当前版本而不进行重大升级,可以省略 :*,或者将 * 替换为特定版本。
开发:使用 Git 安装
您还可以克隆此存储库进行开发,并直接从该副本运行 Jorge。而不是将 ~/Projects/jorge/bin(或您的项目目录;运行 pwd 来检查)添加到您的路径,我建议从 /usr/local/bin 或其他已存在于您路径中的位置创建 bin/jorge(实际程序)的符号链接。
ln -s ~/Projects/jorge/bin/jorge /usr/local/bin/jorge
在 Jorge 目录中运行 composer install 以获取其依赖项。
如果您要进行任何开发,也请运行 bin/setup.sh 一次,以安装标准的 Git 钩子。
配置
Jorge 没有全局配置;它仅在项目级别工作。
项目的根目录应包含一个子目录 .jorge,其中应有一个名为 config.yml 的文件。Jorge 自己的 .jorge 目录中包含了示例。
在 .jorge/config.yml 中,您必须具有 appType 键。目前,只有 drupal7、drupal8 和 jorge 被识别为值。
可选的,您还可以有 include_config 键,它指定了要从 .jorge 目录包含的额外配置文件列表,按照指定的顺序加载。这些文件中的值将覆盖之前加载的任何设置,包括主 config.yml。请注意,include_config 仅允许在主 config.yml 文件中使用。
Drupal 7 或 8 配置
配置文件可能包含键 reset,其中包含一个块,为 reset 命令提供以下七个可选参数之一(如下所述)
auth- 用于与 Pantheon 进行重置的 Terminus 机器令牌branch- 将当前代码库重置到哪个 Git 分支(默认为master)import- 是否在拉取数据库后运行drush config-import(默认为FALSE)content- 从哪个 Pantheon 环境复制数据库和文件(默认为dev)database- 从哪个 Pantheon 环境复制数据库(默认与content相匹配)files- 从哪个 Pantheon 环境复制文件(默认与database相匹配)rsync- Lando 是否应使用rsync来复制文件(默认为TRUE)username- 需要本地密码的用户名(通常是管理员)(没有默认值)password- 为上述指定的用户名提供的本地密码(没有默认值)
通常,提交到项目 Git 仓库的配置看起来像这样
appType: drupal8 reset: branch: master content: dev rsync: TRUE include_config: - local.yml
在 local.yml 中,该文件 没有 提交到项目的 Git 仓库
reset: auth: a1b2c3d4e5f6 username: admin password: asdf1234
命令
jorge drush {drush-command}
在由 Composer 驱动的 Drupal 8 项目中,lando drush {drush-command} 可能需要在 web 目录内运行(以便访问 Drupal),无论您当前是否在目录内。此命令允许您从目录外运行它(如果尚未运行,请在启动 Lando)。
它原生的接受 -y/--yes 和 -n/--no 选项,但其他 Drush 选项需要转义。有关详细信息,请参阅 jorge help drush。注意,-n 实际上是 Symfony --no-interaction,其效果大致相同。
jorge reset
根据上述配置文件设置本地开发环境。
注意:项目必须处于干净状态:如果 Git 不能更改分支,整个操作将失败。从 3.0.0-rc.2 版本开始(于 2019 年 2 月 1 日发布)的 Lando 版本要求在 auth 参数(命令行或配置文件)中存在 Terminus 机器令牌;如果没有这个,整个操作将失败。
如果 Lando 未在运行,则启动它,然后使用 lando pull 从 Pantheon 获取站点。
可选地接受命令行开关,这些开关将覆盖上述设置(除了 rsync);有关详细信息,请参阅 jorge help reset。
如果您要将分支重置为非 master 分支(使用 -b),则如果该分支的配置与要拉取的数据库不同,您可能还需要使用 -i。
如果提供了管理员账户用户名但没有提供密码,Jorge 将提示您输入密码。如果您也将其留空,则不会重置密码。
尚未实现
jorge save – 保存代码、数据库和文件当前状态,以便稍后通过 reset 恢复。
未来工作
-
在依赖它之前,请确保 Drush 已安装并正常工作。
-
更多测试(另见 Symfony 文档 Testing Commands)
Tool::exec()在需要用户交互时使用 Symfony Process 组件,通过执行read并使用-p "\nPress enter" x的第一次尝试测试并没有提供预期的覆盖率。可能我们需要像在ResetCommandTest::testInteract()中那样进行完整的模拟,并将Tool::exec()调整为使用InputInterface而不是STDIN。
-
Lando 3.0.0-rc.2 及更高版本具有交互式身份验证系统,用于需要身份验证的命令(如
lando pull,这是jorge reset的核心)。如果用户在local.yml配置文件中没有令牌,我们最好能够将此传递给用户。这些版本的 Lando 还可以读取环境变量TERMINUS_TOKEN,因此我们也应该检查它。 -
实现 Git、&c. 的 工具,使用 API 或作为容器内的服务,以提高对初始/当前状态的认知。
-
Lando 可能不是一个 工具;它可能是一种新的事物。可能我们需要一个插件接口来实现“环境管理器”。
-
在
git checkout之前选择暂存或丢弃更改的选项? -
实现
jorge save并重构jorge reset以使用保存的状态。 -
在 Git 操作期间检查 Sass 监视器(或类似的想法)并挂起是否可能?