feat(builder): load publish credentials from .env.builder
Keep DEB/Docker publish keys out of the project's .env. Scripts and check.py --ready only read .env.builder; empty values count as missing.
This commit is contained in:
@@ -95,10 +95,13 @@ class BuilderCheckTests(unittest.TestCase):
|
||||
self.assertIn("check.py", skill)
|
||||
self.assertIn("--ready", skill)
|
||||
self.assertIn("makefile.builder", skill)
|
||||
self.assertIn(".env.builder", skill)
|
||||
self.assertIn("不要改用户的 `Makefile`", skill)
|
||||
self.assertIn("不要调用 create-makefile", skill)
|
||||
self.assertIn("不要用 create-makefile", contract)
|
||||
self.assertIn("makefile.builder", contract)
|
||||
self.assertIn(".env.builder", contract)
|
||||
self.assertIn("不要读取或改写用户 `.env`", contract)
|
||||
|
||||
def test_no_makefile_without_ready_is_usage_error(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temp:
|
||||
@@ -136,7 +139,7 @@ class BuilderCheckTests(unittest.TestCase):
|
||||
project = Path(temp)
|
||||
init_repo(project)
|
||||
write_contract_makefile(project)
|
||||
(project / ".env").write_text(
|
||||
(project / ".env.builder").write_text(
|
||||
"DEB_SERVER_URL=https://secret.example.com\n"
|
||||
"DEB_TOKEN=super-secret-token-value\n"
|
||||
"DEB_REPOSITORY=main\n",
|
||||
@@ -151,6 +154,40 @@ class BuilderCheckTests(unittest.TestCase):
|
||||
self.assertNotIn("super-secret-token-value", text)
|
||||
self.assertNotIn("https://secret.example.com", text)
|
||||
|
||||
def test_user_dotenv_is_ignored(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temp:
|
||||
project = Path(temp)
|
||||
init_repo(project)
|
||||
write_contract_makefile(project)
|
||||
(project / ".env").write_text(
|
||||
"DEB_SERVER_URL=https://user.example.com\n"
|
||||
"DEB_TOKEN=user-env-secret-token\n"
|
||||
"DEB_REPOSITORY=main\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
code, text = run_check(
|
||||
project, "--ready", which={"dpkg-deb": "/usr/bin/dpkg-deb"}
|
||||
)
|
||||
self.assertEqual(code, 0, text)
|
||||
self.assertIn("DEB_SERVER_URL: MISSING", text)
|
||||
self.assertNotIn("user-env-secret-token", text)
|
||||
self.assertNotIn("https://user.example.com", text)
|
||||
|
||||
def test_empty_env_builder_values_count_as_missing(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temp:
|
||||
project = Path(temp)
|
||||
init_repo(project)
|
||||
write_contract_makefile(project)
|
||||
(project / ".env.builder").write_text(
|
||||
"DEB_SERVER_URL=\nDEB_TOKEN=\nDEB_REPOSITORY=\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
code, text = run_check(
|
||||
project, "--ready", which={"dpkg-deb": "/usr/bin/dpkg-deb"}
|
||||
)
|
||||
self.assertEqual(code, 0, text)
|
||||
self.assertIn("DEB_TOKEN: MISSING", text)
|
||||
|
||||
def test_ready_fails_when_docker_track_missing_docker(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temp:
|
||||
project = Path(temp)
|
||||
|
||||
Reference in New Issue
Block a user