Polish ci::pipeline surface
Rename pipeline::eval_ci to pipeline::load (matching the prior
eval→load rename), build Pipeline via RefCell::take, and drop
Ci::validate_at — no callers.

Assisted-by: Claude Opus 4.7 via Claude Code
change oyzuxrvqorpqnlyxroswolkkqnzlunsy
commit 078670951ae65f9c8773821bf27f5b742bfa6719
author Alpha Chen <alpha@kejadlen.dev>
date
parent pxzxxqwp
diff --git a/src/ci/mod.rs b/src/ci/mod.rs
index 4fc5691..f328a91 100644
--- a/src/ci/mod.rs
+++ b/src/ci/mod.rs
@@ -43,18 +43,7 @@ impl Ci {
         };
         let fennel = crate::fennel::Fennel::new()?;
         let name = format!("{sha}:{CI_FNL}");
-        let pipeline = pipeline::eval_ci(&fennel, &source, &name)?;
-        Ok(Some(pipeline))
-    }
-
-    /// Load ci.fnl at a given SHA and validate the pipeline.
-    ///
-    /// Returns `Ok(None)` if the repo has no ci.fnl at that commit.
-    pub fn validate_at(&self, sha: &str) -> Result<Option<Pipeline>> {
-        let Some(pipeline) = self.load(sha)? else {
-            return Ok(None);
-        };
-        pipeline.validate()?;
+        let pipeline = pipeline::load(&fennel, &source, &name)?;
         Ok(Some(pipeline))
     }
 
@@ -144,7 +133,7 @@ fn trigger_ref(repo: &Repo, pushed_at: jiff::Timestamp, push_ref: &PushRef) -> R
 
     let fennel = crate::fennel::Fennel::new()?;
     let name = format!("{}:{CI_FNL}", push_ref.new_sha);
-    let pipeline = match pipeline::eval_ci(&fennel, &source, &name) {
+    let pipeline = match pipeline::load(&fennel, &source, &name) {
         Ok(r) => r,
         Err(e) => {
             run.transition(RunState::Failed)?;
diff --git a/src/ci/pipeline.rs b/src/ci/pipeline.rs
index 44ec8b2..0ae0ed8 100644
--- a/src/ci/pipeline.rs
+++ b/src/ci/pipeline.rs
@@ -65,11 +65,11 @@ impl UserData for CiModule {
     }
 }
 
-/// Evaluate a ci.fnl source string, registering jobs via the `quire.ci` module.
+/// Load a ci.fnl source string, registering jobs via the `quire.ci` module.
 ///
 /// Injects `quire.ci` into `package.loaded` so scripts can
 /// `(require :quire.ci)`, evaluates the source, and takes the accumulated jobs.
-pub(crate) fn eval_ci(fennel: &Fennel, source: &str, name: &str) -> Result<Pipeline> {
+pub(crate) fn load(fennel: &Fennel, source: &str, name: &str) -> Result<Pipeline> {
     let jobs = Rc::new(RefCell::new(Vec::new()));
 
     fennel.eval_raw(source, name, |lua| {
@@ -203,25 +203,25 @@ mod tests {
     }
 
     #[test]
-    fn eval_ci_registers_a_job() {
+    fn load_registers_a_job() {
         let f = fennel();
         let source = r#"(local ci (require :quire.ci))
 (ci:job :test [:quire/push] (fn [_] nil))"#;
-        let result = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let result = load(&f, source, "ci.fnl").expect("eval should succeed");
         assert_eq!(result.jobs.len(), 1);
         assert_eq!(result.jobs[0].id, "test");
         assert_eq!(result.jobs[0].inputs, vec!["quire/push"]);
     }
 
     #[test]
-    fn eval_ci_registers_multiple_jobs() {
+    fn load_registers_multiple_jobs() {
         let f = fennel();
         let source = r#"
 (local ci (require :quire.ci))
 (ci:job :build [:quire/push] (fn [_] nil))
 (ci:job :test [:build] (fn [_] nil))
 "#;
-        let result = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let result = load(&f, source, "ci.fnl").expect("eval should succeed");
         assert_eq!(result.jobs.len(), 2);
         assert_eq!(result.jobs[0].id, "build");
         assert_eq!(result.jobs[0].inputs, vec!["quire/push"]);
@@ -230,9 +230,9 @@ mod tests {
     }
 
     #[test]
-    fn eval_ci_errors_on_bad_fennel() {
+    fn load_errors_on_bad_fennel() {
         let f = fennel();
-        let result = eval_ci(&f, "{:bad {:}", "ci.fnl");
+        let result = load(&f, "{:bad {:}", "ci.fnl");
         assert!(result.is_err(), "malformed Fennel should fail");
     }
 
@@ -244,7 +244,7 @@ mod tests {
 (ci:job :build [:quire/push] (fn [_] nil))
 (ci:job :test [:build :quire/push] (fn [_] nil))
 "#;
-        let pipeline = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let pipeline = load(&f, source, "ci.fnl").expect("eval should succeed");
         assert!(pipeline.validate().is_ok());
     }
 
@@ -256,7 +256,7 @@ mod tests {
 (ci:job :a [:b] (fn [_] nil))
 (ci:job :b [:a] (fn [_] nil))
 "#;
-        let pipeline = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let pipeline = load(&f, source, "ci.fnl").expect("eval should succeed");
         let errs = pipeline.validate().unwrap_err();
         assert!(
             errs.iter().any(|e| matches!(e, ValidationError::Cycle { cycle_jobs } if cycle_jobs.contains(&"a".to_string()) && cycle_jobs.contains(&"b".to_string()))),
@@ -273,7 +273,7 @@ mod tests {
 (ci:job :b [:a :quire/push] (fn [_] nil))
 (ci:job :clean [:quire/push] (fn [_] nil))
 "#;
-        let pipeline = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let pipeline = load(&f, source, "ci.fnl").expect("eval should succeed");
         let errs = pipeline.validate().unwrap_err();
         let cycle_errs: Vec<&Vec<String>> = errs
             .iter()
@@ -300,7 +300,7 @@ mod tests {
 (ci:job :c [:d :quire/push] (fn [_] nil))
 (ci:job :d [:c :quire/push] (fn [_] nil))
 "#;
-        let pipeline = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let pipeline = load(&f, source, "ci.fnl").expect("eval should succeed");
         let errs = pipeline.validate().unwrap_err();
         let cycle_count = errs
             .iter()
@@ -314,7 +314,7 @@ mod tests {
         let f = fennel();
         let source = r#"(local ci (require :quire.ci))
 (ci:job :setup [] (fn [_] nil))"#;
-        let pipeline = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let pipeline = load(&f, source, "ci.fnl").expect("eval should succeed");
         let errs = pipeline.validate().unwrap_err();
         assert!(
             errs.iter()
@@ -328,7 +328,7 @@ mod tests {
         let f = fennel();
         let source = r#"(local ci (require :quire.ci))
 (ci:job :orphan [:orphan] (fn [_] nil))"#;
-        let pipeline = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let pipeline = load(&f, source, "ci.fnl").expect("eval should succeed");
         let errs = pipeline.validate().unwrap_err();
         assert!(
             errs.iter().any(
@@ -343,7 +343,7 @@ mod tests {
         let f = fennel();
         let source = r#"(local ci (require :quire.ci))
 (ci:job :foo/bar [:quire/push] (fn [_] nil))"#;
-        let pipeline = eval_ci(&f, source, "ci.fnl").expect("eval should succeed");
+        let pipeline = load(&f, source, "ci.fnl").expect("eval should succeed");
         let errs = pipeline.validate().unwrap_err();
         assert!(
             errs.iter().any(