Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: Use Eask to test macos and windows #1885

Merged
merged 8 commits into from
May 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
34 changes: 28 additions & 6 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,52 @@ name: CI

on: [push, pull_request]

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: false
matrix:
emacs_version:
- 25.3
os: [ubuntu-latest, macos-latest, windows-latest]
emacs-version:
- 26.3
- 27.2
- 28.2
- 29.3
- snapshot
tomdl89 marked this conversation as resolved.
Show resolved Hide resolved
experimental: [false]
include:
- os: ubuntu-latest
emacs-version: snapshot
experimental: true
- os: macos-latest
emacs-version: snapshot
experimental: true
exclude:
- os: macos-latest
emacs-version: 26.3
- os: macos-latest
emacs-version: 27.2

steps:
- uses: purcell/setup-emacs@master
- uses: jcs090218/setup-emacs@master
with:
version: ${{ matrix.emacs_version }}
version: ${{ matrix.emacs-version }}

- uses: actions/checkout@v4

- name: Print emacs version
run: |
emacs --version

- uses: emacs-eask/setup-eask@master
with:
version: 'snapshot'

- name: Run tests
run: |
make test
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,6 @@ typescript
/doc/build/*/
!/doc/build/texinfo/evil.texi
*.pyc

/.eask
/dist
5 changes: 0 additions & 5 deletions Cask

This file was deleted.

54 changes: 54 additions & 0 deletions Eask
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
(package "evil"
"1.15.0"
"Extensible vi layer")

(website-url "https://github.com/emacs-evil/evil")
(keywords "emulations")

(package-file "evil.el")
(files "evil-*.el" '(:exclude "*-tests.el" "*-pkg.el"))

(script "test" "echo \"Error: no test specified\" && exit 1")

(source 'gnu)
(source 'melpa)

(depends-on "emacs" "24.1")
(depends-on "cl-lib")
(depends-on "goto-chg")

(setq network-security-level 'low) ; see https://github.com/jcs090218/setup-emacs-windows/issues/156#issuecomment-932956432

(eask-defcommand test
"Basic tests."
(require 'evil-tests)
(evil-tests-initialize nil nil))

(eask-defcommand terminal
"Load Evil in a terminal Emacs and run all tests."
(require 'evil-tests)
(evil-tests-initialize nil nil t))

(eask-defcommand profiler
"Run all tests with profiler."
(require 'evil-tests)
(evil-mode 1)
(evil-tests-initialize nil t))

(eask-defcommand indent
"Re-indent all Evil code."
(setq vc-handled-backends nil)
(dolist (file (eask-package-el-files)) (load file))
(dolist (buffer (reverse (buffer-list)))
(when (buffer-file-name buffer)
(set-buffer buffer)
(message "Indenting %s" (current-buffer))
(setq-default indent-tabs-mode nil)
(untabify (point-min) (point-max))
(indent-region (point-min) (point-max))
(delete-trailing-whitespace)
(untabify (point-min) (point-max))
(goto-char (point-min))
(while (re-search-forward "\\n\\\\{3,\\\\}" nil t)
(replace-match "\\n\\n"))
(when (buffer-modified-p) (save-buffer 0)))))
67 changes: 13 additions & 54 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,20 @@ EMACS ?= emacs
SED ?= sed
FILES = $(filter-out evil-test-helpers.el evil-tests.el evil-pkg.el,$(wildcard evil*.el))
VERSION := $(shell $(SED) -ne '/define-package/,$$p' evil-pkg.el | $(SED) -ne '/^\s*"[[:digit:]]\+\(\.[[:digit:]]\+\)*"\s*$$/ s/^.*"\(.*\)".*$$/\1/p')
ELPAPKG = evil-$(VERSION)
PROFILER =
DOC = doc
TAG =
EASK ?= eask

ELCFILES = $(FILES:.el=.elc)

.PHONY: all compile compile-batch docstrings doc clean tests test emacs term terminal profiler indent elpa version
.PHONY: all compile docstrings doc clean tests test emacs term terminal profiler indent elpa version

# Byte-compile Evil.
all: compile
compile: $(ELCFILES)

.depend: $(FILES)
@echo Compute dependencies
@rm -f .depend
@for f in $(FILES); do \
$(SED) -n "s/ *(require '\(evil-[^)]*\).*)/$${f}c: \1.elc/p" $$f >> .depend;\
done

-include .depend

$(ELCFILES): %.elc: %.el
$(EMACS) --batch -Q -L . -f batch-byte-compile $<

# Byte-compile all files in one batch. This is faster than
# compiling each file in isolation, but also less stringent.
compile-batch: clean
$(EMACS) --batch -Q -L . -f batch-byte-compile ${FILES}
compile:
$(EASK) compile

# Documentation.
docstrings:
Expand All @@ -45,25 +30,20 @@ info: doc

# Delete byte-compiled files etc.
clean:
rm -f *~
rm -f \#*\#
rm -f *.elc
rm -f .depend
@$(MAKE) -C doc clean
$(EASK) clean all

# Run tests.
# The TAG variable may specify a test tag or a test name:
# make test TAG=repeat
# This will only run tests pertaining to the repeat system.
test:
$(EMACS) -nw -Q --batch -L . -l evil-tests.el \
--eval "(evil-tests-initialize '(${TAG}) '(${PROFILER}))"
$(EASK) run command test

# Byte-compile Evil and run all tests.
tests: compile
$(EMACS) -nw -Q -L . -l evil-tests.el \
--eval "(evil-tests-initialize '(${TAG}) '(${PROFILER}))"
rm -f *.elc .depend
$(EASK) run command test
$(EASK) clean elc
rm -f .depend

# Load Evil in a fresh instance of Emacs and run all tests.
emacs:
Expand All @@ -74,42 +54,21 @@ emacs:
# Load Evil in a terminal Emacs and run all tests.
term: terminal
terminal:
$(EMACS) -nw -Q -L . -l evil-tests.el \
--eval "(evil-mode 1)" \
--eval "(evil-tests-initialize '(${TAG}) '(${PROFILER}) t)"
$(EASK) run command terminal

# Run all tests with profiler.
profiler:
$(EMACS) --batch -Q -L . -l evil-tests.el \
--eval "(evil-tests-initialize '(${TAG}) (or '(${PROFILER}) t))"
$(EASK) run command profiler

# Re-indent all Evil code.
# Loads Evil into memory in order to indent macros properly.
# Also removes trailing whitespace, tabs and extraneous blank lines.
indent: clean
$(EMACS) --batch --eval '(setq vc-handled-backends nil)' ${FILES} evil-tests.el -Q -L . -l evil-tests.el \
--eval "(dolist (buffer (reverse (buffer-list))) \
(when (buffer-file-name buffer) \
(set-buffer buffer) \
(message \"Indenting %s\" (current-buffer)) \
(setq-default indent-tabs-mode nil) \
(untabify (point-min) (point-max)) \
(indent-region (point-min) (point-max)) \
(delete-trailing-whitespace) \
(untabify (point-min) (point-max)) \
(goto-char (point-min)) \
(while (re-search-forward \"\\n\\\\{3,\\\\}\" nil t) \
(replace-match \"\\n\\n\")) \
(when (buffer-modified-p) (save-buffer 0))))"
$(EASK) run command indent

# Create an ELPA package.
elpa:
@echo "Creating ELPA package $(ELPAPKG).tar"
@rm -rf ${ELPAPKG}
@mkdir ${ELPAPKG}
@cp $(FILES) COPYING evil-pkg.el ${ELPAPKG}
@tar cf ${ELPAPKG}.tar ${ELPAPKG}
@rm -rf ${ELPAPKG}
$(EASK) package

# Change the version using make VERSION=x.y.z
version:
Expand Down
6 changes: 4 additions & 2 deletions evil-pkg.el
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
(define-package
"evil"
"1.15.0"
"Extensible Vi layer for Emacs."
"Extensible vi layer"
'((emacs "24.1")
(goto-chg "1.6")
(cl-lib "0.5")))
(cl-lib "0.5"))
:url "https://github.com/emacs-evil/evil"
:keywords '("emulations"))
5 changes: 4 additions & 1 deletion evil-tests.el
Original file line number Diff line number Diff line change
Expand Up @@ -9602,7 +9602,8 @@ parameter set."
("3\C-i") ;; even after jumping forward 3 times it can't get past the 3rd z
"z z [z] z z z z z"))
(ert-info ("Jump across files")
(let ((temp-file (make-temp-file "evil-test-")))
(let ((temp-file "evil-test-"))
(make-temp-file "evil-test-")
(unwind-protect
(evil-test-buffer
"[z] z z z z z z"
Expand All @@ -9619,6 +9620,8 @@ parameter set."

(ert-deftest evil-test-find-file ()
:tags '(evil jumps)
(when (memq system-type '(cygwin windows-nt ms-dos))
(ert-skip "[INFO] GitHub Actions has different userprofile name."))
(ert-info ("Find file at point (normal state)")
(evil-with-temp-file file-name ""
(evil-test-buffer
Expand Down