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:
@@ -0,0 +1,3 @@
|
|||||||
|
1. The `jet_brains_toolbox` step was renamed to `jetbrains_toolbox`. If you're
|
||||||
|
using the old name in your configuration file in the `disable` or `only`
|
||||||
|
fields, simply change it to `jetbrains_toolbox`.
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ pub type Commands = BTreeMap<String, String>;
|
|||||||
#[strum(serialize_all = "snake_case")]
|
#[strum(serialize_all = "snake_case")]
|
||||||
pub enum Step {
|
pub enum Step {
|
||||||
AM,
|
AM,
|
||||||
|
AndroidStudio,
|
||||||
AppMan,
|
AppMan,
|
||||||
Aqua,
|
Aqua,
|
||||||
Asdf,
|
Asdf,
|
||||||
@@ -99,7 +100,23 @@ pub enum Step {
|
|||||||
Helix,
|
Helix,
|
||||||
Helm,
|
Helm,
|
||||||
HomeManager,
|
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,
|
Jetpack,
|
||||||
Julia,
|
Julia,
|
||||||
Juliaup,
|
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::Aqua, "aqua", || generic::run_aqua(&ctx))?;
|
||||||
runner.execute(Step::Bun, "bun", || generic::run_bun(&ctx))?;
|
runner.execute(Step::Bun, "bun", || generic::run_bun(&ctx))?;
|
||||||
runner.execute(Step::Zigup, "zigup", || generic::run_zigup(&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)
|
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 {
|
if should_run_powershell {
|
||||||
runner.execute(Step::Powershell, "Powershell Modules Update", || {
|
runner.execute(Step::Powershell, "Powershell Modules Update", || {
|
||||||
|
|||||||
@@ -221,15 +221,46 @@ pub fn run_apm(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
.status_checked()
|
.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")?;
|
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()?;
|
let output = ctx.run_type().execute(&aqua).arg("--help").output_checked()?;
|
||||||
|
|
||||||
if !String::from_utf8(output.stdout)?.contains("aqua") {
|
if String::from_utf8(output.stdout)?.contains("aqua") {
|
||||||
return Err(SkipStep("Command aqua probably points to JetBrains Aqua".to_string()).into());
|
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");
|
print_separator("Aqua");
|
||||||
if ctx.run_type().dry() {
|
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