Move the logic into the server.
Some checks failed
semver Build semver has succeeded
clippy Build clippy has failed
format Build format has succeeded
rust-test Build rust-test has succeeded
build Build build has succeeded

This commit is contained in:
Tom Alexander
2024-09-29 00:48:39 -04:00
parent 0548571b6b
commit 07797b9906
2 changed files with 77 additions and 49 deletions

View File

@@ -22,7 +22,12 @@ use serde::Serialize;
use sha2::Sha256;
use tracing::debug;
use crate::discovery::discover_matching_push_triggers;
use crate::discovery::discover_webhook_bridge_config;
use crate::gitea_client::GiteaClient;
use crate::hook_push::HookPush;
use crate::hook_push::PipelineParamters;
use crate::kubernetes::run_pipelines;
use crate::AppState;
type HmacSha256 = Hmac<Sha256>;
@@ -34,13 +39,18 @@ pub(crate) async fn hook(
) -> (StatusCode, Json<HookResponse>) {
debug!("REQ: {:?}", payload);
match payload {
HookRequest::Push(_payload) => (
StatusCode::OK,
Json(HookResponse {
ok: true,
message: None,
}),
),
HookRequest::Push(webhook_payload) => {
handle_push(state.gitea, state.kubernetes_client, webhook_payload)
.await
.expect("Failed to handle push event.");
(
StatusCode::OK,
Json(HookResponse {
ok: true,
message: None,
}),
)
}
HookRequest::Unrecognized(payload) => (
StatusCode::BAD_REQUEST,
Json(HookResponse {
@@ -153,3 +163,26 @@ fn hex_to_bytes(s: &str) -> Option<Vec<u8>> {
None
}
}
pub(crate) async fn handle_push(
gitea: GiteaClient,
kubernetes_client: kube::Client,
webhook_payload: HookPush,
) -> Result<(), Box<dyn std::error::Error>> {
let repo_owner = webhook_payload.get_repo_owner()?;
let repo_name = webhook_payload.get_repo_name()?;
let pull_base_sha = webhook_payload.get_pull_base_sha()?;
let repo_tree = gitea.get_tree(repo_owner, repo_name, pull_base_sha).await?;
let remote_config = discover_webhook_bridge_config(&gitea, &repo_tree).await?;
let pipelines = discover_matching_push_triggers(
&gitea,
&repo_tree,
&webhook_payload.ref_field,
&remote_config,
)
.await?;
run_pipelines(webhook_payload, pipelines, kubernetes_client).await?;
Ok(())
}