From dd5ec8a5be814aa1b9466a03092884a259795e12 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 12:45:14 -0400 Subject: [PATCH 1/9] ci: Added release worklfow --- .gitea/workflows/release.yml | 58 ++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .gitea/workflows/release.yml diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..eb7583c --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,58 @@ +name: labyrinth release Tagging + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + release: + runs-on: ubuntu-24.04 + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 0 # Important for git describe --tags + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: 1.97 + components: cargo + - uses: Swatinem/rust-cache@v2 + + - name: Extract Version from Cargo.toml + id: version + run: | + VERSION=$(grep '^version = "' Cargo.toml | sed -E 's/version = "([^"]+)"/\1/') + PROJECT_COMMIT_HASH=$(git rev-parse HEAD | cut -c 1-10) + BRANCH_REF="${{ gitea.ref }}" + BRANCH_NAME=$(echo "$BRANCH_REF" | cut -d '/' -f 3) + PROJECT_TAG_RELEASE="v$VERSION-$BRANCH_NAME-$PROJECT_COMMIT_HASH-928" + + echo "::set-output name=project_tag_release::$PROJECT_TAG_RELEASE" + + echo "Version: $VERSION" + echo "Hash: $PROJECT_COMMIT_HASH" + echo "Branh ref: $BRANCH_REF" + echo "Branch: $BRANCH_NAME" + echo "Tag Release: $PROJECT_TAG_RELEASE" + + - name: Print version + id: Version + run: | + echo "Printing version" + echo "Version: ${{ steps.version.outputs.project_tag_release }}" + + - name: Create GitHub Release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.version.outputs.project_tag_release }} + release_name: Release ${{ steps.version.outputs.project_tag_release }} + body: | + Release of version ${{ steps.version.outputs.project_tag_release }} -- 2.47.3 From 0f5730f242559150f1a6f35a82f91f4ba9b843ae Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 12:45:24 -0400 Subject: [PATCH 2/9] Making it more flexible --- src/config.rs | 3 +++ src/lib.rs | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/config.rs b/src/config.rs index 4f9f91f..85fce82 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,5 +1,8 @@ +#[derive(Default)] pub struct Config { pub url: String, pub bucket: String, pub region: String, + pub access_key_id: String, + pub secret_key: String } diff --git a/src/lib.rs b/src/lib.rs index d88d247..e2efec5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,7 @@ pub mod config; +use aws_sdk_s3::config::{Credentials, Region}; + #[derive(Default)] pub struct Data { pub filepath: String, @@ -25,7 +27,24 @@ impl Labyrinth { file_key: &str, data: &Data, ) -> Result { - let config = aws_config::load_from_env().await; + // 1. Create credentials + let credentials = Credentials::new( + self.config.access_key_id.clone(), + self.config.secret_key.clone(), + None, // session_token - None for long-term credentials + None, // expires_after - None for long-term credentials + "maze", // provider_name - just a label + ); + + // 2. Create region + let region = Region::new(self.config.region.to_string()); + let config = aws_config::from_env() + .region(region) + .credentials_provider(credentials) + .load() + .await; + + // let config = aws_config::load_from_env().await; let client = aws_sdk_s3::Client::new(&config); let data_content = if data.raw_data.is_empty() { -- 2.47.3 From 944b6f9c751fe341e51ad180f69360833c1a0fef Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 12:45:32 -0400 Subject: [PATCH 3/9] Cleanup --- src/config.rs | 2 +- src/lib.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/config.rs b/src/config.rs index 85fce82..a93b0b9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -4,5 +4,5 @@ pub struct Config { pub bucket: String, pub region: String, pub access_key_id: String, - pub secret_key: String + pub secret_key: String, } diff --git a/src/lib.rs b/src/lib.rs index e2efec5..cca6550 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,11 +31,11 @@ impl Labyrinth { let credentials = Credentials::new( self.config.access_key_id.clone(), self.config.secret_key.clone(), - None, // session_token - None for long-term credentials - None, // expires_after - None for long-term credentials + None, // session_token - None for long-term credentials + None, // expires_after - None for long-term credentials "maze", // provider_name - just a label ); - + // 2. Create region let region = Region::new(self.config.region.to_string()); let config = aws_config::from_env() -- 2.47.3 From 08e50b132f969235e4b0188b156ef41e9f540775 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 12:50:19 -0400 Subject: [PATCH 4/9] Adding Debug trait to Error --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index cca6550..4fe36f4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ pub async fn load_data(filepath: &str) -> Result, std::io::Error> { tokio::fs::read(filepath).await } +#[derive(Debug)] pub enum Error { Info(String), SError(aws_sdk_s3::operation::put_object::PutObjectError), -- 2.47.3 From 37d08d54fac164123b155ec2dca87e24a96c39dc Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 13:04:20 -0400 Subject: [PATCH 5/9] Adding endpoint url --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index 4fe36f4..e9b8d83 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,6 +42,7 @@ impl Labyrinth { let config = aws_config::from_env() .region(region) .credentials_provider(credentials) + .endpoint_url(self.config.url.clone()) .load() .await; -- 2.47.3 From e9cb1f6c459208aff94cad20aedf458abbb43c5c Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 16:59:22 -0400 Subject: [PATCH 6/9] Maybe this --- src/lib.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index e9b8d83..56fbac7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,8 +46,13 @@ impl Labyrinth { .load() .await; + let s3_config = aws_sdk_s3::config::Builder::from(&config) + .force_path_style(true) // 👈 CRITICAL for Garage/MinIO/LocalStack + .build(); + // let config = aws_config::load_from_env().await; - let client = aws_sdk_s3::Client::new(&config); + // let client = aws_sdk_s3::Client::new(&config); + let client = aws_sdk_s3::Client::from_conf(s3_config); let data_content = if data.raw_data.is_empty() { match load_data(&data.filepath).await { -- 2.47.3 From 742393c25b73aa73dce963cb6b4a740e64b93051 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 17:00:57 -0400 Subject: [PATCH 7/9] Adding Debug traits --- src/config.rs | 2 +- src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config.rs b/src/config.rs index a93b0b9..7fae560 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,4 @@ -#[derive(Default)] +#[derive(Debug, Default)] pub struct Config { pub url: String, pub bucket: String, diff --git a/src/lib.rs b/src/lib.rs index 56fbac7..8c55fb8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ pub mod config; use aws_sdk_s3::config::{Credentials, Region}; -#[derive(Default)] +#[derive(Debug, Default)] pub struct Data { pub filepath: String, pub raw_data: Vec, -- 2.47.3 From c7e85b36644a977d6bf3806865cafdc2c97e7c10 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 17:47:39 -0400 Subject: [PATCH 8/9] Refactoring code --- src/lib.rs | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 8c55fb8..11270d3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,31 @@ pub async fn load_data(filepath: &str) -> Result, std::io::Error> { tokio::fs::read(filepath).await } +pub async fn init_client(config: &config::Config) -> aws_sdk_s3::Client { + let credentials = Credentials::new( + config.access_key_id.clone(), + config.secret_key.clone(), + None, + None, + "maze", + ); + + let region = Region::new(config.region.to_string()); + let config = aws_config::from_env() + .region(region) + .credentials_provider(credentials) + .endpoint_url(config.url.clone()) + .load() + .await; + + let s3_config = aws_sdk_s3::config::Builder::from(&config) + .force_path_style(true) + .build(); + + let client = aws_sdk_s3::Client::from_conf(s3_config); + client +} + #[derive(Debug)] pub enum Error { Info(String), @@ -28,32 +53,7 @@ impl Labyrinth { file_key: &str, data: &Data, ) -> Result { - // 1. Create credentials - let credentials = Credentials::new( - self.config.access_key_id.clone(), - self.config.secret_key.clone(), - None, // session_token - None for long-term credentials - None, // expires_after - None for long-term credentials - "maze", // provider_name - just a label - ); - - // 2. Create region - let region = Region::new(self.config.region.to_string()); - let config = aws_config::from_env() - .region(region) - .credentials_provider(credentials) - .endpoint_url(self.config.url.clone()) - .load() - .await; - - let s3_config = aws_sdk_s3::config::Builder::from(&config) - .force_path_style(true) // 👈 CRITICAL for Garage/MinIO/LocalStack - .build(); - - // let config = aws_config::load_from_env().await; - // let client = aws_sdk_s3::Client::new(&config); - let client = aws_sdk_s3::Client::from_conf(s3_config); - + let client = init_client(&self.config).await; let data_content = if data.raw_data.is_empty() { match load_data(&data.filepath).await { Ok(content) => content, -- 2.47.3 From 84f98521c8c98693e422db48eb0aa7c124c2586b Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 6 Aug 2026 17:48:00 -0400 Subject: [PATCH 9/9] bump: labyrinth --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index af05a15..16c1c34 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1370,7 +1370,7 @@ dependencies = [ [[package]] name = "labyrinth" -version = "0.0.1" +version = "0.0.2" dependencies = [ "aws-config", "aws-sdk-s3", diff --git a/Cargo.toml b/Cargo.toml index e62f667..4c34a54 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "labyrinth" -version = "0.0.1" +version = "0.0.2" edition = "2024" license = "MIT" description = "Library for managing soaricarus storage" -- 2.47.3