Add JetBrains IDE plugin update steps (#1103)
* Add JetBrains IDE plugin update steps * Improve comment consistency * Add comments for missing Windows-only IDEs * Fix typo Co-authored-by: SteveLauC <stevelauc@outlook.com> * Fix missing "plugins" in Android Studio step name Co-authored-by: SteveLauC <stevelauc@outlook.com> * Add breaking change to BREAKINGCHANGES_dev.md --------- Co-authored-by: SteveLauC <stevelauc@outlook.com>
This commit is contained in:
@@ -52,6 +52,7 @@ pub type Commands = BTreeMap<String, String>;
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
pub enum Step {
|
||||
AM,
|
||||
AndroidStudio,
|
||||
AppMan,
|
||||
Aqua,
|
||||
Asdf,
|
||||
@@ -99,7 +100,23 @@ pub enum Step {
|
||||
Helix,
|
||||
Helm,
|
||||
HomeManager,
|
||||
JetBrainsToolbox,
|
||||
// These names are miscapitalized on purpose, so the CLI name is
|
||||
// `jetbrains_pycharm` instead of `jet_brains_py_charm`.
|
||||
JetbrainsAqua,
|
||||
JetbrainsClion,
|
||||
JetbrainsDatagrip,
|
||||
JetbrainsDataspell,
|
||||
JetbrainsGateway,
|
||||
JetbrainsGoland,
|
||||
JetbrainsIdea,
|
||||
JetbrainsMps,
|
||||
JetbrainsPhpstorm,
|
||||
JetbrainsPycharm,
|
||||
JetbrainsRider,
|
||||
JetbrainsRubymine,
|
||||
JetbrainsRustrover,
|
||||
JetbrainsToolbox,
|
||||
JetbrainsWebstorm,
|
||||
Jetpack,
|
||||
Julia,
|
||||
Juliaup,
|
||||
|
||||
55
src/main.rs
55
src/main.rs
@@ -446,9 +446,62 @@ fn run() -> Result<()> {
|
||||
runner.execute(Step::Aqua, "aqua", || generic::run_aqua(&ctx))?;
|
||||
runner.execute(Step::Bun, "bun", || generic::run_bun(&ctx))?;
|
||||
runner.execute(Step::Zigup, "zigup", || generic::run_zigup(&ctx))?;
|
||||
runner.execute(Step::JetBrainsToolbox, "JetBrains Toolbox", || {
|
||||
runner.execute(Step::JetbrainsToolbox, "JetBrains Toolbox", || {
|
||||
generic::run_jetbrains_toolbox(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::AndroidStudio, "Android Studio plugins", || {
|
||||
generic::run_android_studio(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsAqua, "JetBrains Aqua plugins", || {
|
||||
generic::run_jetbrains_aqua(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsClion, "JetBrains CLion plugins", || {
|
||||
generic::run_jetbrains_clion(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsDatagrip, "JetBrains DataGrip plugins", || {
|
||||
generic::run_jetbrains_datagrip(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsDataspell, "JetBrains DataSpell plugins", || {
|
||||
generic::run_jetbrains_dataspell(&ctx)
|
||||
})?;
|
||||
// JetBrains dotCover has no CLI
|
||||
// JetBrains dotMemory has no CLI
|
||||
// JetBrains dotPeek has no CLI
|
||||
// JetBrains dotTrace has no CLI
|
||||
// JetBrains Fleet has a different CLI without a `fleet update` command.
|
||||
runner.execute(Step::JetbrainsGateway, "JetBrains Gateway plugins", || {
|
||||
generic::run_jetbrains_gateway(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsGoland, "JetBrains GoLand plugins", || {
|
||||
generic::run_jetbrains_goland(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsIdea, "JetBrains IntelliJ IDEA plugins", || {
|
||||
generic::run_jetbrains_idea(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsMps, "JetBrains MPS plugins", || {
|
||||
generic::run_jetbrains_mps(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsPhpstorm, "JetBrains PhpStorm plugins", || {
|
||||
generic::run_jetbrains_phpstorm(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsPycharm, "JetBrains PyCharm plugins", || {
|
||||
generic::run_jetbrains_pycharm(&ctx)
|
||||
})?;
|
||||
// JetBrains ReSharper has no CLI (it's a VSCode extension)
|
||||
// JetBrains ReSharper C++ has no CLI (it's a VSCode extension)
|
||||
runner.execute(Step::JetbrainsRider, "JetBrains Rider plugins", || {
|
||||
generic::run_jetbrains_rider(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsRubymine, "JetBrains RubyMine plugins", || {
|
||||
generic::run_jetbrains_rubymine(&ctx)
|
||||
})?;
|
||||
runner.execute(Step::JetbrainsRustrover, "JetBrains RustRover plugins", || {
|
||||
generic::run_jetbrains_rustrover(&ctx)
|
||||
})?;
|
||||
// JetBrains Space Desktop does not have a CLI
|
||||
runner.execute(Step::JetbrainsWebstorm, "JetBrains WebStorm plugins", || {
|
||||
generic::run_jetbrains_webstorm(&ctx)
|
||||
})?;
|
||||
|
||||
if should_run_powershell {
|
||||
runner.execute(Step::Powershell, "Powershell Modules Update", || {
|
||||
|
||||
@@ -221,15 +221,46 @@ pub fn run_apm(ctx: &ExecutionContext) -> Result<()> {
|
||||
.status_checked()
|
||||
}
|
||||
|
||||
pub fn run_aqua(ctx: &ExecutionContext) -> Result<()> {
|
||||
enum Aqua {
|
||||
JetBrainsAqua(PathBuf),
|
||||
AquaCLI(PathBuf),
|
||||
}
|
||||
|
||||
impl Aqua {
|
||||
fn aqua_cli(self) -> Result<PathBuf> {
|
||||
match self {
|
||||
Aqua::AquaCLI(aqua) => Ok(aqua),
|
||||
Aqua::JetBrainsAqua(_) => {
|
||||
Err(SkipStep("Command `aqua` probably points to JetBrains Aqua".to_string()).into())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn jetbrains_aqua(self) -> Result<PathBuf> {
|
||||
match self {
|
||||
Aqua::JetBrainsAqua(path) => Ok(path),
|
||||
Aqua::AquaCLI(_) => Err(SkipStep("Command `aqua` probably points to Aqua CLI".to_string()).into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_aqua(ctx: &ExecutionContext) -> Result<Aqua> {
|
||||
let aqua = require("aqua")?;
|
||||
|
||||
// Check if `aqua --help` mentions "aqua". JetBrains aqua does not, aqua CLI does.
|
||||
// Check if `aqua --help` mentions "aqua". JetBrains Aqua does not, Aqua CLI does.
|
||||
let output = ctx.run_type().execute(&aqua).arg("--help").output_checked()?;
|
||||
|
||||
if !String::from_utf8(output.stdout)?.contains("aqua") {
|
||||
return Err(SkipStep("Command aqua probably points to JetBrains Aqua".to_string()).into());
|
||||
if String::from_utf8(output.stdout)?.contains("aqua") {
|
||||
debug!("Detected `aqua` as Aqua CLI");
|
||||
Ok(Aqua::AquaCLI(aqua))
|
||||
} else {
|
||||
debug!("Detected `aqua` as JetBrains Aqua");
|
||||
Ok(Aqua::JetBrainsAqua(aqua))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run_aqua(ctx: &ExecutionContext) -> Result<()> {
|
||||
let aqua = get_aqua(ctx)?.aqua_cli()?;
|
||||
|
||||
print_separator("Aqua");
|
||||
if ctx.run_type().dry() {
|
||||
@@ -1467,3 +1498,76 @@ pub fn run_jetbrains_toolbox(_ctx: &ExecutionContext) -> Result<()> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn run_jetbrains_ide(ctx: &ExecutionContext, bin: PathBuf, name: &str) -> Result<()> {
|
||||
print_separator(format!("JetBrains {name} plugins"));
|
||||
|
||||
// The `update` command is undocumented, but tested on all of the below.
|
||||
ctx.run_type().execute(bin).arg("update").status_checked()
|
||||
}
|
||||
|
||||
pub fn run_android_studio(ctx: &ExecutionContext) -> Result<()> {
|
||||
// We don't use `run_jetbrains_ide` here because that would print "JetBrains Android Studio",
|
||||
// which is incorrect as Android Studio is made by Google. Just "Android Studio" is fine.
|
||||
let bin = require("studio")?;
|
||||
|
||||
print_separator("Android Studio plugins");
|
||||
|
||||
ctx.run_type().execute(bin).arg("update").status_checked()
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_aqua(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, get_aqua(ctx)?.jetbrains_aqua()?, "Aqua")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_clion(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("clion")?, "CLion")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_datagrip(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("datagrip")?, "DataGrip")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_dataspell(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("dataspell")?, "DataSpell")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_gateway(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("gateway")?, "Gateway")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_goland(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("goland")?, "Goland")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_idea(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("idea")?, "IntelliJ IDEA")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_mps(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("mps")?, "MPS")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_phpstorm(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("phpstorm")?, "PhpStorm")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_pycharm(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("pycharm")?, "PyCharm")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_rider(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("rider")?, "Rider")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_rubymine(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("rubymine")?, "RubyMine")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_rustrover(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("rustrover")?, "RustRover")
|
||||
}
|
||||
|
||||
pub fn run_jetbrains_webstorm(ctx: &ExecutionContext) -> Result<()> {
|
||||
run_jetbrains_ide(ctx, require("webstorm")?, "WebStorm")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user