Skip to content

Commit b7d5e14

Browse files
committed
Initial support for custom packages
Related to #25 Needs testing
1 parent d687703 commit b7d5e14

File tree

2 files changed

+122
-89
lines changed

2 files changed

+122
-89
lines changed

src/bin/renconstruct.rs

+100-66
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ use anyhow::{anyhow, Result};
22
use clap::{Parser, Subcommand};
33
use itertools::Itertools;
44
use jwalk::WalkDir;
5-
use renkit::renconstruct::config::{Config, CustomOptionValue, TaskOptions};
5+
use renkit::renconstruct::config::{
6+
BuildOption, Config, CustomOptionValue, KnownBuildOption, TaskOptions,
7+
};
68
use renkit::renconstruct::tasks::{
79
task_convert_images_pre, task_keystore_post, task_keystore_pre, task_lint_pre,
810
task_notarize_post, Task, TaskContext,
@@ -81,32 +83,41 @@ async fn build(
8183
return Err(anyhow!("Input directory does not exist"));
8284
}
8385

84-
if !config.build.pc
85-
&& !config.build.win
86-
&& !config.build.linux
87-
&& !config.build.mac
88-
&& !config.build.web
89-
&& !config.build.steam
90-
&& !config.build.market
91-
&& !config.build.android_apk
92-
&& !config.build.android_aab
93-
{
86+
if config.builds.is_empty() {
9487
return Err(anyhow!("No build options enabled"));
9588
}
9689

97-
if config.build.web && config.renutil.version < Version::from_str("8.2.0").unwrap() {
90+
if *config
91+
.builds
92+
.get(&BuildOption::Known(KnownBuildOption::Web))
93+
.unwrap_or(&false)
94+
&& config.renutil.version < Version::from_str("8.2.0").unwrap()
95+
{
9896
return Err(anyhow!(
9997
"Web build support requires Ren'Py 8.2.0 or higher."
10098
));
10199
}
102100

103-
if config.build.android_aab && config.renutil.version < Version::from_str("7.5.0").unwrap() {
101+
if *config
102+
.builds
103+
.get(&BuildOption::Known(KnownBuildOption::AndroidAab))
104+
.unwrap_or(&false)
105+
&& config.renutil.version < Version::from_str("7.5.0").unwrap()
106+
{
104107
return Err(anyhow!(
105108
"Android App Bundle build support requires Ren'Py 7.5.0 or higher."
106109
));
107110
}
108111

109-
if config.build.android_apk || config.build.android_aab {
112+
if *config
113+
.builds
114+
.get(&BuildOption::Known(KnownBuildOption::AndroidApk))
115+
.unwrap_or(&false)
116+
|| *config
117+
.builds
118+
.get(&BuildOption::Known(KnownBuildOption::AndroidAab))
119+
.unwrap_or(&false)
120+
{
110121
let has_keystore_task = config
111122
.tasks
112123
.iter()
@@ -154,32 +165,28 @@ async fn build(
154165
let mut active_builds = {
155166
let mut active_builds = HashSet::<String>::new();
156167

157-
if config.build.pc {
158-
active_builds.insert("pc".into());
159-
}
160-
if config.build.win {
161-
active_builds.insert("win".into());
162-
}
163-
if config.build.linux {
164-
active_builds.insert("linux".into());
165-
}
166-
if config.build.mac {
167-
active_builds.insert("mac".into());
168-
}
169-
if config.build.web {
170-
active_builds.insert("web".into());
171-
}
172-
if config.build.steam {
173-
active_builds.insert("steam".into());
174-
}
175-
if config.build.market {
176-
active_builds.insert("market".into());
177-
}
178-
if config.build.android_apk {
179-
active_builds.insert("android_apk".into());
180-
}
181-
if config.build.android_aab {
182-
active_builds.insert("android_aab".into());
168+
for (build, enabled) in &config.builds {
169+
if !enabled {
170+
continue;
171+
}
172+
match build {
173+
BuildOption::Known(KnownBuildOption::Pc) => active_builds.insert("pc".into()),
174+
BuildOption::Known(KnownBuildOption::Win) => active_builds.insert("win".into()),
175+
BuildOption::Known(KnownBuildOption::Linux) => active_builds.insert("linux".into()),
176+
BuildOption::Known(KnownBuildOption::Mac) => active_builds.insert("mac".into()),
177+
BuildOption::Known(KnownBuildOption::Web) => active_builds.insert("web".into()),
178+
BuildOption::Known(KnownBuildOption::Steam) => active_builds.insert("steam".into()),
179+
BuildOption::Known(KnownBuildOption::Market) => {
180+
active_builds.insert("market".into())
181+
}
182+
BuildOption::Known(KnownBuildOption::AndroidApk) => {
183+
active_builds.insert("android_apk".into())
184+
}
185+
BuildOption::Known(KnownBuildOption::AndroidAab) => {
186+
active_builds.insert("android_aab".into())
187+
}
188+
BuildOption::Custom(s) => active_builds.insert(s.into()),
189+
};
183190
}
184191

185192
active_builds
@@ -358,7 +365,11 @@ async fn build(
358365
};
359366
}
360367

361-
if config.build.android_apk {
368+
if *config
369+
.builds
370+
.get(&BuildOption::Known(KnownBuildOption::AndroidApk))
371+
.unwrap_or(&false)
372+
{
362373
println!("Building Android APK package.");
363374
active_builds.remove("android_apk");
364375
if config.renutil.version >= Version::from_str("7.5.0").unwrap() {
@@ -401,7 +412,11 @@ async fn build(
401412
}
402413
}
403414

404-
if config.build.android_aab {
415+
if *config
416+
.builds
417+
.get(&BuildOption::Known(KnownBuildOption::AndroidAab))
418+
.unwrap_or(&false)
419+
{
405420
println!("Building Android App Bundle package.");
406421
active_builds.remove("android_aab");
407422
if config.renutil.version >= Version::from_str("7.5.0").unwrap() {
@@ -426,7 +441,11 @@ async fn build(
426441
}
427442
}
428443

429-
if config.build.web {
444+
if *config
445+
.builds
446+
.get(&BuildOption::Known(KnownBuildOption::Web))
447+
.unwrap_or(&false)
448+
{
430449
println!("Building Web package.");
431450
active_builds.remove("web");
432451

@@ -464,29 +483,44 @@ async fn build(
464483
"--destination".into(),
465484
output_dir.to_string_lossy().to_string(),
466485
];
467-
if config.build.pc {
468-
args.push("--package".into());
469-
args.push("pc".into());
470-
}
471-
if config.build.win {
472-
args.push("--package".into());
473-
args.push("win".into());
474-
}
475-
if config.build.linux {
476-
args.push("--package".into());
477-
args.push("linux".into());
478-
}
479-
if config.build.mac {
480-
args.push("--package".into());
481-
args.push("mac".into());
482-
}
483-
if config.build.steam {
484-
args.push("--package".into());
485-
args.push("steam".into());
486-
}
487-
if config.build.market {
488-
args.push("--package".into());
489-
args.push("market".into());
486+
487+
for (build, enabled) in config.builds {
488+
if !enabled {
489+
continue;
490+
}
491+
match build {
492+
BuildOption::Known(KnownBuildOption::Pc) => {
493+
args.push("--package".into());
494+
args.push("pc".into());
495+
}
496+
BuildOption::Known(KnownBuildOption::Win) => {
497+
args.push("--package".into());
498+
args.push("win".into());
499+
}
500+
BuildOption::Known(KnownBuildOption::Linux) => {
501+
args.push("--package".into());
502+
args.push("linux".into());
503+
}
504+
BuildOption::Known(KnownBuildOption::Mac) => {
505+
args.push("--package".into());
506+
args.push("mac".into());
507+
}
508+
BuildOption::Known(KnownBuildOption::Web) => continue,
509+
BuildOption::Known(KnownBuildOption::Steam) => {
510+
args.push("--package".into());
511+
args.push("steam".into());
512+
}
513+
BuildOption::Known(KnownBuildOption::Market) => {
514+
args.push("--package".into());
515+
args.push("market".into());
516+
}
517+
BuildOption::Known(KnownBuildOption::AndroidApk) => continue,
518+
BuildOption::Known(KnownBuildOption::AndroidAab) => continue,
519+
BuildOption::Custom(s) => {
520+
args.push("--package".into());
521+
args.push(s);
522+
}
523+
};
490524
}
491525

492526
launch(

src/renconstruct/config.rs

+22-23
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,30 @@ pub struct GeneralTaskOptions {
144144
pub options: TaskOptions,
145145
}
146146

147+
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
148+
#[serde(untagged)]
149+
pub enum BuildOption {
150+
Known(KnownBuildOption),
151+
Custom(String),
152+
}
153+
154+
#[derive(Debug, Deserialize, Hash, PartialEq, Eq)]
155+
#[serde(rename_all = "snake_case")]
156+
pub enum KnownBuildOption {
157+
Pc,
158+
Win,
159+
Linux,
160+
Mac,
161+
Web,
162+
Steam,
163+
Market,
164+
AndroidApk,
165+
AndroidAab,
166+
}
167+
147168
#[derive(Debug, Deserialize)]
148169
pub struct Config {
149-
pub build: BuildOptions,
170+
pub builds: HashMap<BuildOption, bool>,
150171
#[serde(default)]
151172
pub options: RenconstructOptions,
152173
pub renutil: RenutilOptions,
@@ -168,25 +189,3 @@ pub struct RenutilOptions {
168189
#[serde(default)]
169190
pub update_pickle: bool,
170191
}
171-
172-
#[derive(Debug, Deserialize)]
173-
pub struct BuildOptions {
174-
#[serde(default)]
175-
pub pc: bool,
176-
#[serde(default)]
177-
pub win: bool,
178-
#[serde(default)]
179-
pub linux: bool,
180-
#[serde(default)]
181-
pub mac: bool,
182-
#[serde(default)]
183-
pub web: bool,
184-
#[serde(default)]
185-
pub steam: bool,
186-
#[serde(default)]
187-
pub market: bool,
188-
#[serde(default)]
189-
pub android_apk: bool,
190-
#[serde(default)]
191-
pub android_aab: bool,
192-
}

0 commit comments

Comments
 (0)