我正处于为CL项目构建部署工具的设计阶段。
我认为典型的工作流程是这样的:
(ql:quickload :yolo)
(yolo:configure)
(yolo:deploy)
我想要的是让我的库知道开发人员想要基于当前包部署哪个系统。 (*package*
)
我的问题:是否有可能找到加载特定包的系统?当然我在谈论ASDF
。
奖金问题:是否需要这样的工具?也许有更好的工作流程。我还计划使库成为可执行文件,但是可以通过当前目录获取默认项目。
答案 0 :(得分:2)
首先,阅读包,系统,图书馆等here。
我认为推断预期系统没有多大意义。无论如何,您至少需要一个额外的参数(目标 要部署)。
我认为部署工具会部署系统。然后,它可能明智地被定义为ASDF的延伸。
例如,您可以设计这样的扩展名,以便您可以在defsystem
表单中指定部署配置,如下所示:
(defsystem #:foo
:defsystem-depends-on (#:your-awesome-asdf-deploy)
;; ...
:deploy-targets (:test (:host "test.example.org"
:user "foo"
:env (:backend-url "https://test.foo.org/api"
:dev t))
:prod (:host "prod.example.org"
:user "bar"
:env (:backend-url "https://foo.org/api"
:dev nil))))
然后可以在新的 op deploy-op
中使用此信息,您可以调用它:
(asdf:oos 'asdf-deploy:deploy-op 'foo :target :test)
答案 1 :(得分:1)
没有内置的方法来回答你的问题,但是如果在你加载asdf之后,你挂钩(defmethod perform :after ((o load-op) (s system)) ...)
一个函数来区分所有包列表中的新条目列表,那么你可以构建系统创建哪些包的索引。