use crate::models::ValidationResult;
pub fn validate_action_reference(
action_ref: &str,
job_name: &str,
step_idx: usize,
result: &mut ValidationResult,
) {
let is_local_action = action_ref.starts_with("./");
if !is_local_action && !action_ref.contains('/') && !action_ref.contains('.') {
result.add_issue(format!(
"Job '{}', step {}: Invalid action reference format '{}'",
job_name,
step_idx + 1,
action_ref
));
return;
}
if !is_local_action && action_ref.contains('@') {
let parts: Vec<&str> = action_ref.split('@').collect();
if parts.len() != 2 || parts[1].is_empty() {
result.add_issue(format!(
"Job '{}', step {}: Action '{}' has invalid version/ref format",
job_name,
step_idx + 1,
action_ref
));
}
} else if !is_local_action {
result.add_issue(format!(
"Job '{}', step {}: Action '{}' is missing version tag (@v2, @main, etc.)",
job_name,
step_idx + 1,
action_ref
));
}
if is_local_action {
let action_path = std::path::Path::new(action_ref);
if !action_path.exists() {
result.add_issue(format!(
"Job '{}', step {}: Local action path '{}' may not exist at runtime",
job_name,
step_idx + 1,
action_ref
));
}
}
}