Add CI workflow for Emacs package
- 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:
parent
0295c4ab80
commit
96907f02b0
105
.gitea/workflows/ci.yml
Normal file
105
.gitea/workflows/ci.yml
Normal 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\"))))"
|
102
.gitlab-ci.yml
102
.gitlab-ci.yml
@ -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!"
|
Loading…
x
Reference in New Issue
Block a user