image: silex/emacs:29.1 stages: - compile - lint variables: TERM: "dumb" # Skip interactive prompts DEBIAN_FRONTEND: "noninteractive" # Cache packages between jobs and pipelines cache: paths: - .emacs.d/.cache - .emacs.d/elpa before_script: # Install Git - echo "🔧 Installing Git..." - apt-get update -qq && apt-get install -y -qq git - git --version # Set up Emacs environment - mkdir -p .emacs.d/elpa - echo "🔧 Setting up Emacs package environment..." compile: stage: compile script: # Install dependencies - echo "🚀 Installing dependencies (forge & llm)..." - emacs --batch -Q --eval "(require 'package)" --eval "(add-to-list 'package-archives '(\"melpa\" . \"https://melpa.org/packages/\"))" --eval "(package-initialize)" --eval "(package-refresh-contents)" --eval "(package-install 'forge)" --eval "(package-install 'llm)" # Verify dependency installation - echo "🔍 Verifying dependency installation..." - emacs --batch -Q --eval "(require 'package)" --eval "(package-initialize)" --eval "(when (not (package-installed-p 'forge)) (error \"Forge installation failed\"))" --eval "(when (not (package-installed-p 'llm)) (error \"LLM installation failed\"))" # Byte-compile the package and check for warnings/errors - echo "🛠️ Testing package compilation..." - emacs --batch -Q --eval "(require 'package)" --eval "(package-initialize)" --eval "(setq byte-compile-error-on-warn t)" -f batch-byte-compile forge-llm.el # Load the package to ensure it's working - echo "✅ Verifying package loads correctly..." - emacs --batch -Q --eval "(require 'package)" --eval "(package-initialize)" --eval "(load-file \"forge-llm.elc\")" --eval "(require 'forge-llm)" - echo "🎉 All tests passed!" artifacts: paths: - forge-llm.elc expire_in: 1 week lint: stage: lint script: # Install package-lint and dependencies - echo "🔍 Installing package-lint..." - emacs --batch -Q --eval "(require 'package)" --eval "(add-to-list 'package-archives '(\"melpa\" . \"https://melpa.org/packages/\"))" --eval "(package-initialize)" --eval "(package-refresh-contents)" --eval "(package-install 'package-lint)" --eval "(package-install 'forge)" --eval "(package-install 'llm)" # Run package-lint on forge-llm.el - echo "🔍 Linting package with package-lint..." - emacs --batch -Q --eval "(require 'package)" --eval "(package-initialize)" --eval "(require 'package-lint)" --eval "(setq package-lint-main-file \"forge-llm.el\")" --eval "(with-current-buffer (find-file-noselect \"forge-llm.el\") (let ((package-lint-results (package-lint-buffer))) (if package-lint-results (progn (message \"Package lint errors found:\") (dolist (err package-lint-results) (message \"%s\" err)) (error \"Package lint failed\")) (message \"No package lint errors found\"))))" - echo "✅ Package linting passed!"