|
| 1 | +use serde::{Deserialize, Serialize}; |
| 2 | + |
| 3 | +const GITHUB_ACTOR_TYPE_USER: &str = "User"; |
| 4 | +const GITHUB_ACTOR_TYPE_ORGANIZATION: &str = "Organization"; |
| 5 | + |
| 6 | +#[derive(Serialize, Deserialize)] |
| 7 | +pub struct WorkflowData { |
| 8 | + event: WorkflowDataEvent, |
| 9 | +} |
| 10 | + |
| 11 | +#[derive(Serialize, Deserialize)] |
| 12 | +pub struct WorkflowDataEvent { |
| 13 | + repository: WorkflowDataEventRepo, |
| 14 | +} |
| 15 | + |
| 16 | +#[derive(Serialize, Deserialize)] |
| 17 | +pub struct WorkflowDataEventRepo { |
| 18 | + owner: WorkflowDataEventRepoOwner, |
| 19 | +} |
| 20 | + |
| 21 | +#[derive(Serialize, Deserialize)] |
| 22 | +pub struct WorkflowDataEventRepoOwner { |
| 23 | + login: String, |
| 24 | + #[serde(rename = "type")] |
| 25 | + kind: String, |
| 26 | +} |
| 27 | + |
| 28 | +pub(crate) fn get_actions_event_data() -> color_eyre::Result<WorkflowData> { |
| 29 | + let github_context = std::env::var("GITHUB_CONTEXT")?; |
| 30 | + let workflow_data: WorkflowData = serde_json::from_str::<WorkflowData>(&github_context)?; |
| 31 | + |
| 32 | + Ok(workflow_data) |
| 33 | +} |
| 34 | + |
| 35 | +pub(crate) fn print_unauthenticated_error() { |
| 36 | + let mut msg = "::error title=FlakeHub registration required.::Unable to authenticate to FlakeHub. Individuals must register at FlakeHub.com; Organizations must create an organization at FlakeHub.com.".to_string(); |
| 37 | + if let Ok(workflow_data) = get_actions_event_data() { |
| 38 | + let owner = workflow_data.event.repository.owner; |
| 39 | + if owner.kind == GITHUB_ACTOR_TYPE_USER { |
| 40 | + msg = format!( |
| 41 | + "::error title=FlakeHub registration required.::Please create an account for {} on FlakeHub.com to publish flakes.", |
| 42 | + &owner.login |
| 43 | + ); |
| 44 | + } else if owner.kind == GITHUB_ACTOR_TYPE_ORGANIZATION { |
| 45 | + msg = format!( |
| 46 | + "::error title=FlakeHub registration required.::Please create an organization for {} on FlakeHub.com to publish flakes.", |
| 47 | + &owner.login |
| 48 | + ); |
| 49 | + } |
| 50 | + }; |
| 51 | + println!("{}", msg); |
| 52 | +} |
0 commit comments