diff --git a/.github/workflows/build_and_test_bot.yml b/.github/workflows/build_and_test_bot.yml index dcc379b9..5903a615 100644 --- a/.github/workflows/build_and_test_bot.yml +++ b/.github/workflows/build_and_test_bot.yml @@ -27,13 +27,15 @@ jobs: - name: Test and build release if: inputs.release env: - SHEET_ID: ${{ env.SHEET_ID }} + SHEET_ID: ${{ secrets.SHEET_ID }} + RUST_LOG: info run: cargo test --release -- --nocapture && cargo build --release - name: Test and build debug if: ${{ !inputs.release }} env: - SHEET_ID: ${{ env.SHEET_ID }} + SHEET_ID: ${{ secrets.SHEET_ID }} + RUST_LOG: info run: cargo test -- --nocapture && cargo build - name: Move binary diff --git a/core/src/model/mod.rs b/core/src/model/mod.rs index cc9dc894..f40c85a0 100644 --- a/core/src/model/mod.rs +++ b/core/src/model/mod.rs @@ -10,7 +10,7 @@ pub mod prelude { } use self::finite_state::{Fs, Row}; -use anyhow::{anyhow, Context}; +use anyhow::{anyhow, bail, Context}; use bytes::Buf; use csv::Reader; use finite_state::MultilangFs; @@ -42,6 +42,9 @@ fn get_finite_state(rdr: Reader, lang: Lang) -> anyhow::Result { .collect::, _>>() .context("Cannot parse csv")?; rows.retain(|record| !record.is_empty()); + if rows.is_empty() { + bail!("No data"); + } for r in rows.iter_mut() { r.key = r.key.trim().to_string(); r.question = r.question.trim().to_string(); @@ -59,7 +62,7 @@ pub fn get_data_from_file(filename: &str) -> anyhow::Result { } pub async fn get_data_from_web() -> anyhow::Result { - let sheet_id = env!("SHEET_ID"); + let sheet_id = option_env!("SHEET_ID").ok_or_else(|| anyhow!("SHEET_ID is not set"))?; assert!(Lang::iter().count() == 1, "Only one language is supported"); let lang = Lang::iter().next().unwrap(); let sheet_name = lang.name(); diff --git a/core/tests/test_data.rs b/core/tests/test_data.rs index 149179e0..3573410a 100644 --- a/core/tests/test_data.rs +++ b/core/tests/test_data.rs @@ -74,13 +74,11 @@ pre-formatted fixed-width code block written in the Python programming language } else { get_data_from_file("../table.csv")? }; - data.iter() - .for_each(|(lang, fs)| log::info!("Testing {lang} with {} nodes", fs.num_nodes())); - for (lang, fs) in data.into_iter() { - let n_nodes = fs.num_nodes(); - test_fs(fs)?; - log::info!("All tests passed for {lang} with {n_nodes} nodes"); - } + assert!(!data.is_empty()); + assert!(data.iter().all(|(_, fs)| fs.num_nodes() > 1)); + data.into_iter() + .inspect(|(lang, fs)| log::info!("Testing {lang} with {} nodes", fs.num_nodes())) + .try_for_each(|(_, fs)| test_fs(fs))?; Ok(()) }