Add CI workflow for Emacs package
Some checks failed
Emacs Package CI / Compile Emacs Package (push) Failing after 22s
Emacs Package CI / Lint Emacs Package (push) Failing after 3s

- Replaces `.gitlab-ci.yml` with a GitHub Actions workflow.
- Uses Ubuntu 29.1 Emacs container for consistent builds.
- Installs and verifies dependencies (forge and llm).
- Byte-compiles the package and uploads the `.elc` file.
- Includes linting with `package-lint`.
- Sets `TERM` and `DEBIAN_FRONTEND` environment variables.
- Uses GitHub Actions artifacts to store the compiled file.
This commit is contained in:
Roger Gonzalez 2025-05-15 19:59:56 -03:00
parent 0295c4ab80
commit 96907f02b0
Signed by: rogs
GPG Key ID: C7ECE9C6C36EC2E6
2 changed files with 105 additions and 102 deletions

105
.gitea/workflows/ci.yml Normal file
View File

@ -0,0 +1,105 @@
name: Emacs Package CI
on:
push:
branches:
- master
jobs:
compile:
name: Compile Emacs Package
runs-on: ubuntu-latest
container:
image: silex/emacs:29.1
env:
TERM: dumb
DEBIAN_FRONTEND: noninteractive
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Git
run: |
echo "🔧 Installing Git..."
apt-get update -qq && apt-get install -y -qq git
git --version
- name: Setup Emacs environment
run: mkdir -p .emacs.d/elpa
- name: Install dependencies (forge & llm)
run: |
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)"
- name: Verify dependency installation
run: |
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\"))"
- name: Byte-compile the package
run: |
emacs --batch -Q \
--eval "(require 'package)" \
--eval "(package-initialize)" \
--eval "(setq byte-compile-error-on-warn t)" \
-f batch-byte-compile forge-llm.el
- name: Verify package loads correctly
run: |
emacs --batch -Q \
--eval "(require 'package)" \
--eval "(package-initialize)" \
--eval "(load-file \"forge-llm.elc\")" \
--eval "(require 'forge-llm)"
- name: Upload byte-compiled file
uses: actions/upload-artifact@v3
with:
name: forge-llm.elc
path: forge-llm.elc
lint:
name: Lint Emacs Package
runs-on: ubuntu-latest
container:
image: silex/emacs:29.1
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install package-lint and dependencies
run: |
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)"
- name: Lint with package-lint
run: |
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\"))))"

View File

@ -1,102 +0,0 @@
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!"