diff --git a/.env b/.env index b9f4ef5..bbbe3a5 100644 --- a/.env +++ b/.env @@ -6,3 +6,4 @@ POSTGRES_MAIN_PASSWORD=password POSTGRES_MAIN_DB=my_db POSTGRES_MAIN_HOST=localhost DATABASE_URL=postgres://${POSTGRES_MAIN_USER}:${POSTGRES_MAIN_PASSWORD}@${POSTGRES_MAIN_HOST}:5432/${POSTGRES_MAIN_DB} +ICARUS_BASE_API_URL=https://icarus.com diff --git a/.env.sample b/.env.sample index b9f4ef5..bbbe3a5 100644 --- a/.env.sample +++ b/.env.sample @@ -6,3 +6,4 @@ POSTGRES_MAIN_PASSWORD=password POSTGRES_MAIN_DB=my_db POSTGRES_MAIN_HOST=localhost DATABASE_URL=postgres://${POSTGRES_MAIN_USER}:${POSTGRES_MAIN_PASSWORD}@${POSTGRES_MAIN_HOST}:5432/${POSTGRES_MAIN_DB} +ICARUS_BASE_API_URL=https://icarus.com diff --git a/.gitea/workflows/tag_release.yml b/.gitea/workflows/tag_release.yml index 786362a..915c2d2 100644 --- a/.gitea/workflows/tag_release.yml +++ b/.gitea/workflows/tag_release.yml @@ -17,7 +17,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.86.0 + toolchain: 1.88.0 components: cargo - name: Extract Version from Cargo.toml @@ -28,7 +28,7 @@ jobs: BRANCH_REF="${GITHUB_REF}" BRANCH_NAME=$(echo "$BRANCH_REF" | cut -d '/' -f 3) PROJECT_TAG_RELEASE="v$VERSION-$BRANCH_NAME-$PROJECT_COMMIT_HASH" - echo "::set-output name=project_tag_release::$PROJECT_TAG_RELEASE-950" + echo "::set-output name=project_tag_release::$PROJECT_TAG_RELEASE-006" echo "Version: $VERSION" echo "Hash: $PROJECT_COMMIT_HASH" echo "Branch: $BRANCH_NAME" diff --git a/.gitea/workflows/workflow.yaml b/.gitea/workflows/workflow.yaml new file mode 100644 index 0000000..a81b104 --- /dev/null +++ b/.gitea/workflows/workflow.yaml @@ -0,0 +1,65 @@ +name: Rust Build + +on: + push: + branches: + - main + - devel + pull_request: + branches: + - main + - devel + +jobs: + check: + name: Check + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.88.0 + - run: cargo check + + test: + name: Test Suite + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.88.0 + - run: cargo test + + fmt: + name: Rustfmt + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.88.0 + - run: rustup component add rustfmt + - run: cargo fmt --all -- --check + + clippy: + name: Clippy + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.88.0 + - run: rustup component add clippy + - run: cargo clippy -- -D warnings + + build: + name: build + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.88.0 + - run: cargo build + diff --git a/Cargo.lock b/Cargo.lock index 5243040..2873e77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -168,6 +168,26 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -277,9 +297,10 @@ checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "icarus_envy" -version = "0.1.0" +version = "0.3.0" dependencies = [ "async-std", + "const_format", "dotenvy", ] @@ -458,6 +479,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "value-bag" version = "1.11.1" diff --git a/Cargo.toml b/Cargo.toml index ca6936c..3326aaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,12 @@ [package] name = "icarus_envy" -version = "0.2.0" +version = "0.3.0" edition = "2024" -rust-version = "1.86" +rust-version = "1.88" [dependencies] dotenvy = { version = "0.15.7" } +const_format = { version = "0.2.34" } [dev-dependencies] async-std = { version = "1.13.1" } diff --git a/src/environment.rs b/src/environment.rs index 33a13df..672c297 100644 --- a/src/environment.rs +++ b/src/environment.rs @@ -1,4 +1,3 @@ - pub async fn get_db_url() -> String { dotenvy::dotenv().ok(); std::env::var(crate::keys::DB_URL).expect(crate::keys::error::DB_URL) @@ -18,3 +17,8 @@ pub async fn get_root_directory() -> String { dotenvy::dotenv().ok(); std::env::var(crate::keys::ROOT_DIRECTORY).expect(crate::keys::error::ROOT_DIRECTORY) } + +pub async fn get_icarus_base_api_url() -> String { + dotenvy::dotenv().ok(); + std::env::var(crate::keys::ICARUS_BASE_API_URL).expect(crate::keys::error::ICARUS_BASE_API_URL) +} diff --git a/src/keys.rs b/src/keys.rs index 57acf26..cde5fab 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -3,7 +3,7 @@ pub const DB_URL: &str = "DATABASE_URL"; // Environment key for secret main key // Used for the icarus app -pub const SECRET_MAIN_KEY: &str = "SECRET_MAIN_KEY"; +pub const SECRET_MAIN_KEY: &str = "SECRET_MAIN_KEY"; // Environment key for secret key // Generic use of secret key that could be found in various apps @@ -12,9 +12,16 @@ pub const SECRET_KEY: &str = "SECRET_KEY"; // Environment key for root directory for the icarus app pub const ROOT_DIRECTORY: &str = "ROOT_DIRECTORY"; +// Environment key for icarus api url +pub const ICARUS_BASE_API_URL: &str = "ICARUS_BASE_API_URL"; + pub mod error { - pub const DB_URL: &str = "DATABASE_URL must be set in .env"; - pub const SECRET_KEY: &str = "SECRET_KEY must be set in environment file"; - pub const SECRET_MAIN_KEY: &str = "SECRET_MAIN_KEY must not be set in environment file"; - pub const ROOT_DIRECTORY: &str = "ROOT_DIRECTORY must not be set in environment file"; + use const_format::concatcp; + + pub const GENERAL_ERROR: &str = "must not be set in enviornment file"; + pub const DB_URL: &str = concatcp!(super::DB_URL, " ", GENERAL_ERROR); + pub const SECRET_KEY: &str = concatcp!(super::SECRET_KEY, " ", GENERAL_ERROR); + pub const SECRET_MAIN_KEY: &str = concatcp!(super::SECRET_MAIN_KEY, " ", GENERAL_ERROR); + pub const ROOT_DIRECTORY: &str = concatcp!(super::ROOT_DIRECTORY, " ", GENERAL_ERROR); + pub const ICARUS_BASE_API_URL: &str = concatcp!(super::ICARUS_BASE_API_URL, " ", GENERAL_ERROR); } diff --git a/src/lib.rs b/src/lib.rs index 467b8af..5019657 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,17 +1,2 @@ pub mod environment; pub mod keys; - -pub fn add(left: u64, right: u64) -> u64 { - left + right -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } -} diff --git a/tests/test.rs b/tests/test.rs index 3e31a84..b5d39bb 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -1,27 +1,52 @@ - #[cfg(test)] mod tests { #[test] fn test_dburl() { let result = async_std::task::block_on(icarus_envy::environment::get_db_url()); - assert_eq!(result, "postgres://myuser:password@localhost:5432/my_db", "DATABASE_URL does not match {:?}", result); + assert_eq!( + result, "postgres://myuser:password@localhost:5432/my_db", + "DATABASE_URL does not match {:?}", + result + ); } #[test] fn test_get_secret_main_key() { let result = async_std::task::block_on(icarus_envy::environment::get_secret_main_key()); - assert_eq!(result, "Somesupersecretpassword!!!45345435", "SECRET_MAIN_KEY does not match {:?}", result) + assert_eq!( + result, "Somesupersecretpassword!!!45345435", + "SECRET_MAIN_KEY does not match {:?}", + result + ) } #[test] fn test_get_secret_key() { let result = async_std::task::block_on(icarus_envy::environment::get_secret_key()); - assert_eq!(result, "AmIGoodEnoughForYou?", "SECRET_KEY does not match {:?}", result) + assert_eq!( + result, "AmIGoodEnoughForYou?", + "SECRET_KEY does not match {:?}", + result + ) } #[test] fn test_get_root_directory() { let result = async_std::task::block_on(icarus_envy::environment::get_root_directory()); - assert_eq!(result, "/path/to/root", "ROOT_DIRECTORY does not match {:?}", result) + assert_eq!( + result, "/path/to/root", + "ROOT_DIRECTORY does not match {:?}", + result + ) + } + + #[test] + fn test_get_icarus_base_api_url() { + let result = async_std::task::block_on(icarus_envy::environment::get_icarus_base_api_url()); + assert_eq!( + result, "https://icarus.com", + "ICARUS_BASE_API_URL does not match {:?}", + result + ) } }