From a3901c7a8e44d0abe0006c0b820e6642f447a7a7 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 8 Aug 2026 13:27:10 -0400 Subject: [PATCH] Try it (#1) Reviewed-on: http://git.kundeng.us/phoenix/labyrinth/pulls/1 --- .gitea/workflows/release.yml | 58 ++++++++++++++++++++++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- src/config.rs | 3 ++ src/lib.rs | 34 ++++++++++++++++++--- 5 files changed, 93 insertions(+), 6 deletions(-) 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 }} 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" diff --git a/src/config.rs b/src/config.rs index 4f9f91f..7fae560 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,5 +1,8 @@ +#[derive(Debug, 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..11270d3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,8 @@ pub mod config; -#[derive(Default)] +use aws_sdk_s3::config::{Credentials, Region}; + +#[derive(Debug, Default)] pub struct Data { pub filepath: String, pub raw_data: Vec, @@ -14,6 +16,32 @@ 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), SError(aws_sdk_s3::operation::put_object::PutObjectError), @@ -25,9 +53,7 @@ impl Labyrinth { file_key: &str, data: &Data, ) -> Result { - let config = aws_config::load_from_env().await; - let client = aws_sdk_s3::Client::new(&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,