Skip to content

Commit 4ab3385

Browse files
committed
feat: Update Extractor download to support Zips
1 parent ae6698b commit 4ab3385

3 files changed

Lines changed: 56 additions & 35 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
.env
22
run.sh
3+
/app.*
34
target/
45
extractors/
56
db-*/

Cargo.lock

Lines changed: 24 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/extractors.rs

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
//! CodeQL Extractor Fetcher
12
use std::{os::unix::fs::PermissionsExt, path::PathBuf};
2-
33
use anyhow::{Context, Result};
4-
use ghactions_core::{repository::reference::RepositoryReference as Repository, toolcache::tool};
4+
use ghactions_core::repository::reference::RepositoryReference as Repository;
55
use octocrab::models::repos::{Asset, Release};
66

77
async fn fetch_releases(client: &octocrab::Octocrab, repository: &Repository) -> Result<Release> {
@@ -35,32 +35,51 @@ pub async fn fetch_extractor(
3535
output: &PathBuf,
3636
) -> Result<PathBuf> {
3737
let extractor_tarball = output.join(format!("{}.tar.gz", &repository.name));
38+
let extractor_zip = output.join(format!("{}.zip", &repository.name));
39+
3840
log::debug!("Extractor Tarball :: {extractor_tarball:?}");
3941
let extractor_pack = output.join(&repository.name);
4042

4143
log::info!("Extractor Path :: {extractor_pack:?}");
4244

4345
let toolcache = ghactions::ToolCache::new();
4446

45-
if !extractor_tarball.exists() {
47+
let extractor_archive = if !extractor_tarball.exists() && !extractor_zip.exists() {
4648
log::info!("Downloading asset to {extractor_tarball:?}");
4749

4850
let release = fetch_releases(client, repository).await?;
4951

50-
let Some(release_asset) = release.assets.iter().find(|a| a.name.ends_with(".tar.gz"))
51-
else {
52-
return Err(anyhow::anyhow!("No asset found"));
52+
let (release_asset, file_format) = match release.assets.iter().find(|a| a.name.ends_with(".tar.gz") || a.name.ends_with(".zip")) {
53+
Some(asset) if asset.name.ends_with(".tar.gz") => (asset, "tar"),
54+
Some(asset) if asset.name.ends_with(".zip") => (asset, "zip"),
55+
_ => {
56+
return Err(anyhow::anyhow!("No suitable asset found for extractor"));
57+
}
5358
};
5459
log::info!("Asset URL :: {}", release_asset.browser_download_url);
5560

5661
let asset: Asset = client.get(release_asset.url.clone(), None::<&()>).await?;
5762

63+
64+
let extractor_archive = if file_format == "tar" {
65+
extractor_tarball.clone()
66+
} else {
67+
extractor_zip.clone()
68+
};
69+
5870
toolcache
59-
.download_asset(&asset, &extractor_tarball)
71+
.download_asset(&asset, &extractor_archive)
6072
.await
6173
.context(format!("Extractor Archive: {extractor_tarball:?}"))
6274
.context("Failed to download extractor")?;
63-
}
75+
extractor_archive
76+
} else {
77+
if extractor_tarball.exists() {
78+
extractor_tarball.clone()
79+
} else {
80+
extractor_zip.clone()
81+
}
82+
};
6483

6584
if attest {
6685
log::info!("Attesting asset {extractor_tarball:?}");
@@ -85,11 +104,13 @@ pub async fn fetch_extractor(
85104
log::info!("No attestation requested");
86105
}
87106

107+
log::debug!("Extractor Archive :: {extractor_archive:?}");
108+
88109
if !extractor_pack.exists() {
89110
log::info!("Extracting asset to {extractor_pack:?}");
90111

91112
toolcache
92-
.extract_archive(&extractor_tarball, &extractor_pack)
113+
.extract_archive(&extractor_archive, &extractor_pack)
93114
.await
94115
.context(format!("Extractor Archive: {extractor_tarball:?}"))
95116
.context("Failed to extract extractor")?;
@@ -103,6 +124,7 @@ pub async fn fetch_extractor(
103124
)? {
104125
match glob {
105126
Ok(path) => {
127+
// TODO: Load and check the extractor configuration
106128
log::debug!("Extractor Path :: {path:?}");
107129
let full_path = path.parent().unwrap().to_path_buf().canonicalize()?;
108130
// Linux and Macos

0 commit comments

Comments
 (0)