Skip to main content

ephemeris_forge_forgejo/config/
actions_variables.rs

1use std::collections::BTreeMap;
2
3use ephemeris_forge::{Mode, VariableNameError, VariableNameRules};
4use facet::Facet;
5
6/// The names Forgejo refuses for Actions variables.
7const NAME_RULES: VariableNameRules = VariableNameRules {
8    reserved_names: &["CI"],
9    reserved_prefixes: &["FORGEJO_", "GITEA_", "GITHUB_"],
10};
11
12/// Desired Actions variables of a repository.
13#[derive(Clone, Debug, Eq, Facet, PartialEq)]
14#[facet(deny_unknown_fields)]
15pub struct ActionsVariables {
16    /// Whether variables that are not declared are deleted.
17    pub mode: Mode,
18    /// The variable values keyed by name. Forgejo stores names in upper case.
19    pub variables: BTreeMap<String, String>,
20}
21
22impl ActionsVariables {
23    /// Check the variable names.
24    ///
25    /// # Errors
26    /// Returns an error when a name is one Forgejo refuses.
27    pub fn validate(&self) -> Result<(), VariableNameError> {
28        NAME_RULES.check(self.variables.keys().map(String::as_str))
29    }
30}