dxm_artifacts/
github.rs

1//! GitHub-specific code for finding information about any FXServer version.
2
3use reqwest::blocking::Client;
4use serde::Deserialize;
5
6const GITHUB_TAG_REF_API_URL: &str =
7    "https://api.github.com/repos/citizenfx/fivem/git/ref/tags/v1.0.0.{version}";
8
9#[derive(Deserialize)]
10struct Ref {
11    object: RefObject,
12}
13
14#[derive(Deserialize)]
15struct RefObject {
16    url: String,
17}
18
19#[derive(Deserialize)]
20struct Tag {
21    object: TagObject,
22}
23
24#[derive(Deserialize)]
25struct TagObject {
26    sha: String,
27}
28
29/// Fetches and returns the git commit SHA using the given FXServer version.
30pub fn get_version_commit_sha<S>(client: &Client, version: S) -> Result<String, reqwest::Error>
31where
32    S: AsRef<str>,
33{
34    let version = version.as_ref();
35
36    log::trace!("getting github tag ref");
37    let ref_url = GITHUB_TAG_REF_API_URL.replace("{version}", version);
38    let github_ref = client.get(ref_url).send()?.json::<Ref>()?;
39
40    log::trace!("getting github tag");
41    let tag_url = github_ref.object.url;
42    let github_tag = client.get(tag_url).send()?.json::<Tag>()?;
43
44    Ok(github_tag.object.sha)
45}