wip
This commit is contained in:
parent
03a529fc7b
commit
63cff68bdd
21
src/main.rs
21
src/main.rs
@ -3,10 +3,11 @@ mod repo;
|
|||||||
|
|
||||||
use crate::manifest::Manifest;
|
use crate::manifest::Manifest;
|
||||||
use crate::repo::Repo;
|
use crate::repo::Repo;
|
||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, bail, Result};
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use config::{Config, File, FileSourceFile};
|
use config::{Config, File, FileSourceFile};
|
||||||
use log::info;
|
use log::info;
|
||||||
|
use nostr_sdk::{EventBuilder, JsonUtil, Keys};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
#[derive(clap::Parser)]
|
#[derive(clap::Parser)]
|
||||||
@ -53,6 +54,24 @@ async fn main() -> Result<()> {
|
|||||||
{
|
{
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let key = dialoguer::Password::new()
|
||||||
|
.with_prompt("Enter nsec:")
|
||||||
|
.interact()?;
|
||||||
|
|
||||||
|
let key = if let Ok(nsec) = Keys::parse(&key) {
|
||||||
|
nsec
|
||||||
|
} else {
|
||||||
|
bail!("Invalid private key")
|
||||||
|
};
|
||||||
|
|
||||||
|
let ev: EventBuilder = (&manifest).into();
|
||||||
|
|
||||||
|
// create release
|
||||||
|
|
||||||
|
// publish application
|
||||||
|
let ev = ev.build(key.public_key).sign_with_keys(&key)?;
|
||||||
|
info!("{}", ev.as_json());
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use nostr_sdk::{Event, EventBuilder, Kind, Tag};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
@ -14,6 +15,9 @@ pub struct Manifest {
|
|||||||
/// Repo URL
|
/// Repo URL
|
||||||
pub repository: Option<String>,
|
pub repository: Option<String>,
|
||||||
|
|
||||||
|
/// SPDX license code
|
||||||
|
pub license: Option<String>,
|
||||||
|
|
||||||
/// App icon
|
/// App icon
|
||||||
pub icon: Option<String>,
|
pub icon: Option<String>,
|
||||||
|
|
||||||
@ -24,29 +28,32 @@ pub struct Manifest {
|
|||||||
pub tags: Vec<String>,
|
pub tags: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
impl Into<EventBuilder> for &Manifest {
|
||||||
pub enum Platform {
|
fn into(self) -> EventBuilder {
|
||||||
Android {
|
let mut b = EventBuilder::new(
|
||||||
arch: Architecture
|
Kind::Custom(32_267),
|
||||||
},
|
self.description.clone().unwrap_or_default(),
|
||||||
IOS,
|
)
|
||||||
MacOS {
|
.tags([
|
||||||
arch: Architecture
|
Tag::parse(["d", &self.id]).unwrap(),
|
||||||
},
|
Tag::parse(["name", &self.name]).unwrap(),
|
||||||
Windows {
|
]);
|
||||||
arch: Architecture
|
if let Some(icon) = &self.icon {
|
||||||
},
|
b = b.tag(Tag::parse(["icon", icon]).unwrap());
|
||||||
Linux {
|
}
|
||||||
arch: Architecture
|
if let Some(repository) = &self.repository {
|
||||||
},
|
b = b.tag(Tag::parse(["repository", repository]).unwrap());
|
||||||
Web
|
}
|
||||||
}
|
if let Some(license) = &self.license {
|
||||||
|
b = b.tag(Tag::parse(["license", license]).unwrap());
|
||||||
|
}
|
||||||
|
for image in &self.images {
|
||||||
|
b = b.tag(Tag::parse(["image", image]).unwrap());
|
||||||
|
}
|
||||||
|
for tag in &self.tags {
|
||||||
|
b = b.tag(Tag::parse(["t", tag]).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
b
|
||||||
pub enum Architecture {
|
}
|
||||||
ARMv7,
|
|
||||||
ARMv8,
|
|
||||||
X86,
|
|
||||||
AMD64,
|
|
||||||
ARM64
|
|
||||||
}
|
}
|
@ -93,7 +93,9 @@ impl TryFrom<&GithubReleaseArtifact> for RepoArtifact {
|
|||||||
name: value.name.clone(),
|
name: value.name.clone(),
|
||||||
size: value.size,
|
size: value.size,
|
||||||
content_type: value.content_type.clone(),
|
content_type: value.content_type.clone(),
|
||||||
|
platform: Platform::IOS,
|
||||||
location: RepoResource::Remote(value.browser_download_url.clone()),
|
location: RepoResource::Remote(value.browser_download_url.clone()),
|
||||||
|
metadata: (),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::{Path, PathBuf};
|
||||||
use crate::manifest::Manifest;
|
use crate::manifest::Manifest;
|
||||||
use crate::repo::github::GithubRepo;
|
use crate::repo::github::GithubRepo;
|
||||||
use anyhow::{anyhow, bail, Result};
|
use anyhow::{anyhow, bail, Result};
|
||||||
use semver::Version;
|
use semver::Version;
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
mod github;
|
mod github;
|
||||||
|
|
||||||
@ -12,6 +13,34 @@ pub struct RepoArtifact {
|
|||||||
pub size: u64,
|
pub size: u64,
|
||||||
pub location: RepoResource,
|
pub location: RepoResource,
|
||||||
pub content_type: String,
|
pub content_type: String,
|
||||||
|
pub platform: Platform,
|
||||||
|
pub metadata: ArtifactMetadata
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ArtifactMetadata {
|
||||||
|
APK {
|
||||||
|
version_code: u32,
|
||||||
|
min_sdk_version: u32,
|
||||||
|
target_sdk_version: u32,
|
||||||
|
sig_hash: String,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum Platform {
|
||||||
|
Android { arch: Architecture },
|
||||||
|
IOS,
|
||||||
|
MacOS { arch: Architecture },
|
||||||
|
Windows { arch: Architecture },
|
||||||
|
Linux { arch: Architecture },
|
||||||
|
Web,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum Architecture {
|
||||||
|
ARMv7,
|
||||||
|
ARMv8,
|
||||||
|
X86,
|
||||||
|
AMD64,
|
||||||
|
ARM64,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A local/remote location where the artifact is located
|
/// A local/remote location where the artifact is located
|
||||||
@ -49,3 +78,11 @@ impl TryInto<Box<dyn Repo>> for &Manifest {
|
|||||||
Ok(Box::new(GithubRepo::from_url(repo)?))
|
Ok(Box::new(GithubRepo::from_url(repo)?))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn load_artifact_url(url: &str) -> Result<RepoArtifact> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn load_artifact(path: &Path) -> Result<RepoArtifact> {
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user