fix: create the update directory for fresh named volumes [CI]
ci/woodpecker/push/main-amd64-build Pipeline was successful
ci/woodpecker/push/main-amd64-build Pipeline was successful
ConfigStore.Write only created the config root, so a new volume without update/ made update offers fail with IO_PathNotFound. Create the parent directory on write and ship an empty update/ in the node images.
This commit is contained in:
1 parent
ef75c9f510
commit
7613f67fed
3 files changed
+21
-1
No files matched your search
@@ -243,7 +243,8 @@ public sealed class ConfigStore
|
|||||||
throw new InvalidOperationException("config files must stay inside the config directory");
|
throw new InvalidOperationException("config files must stay inside the config directory");
|
||||||
}
|
}
|
||||||
|
|
||||||
Directory.CreateDirectory(_directory);
|
// 相对路径里的子目录(例如 update/)也要建:新建的命名卷里只有镜像自带的目录
|
||||||
|
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
|
||||||
string temp = path + ".tmp";
|
string temp = path + ".tmp";
|
||||||
#pragma warning disable RS0030 // 纯采集边界的唯一豁免点:ConfigStore 只写配置目录,先写临时文件再原子替换
|
#pragma warning disable RS0030 // 纯采集边界的唯一豁免点:ConfigStore 只写配置目录,先写临时文件再原子替换
|
||||||
File.WriteAllBytes(temp, content);
|
File.WriteAllBytes(temp, content);
|
||||||
|
|||||||
@@ -82,4 +82,20 @@ public sealed class ProbeTests
|
|||||||
Directory.Delete(directory, recursive: true);
|
Directory.Delete(directory, recursive: true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConfigStore_CreatesSubdirectories_ForFreshVolumes()
|
||||||
|
{
|
||||||
|
// 新建的命名卷里没有 update/:面板转来的更新清单要能写进去
|
||||||
|
string directory = NewDirectory();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new ConfigStore(directory).Write("update/offer.manifest", "{}"u8.ToArray());
|
||||||
|
Assert.True(File.Exists(Path.Combine(directory, "update", "offer.manifest")));
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Directory.Delete(directory, recursive: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -59,6 +59,9 @@ def stage(component: str, destination: Path) -> None:
|
|||||||
config = destination / "config"
|
config = destination / "config"
|
||||||
config.mkdir()
|
config.mkdir()
|
||||||
(config / ".keep").write_text("", encoding="utf-8")
|
(config / ".keep").write_text("", encoding="utf-8")
|
||||||
|
# 更新清单和请求放在这里;空的命名卷第一次挂载时会带上这个目录
|
||||||
|
(config / "update").mkdir()
|
||||||
|
(config / "update" / ".keep").write_text("", encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
|
|||||||
Reference in new issue
Block a user