diff --git a/CHANGELOG.md b/CHANGELOG.md index 04ae77d3..11320664 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how * Move `pkg-file` and `autoloads` commands under `generate` subcommand (#142) * Add option to convert Cask to Eask (#141 and #145) * Add command to generate GHA workflow (#141 and #146) +* Add commands to support all kind of CI platforms (#150) ## 0.7.x > Released Sep 08, 2022 diff --git a/cmds/generate/workflow/circle-ci.js b/cmds/generate/workflow/circle-ci.js new file mode 100644 index 00000000..6c89dfd1 --- /dev/null +++ b/cmds/generate/workflow/circle-ci.js @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2023 Jen-Chieh Shen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Emacs; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +"use strict"; + +exports.command = ['circle-ci [file]']; +exports.desc = 'Generate CircleCI workflow yaml file'; +exports.builder = { + file: { + description: 'name of the test file; the default is `config.yml`', + requiresArg: false, + type: 'array', + group: TITLE_CMD_OPTION, + }, +}; + +exports.handler = async (argv) => { + await UTIL.e_call(argv, 'generate/workflow/circle-ci', argv.file); +}; + diff --git a/cmds/generate/workflow/github.js b/cmds/generate/workflow/github.js index 1e0ced0c..893e1b80 100644 --- a/cmds/generate/workflow/github.js +++ b/cmds/generate/workflow/github.js @@ -19,7 +19,7 @@ "use strict"; -exports.command = ['github [file]']; +exports.command = ['github [file]', 'github-actions [file]', 'gha [file]']; exports.desc = 'Generate GitHub Actions workflow yaml file'; exports.builder = { file: { diff --git a/cmds/generate/workflow/gitlab.js b/cmds/generate/workflow/gitlab.js new file mode 100644 index 00000000..04956ebf --- /dev/null +++ b/cmds/generate/workflow/gitlab.js @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2023 Jen-Chieh Shen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Emacs; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +"use strict"; + +exports.command = ['gitlab [file]', 'gitlab-runner [file]']; +exports.desc = 'Generate GitLab Runner workflow yaml file'; +exports.builder = { + file: { + description: 'name of the test file; the default is `.gitlab-ci.yml`', + requiresArg: false, + type: 'array', + group: TITLE_CMD_OPTION, + }, +}; + +exports.handler = async (argv) => { + await UTIL.e_call(argv, 'generate/workflow/gitlab', argv.file); +}; + diff --git a/cmds/generate/workflow/travis-ci.js b/cmds/generate/workflow/travis-ci.js new file mode 100644 index 00000000..a082b7bd --- /dev/null +++ b/cmds/generate/workflow/travis-ci.js @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2023 Jen-Chieh Shen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Emacs; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +"use strict"; + +exports.command = ['travis-ci [file]']; +exports.desc = 'Generate Travis CI workflow yaml file'; +exports.builder = { + file: { + description: 'name of the test file; the default is `.travis.yml`', + requiresArg: false, + type: 'array', + group: TITLE_CMD_OPTION, + }, +}; + +exports.handler = async (argv) => { + await UTIL.e_call(argv, 'generate/workflow/travis-ci', argv.file); +}; + diff --git a/docs/content/en/Continuous Integration/CircleCI.md b/docs/content/en/Continuous Integration/CircleCI.md index 5f0c56f9..a3e2c9a9 100644 --- a/docs/content/en/Continuous Integration/CircleCI.md +++ b/docs/content/en/Continuous Integration/CircleCI.md @@ -14,9 +14,9 @@ default: &default-steps - checkout - run: apt-get update && apt-get install -y git - run: | + eask package eask install eask compile - eask lint package # Enumerated list of Emacs versions jobs: diff --git a/docs/content/en/Continuous Integration/GitHub Actions.md b/docs/content/en/Continuous Integration/GitHub Actions.md index e60cfbda..b04680ea 100644 --- a/docs/content/en/Continuous Integration/GitHub Actions.md +++ b/docs/content/en/Continuous Integration/GitHub Actions.md @@ -31,9 +31,9 @@ jobs: - name: Run tests run: | + eask package eask install eask compile - eask lint package ``` This example is testing your Emacs Lisp package in the below environment; diff --git a/docs/content/en/Continuous Integration/GitLab Runner.md b/docs/content/en/Continuous Integration/GitLab Runner.md index 2469b73e..75f3bd31 100644 --- a/docs/content/en/Continuous Integration/GitLab Runner.md +++ b/docs/content/en/Continuous Integration/GitLab Runner.md @@ -18,9 +18,9 @@ pages: - apt-get update - apt-get install emacs -y script: + - eask package - eask install - eask compile - - eask lint package only: - main ``` diff --git a/docs/content/en/Continuous Integration/Travis CI.md b/docs/content/en/Continuous Integration/Travis CI.md index b98874e0..8c6721e9 100644 --- a/docs/content/en/Continuous Integration/Travis CI.md +++ b/docs/content/en/Continuous Integration/Travis CI.md @@ -25,9 +25,9 @@ install: - npm install @emacs-eask/cli -g script: + - eask package - eask install - eask compile - - eask lint package ``` This example is testing your Emacs Lisp package in the below environment; diff --git a/docs/content/en/Getting Started/Commands and options.md b/docs/content/en/Getting Started/Commands and options.md index 1f0d5f82..0fb47d69 100644 --- a/docs/content/en/Getting Started/Commands and options.md +++ b/docs/content/en/Getting Started/Commands and options.md @@ -331,12 +331,44 @@ $ eask [GLOBAL-OPTIONS] generate pkg-file [Multi-file Packages (elisp)](https://www.gnu.org/software/emacs/manual/html_node/elisp/Multi_002dfile-Packages.html#Multi_002dfile-Packages) for details. +## 🔍 eask generate workflow circle-ci + +Generate CircleCI workflow yaml file. + +```sh +$ eask [GLOBAL-OPTIONS] generate workflow circle-ci [--file] +``` + +{{< hint info >}} +💡 This will generate the yaml file under `.circleci/`! +{{< /hint >}} + ## 🔍 eask generate workflow github Generate GitHub Actions workflow yaml file. ```sh -$ eask [GLOBAL-OPTIONS] generate workflow github +$ eask [GLOBAL-OPTIONS] generate workflow github [--file] +``` + +{{< hint info >}} +💡 This will generate the yaml file under `.github/workflow/`! +{{< /hint >}} + +## 🔍 eask generate workflow gitlab + +Generate GitLab Runner workflow yaml file. + +```sh +$ eask [GLOBAL-OPTIONS] generate workflow gitlab [--file] +``` + +## 🔍 eask generate workflow travis-ci + +Generate Travis CI workflow yaml file. + +```sh +$ eask [GLOBAL-OPTIONS] generate workflow travis-ci [--file] ``` # 🚩 Linking diff --git a/lisp/checker/check-eask.el b/lisp/checker/check-eask.el index 6bc8c7ac..a5d78024 100644 --- a/lisp/checker/check-eask.el +++ b/lisp/checker/check-eask.el @@ -7,9 +7,12 @@ ;; $ eask check-eask [FILES..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] specify Eask-files for checker to lint +;; +;; Optional arguments: +;; ;; --json Output lint result in JSON format ;; diff --git a/lisp/core/compile.el b/lisp/core/compile.el index 2bf6dc1e..05c8dc12 100644 --- a/lisp/core/compile.el +++ b/lisp/core/compile.el @@ -7,7 +7,7 @@ ;; $ eask compile [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] specify files to byte-compile ;; diff --git a/lisp/core/concat.el b/lisp/core/concat.el index 21055139..f741074e 100644 --- a/lisp/core/concat.el +++ b/lisp/core/concat.el @@ -7,7 +7,7 @@ ;; $ eask concat [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] specify files to concatenate ;; diff --git a/lisp/core/emacs.el b/lisp/core/emacs.el index 40f8c3bc..b052479a 100644 --- a/lisp/core/emacs.el +++ b/lisp/core/emacs.el @@ -7,7 +7,7 @@ ;; $ eask emacs [args..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [args..] arguments feed into Emacs executable ;; diff --git a/lisp/core/exec.el b/lisp/core/exec.el index 76913068..a31f8534 100644 --- a/lisp/core/exec.el +++ b/lisp/core/exec.el @@ -7,7 +7,7 @@ ;; $ eask exec [args..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [args..] execute command with correct PATH set up ;; diff --git a/lisp/core/install.el b/lisp/core/install.el index dc0c7bbd..6d208a50 100644 --- a/lisp/core/install.el +++ b/lisp/core/install.el @@ -7,7 +7,7 @@ ;; $ eask install [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] name of the package to install; else we try to install ;; package from current directory by calling function diff --git a/lisp/core/reinstall.el b/lisp/core/reinstall.el index 5af19a87..2675767c 100644 --- a/lisp/core/reinstall.el +++ b/lisp/core/reinstall.el @@ -7,7 +7,7 @@ ;; $ eask reinstall [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] name of the package to reinstall ;; diff --git a/lisp/core/run.el b/lisp/core/run.el index 91c929ef..6bd9be3a 100644 --- a/lisp/core/run.el +++ b/lisp/core/run.el @@ -7,7 +7,7 @@ ;; $ eask run [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] run the script named ;; diff --git a/lisp/core/search.el b/lisp/core/search.el index 0da5df4b..fe0e7a9b 100644 --- a/lisp/core/search.el +++ b/lisp/core/search.el @@ -7,7 +7,7 @@ ;; $ eask search [queries..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [queries..] query to search packages ;; diff --git a/lisp/core/uninstall.el b/lisp/core/uninstall.el index 94417a4c..5cf34a5b 100644 --- a/lisp/core/uninstall.el +++ b/lisp/core/uninstall.el @@ -7,7 +7,7 @@ ;; $ eask uninstall [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] name of the package to uninstall; else we uninstall pacakge ;; from current workspace diff --git a/lisp/core/upgrade.el b/lisp/core/upgrade.el index 967ac70e..57f3d7b6 100644 --- a/lisp/core/upgrade.el +++ b/lisp/core/upgrade.el @@ -7,7 +7,7 @@ ;; $ eask upgrade [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] package to upgrade; else we upgrade all packages ;; diff --git a/lisp/create/elpa.el b/lisp/create/elpa.el index ff6000b2..f311aac2 100644 --- a/lisp/create/elpa.el +++ b/lisp/create/elpa.el @@ -7,7 +7,7 @@ ;; $ eask create elpa [name] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [name] new ELPA name ;; diff --git a/lisp/create/package.el b/lisp/create/package.el index 704ff0bb..b5ff14a1 100644 --- a/lisp/create/package.el +++ b/lisp/create/package.el @@ -7,7 +7,7 @@ ;; $ eask create package [name] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [name] new project name ;; diff --git a/lisp/generate/workflow/circle-ci.el b/lisp/generate/workflow/circle-ci.el new file mode 100644 index 00000000..9a121239 --- /dev/null +++ b/lisp/generate/workflow/circle-ci.el @@ -0,0 +1,37 @@ +;;; generate/workflow/circle-ci.el --- Generate CircleCI workflow yaml file -*- lexical-binding: t; -*- + +;;; Commentary: +;; +;; Command use generate CircleCI test yaml file, +;; +;; $ eask generate workflow circle-ci +;; +;; +;; Positional arguments: +;; +;; [--file] name of the test file; the default is `config.yml` +;; + +;;; Code: + +(let ((dir (file-name-directory (nth 1 (member "-scriptload" command-line-args))))) + (load (expand-file-name "_prepare.el" + (locate-dominating-file dir "_prepare.el")) + nil t)) + +(eask-start + (let* ((url "https://raw.githubusercontent.com/emacs-eask/template-generate/master/workflow/circle-ci.yml") + (dir (expand-file-name ".circleci/")) + (basename (or (car (eask-args)) "config.yml")) + (filename (expand-file-name basename dir)) + (minimum-version (car (cdr (nth 0 eask-depends-on-emacs))))) + (ignore-errors (make-directory dir t)) + (if (file-exists-p filename) + (eask-info "The yaml file already exists `%s`" filename) + (eask-with-progress + (format "Generating file %s... " filename) + (eask-with-verbosity 'debug (url-copy-file url filename)) + "done ✓") + (eask-info "✓ Successfully created the yaml file in `%s`" filename)))) + +;;; generate/workflow/circle-ci.el ends here diff --git a/lisp/generate/workflow/github.el b/lisp/generate/workflow/github.el index e2498804..413d0e9b 100644 --- a/lisp/generate/workflow/github.el +++ b/lisp/generate/workflow/github.el @@ -6,6 +6,11 @@ ;; ;; $ eask generate workflow github ;; +;; +;; Positional arguments: +;; +;; [--file] name of the test file; the default is `test.yml` +;; ;;; Code: @@ -37,11 +42,11 @@ (let ((column (current-column))) (delete-region (line-beginning-position) (line-end-position)) (when (version<= minimum-version "26.1") - (insert (spaces-string column) "- 26.3\n")) + (insert (spaces-string column) "- 26.3" "\n")) (when (version<= minimum-version "27.1") - (insert (spaces-string column) "- 27.2\n")) + (insert (spaces-string column) "- 27.2" "\n")) (when (version<= minimum-version "28.1") - (insert (spaces-string column) "- 28.2\n")) + (insert (spaces-string column) "- 28.2" "\n")) (when (version<= minimum-version "29.1") (insert (spaces-string column) "- snapshot")))) (save-buffer)) diff --git a/lisp/generate/workflow/gitlab.el b/lisp/generate/workflow/gitlab.el new file mode 100644 index 00000000..5b092b34 --- /dev/null +++ b/lisp/generate/workflow/gitlab.el @@ -0,0 +1,35 @@ +;;; generate/workflow/gitlab.el --- Generate GitLab Runner workflow yaml file -*- lexical-binding: t; -*- + +;;; Commentary: +;; +;; Command use generate GitLab Runner test yaml file, +;; +;; $ eask generate workflow gitlab +;; +;; +;; Positional arguments: +;; +;; [--file] name of the test file; the default is `.gitlab-ci.yml` +;; + +;;; Code: + +(let ((dir (file-name-directory (nth 1 (member "-scriptload" command-line-args))))) + (load (expand-file-name "_prepare.el" + (locate-dominating-file dir "_prepare.el")) + nil t)) + +(eask-start + (let* ((url "https://raw.githubusercontent.com/emacs-eask/template-generate/master/workflow/gitlab.yml") + (basename (or (car (eask-args)) ".gitlab-ci.yml")) + (filename (expand-file-name basename)) + (minimum-version (car (cdr (nth 0 eask-depends-on-emacs))))) + (if (file-exists-p filename) + (eask-info "The yaml file already exists `%s`" filename) + (eask-with-progress + (format "Generating file %s... " filename) + (eask-with-verbosity 'debug (url-copy-file url filename)) + "done ✓") + (eask-info "✓ Successfully created the yaml file in `%s`" filename)))) + +;;; generate/workflow/gitlab.el ends here diff --git a/lisp/generate/workflow/travis-ci.el b/lisp/generate/workflow/travis-ci.el new file mode 100644 index 00000000..69ab01e9 --- /dev/null +++ b/lisp/generate/workflow/travis-ci.el @@ -0,0 +1,54 @@ +;;; generate/workflow/travis-ci.el --- Generate Travis CI workflow yaml file -*- lexical-binding: t; -*- + +;;; Commentary: +;; +;; Command use generate Travis CI test yaml file, +;; +;; $ eask generate workflow travis-ci +;; +;; +;; Positional arguments: +;; +;; [--file] name of the test file; the default is `.travis.yml` +;; + +;;; Code: + +(let ((dir (file-name-directory (nth 1 (member "-scriptload" command-line-args))))) + (load (expand-file-name "_prepare.el" + (locate-dominating-file dir "_prepare.el")) + nil t)) + +(eask-start + (let* ((url "https://raw.githubusercontent.com/emacs-eask/template-generate/master/workflow/travis-ci.yml") + (basename (or (car (eask-args)) ".travis.yml")) + (filename (expand-file-name basename)) + (minimum-version (car (cdr (nth 0 eask-depends-on-emacs))))) + (if (file-exists-p filename) + (eask-info "The yaml file already exists `%s`" filename) + (eask-with-progress + (format "Generating file %s... " filename) + (eask-with-verbosity 'debug (url-copy-file url filename)) + "done ✓") + (eask-with-progress + (format "Configuring file %s... " filename) + (with-current-buffer (find-file filename) + (when (search-forward "{ EMACS_VERSION }" nil t) + (search-backward "{ EMACS_VERSION }" nil t) + (delete-region (point) (line-end-position)) + (end-of-line) + (let ((column (current-column))) + (delete-region (line-beginning-position) (line-end-position)) + (when (version<= minimum-version "26.1") + (insert (spaces-string column) "- EVM_EMACS=emacs-26.3-travis-linux-xenial" "\n")) + (when (version<= minimum-version "27.1") + (insert (spaces-string column) "- EVM_EMACS=emacs-27.2-travis-linux-xenial" "\n")) + (when (version<= minimum-version "28.1") + (insert (spaces-string column) "- EVM_EMACS=emacs-28.2-travis-linux-xenial" "\n")) + (when (version<= minimum-version "29.1") + (insert (spaces-string column) "- EVM_EMACS=emacs-git-snapshot-travis-linux-xenial")))) + (save-buffer)) + "done ✓") + (eask-info "✓ Successfully created the yaml file in `%s`" filename)))) + +;;; generate/workflow/travis-ci.el ends here diff --git a/lisp/link/add.el b/lisp/link/add.el index 12bf1c8f..86deebc1 100644 --- a/lisp/link/add.el +++ b/lisp/link/add.el @@ -7,7 +7,7 @@ ;; $ eask link add [name] [path] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [name] name of the link ;; [path] location (target package) where you want to link diff --git a/lisp/link/delete.el b/lisp/link/delete.el index 78269e0a..c12b5c44 100644 --- a/lisp/link/delete.el +++ b/lisp/link/delete.el @@ -7,7 +7,7 @@ ;; $ eask link delete [names..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [names..] name of the link, accept array ;; diff --git a/lisp/lint/checkdoc.el b/lisp/lint/checkdoc.el index 71540a07..7de5f969 100644 --- a/lisp/lint/checkdoc.el +++ b/lisp/lint/checkdoc.el @@ -7,7 +7,7 @@ ;; $ eask lint checkdoc [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] files you want checkdoc to run on ;; diff --git a/lisp/lint/declare.el b/lisp/lint/declare.el index bb047c1a..14f58385 100644 --- a/lisp/lint/declare.el +++ b/lisp/lint/declare.el @@ -7,7 +7,7 @@ ;; $ eask lint declare [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] files you want check-declare to run on ;; diff --git a/lisp/lint/elint.el b/lisp/lint/elint.el index b471c86b..be4e7ea6 100644 --- a/lisp/lint/elint.el +++ b/lisp/lint/elint.el @@ -7,7 +7,7 @@ ;; $ eask lint elint [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] files you want elint to run on ;; diff --git a/lisp/lint/elisp-lint.el b/lisp/lint/elisp-lint.el index 7a2a729a..27b2317b 100644 --- a/lisp/lint/elisp-lint.el +++ b/lisp/lint/elisp-lint.el @@ -7,7 +7,7 @@ ;; $ eask lint elisp-lint [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] files you want elisp-lint to run on ;; diff --git a/lisp/lint/elsa.el b/lisp/lint/elsa.el index 43e79773..c2ea6320 100644 --- a/lisp/lint/elsa.el +++ b/lisp/lint/elsa.el @@ -7,7 +7,7 @@ ;; $ eask lint elsa [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] files you want elsa to run on ;; diff --git a/lisp/lint/indent.el b/lisp/lint/indent.el index 3dc0be4b..d0f66a7e 100644 --- a/lisp/lint/indent.el +++ b/lisp/lint/indent.el @@ -7,7 +7,7 @@ ;; $ eask lint indent [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] files you want indent-lint to run on ;; diff --git a/lisp/lint/package.el b/lisp/lint/package.el index c69df719..8d6f829b 100644 --- a/lisp/lint/package.el +++ b/lisp/lint/package.el @@ -7,7 +7,7 @@ ;; $ eask lint package [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] specify files to do package lint ;; diff --git a/lisp/lint/regexps.el b/lisp/lint/regexps.el index 42893333..06222b60 100644 --- a/lisp/lint/regexps.el +++ b/lisp/lint/regexps.el @@ -7,7 +7,7 @@ ;; $ eask lint regexps [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] files you want relint to run on ;; diff --git a/lisp/test/ert.el b/lisp/test/ert.el index b7c679d0..9091dac6 100644 --- a/lisp/test/ert.el +++ b/lisp/test/ert.el @@ -7,7 +7,7 @@ ;; $ eask ert [files..] ;; ;; -;; Initialization options: +;; Positional arguments: ;; ;; [files..] specify files to run ert tests ;;