Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
edf401f773 |
+2
-18
@@ -3,25 +3,9 @@
|
|||||||
One line per change, grouped by the release that shipped it. Newest
|
One line per change, grouped by the release that shipped it. Newest
|
||||||
first. Each release names the portal tag it is built against.
|
first. Each release names the portal tag it is built against.
|
||||||
|
|
||||||
## 0.3.45 (2026-09-23) - portal v0.3.45
|
## 0.3.40 (2026-09-23) - portal v0.3.40
|
||||||
|
|
||||||
- Matches portal v0.3.45 (released by portal's publish job).
|
- Matches portal v0.3.40 (released by portal's publish job).
|
||||||
|
|
||||||
## 0.3.44 (2026-09-23) - portal v0.3.44
|
|
||||||
|
|
||||||
- Matches portal v0.3.44 (released by portal's publish job).
|
|
||||||
|
|
||||||
## 0.3.43 (2026-09-23) - portal v0.3.43
|
|
||||||
|
|
||||||
- Matches portal v0.3.43 (released by portal's publish job).
|
|
||||||
|
|
||||||
## 0.3.42 (2026-09-23) - portal v0.3.42
|
|
||||||
|
|
||||||
- Matches portal v0.3.42 (released by portal's publish job).
|
|
||||||
|
|
||||||
## 0.3.41 (2026-09-23) - portal v0.3.41
|
|
||||||
|
|
||||||
- Matches portal v0.3.41 (released by portal's publish job).
|
|
||||||
|
|
||||||
## 0.3.39 (2026-09-23) - portal v0.3.39
|
## 0.3.39 (2026-09-23) - portal v0.3.39
|
||||||
|
|
||||||
|
|||||||
Generated
+3
-3
@@ -2196,7 +2196,7 @@ checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iris"
|
name = "iris"
|
||||||
version = "0.3.45"
|
version = "0.3.40"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-nats",
|
"async-nats",
|
||||||
@@ -3303,8 +3303,8 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "portal"
|
name = "portal"
|
||||||
version = "0.3.45"
|
version = "0.3.40"
|
||||||
source = "git+https://project.uhhm.no/uhhm/portal.git?tag=v0.3.45#3c6881403062d3ba44c6093575b94238900448e8"
|
source = "git+https://project.uhhm.no/uhhm/portal.git?tag=v0.3.40#44d5ef368371b7d0d004d9bb0c89a9db267fcfe6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "iris"
|
name = "iris"
|
||||||
version = "0.3.45"
|
version = "0.3.40"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "The iris over a portal site: nothing from a content repo comes through until it checks out"
|
description = "The iris over a portal site: nothing from a content repo comes through until it checks out"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
@@ -10,7 +10,7 @@ repository = "https://project.uhhm.no/uhhm/iris"
|
|||||||
# The site's own content types and loaders, so iris reads a repo exactly
|
# The site's own content types and loaders, so iris reads a repo exactly
|
||||||
# the way the running site does. Pinned to the portal release it
|
# the way the running site does. Pinned to the portal release it
|
||||||
# matches; bumping this tag is what a new iris release is.
|
# matches; bumping this tag is what a new iris release is.
|
||||||
portal = { git = "https://project.uhhm.no/uhhm/portal.git", tag = "v0.3.45", features = ["ssr"] }
|
portal = { git = "https://project.uhhm.no/uhhm/portal.git", tag = "v0.3.40", features = ["ssr"] }
|
||||||
anyhow = "1"
|
anyhow = "1"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
|
|||||||
+1
-21
@@ -23,7 +23,6 @@ pub async fn run(argv: Vec<String>) -> anyhow::Result<()> {
|
|||||||
let mut min_accuracy: f64 = 0.0;
|
let mut min_accuracy: f64 = 0.0;
|
||||||
let mut skim = false;
|
let mut skim = false;
|
||||||
let mut sim_out: Option<String> = None;
|
let mut sim_out: Option<String> = None;
|
||||||
let mut show_access = false;
|
|
||||||
|
|
||||||
while let Some(arg) = args.next() {
|
while let Some(arg) = args.next() {
|
||||||
match arg.as_str() {
|
match arg.as_str() {
|
||||||
@@ -34,7 +33,6 @@ pub async fn run(argv: Vec<String>) -> anyhow::Result<()> {
|
|||||||
"--needs-tasks" => tasks_out = args.next(),
|
"--needs-tasks" => tasks_out = args.next(),
|
||||||
"--skim" => skim = true,
|
"--skim" => skim = true,
|
||||||
"--needs-sim" => sim_out = args.next(),
|
"--needs-sim" => sim_out = args.next(),
|
||||||
"--access" => show_access = true,
|
|
||||||
"--needs-score" => answers_in = args.next(),
|
"--needs-score" => answers_in = args.next(),
|
||||||
"--min-accuracy" => {
|
"--min-accuracy" => {
|
||||||
min_accuracy = args.next().and_then(|v| v.parse().ok()).unwrap_or(min_accuracy)
|
min_accuracy = args.next().and_then(|v| v.parse().ok()).unwrap_or(min_accuracy)
|
||||||
@@ -64,7 +62,7 @@ pub async fn run(argv: Vec<String>) -> anyhow::Result<()> {
|
|||||||
(questions, aggregates_map, site, needs_raw)
|
(questions, aggregates_map, site, needs_raw)
|
||||||
} else {
|
} else {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"usage: iris check (--repo <gitea-url> [--branch main] [--subdir questions] | --path <local-dir>) [--needs-tasks <out.jsonl> [--skim]] [--needs-sim <model.json>] [--access] [--needs-score <answers.jsonl> [--min-accuracy 0.8]]"
|
"usage: iris check (--repo <gitea-url> [--branch main] [--subdir questions] | --path <local-dir>) [--needs-tasks <out.jsonl> [--skim]] [--needs-sim <model.json>] [--needs-score <answers.jsonl> [--min-accuracy 0.8]]"
|
||||||
);
|
);
|
||||||
std::process::exit(2);
|
std::process::exit(2);
|
||||||
};
|
};
|
||||||
@@ -93,24 +91,6 @@ pub async fn run(argv: Vec<String>) -> anyhow::Result<()> {
|
|||||||
questions.len(),
|
questions.len(),
|
||||||
aggregates_map.len()
|
aggregates_map.len()
|
||||||
);
|
);
|
||||||
// The access policy the site will compile from this content.
|
|
||||||
// It must type-check against portal's schema: a rule the
|
|
||||||
// schema cannot express would grant nothing at runtime.
|
|
||||||
let policy = portal::access::Policy::from_content(&questions, &aggregates_map);
|
|
||||||
if let Err(e) = policy.validate() {
|
|
||||||
eprintln!("FAIL: access policy does not validate: {e}");
|
|
||||||
std::process::exit(1);
|
|
||||||
}
|
|
||||||
println!("OK: access policy, {} rule(s), validates", policy.rules.len());
|
|
||||||
if show_access {
|
|
||||||
println!("\n{:<16} {:<44} {:<40} {}", "ACTION", "RESOURCE", "WHO", "WHEN");
|
|
||||||
let mut rows = policy.rules.clone();
|
|
||||||
rows.sort_by(|a, b| (&a.resource, &a.action, &a.who).cmp(&(&b.resource, &b.action, &b.who)));
|
|
||||||
for r in rows {
|
|
||||||
println!("{:<16} {:<44} {:<40} {}", r.action, r.resource, r.who, r.when);
|
|
||||||
}
|
|
||||||
println!();
|
|
||||||
}
|
|
||||||
check_needs(
|
check_needs(
|
||||||
needs_raw.as_deref(),
|
needs_raw.as_deref(),
|
||||||
&questions,
|
&questions,
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
Some(flag) if flag.starts_with("--") => check::run(argv).await,
|
Some(flag) if flag.starts_with("--") => check::run(argv).await,
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"iris {v} - matches portal v{v}\n\nusage:\n iris check (--repo <gitea-url> [--branch main] [--subdir questions] | --path <dir>) [--needs-tasks <out.jsonl> [--skim]] [--needs-sim <model.json>] [--access] [--needs-score <answers.jsonl> [--min-accuracy 0.8]]\n iris replay --path <dir> --nats <url> (--cases <cases.jsonl> | --report-only)",
|
"iris {v} - matches portal v{v}\n\nusage:\n iris check (--repo <gitea-url> [--branch main] [--subdir questions] | --path <dir>) [--needs-tasks <out.jsonl> [--skim]] [--needs-sim <model.json>] [--needs-score <answers.jsonl> [--min-accuracy 0.8]]\n iris replay --path <dir> --nats <url> (--cases <cases.jsonl> | --report-only)",
|
||||||
v = env!("CARGO_PKG_VERSION")
|
v = env!("CARGO_PKG_VERSION")
|
||||||
);
|
);
|
||||||
std::process::exit(2)
|
std::process::exit(2)
|
||||||
|
|||||||
Reference in New Issue
Block a user