fix
This commit is contained in:
+53
-17
@@ -155,44 +155,65 @@ pub fn run_release(
|
|||||||
sudo: &str,
|
sudo: &str,
|
||||||
) -> Result<PathBuf, String> {
|
) -> Result<PathBuf, String> {
|
||||||
let scripts = mcp_repo.join("scripts");
|
let scripts = mcp_repo.join("scripts");
|
||||||
let mut ps = String::new();
|
let log = work_dir.join("release.log");
|
||||||
ps.push_str("$ErrorActionPreference = 'Stop'
|
let mut body = String::new();
|
||||||
");
|
body.push_str(&format!(
|
||||||
ps.push_str("$pw = $env:ODIAN_NODE_SUDO
|
|
||||||
");
|
|
||||||
ps.push_str("$env:ODIAN_NODE_SUDO = $null
|
|
||||||
"); // out of the environment the scripts inherit
|
|
||||||
ps.push_str(&format!(
|
|
||||||
"Write-Host '=== ODIAN pack {pack_version} ===' -ForegroundColor Cyan
|
"Write-Host '=== ODIAN pack {pack_version} ===' -ForegroundColor Cyan
|
||||||
& '{}' -Version '{pack_version}' -NodeSudoPw $pw
|
& '{}' -Version '{pack_version}' -NodeSudoPw $pw
|
||||||
if ($LASTEXITCODE -notin 0,2) {{ Write-Host 'the pack step failed' -ForegroundColor Red; pause; exit 1 }}
|
|
||||||
if ($LASTEXITCODE -eq 2) {{ Write-Host 'pack: nothing to release' -ForegroundColor Yellow }}
|
if ($LASTEXITCODE -eq 2) {{ Write-Host 'pack: nothing to release' -ForegroundColor Yellow }}
|
||||||
|
elseif ($LASTEXITCODE -ne 0) {{ throw 'the pack step failed' }}
|
||||||
",
|
",
|
||||||
scripts.join("release_pack.ps1").display()
|
scripts.join("release_pack.ps1").display()
|
||||||
));
|
));
|
||||||
if let Some(v) = launcher_version {
|
if let Some(v) = launcher_version {
|
||||||
ps.push_str(&format!(
|
body.push_str(&format!(
|
||||||
"Write-Host '=== Launcher {v} ===' -ForegroundColor Cyan
|
"Write-Host '=== Launcher {v} ===' -ForegroundColor Cyan
|
||||||
& '{}' -Version '{v}' -SiteUrl 'https://engine.odian.fr/dhp' -McpUrl 'https://engine.odian.fr' -AiUrl 'https://engine.odian.fr' -SiteName 'ODIAN test DHP' -Publish
|
& '{}' -Version '{v}' -SiteUrl 'https://engine.odian.fr/dhp' -McpUrl 'https://engine.odian.fr' -AiUrl 'https://engine.odian.fr' -SiteName 'ODIAN test DHP' -Publish
|
||||||
if ($LASTEXITCODE -ne 0) {{ Write-Host 'the launcher step failed' -ForegroundColor Red; pause; exit 1 }}
|
if ($LASTEXITCODE -ne 0) {{ throw 'the launcher step failed' }}
|
||||||
",
|
",
|
||||||
scripts.join("package_launcher.ps1").display()
|
scripts.join("package_launcher.ps1").display()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if with_api {
|
if with_api {
|
||||||
ps.push_str(&format!(
|
// It ships with the release skill rather than the repo, so look there when the repo
|
||||||
|
// has no copy. A missing script used to fail the same way a broken one does.
|
||||||
|
let api = api_script(&scripts).ok_or(
|
||||||
|
"deploy-api.ps1 is neither in the repo's scripts nor in the release skill: the API cannot be rolled.",
|
||||||
|
)?;
|
||||||
|
body.push_str(&format!(
|
||||||
"Write-Host '=== Engine API ===' -ForegroundColor Cyan
|
"Write-Host '=== Engine API ===' -ForegroundColor Cyan
|
||||||
& '{}' -NodeSudoPw $pw
|
& '{}' -NodeSudoPw $pw
|
||||||
if ($LASTEXITCODE -notin 0,3) {{ Write-Host 'the API step failed' -ForegroundColor Red; pause; exit 1 }}
|
if ($LASTEXITCODE -notin 0,3) {{ throw 'the API step failed' }}
|
||||||
",
|
",
|
||||||
// The api script lives with the release skill, beside the others when it is there.
|
api.display()
|
||||||
scripts.join("deploy-api.ps1").display()
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
ps.push_str("Write-Host ''
|
|
||||||
|
// Everything inside try/finally, and everything recorded. A step that throws used to
|
||||||
|
// take the window with it - the release simply vanished, with nothing to read.
|
||||||
|
let ps = format!(
|
||||||
|
"$ErrorActionPreference = 'Stop'
|
||||||
|
$pw = $env:ODIAN_NODE_SUDO
|
||||||
|
$env:ODIAN_NODE_SUDO = $null
|
||||||
|
Start-Transcript -Path '{}' -Force | Out-Null
|
||||||
|
try {{
|
||||||
|
{}
|
||||||
|
Write-Host ''
|
||||||
Write-Host 'Release finished.' -ForegroundColor Green
|
Write-Host 'Release finished.' -ForegroundColor Green
|
||||||
|
}} catch {{
|
||||||
|
Write-Host ''
|
||||||
|
Write-Host \"FAILED: $_\" -ForegroundColor Red
|
||||||
|
}} finally {{
|
||||||
|
Stop-Transcript | Out-Null
|
||||||
|
Write-Host ''
|
||||||
|
Write-Host 'Log: {}'
|
||||||
pause
|
pause
|
||||||
");
|
}}
|
||||||
|
",
|
||||||
|
log.display(),
|
||||||
|
body,
|
||||||
|
log.display()
|
||||||
|
);
|
||||||
|
|
||||||
std::fs::create_dir_all(work_dir).map_err(|e| format!("cannot use {}: {e}", work_dir.display()))?;
|
std::fs::create_dir_all(work_dir).map_err(|e| format!("cannot use {}: {e}", work_dir.display()))?;
|
||||||
let file = work_dir.join("release.ps1");
|
let file = work_dir.join("release.ps1");
|
||||||
@@ -210,6 +231,21 @@ pause
|
|||||||
Ok(file)
|
Ok(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Where the Engine API deploy script is: beside the other release scripts, or in the
|
||||||
|
/// release skill that carries it.
|
||||||
|
fn api_script(scripts: &Path) -> Option<PathBuf> {
|
||||||
|
let here = scripts.join("deploy-api.ps1");
|
||||||
|
if here.is_file() {
|
||||||
|
return Some(here);
|
||||||
|
}
|
||||||
|
let skill = dirs_home()?.join(".claude/skills/odian-api-release/scripts/deploy-api.ps1");
|
||||||
|
skill.is_file().then_some(skill)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dirs_home() -> Option<PathBuf> {
|
||||||
|
std::env::var_os("USERPROFILE").or_else(|| std::env::var_os("HOME")).map(PathBuf::from)
|
||||||
|
}
|
||||||
|
|
||||||
/// `0.71.0` -> `0.72.0`. A pack release is a minor; the patch place is not used.
|
/// `0.71.0` -> `0.72.0`. A pack release is a minor; the patch place is not used.
|
||||||
pub fn next_pack(live: &str) -> Option<String> {
|
pub fn next_pack(live: &str) -> Option<String> {
|
||||||
let p: Vec<u64> = live.split('.').map_while(|x| x.parse().ok()).collect();
|
let p: Vec<u64> = live.split('.').map_while(|x| x.parse().ok()).collect();
|
||||||
|
|||||||
Reference in New Issue
Block a user