build(deps): bump taiki-e/install-action from 2.87.12 to 2.87.13 (#882) Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.87.12 to 2.87.13. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/taiki-e/install-action/releases">taiki-e/install-action's releases</a>.</em></p> <blockquote> <h2>2.87.13</h2> <ul> <li> <p>Update <code>zola@latest</code> to 0.23.6.</p> </li> <li> <p>Update <code>vacuum@latest</code> to 0.30.5.</p> </li> <li> <p>Update <code>tombi@latest</code> to 1.5.5.</p> </li> <li> <p>Update <code>release-plz@latest</code> to 0.3.167.</p> </li> <li> <p>Update <code>protoc-gen-connect-openapi@latest</code> to 0.27.2.</p> </li> <li> <p>Update <code>prek@latest</code> to 0.5.3.</p> </li> <li> <p>Update <code>osv-scanner@latest</code> to 2.6.0.</p> </li> <li> <p>Update <code>mise@latest</code> to 2026.9.7.</p> </li> <li> <p>Update <code>kache@latest</code> to 0.21.0.</p> </li> <li> <p>Update <code>cargo-leptos@latest</code> to 0.3.8.</p> </li> <li> <p>Update <code>cargo-auditable@latest</code> to 0.7.6.</p> </li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md">taiki-e/install-action's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <p>All notable changes to this project will be documented in this file.</p> <p>This project adheres to <a href="https://semver.org">Semantic Versioning</a>.</p> <!-- raw HTML omitted --> <h2>[Unreleased]</h2> <h2>[2.87.17] - 2026-09-20</h2> <ul> <li> <p>Update <code>uv@latest</code> to 0.12.17.</p> </li> <li> <p>Update <code>release-plz@latest</code> to 0.3.169.</p> </li> <li> <p>Update <code>kingfisher@latest</code> to 2.5.0.</p> </li> <li> <p>Update <code>kache@latest</code> to 0.25.0.</p> </li> <li> <p>Update <code>git-cliff@latest</code> to 2.14.2.</p> </li> <li> <p>Update <code>cargo-tarpaulin@latest</code> to 0.37.3.</p> </li> <li> <p>Update <code>cargo-leptos@latest</code> to 0.3.9.</p> </li> </ul> <h2>[2.87.16] - 2026-09-19</h2> <ul> <li> <p>Update <code>uv@latest</code> to 0.12.16.</p> </li> <li> <p>Update <code>release-plz@latest</code> to 0.3.168.</p> </li> <li> <p>Update <code>protoc@latest</code> to 3.36.2.</p> </li> <li> <p>Update <code>mise@latest</code> to 2026.9.11.</p> </li> </ul> <h2>[2.87.15] - 2026-09-18</h2> <ul> <li> <p>Update <code>syft@latest</code> to 1.52.0.</p> </li> <li> <p>Update <code>mise@latest</code> to 2026.9.10.</p> </li> <li> <p>Update <code>kingfisher@latest</code> to 2.4.0.</p> </li> <li> <p>Update <code>kache@latest</code> to 0.23.1.</p> </li> <li> <p>Update <code>coreutils@latest</code> to 0.12.0.</p> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/taiki-e/install-action/commit/26e9283f268b880168bdbd2c545dfcd60ec2c6ab"><code>26e9283</code></a> Release 2.87.13</li> <li><a href="https://github.com/taiki-e/install-action/commit/04a4a8246c7a2f2eaf87e42293bca7269081db97"><code>04a4a82</code></a> Update <code>zola@latest</code> to 0.23.6</li> <li><a href="https://github.com/taiki-e/install-action/commit/b9c60f15f4eb442f41065a510b0f59af400f446f"><code>b9c60f1</code></a> Update <code>vacuum@latest</code> to 0.30.5</li> <li><a href="https://github.com/taiki-e/install-action/commit/b31d41ab50dced8ea9cf3c57e9d5cc72056195b8"><code>b31d41a</code></a> Update uv manifest</li> <li><a href="https://github.com/taiki-e/install-action/commit/1b200db2bbc6f05645c43889fb464ddf599f8342"><code>1b200db</code></a> Update <code>tombi@latest</code> to 1.5.5</li> <li><a href="https://github.com/taiki-e/install-action/commit/d3a7a77950c0ece9292ebee57d72a8b83d4d352c"><code>d3a7a77</code></a> Update sccache manifest</li> <li><a href="https://github.com/taiki-e/install-action/commit/3e3c2df701b5f6f49f22ed085cd483c3a315a5ad"><code>3e3c2df</code></a> Update <code>release-plz@latest</code> to 0.3.167</li> <li><a href="https://github.com/taiki-e/install-action/commit/d4446731e441b4b4ec4f412c6f953fd4accd114b"><code>d444673</code></a> Update <code>protoc-gen-connect-openapi@latest</code> to 0.27.2</li> <li><a href="https://github.com/taiki-e/install-action/commit/e75a66b87d55a9adef6d69af04b0f69631daf082"><code>e75a66b</code></a> Update <code>prek@latest</code> to 0.5.3</li> <li><a href="https://github.com/taiki-e/install-action/commit/034ed194fcb80aefbc57346f8e914946d777dee6"><code>034ed19</code></a> Update oxfmt manifest</li> <li>Additional commits viewable in <a href="https://github.com/taiki-e/install-action/compare/3f74d7c16a4242f1c95561e98edc25d36adb4375...26e9283f268b880168bdbd2c545dfcd60ec2c6ab">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signing API requests without effort.
Most API is simple. But they could be complicated when they are hidden from complex abstraction. reqsign bring the simple API back: build, sign, send.
The simplest way to use reqsign is with the default signers provided by each service:
use anyhow::Result; use reqsign::aws; #[tokio::main] async fn main() -> Result<()> { // Create a default signer for S3 in us-east-1 // This will automatically: // - Load credentials from environment variables, config files, or IAM roles // - Set up the default HTTP client and file reader let signer = aws::default_signer("s3", "us-east-1"); // Build your request let mut req = http::Request::builder() .method("GET") .uri("https://s3.amazonaws.com/testbucket") .body(()) .unwrap() .into_parts() .0; // Sign the request signer.sign(&mut req, None).await?; // Send the request with your preferred HTTP client println!("Request has been signed!"); Ok(()) }
For more control over the components, you can manually assemble the signer:
use anyhow::Result; use reqsign::{Context, Signer}; use reqsign_aws_v4::{DefaultCredentialProvider, RequestSigner}; use reqsign_file_read_tokio::TokioFileRead; use reqsign_http_send_reqwest::ReqwestHttpSend; #[tokio::main] async fn main() -> Result<()> { // Build your own context with specific implementations let ctx = Context::new() .with_file_read(TokioFileRead) .with_http_send(ReqwestHttpSend::default()) .with_env(reqsign::OsEnv); // Configure credential provider let credential_provider = DefaultCredentialProvider::new(); // Configure request signer for S3 let request_signer = RequestSigner::new("s3", "us-east-1"); // Assemble the signer let signer = Signer::new(ctx, credential_provider, request_signer); // Build and sign the request let mut req = http::Request::builder() .method("GET") .uri("https://s3.amazonaws.com/testbucket") .body(()) .unwrap() .into_parts() .0; // Sign the request signer.sign(&mut req, None).await?; println!("Request has been signed!"); Ok(()) }
You can also customize the default signers using the with_* methods:
use reqsign::aws; use reqsign_aws_v4::StaticCredentialProvider; // Start with default signer and customize specific components let signer = aws::default_signer("s3", "us-east-1") .with_credential_provider(StaticCredentialProvider::new( "my-access-key", "my-secret-key", None, // Optional session token ));
For server applications that already hold an OIDC assertion, see Caller-provided subject tokens.
use reqsign::aws::v4a::{SigningRegionSet, default_signer}; let region_set = SigningRegionSet::new("us-east-1,us-west-2")?; let signer = default_signer("s3", region_set); # Ok::<(), reqsign_core::Error>(())
use reqsign::azure; // Default signer for Azure Storage let signer = azure::default_signer(); // With custom credentials use reqsign_azure_storage::StaticCredentialProvider; let signer = azure::default_signer() .with_credential_provider(StaticCredentialProvider::new( "account-name", "account-key", ));
use reqsign::google; // Default signer for Google Cloud Storage let signer = google::default_signer("storage.googleapis.com");
use reqsign::aliyun; // Default signer for Aliyun OSS let signer = aliyun::default_signer();
reqsign-aliyun-ossreqsign-aws-corereqsign-aws-v4reqsign-aws-v4areqsign-azure-storagereqsign-googlereqsign-huaweicloud-obsreqsign-oraclereqsign-tencent-cosCheck out the CONTRIBUTING.md guide for more details on getting started with contributing to this project.
Submit issues for bug report or asking questions in discussion.
Inspired a lot from:
Licensed under Apache License, Version 2.0.