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
101
102
103
104
105
106
107
108
//! A typed representation of the `release-plz` action in a GitHub workflow.
//! Docs: <https://github.com/release-plz/action>
use derive_setters::Setters;
use crate::{Step, Use};
#[derive(Clone, Default, Setters)]
#[setters(strip_option, into)]
pub struct Release {
/// The release-plz command to run. Accepted values: release-pr, release.
/// (By default it runs both commands).
pub command: Option<Command>,
/// Registry where the packages are stored. The registry name needs to be
/// present in the Cargo config. If unspecified, the publish field of the
/// package manifest is used. If the publish field is empty, crates.io is
/// used.
pub registry: Option<String>,
/// Path to the Cargo.toml of the project you want to update. Both Cargo
/// workspaces and single packages are supported. (Defaults to the root
/// directory).
pub manifest_path: Option<String>,
/// Release-plz version to use. E.g. 0.3.70. (Default: latest version).
pub version: Option<String>,
/// Release-plz config file location. (Defaults to release-plz.toml or
/// .release-plz.toml).
pub config: Option<String>,
/// Token used to publish to the cargo registry.
pub token: Option<String>,
/// Forge backend. Valid values: github, gitea. (Defaults to github).
pub backend: Option<Backend>,
}
#[derive(Clone)]
pub enum Command {
/// Create a release PR.
/// See: <https://release-plz.ieni.dev/docs/usage/release-pr>
ReleasePR,
/// Release the package.
/// See: <https://release-plz.ieni.dev/docs/usage/release>
Release,
}
impl std::fmt::Display for Command {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::ReleasePR => write!(f, "release-pr"),
Self::Release => write!(f, "release"),
}
}
}
#[derive(Clone)]
pub enum Backend {
GitHub,
Gitea,
}
impl std::fmt::Display for Backend {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::GitHub => write!(f, "github"),
Self::Gitea => write!(f, "gitea"),
}
}
}
impl From<Release> for Step<Use> {
fn from(value: Release) -> Self {
let mut step = Step::new("Release Plz").uses("release-plz", "action", "v0.5");
if let Some(command) = value.command {
step = step.add_with(("command", command.to_string()));
}
if let Some(registry) = value.registry {
step = step.add_with(("registry", registry));
}
if let Some(manifest_path) = value.manifest_path {
step = step.add_with(("manifest_path", manifest_path));
}
if let Some(version) = value.version {
step = step.add_with(("version", version));
}
if let Some(config) = value.config {
step = step.add_with(("config", config));
}
if let Some(token) = value.token {
step = step.add_with(("token", token));
}
if let Some(backend) = value.backend {
step = step.add_with(("backend", backend.to_string()));
}
step
}
}