1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::super::{PostPublishPollConfig, StringOrBool, deserialize_string_or_bool_opt};
use super::{CommitAuthorConfig, RepositoryConfig};
// ---------------------------------------------------------------------------
// WingetConfig
// ---------------------------------------------------------------------------
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct WingetConfig {
/// Override the package name (default: crate name).
pub name: Option<String>,
/// Package name as displayed (default: same as name).
pub package_name: Option<String>,
/// WinGet package identifier (e.g. "Publisher.AppName"). Auto-generated if empty.
pub package_identifier: Option<String>,
/// Publisher name (required).
pub publisher: Option<String>,
/// Publisher homepage URL shown in the WinGet manifest.
pub publisher_url: Option<String>,
/// Publisher support URL.
pub publisher_support_url: Option<String>,
/// Privacy policy URL.
pub privacy_url: Option<String>,
/// Author name.
pub author: Option<String>,
/// Copyright notice.
pub copyright: Option<String>,
/// Copyright URL.
pub copyright_url: Option<String>,
/// License identifier (required, e.g. "MIT").
pub license: Option<String>,
/// License URL.
pub license_url: Option<String>,
/// Short description (required, max 256 chars).
pub short_description: Option<String>,
/// Full package description displayed in the WinGet gallery.
pub description: Option<String>,
/// Project homepage URL.
pub homepage: Option<String>,
/// Custom URL template for download URLs (overrides release URL).
pub url_template: Option<String>,
/// Build IDs filter: only include artifacts whose `id` is in this list.
pub ids: Option<Vec<String>>,
/// Skip publishing. `"true"` always skips; `"auto"` skips for prereleases.
/// Accepts bool or template string.
#[serde(deserialize_with = "deserialize_string_or_bool_opt", default)]
pub skip_upload: Option<StringOrBool>,
/// Custom commit message template.
pub commit_msg_template: Option<String>,
/// Manifest file path (auto-generated if empty from publisher/name/version).
pub path: Option<String>,
/// Release notes for this version.
pub release_notes: Option<String>,
/// URL to full release notes.
pub release_notes_url: Option<String>,
/// Post-install notes shown to the user.
pub installation_notes: Option<String>,
/// Tags for package discovery (lowercased, spaces→hyphens).
pub tags: Option<Vec<String>>,
/// Package dependencies.
pub dependencies: Option<Vec<WingetDependency>>,
/// Unified repository config with branch, token, PR, git SSH support.
/// (Replaces the legacy `manifests_repo: WingetManifestsRepoConfig`.)
pub repository: Option<RepositoryConfig>,
/// Commit author with optional signing.
pub commit_author: Option<CommitAuthorConfig>,
/// Product code for the installer (used in Add/Remove Programs).
pub product_code: Option<String>,
/// Artifact selection: "archive" (default), "msi", or "nsis".
#[serde(rename = "use")]
pub use_artifact: Option<String>,
/// amd64 microarchitecture variant filter (e.g. "v1", "v2", "v3", "v4").
/// Only artifacts matching this variant are included. Default: "v1".
pub amd64_variant: Option<String>,
/// Post-publish PR-validation polling settings. When unset, polling runs
/// with defaults (enabled, 30s interval, 30m timeout). Polling can be
/// disabled globally via `--no-post-publish-poll`.
pub post_publish_poll: Option<PostPublishPollConfig>,
/// When true, force-push the updated manifest to the existing PR branch
/// when a PR for the same head branch already exists. The PR content is
/// updated in place rather than creating a duplicate. When false (default),
/// the push is skipped and a warning is emitted so the operator sees that
/// the publisher did not update the PR.
#[serde(deserialize_with = "deserialize_string_or_bool_opt", default)]
pub update_existing_pr: Option<StringOrBool>,
}
/// WinGet package dependency.
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct WingetDependency {
/// WinGet package identifier of the dependency (e.g., "Publisher.App").
pub package_identifier: String,
/// Minimum required version of the dependency.
pub minimum_version: Option<String>,
}