diff options
author | William Carroll <wpcarro@gmail.com> | 2020-08-27T17·27+0100 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-08-27T17·29+0100 |
commit | 78172233f808f60000b5aa87a1cf92746b856c0c (patch) | |
tree | 75bf9b005fa70e56b85b8bead5e21db5c2b15021 | |
parent | d67dbec7e82b7c907d7c1c4fa92ae922abeca059 (diff) |
Add build, lint Emacs steps to post-receive pipeline
TL;DR: - Define runEmacsScript to emacs/default.nix for ci/pipelines/post-receive - Write script.el to call (load init.el) and catch any errors - Lint Elisp with gonewest818/elisp-lint Also nice how Buildkite supports :gnu: emojis!
-rw-r--r-- | ci/pipelines/post-receive.nix | 33 | ||||
-rw-r--r-- | ci/pipelines/script.el | 28 | ||||
-rw-r--r-- | emacs/default.nix | 15 |
3 files changed, 75 insertions, 1 deletions
diff --git a/ci/pipelines/post-receive.nix b/ci/pipelines/post-receive.nix index 3f14dfade557..d41c3b67b328 100644 --- a/ci/pipelines/post-receive.nix +++ b/ci/pipelines/post-receive.nix @@ -1,6 +1,16 @@ -{ pkgs, ... }: +{ briefcase, pkgs, ... }: let + elispLintSrc = builtins.fetchGit { + url = "https://github.com/gonewest818/elisp-lint"; + rev = "2b645266be8010a6a49c6d0ebf6a3ad5bd290ff4"; + }; + + scriptEl = builtins.path { + path = ./script.el; + name = "script.el"; + }; + pipeline.steps = [ { key = "lint-secrets"; @@ -14,6 +24,27 @@ let depends_on = "lint-secrets"; } { + key = "init-emacs"; + command = '' + ${briefcase.emacs.runScript scriptEl} ${briefcase.emacs.initEl} + ''; + label = ":gnu: initialize Emacs"; + depends_on = "build-briefcase"; + } + { + key = "lint-emacs"; + command = '' + ${briefcase.emacs.nixos}/bin/wpcarros-emacs \ + --quick \ + --batch \ + --load ${elispLintSrc}/elisp-lint.el \ + --funcall elisp-lint-files-batch \ + "$@" + ''; + label = ":gnu: lint Emacs"; + depends_on = "init-emacs"; + } + { key = "build-socrates"; command = '' nix-build '<nixpkgs/nixos>' \ diff --git a/ci/pipelines/script.el b/ci/pipelines/script.el new file mode 100644 index 000000000000..45b5ea688500 --- /dev/null +++ b/ci/pipelines/script.el @@ -0,0 +1,28 @@ +;; This script initializes Emacs and exits with either a zero or non-zero status +;; depending on whether or not Emacs initialized without logging warnings or +;; encountering errors. +;; +;; This script reads the location of init.el as the last argument in `argv'. + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Dependencies +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require 'dash) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Script +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(condition-case err + (load (-last-item argv)) + (error + (message "Encountered an error while attempting to load init.el: %s" err) + (kill-emacs 1))) + +(if (bufferp "*Warnings*") + (progn + (with-current-buffer "*Warnings*" + (message "Encountered warnings in *Warnings* buffer: %s" (buffer-string))) + (kill-emacs 1)) + (kill-emacs 0)) diff --git a/emacs/default.nix b/emacs/default.nix index e8d52c34cc9d..126894a8fc3a 100644 --- a/emacs/default.nix +++ b/emacs/default.nix @@ -148,6 +148,21 @@ let "$@" ''; in { + inherit initEl; + + # I need to start my Emacs from CI without the call to `--load ${initEl}`. + runScript = script: pkgs.writeShellScript "run-emacs-script" '' + export BRIEFCASE=$HOME/briefcase + export PATH="${emacsBinPath}:$PATH" + export EMACSLOADPATH="${wpcDir}:${vendorDir}:${wpcarrosEmacs.deps}/share/emacs/site-lisp" + exec ${wpcarrosEmacs}/bin/emacs \ + --no-site-file \ + --no-site-lisp \ + --no-init-file \ + --script ${script} \ + "$@" + ''; + # Use `nix-env -f '<briefcase>' emacs.glinux` to install `wpcarro-emacs` on # gLinux machines. This will ensure that X and GL linkage behaves as expected. glinux = withEmacsPath "/usr/bin/google-emacs"; |