v0.1.4-pre.011-fix.001
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
# file: Cargo.toml
|
# file: Cargo.toml
|
||||||
# version: 78
|
# version: 79
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "3"
|
resolver = "3"
|
||||||
members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib"]
|
members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.1.4-pre.11"
|
version = "0.1.4-pre.11.fix.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// file: crates/ksp-config-lib/tests/ownership.rs
|
// file: crates/ksp-config-lib/tests/ownership.rs
|
||||||
// version: 1
|
// version: 2
|
||||||
|
|
||||||
//! Workspace ownership audits for KSP application configuration boundaries.
|
//! Workspace ownership audits for KSP application configuration boundaries.
|
||||||
|
|
||||||
@@ -94,6 +94,7 @@ fn collect_environment_names(source: &str, names: &mut std::collections::BTreeSe
|
|||||||
if let std::result::Result::Ok(candidate) = candidate
|
if let std::result::Result::Ok(candidate) = candidate
|
||||||
&& candidate.len() > prefix_length
|
&& candidate.len() > prefix_length
|
||||||
&& !candidate.ends_with('_')
|
&& !candidate.ends_with('_')
|
||||||
|
&& !is_environment_namespace_label(candidate)
|
||||||
{
|
{
|
||||||
names.insert(candidate.to_owned());
|
names.insert(candidate.to_owned());
|
||||||
}
|
}
|
||||||
@@ -101,6 +102,10 @@ fn collect_environment_names(source: &str, names: &mut std::collections::BTreeSe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_environment_namespace_label(candidate: &str) -> bool {
|
||||||
|
return matches!(candidate, "KSP_PUBLIC" | "KSP_SECRET" | "KSPB_PUBLIC" | "KSPB_SECRET");
|
||||||
|
}
|
||||||
|
|
||||||
fn dotenv_example_assignments(source: &str) -> std::collections::BTreeMap<String, usize> {
|
fn dotenv_example_assignments(source: &str) -> std::collections::BTreeMap<String, usize> {
|
||||||
let mut assignments = std::collections::BTreeMap::<String, usize>::new();
|
let mut assignments = std::collections::BTreeMap::<String, usize>::new();
|
||||||
for (line_index, line) in source.lines().enumerate() {
|
for (line_index, line) in source.lines().enumerate() {
|
||||||
@@ -241,6 +246,30 @@ fn workspace_crates_do_not_hardcode_config_managed_physical_files() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn environment_name_scanner_ignores_namespace_labels_but_keeps_concrete_names() {
|
||||||
|
let source = r#"
|
||||||
|
const KSP_PUBLIC_LABEL: &str = "KSP_PUBLIC";
|
||||||
|
const KSP_SECRET_LABEL: &str = "KSP_SECRET";
|
||||||
|
const KSPB_PUBLIC_LABEL: &str = "KSPB_PUBLIC";
|
||||||
|
const KSPB_SECRET_LABEL: &str = "KSPB_SECRET";
|
||||||
|
const KSP_PUBLIC_RPC_URL: &str = "KSP_PUBLIC_RPC_URL";
|
||||||
|
const KSP_SECRET_API_KEY: &str = "KSP_SECRET_API_KEY";
|
||||||
|
const KSPB_PUBLIC_ENDPOINT: &str = "KSPB_PUBLIC_ENDPOINT";
|
||||||
|
const KSPB_SECRET_TOKEN: &str = "KSPB_SECRET_TOKEN";
|
||||||
|
"#;
|
||||||
|
let mut names = std::collections::BTreeSet::<String>::new();
|
||||||
|
collect_environment_names(source, &mut names);
|
||||||
|
assert!(!names.contains("KSP_PUBLIC"));
|
||||||
|
assert!(!names.contains("KSP_SECRET"));
|
||||||
|
assert!(!names.contains("KSPB_PUBLIC"));
|
||||||
|
assert!(!names.contains("KSPB_SECRET"));
|
||||||
|
assert!(names.contains("KSP_PUBLIC_RPC_URL"));
|
||||||
|
assert!(names.contains("KSP_SECRET_API_KEY"));
|
||||||
|
assert!(names.contains("KSPB_PUBLIC_ENDPOINT"));
|
||||||
|
assert!(names.contains("KSPB_SECRET_TOKEN"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn dotenv_example_covers_runtime_environment_names_with_comments() {
|
fn dotenv_example_covers_runtime_environment_names_with_comments() {
|
||||||
let root = workspace_root();
|
let root = workspace_root();
|
||||||
|
|||||||
57
deltas/0.1.4/pre.011-fix.001.md
Normal file
57
deltas/0.1.4/pre.011-fix.001.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<!-- file: deltas/0.1.4/pre.011-fix.001.md -->
|
||||||
|
<!-- version: 1 -->
|
||||||
|
|
||||||
|
# Delta `0.1.4-pre.011-fix.001` — audit `.env.example` et labels de namespace
|
||||||
|
|
||||||
|
## Statut
|
||||||
|
|
||||||
|
Correctif de `0.1.4-pre.011` après validation locale.
|
||||||
|
|
||||||
|
## Défaut observé
|
||||||
|
|
||||||
|
`cargo test -p ksp-config-lib` échouait dans l'audit d'ownership :
|
||||||
|
|
||||||
|
```text
|
||||||
|
.env.example is missing runtime variable KSPB_PUBLIC
|
||||||
|
```
|
||||||
|
|
||||||
|
`KSPB_PUBLIC` n'est pourtant pas une variable runtime concrète. C'est un label de famille utilisé par Config Desk pour classifier les noms `KSPB_PUBLIC_*` dans la vue Environnement.
|
||||||
|
|
||||||
|
Le scanner de l'audit interprétait à tort les quatre labels suivants comme des variables concrètes :
|
||||||
|
|
||||||
|
- `KSP_PUBLIC` ;
|
||||||
|
- `KSP_SECRET` ;
|
||||||
|
- `KSPB_PUBLIC` ;
|
||||||
|
- `KSPB_SECRET`.
|
||||||
|
|
||||||
|
Ajouter artificiellement ces labels à `.env.example` aurait dégradé son contrat en documentant de fausses variables.
|
||||||
|
|
||||||
|
## Correction
|
||||||
|
|
||||||
|
- le scanner `collect_environment_names()` ignore uniquement les quatre labels de namespace non concrets ;
|
||||||
|
- les noms possédant un suffixe réel restent détectés, par exemple :
|
||||||
|
- `KSP_PUBLIC_RPC_URL` ;
|
||||||
|
- `KSP_SECRET_API_KEY` ;
|
||||||
|
- `KSPB_PUBLIC_ENDPOINT` ;
|
||||||
|
- `KSPB_SECRET_TOKEN` ;
|
||||||
|
- ajout d'un test de non-régression qui vérifie simultanément l'exclusion des labels et la conservation des noms concrets ;
|
||||||
|
- `.env.example` reste inchangé : aucune fausse variable n'est ajoutée.
|
||||||
|
|
||||||
|
## Version technique
|
||||||
|
|
||||||
|
```text
|
||||||
|
workspace.package.version = "0.1.4-pre.11.fix.1"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Validation locale demandée
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo fmt --all
|
||||||
|
cargo check --workspace
|
||||||
|
cargo clippy --workspace --all-targets
|
||||||
|
cargo test -p ksp-app-config-desk
|
||||||
|
cargo test -p ksp-config-lib
|
||||||
|
cargo tauri dev -c crates/ksp-app-config-desk/tauri.conf.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Après correction, `tests/ownership.rs` doit contenir cinq tests et `dotenv_example_covers_runtime_environment_names_with_comments` doit repasser au vert.
|
||||||
Reference in New Issue
Block a user