103 lines
3.2 KiB
YAML
103 lines
3.2 KiB
YAML
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!"
|