全文见, Use CI to improve the quality of emacs distribution | Chen's blog
任何人都可以用这个方案来改善配置的代码质量。这个方案是跑编译器,不是跑unit test.
方案简化后也可以用与package开发。
全文见, Use CI to improve the quality of emacs distribution | Chen's blog
任何人都可以用这个方案来改善配置的代码质量。这个方案是跑编译器,不是跑unit test.
方案简化后也可以用与package开发。
牛。。。。。。
來順便推行一下我認為比較好的CI模式.
我最近開發了 Eask, 和 Cask 是個同類型的東西. 但修補了幾項重大缺失, 主要能支援Windows.
一般情況做CI:
lint: deps
@$(EMACS) $(EMACS_BATCH_OPTS) -l tests/my-elint.el 2>&1 | grep -E "([Ee]rror|[Ww]arning):" && exit 1 || exit 0
compile: deps
$(RM) *.elc
@$(EMACS) $(EMACS_BATCH_OPTS) -l tests/my-byte-compile.el 2>&1 | grep -E "([Ee]rror|[Ww]arning):" && exit 1 || exit 0
test: compile deps
@$(EMACS) $(EMACS_BATCH_OPTS) -l tests/evil-matchit-tests.el
...
用 Eask 比較簡短,
lint:
@echo "Run package-lint..."
$(EASK) lint package
compile:
$(EASK) compile # 檔案(.el)從 Eask-file 獲取
test:
$(EASK) install-deps --dev # 包(dep)從 Eask-file 獲取
$(EASK) exec ert-runner -L .
至於哪些檔案會被 compile 或 哪些依賴會被下載. 全部都交給Eask-file. 下面為範例.
範例原檔: dap-mode/Eask at master · emacs-lsp/dap-mode · GitHub
...
(package-file "dap-mode.el") ; 這預設會被compile
(files "*.el") ; 其他 .el 也一起被編譯, 使用wildcards
(source "gnu")
(source "melpa")
(depends-on "emacs" "26.1")
;; 以下包會被下載, 連同一起被編譯和測試 (sandbox)
(depends-on "lsp-java")
(depends-on "markdown-mode")
(depends-on "tree-mode")
(depends-on "bui")
這樣感覺會清楚很多. 另外我會推薦測試打包和安裝.
build:
$(EASK) package # 測試打包, 執行前會下載package-build. 這樣最安全也直接
$(EASK) install # 測試安裝, 安裝打包後的檔案 (.el/.tar)
Eask 還提供了很多種的測試, elsa
, checkdoc
, indent-lint
, 等等.
記得測試要做全, 如果只在 ubuntu-test
下做測試很容易遺漏其他平台上的bug.
...
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
emacs-version: [26.1, 26.2, 26.3, 27.1, 27.2, 28.1, snapshot]
steps:
- uses: actions/checkout@v2
# purcell 的不支援 windows
- uses: jcs090218/setup-emacs@master
with:
version: ${{ matrix.emacs-version }}
例如我幫 jojojames/fussy 做了CI, 馬上就在 macOS 和 Windows 平台上面找到bug. (他原先只有測試 Ubuntu)
PR連結: Use Eask for CI instead of Cask by jcs090218 · Pull Request #7 · jojojames/fussy · GitHub
希望有幫助!