Align website tooling with govoplan-website rename
This commit is contained in:
@@ -29,7 +29,7 @@ jobs:
|
|||||||
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
||||||
- name: Bootstrap GovOPlaN repositories
|
- name: Bootstrap GovOPlaN repositories
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo addideas-govoplan-website
|
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo govoplan-website
|
||||||
- name: Install backend dev audit dependencies
|
- name: Install backend dev audit dependencies
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ jobs:
|
|||||||
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
||||||
- name: Bootstrap GovOPlaN repositories
|
- name: Bootstrap GovOPlaN repositories
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo addideas-govoplan-website
|
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo govoplan-website
|
||||||
- name: Install backend release dependencies
|
- name: Install backend release dependencies
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
||||||
- name: Bootstrap GovOPlaN repositories
|
- name: Bootstrap GovOPlaN repositories
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo addideas-govoplan-website
|
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo govoplan-website
|
||||||
- name: Validate package publication contracts
|
- name: Validate package publication contracts
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ jobs:
|
|||||||
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
git config --global --add url."https://git.add-ideas.de/GovOPlaN/govoplan".insteadOf "ssh://git@git.add-ideas.de/GovOPlaN/govoplan"
|
||||||
- name: Bootstrap release sources
|
- name: Bootstrap release sources
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo addideas-govoplan-website
|
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo govoplan-website
|
||||||
- name: Build release wheel roots and WebUI
|
- name: Build release wheel roots and WebUI
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ jobs:
|
|||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
- name: Bootstrap GovOPlaN repositories
|
- name: Bootstrap GovOPlaN repositories
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo addideas-govoplan-website
|
run: python tools/repo/bootstrap-repositories.py --parent .. --transport public-https --reuse-checkout-auth --exclude-repo govoplan-website
|
||||||
- name: Run whole-system security audit
|
- name: Run whole-system security audit
|
||||||
working-directory: govoplan
|
working-directory: govoplan
|
||||||
run: tools/checks/security-audit/run.sh --mode "$SECURITY_AUDIT_MODE" --scope "$SECURITY_AUDIT_SCOPE" --reports-dir audit-reports
|
run: tools/checks/security-audit/run.sh --mode "$SECURITY_AUDIT_MODE" --scope "$SECURITY_AUDIT_SCOPE" --reports-dir audit-reports
|
||||||
|
|||||||
@@ -235,5 +235,5 @@ The target shape is:
|
|||||||
|
|
||||||
What doesn't belong here:
|
What doesn't belong here:
|
||||||
|
|
||||||
- `addideas-govoplan-website/docker-compose.yml`: public website serving
|
- `govoplan-website/docker-compose.yml`: public website serving
|
||||||
profile; this one stays with the website repository.
|
profile; this one stays with the website repository.
|
||||||
|
|||||||
+1
-1
@@ -19,4 +19,4 @@ Module-specific Docker test beds remain in their owning repositories:
|
|||||||
|
|
||||||
Website-specific serving profiles remain with the public website repository:
|
Website-specific serving profiles remain with the public website repository:
|
||||||
|
|
||||||
- `addideas-govoplan-website/docker-compose.yml`
|
- `govoplan-website/docker-compose.yml`
|
||||||
|
|||||||
@@ -519,8 +519,8 @@ Regenerate the browsable module directory from an existing catalog/keyring:
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
./.venv/bin/python tools/release/release-catalog.py module-directory \
|
./.venv/bin/python tools/release/release-catalog.py module-directory \
|
||||||
--catalog ../addideas-govoplan-website/public/catalogs/v1/channels/stable.json \
|
--catalog ../govoplan-website/public/catalogs/v1/channels/stable.json \
|
||||||
--keyring ../addideas-govoplan-website/public/catalogs/v1/keyring.json \
|
--keyring ../govoplan-website/public/catalogs/v1/keyring.json \
|
||||||
--output-dir runtime/module-directory-preview \
|
--output-dir runtime/module-directory-preview \
|
||||||
--channel stable
|
--channel stable
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -98,4 +98,4 @@ Generated from `repositories.json`. Use that JSON file as the machine-readable s
|
|||||||
|
|
||||||
| Repository | Subtype | Local path | Gitea |
|
| Repository | Subtype | Local path | Gitea |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `addideas-govoplan-website` | `public-site` | `../addideas-govoplan-website` | [addideas-govoplan-website](https://git.add-ideas.de/add-ideas/addideas-govoplan-website) |
|
| `govoplan-website` | `public-site` | `../govoplan-website` | [govoplan-website](https://git.add-ideas.de/add-ideas/govoplan-website) |
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ installed into a GovOPlaN runtime.
|
|||||||
|
|
||||||
Current website repository:
|
Current website repository:
|
||||||
|
|
||||||
- `addideas-govoplan-website`: public website and release catalog publication target.
|
- `govoplan-website`: public website and release catalog publication target.
|
||||||
|
|
||||||
## Meta Repository Role
|
## Meta Repository Role
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ Current shared profiles:
|
|||||||
- `dev/postgres`
|
- `dev/postgres`
|
||||||
- `dev/production-like`
|
- `dev/production-like`
|
||||||
|
|
||||||
Website-specific serving profiles stay with `addideas-govoplan-website`.
|
Website-specific serving profiles stay with `govoplan-website`.
|
||||||
|
|
||||||
Module-specific test beds stay in the owning module repository. Examples:
|
Module-specific test beds stay in the owning module repository. Examples:
|
||||||
|
|
||||||
@@ -104,13 +104,13 @@ Module-specific test beds stay in the owning module repository. Examples:
|
|||||||
This keeps local module tests close to the code while giving operators one
|
This keeps local module tests close to the code while giving operators one
|
||||||
repository for product deployment.
|
repository for product deployment.
|
||||||
|
|
||||||
## addideas-govoplan-website and Release Logic
|
## govoplan-website and Release Logic
|
||||||
|
|
||||||
`addideas-govoplan-website` should be treated as the public website and catalog publication
|
`govoplan-website` should be treated as the public website and catalog publication
|
||||||
target, not as the release orchestrator.
|
target, not as the release orchestrator.
|
||||||
|
|
||||||
The release workflow should be invoked from `govoplan`. It may write signed
|
The release workflow should be invoked from `govoplan`. It may write signed
|
||||||
catalog artifacts into `addideas-govoplan-website/public/catalogs/...` and then build or
|
catalog artifacts into `govoplan-website/public/catalogs/...` and then build or
|
||||||
deploy the website.
|
deploy the website.
|
||||||
|
|
||||||
A separate `govoplan-release` repository should only be introduced if release
|
A separate `govoplan-release` repository should only be introduced if release
|
||||||
|
|||||||
+1
-1
@@ -76,7 +76,7 @@
|
|||||||
{"name": "govoplan-views", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-views.git", "path": "govoplan-views"},
|
{"name": "govoplan-views", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-views.git", "path": "govoplan-views"},
|
||||||
{"name": "govoplan-voting", "category": "module", "subtype": "domain", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-voting.git", "path": "govoplan-voting"},
|
{"name": "govoplan-voting", "category": "module", "subtype": "domain", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-voting.git", "path": "govoplan-voting"},
|
||||||
{"name": "govoplan-wiki", "category": "module", "subtype": "domain", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-wiki.git", "path": "govoplan-wiki"},
|
{"name": "govoplan-wiki", "category": "module", "subtype": "domain", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-wiki.git", "path": "govoplan-wiki"},
|
||||||
{"name": "addideas-govoplan-website", "category": "website", "subtype": "public-site", "remote": "git@git.add-ideas.de:add-ideas/addideas-govoplan-website.git", "path": "addideas-govoplan-website", "bootstrap_transport": "registered"},
|
{"name": "govoplan-website", "category": "website", "subtype": "public-site", "remote": "git@git.add-ideas.de:add-ideas/govoplan-website.git", "path": "govoplan-website", "bootstrap_transport": "registered"},
|
||||||
{"name": "govoplan-workflow", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-workflow.git", "path": "govoplan-workflow"},
|
{"name": "govoplan-workflow", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-workflow.git", "path": "govoplan-workflow"},
|
||||||
{"name": "govoplan-workflow-engine", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-workflow-engine.git", "path": "govoplan-workflow-engine"},
|
{"name": "govoplan-workflow-engine", "category": "module", "subtype": "platform", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-workflow-engine.git", "path": "govoplan-workflow-engine"},
|
||||||
{"name": "govoplan-xoev", "category": "connector", "subtype": "standard", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-xoev.git", "path": "govoplan-xoev"},
|
{"name": "govoplan-xoev", "category": "connector", "subtype": "standard", "remote": "git@git.add-ideas.de:GovOPlaN/govoplan-xoev.git", "path": "govoplan-xoev"},
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ def environment(tmp_path, monkeypatch):
|
|||||||
if step.get("repo"):
|
if step.get("repo"):
|
||||||
step["source_binding"] = receipt(step["repo"])
|
step["source_binding"] = receipt(step["repo"])
|
||||||
elif step["id"] == "catalog:validate-sign-publish":
|
elif step["id"] == "catalog:validate-sign-publish":
|
||||||
step["source_binding"] = receipt("addideas-govoplan-website", target_tag="")
|
step["source_binding"] = receipt("govoplan-website", target_tag="")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
monkeypatch.setattr(api, "build_dashboard", dashboard)
|
monkeypatch.setattr(api, "build_dashboard", dashboard)
|
||||||
@@ -432,7 +432,7 @@ def test_catalog_generation_and_publication_use_exact_durable_receipts(environme
|
|||||||
|
|
||||||
generator = Mock(side_effect=generated)
|
generator = Mock(side_effect=generated)
|
||||||
publisher = Mock(side_effect=published)
|
publisher = Mock(side_effect=published)
|
||||||
website = receipt("addideas-govoplan-website", target_tag="")
|
website = receipt("govoplan-website", target_tag="")
|
||||||
monkeypatch.setattr(api, "generate_catalog_candidate", generator)
|
monkeypatch.setattr(api, "generate_catalog_candidate", generator)
|
||||||
monkeypatch.setattr(api, "publish_received_candidate", publisher)
|
monkeypatch.setattr(api, "publish_received_candidate", publisher)
|
||||||
monkeypatch.setattr(api, "verify_catalog_publication_precondition", Mock(return_value=website))
|
monkeypatch.setattr(api, "verify_catalog_publication_precondition", Mock(return_value=website))
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class FullRegistryCatalogTests(unittest.TestCase):
|
|||||||
self.temp = tempfile.TemporaryDirectory()
|
self.temp = tempfile.TemporaryDirectory()
|
||||||
self.addCleanup(self.temp.cleanup)
|
self.addCleanup(self.temp.cleanup)
|
||||||
self.root = Path(self.temp.name)
|
self.root = Path(self.temp.name)
|
||||||
self.web = self.root / "addideas-govoplan-website"
|
self.web = self.root / "govoplan-website"
|
||||||
self.wheels = self.root / "wheels"
|
self.wheels = self.root / "wheels"
|
||||||
self.npm = self.root / "npm"
|
self.npm = self.root / "npm"
|
||||||
self.wheels.mkdir(mode=0o700)
|
self.wheels.mkdir(mode=0o700)
|
||||||
|
|||||||
@@ -1411,7 +1411,7 @@ class ReleaseRunApiTests(unittest.TestCase):
|
|||||||
patch(
|
patch(
|
||||||
"server.app.verify_catalog_publication_precondition",
|
"server.app.verify_catalog_publication_precondition",
|
||||||
return_value=repository_receipt(
|
return_value=repository_receipt(
|
||||||
repo="addideas-govoplan-website", target_tag=""
|
repo="govoplan-website", target_tag=""
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
patch("server.app.default_signing_keys", return_value=("key=/private",)),
|
patch("server.app.default_signing_keys", return_value=("key=/private",)),
|
||||||
@@ -1473,7 +1473,7 @@ class ReleaseRunApiTests(unittest.TestCase):
|
|||||||
workspace_root=Path(temp_dir),
|
workspace_root=Path(temp_dir),
|
||||||
remote="origin",
|
remote="origin",
|
||||||
expected_website_receipt=repository_receipt(
|
expected_website_receipt=repository_receipt(
|
||||||
repo="addideas-govoplan-website", target_tag=""
|
repo="govoplan-website", target_tag=""
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2199,7 +2199,7 @@ def bind_test_plan_source_states(**kwargs: object) -> dict[str, object]:
|
|||||||
step["source_binding"] = repository_receipt()
|
step["source_binding"] = repository_receipt()
|
||||||
elif step.get("id") == "catalog:validate-sign-publish":
|
elif step.get("id") == "catalog:validate-sign-publish":
|
||||||
step["source_binding"] = repository_receipt(
|
step["source_binding"] = repository_receipt(
|
||||||
repo="addideas-govoplan-website", target_tag=""
|
repo="govoplan-website", target_tag=""
|
||||||
)
|
)
|
||||||
return plan
|
return plan
|
||||||
|
|
||||||
|
|||||||
@@ -253,7 +253,7 @@ class RepositoryBootstrapTests(unittest.TestCase):
|
|||||||
"path": "website",
|
"path": "website",
|
||||||
"remote": (
|
"remote": (
|
||||||
"git@git.add-ideas.de:"
|
"git@git.add-ideas.de:"
|
||||||
"add-ideas/addideas-govoplan-website.git"
|
"add-ideas/govoplan-website.git"
|
||||||
),
|
),
|
||||||
"bootstrap_transport": (bootstrap.REGISTERED_TRANSPORT),
|
"bootstrap_transport": (bootstrap.REGISTERED_TRANSPORT),
|
||||||
}
|
}
|
||||||
@@ -278,7 +278,7 @@ class RepositoryBootstrapTests(unittest.TestCase):
|
|||||||
self.assertEqual(0, status)
|
self.assertEqual(0, status)
|
||||||
command = runner.call_args.args[0]
|
command = runner.call_args.args[0]
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
"git@git.add-ideas.de:add-ideas/addideas-govoplan-website.git",
|
"git@git.add-ideas.de:add-ideas/govoplan-website.git",
|
||||||
command[-2],
|
command[-2],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from gitea_common import GiteaClient, GiteaError, infer_target, label_ids_by_nam
|
|||||||
|
|
||||||
|
|
||||||
DEFAULT_PRODUCT_BACKLOG = pathlib.Path("/mnt/DATA/Nextcloud/ADD ideas UG/Products/govoplan/backlog.md")
|
DEFAULT_PRODUCT_BACKLOG = pathlib.Path("/mnt/DATA/Nextcloud/ADD ideas UG/Products/govoplan/backlog.md")
|
||||||
DEFAULT_WEB_TODO = pathlib.Path("/mnt/DATA/git/addideas-govoplan-website/TODO.md")
|
DEFAULT_WEB_TODO = pathlib.Path("/mnt/DATA/git/govoplan-website/TODO.md")
|
||||||
|
|
||||||
REPO_ROOTS = {
|
REPO_ROOTS = {
|
||||||
"core": pathlib.Path("/mnt/DATA/git/govoplan-core"),
|
"core": pathlib.Path("/mnt/DATA/git/govoplan-core"),
|
||||||
@@ -24,7 +24,7 @@ REPO_ROOTS = {
|
|||||||
"mail": pathlib.Path("/mnt/DATA/git/govoplan-mail"),
|
"mail": pathlib.Path("/mnt/DATA/git/govoplan-mail"),
|
||||||
"files": pathlib.Path("/mnt/DATA/git/govoplan-files"),
|
"files": pathlib.Path("/mnt/DATA/git/govoplan-files"),
|
||||||
"campaign": pathlib.Path("/mnt/DATA/git/govoplan-campaign"),
|
"campaign": pathlib.Path("/mnt/DATA/git/govoplan-campaign"),
|
||||||
"web": pathlib.Path("/mnt/DATA/git/addideas-govoplan-website"),
|
"web": pathlib.Path("/mnt/DATA/git/govoplan-website"),
|
||||||
}
|
}
|
||||||
|
|
||||||
MODULE_LABELS = {
|
MODULE_LABELS = {
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ def is_excluded_repo_file(path: pathlib.Path) -> bool:
|
|||||||
return True
|
return True
|
||||||
if text.endswith("/docs/GOVOPLAN_MASTER_ROADMAP.md"):
|
if text.endswith("/docs/GOVOPLAN_MASTER_ROADMAP.md"):
|
||||||
return True
|
return True
|
||||||
if text.endswith("/addideas-govoplan-website/TODO.md"):
|
if text.endswith(("/govoplan-website/TODO.md", "/addideas-govoplan-website/TODO.md")):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ MODULE_LABEL_BY_REPO = {
|
|||||||
"govoplan-mail": "module/mail",
|
"govoplan-mail": "module/mail",
|
||||||
"govoplan-files": "module/files",
|
"govoplan-files": "module/files",
|
||||||
"govoplan-campaign": "module/campaign",
|
"govoplan-campaign": "module/campaign",
|
||||||
"addideas-govoplan-website": "area/marketing",
|
"govoplan-website": "area/marketing",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ def infer_module_label(root: pathlib.Path) -> str:
|
|||||||
"govoplan-mail": "module/mail",
|
"govoplan-mail": "module/mail",
|
||||||
"govoplan-files": "module/files",
|
"govoplan-files": "module/files",
|
||||||
"govoplan-campaign": "module/campaign",
|
"govoplan-campaign": "module/campaign",
|
||||||
"addideas-govoplan-website": "area/marketing",
|
"govoplan-website": "area/marketing",
|
||||||
}
|
}
|
||||||
if root.name in known:
|
if root.name in known:
|
||||||
return known[root.name]
|
return known[root.name]
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ def executor_spec(plan_step: dict[str, Any]) -> ExecutorSpec | None:
|
|||||||
spec
|
spec
|
||||||
if plan_step.get("repo") is None
|
if plan_step.get("repo") is None
|
||||||
and isinstance(binding, dict)
|
and isinstance(binding, dict)
|
||||||
and binding.get("repo") == "addideas-govoplan-website"
|
and binding.get("repo") == "govoplan-website"
|
||||||
else None
|
else None
|
||||||
)
|
)
|
||||||
repo = plan_step.get("repo")
|
repo = plan_step.get("repo")
|
||||||
@@ -233,7 +233,7 @@ def bind_plan_source_states(
|
|||||||
bindings[repo] = None
|
bindings[repo] = None
|
||||||
try:
|
try:
|
||||||
website_binding = repository_state_receipt(
|
website_binding = repository_state_receipt(
|
||||||
repo="addideas-govoplan-website",
|
repo="govoplan-website",
|
||||||
target_tag="",
|
target_tag="",
|
||||||
workspace_root=workspace_root,
|
workspace_root=workspace_root,
|
||||||
include_website=True,
|
include_website=True,
|
||||||
@@ -1665,7 +1665,7 @@ def verify_catalog_publication_precondition(
|
|||||||
*, plan_step: dict[str, Any], workspace_root: Path
|
*, plan_step: dict[str, Any], workspace_root: Path
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
current = repository_state_receipt(
|
current = repository_state_receipt(
|
||||||
repo="addideas-govoplan-website",
|
repo="govoplan-website",
|
||||||
target_tag="",
|
target_tag="",
|
||||||
workspace_root=workspace_root,
|
workspace_root=workspace_root,
|
||||||
include_website=True,
|
include_website=True,
|
||||||
@@ -3052,7 +3052,7 @@ def reconciled_catalog_publication_receipt(
|
|||||||
|
|
||||||
web_root = website_root(workspace_root)
|
web_root = website_root(workspace_root)
|
||||||
current = repository_state_receipt(
|
current = repository_state_receipt(
|
||||||
repo="addideas-govoplan-website",
|
repo="govoplan-website",
|
||||||
target_tag="",
|
target_tag="",
|
||||||
workspace_root=workspace_root,
|
workspace_root=workspace_root,
|
||||||
include_website=True,
|
include_website=True,
|
||||||
@@ -3181,7 +3181,7 @@ def _validated_website_binding(value: object) -> dict[str, Any]:
|
|||||||
if (
|
if (
|
||||||
not isinstance(value, dict)
|
not isinstance(value, dict)
|
||||||
or value.get("kind") != "repository_state"
|
or value.get("kind") != "repository_state"
|
||||||
or value.get("repo") != "addideas-govoplan-website"
|
or value.get("repo") != "govoplan-website"
|
||||||
or value.get("remote") != DURABLE_REMOTE
|
or value.get("remote") != DURABLE_REMOTE
|
||||||
or value.get("target_tag") != ""
|
or value.get("target_tag") != ""
|
||||||
or value.get("tag_object") is not None
|
or value.get("tag_object") is not None
|
||||||
|
|||||||
@@ -56,4 +56,4 @@ def core_root(workspace_root: Path) -> Path:
|
|||||||
|
|
||||||
|
|
||||||
def website_root(workspace_root: Path) -> Path:
|
def website_root(workspace_root: Path) -> Path:
|
||||||
return workspace_root / "addideas-govoplan-website"
|
return workspace_root / "govoplan-website"
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ Usage:
|
|||||||
tools/release/publish-release-catalog.sh --version <x.y.z> --catalog-signing-key <key-id=/path/private.pem> [options]
|
tools/release/publish-release-catalog.sh --version <x.y.z> --catalog-signing-key <key-id=/path/private.pem> [options]
|
||||||
|
|
||||||
Generates a signed module package catalog for a GovOPlaN release, writes it into
|
Generates a signed module package catalog for a GovOPlaN release, writes it into
|
||||||
addideas-govoplan-website/public/catalogs/v1, validates it, optionally builds the website,
|
govoplan-website/public/catalogs/v1, validates it, optionally builds the website,
|
||||||
and optionally commits/tags/pushes addideas-govoplan-website.
|
and optionally commits/tags/pushes govoplan-website.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--version <x.y.z> Release version without leading v.
|
--version <x.y.z> Release version without leading v.
|
||||||
@@ -19,15 +19,15 @@ Options:
|
|||||||
--catalog-signing-key <key-id=/path/private.pem>
|
--catalog-signing-key <key-id=/path/private.pem>
|
||||||
Ed25519 private key. May be repeated for rotation.
|
Ed25519 private key. May be repeated for rotation.
|
||||||
--core-root <path> govoplan-core checkout. Defaults to ../govoplan-core.
|
--core-root <path> govoplan-core checkout. Defaults to ../govoplan-core.
|
||||||
--web-root <path> addideas-govoplan-website checkout. Defaults to ../addideas-govoplan-website.
|
--web-root <path> govoplan-website checkout. Defaults to ../govoplan-website.
|
||||||
--public-base-url <url> Public website URL. Defaults to https://govoplan.add-ideas.de.
|
--public-base-url <url> Public website URL. Defaults to https://govoplan.add-ideas.de.
|
||||||
--npm <path> npm executable used for optional web build.
|
--npm <path> npm executable used for optional web build.
|
||||||
--build-web Run npm run build in addideas-govoplan-website after generating files.
|
--build-web Run npm run build in govoplan-website after generating files.
|
||||||
--commit Commit generated catalog files in addideas-govoplan-website.
|
--commit Commit generated catalog files in govoplan-website.
|
||||||
--tag Tag addideas-govoplan-website with catalog-v<x.y.z>. Implies --commit.
|
--tag Tag govoplan-website with catalog-v<x.y.z>. Implies --commit.
|
||||||
--push Push addideas-govoplan-website branch and tag. Implies --commit.
|
--push Push govoplan-website branch and tag. Implies --commit.
|
||||||
--remote <name> Git remote for push. Defaults to origin.
|
--remote <name> Git remote for push. Defaults to origin.
|
||||||
--branch <name> Branch to push. Defaults to current addideas-govoplan-website branch.
|
--branch <name> Branch to push. Defaults to current govoplan-website branch.
|
||||||
-n, --dry-run Print commands and validate inputs without writing git changes.
|
-n, --dry-run Print commands and validate inputs without writing git changes.
|
||||||
-h, --help Show this help.
|
-h, --help Show this help.
|
||||||
USAGE
|
USAGE
|
||||||
@@ -42,7 +42,7 @@ META_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|||||||
PARENT="$(dirname "$META_ROOT")"
|
PARENT="$(dirname "$META_ROOT")"
|
||||||
CORE_ROOT="${GOVOPLAN_CORE_ROOT:-$PARENT/govoplan-core}"
|
CORE_ROOT="${GOVOPLAN_CORE_ROOT:-$PARENT/govoplan-core}"
|
||||||
CORE_ROOT="$(cd "$CORE_ROOT" && pwd)"
|
CORE_ROOT="$(cd "$CORE_ROOT" && pwd)"
|
||||||
WEB_ROOT="$PARENT/addideas-govoplan-website"
|
WEB_ROOT="$PARENT/govoplan-website"
|
||||||
VERSION=""
|
VERSION=""
|
||||||
CHANNEL="stable"
|
CHANNEL="stable"
|
||||||
SEQUENCE=""
|
SEQUENCE=""
|
||||||
@@ -176,14 +176,14 @@ done
|
|||||||
[[ "$PROFILE" == "base" || "$PROFILE" == "full" ]] || fail "profile must be base or full: $PROFILE"
|
[[ "$PROFILE" == "base" || "$PROFILE" == "full" ]] || fail "profile must be base or full: $PROFILE"
|
||||||
[[ ${#SIGNING_KEYS[@]} -gt 0 ]] || fail "at least one --catalog-signing-key is required"
|
[[ ${#SIGNING_KEYS[@]} -gt 0 ]] || fail "at least one --catalog-signing-key is required"
|
||||||
[[ -d "$CORE_ROOT/.git" ]] || fail "not a govoplan-core git repo: $CORE_ROOT"
|
[[ -d "$CORE_ROOT/.git" ]] || fail "not a govoplan-core git repo: $CORE_ROOT"
|
||||||
[[ -d "$WEB_ROOT/.git" ]] || fail "not an addideas-govoplan-website git repo: $WEB_ROOT"
|
[[ -d "$WEB_ROOT/.git" ]] || fail "not an govoplan-website git repo: $WEB_ROOT"
|
||||||
command -v "$PYTHON" >/dev/null 2>&1 || fail "Python not found: $PYTHON"
|
command -v "$PYTHON" >/dev/null 2>&1 || fail "Python not found: $PYTHON"
|
||||||
command -v "$NPM_BIN" >/dev/null 2>&1 || fail "npm not found: $NPM_BIN"
|
command -v "$NPM_BIN" >/dev/null 2>&1 || fail "npm not found: $NPM_BIN"
|
||||||
|
|
||||||
if [[ -z "$BRANCH" ]]; then
|
if [[ -z "$BRANCH" ]]; then
|
||||||
BRANCH="$(git -C "$WEB_ROOT" symbolic-ref --quiet --short HEAD || true)"
|
BRANCH="$(git -C "$WEB_ROOT" symbolic-ref --quiet --short HEAD || true)"
|
||||||
fi
|
fi
|
||||||
[[ -n "$BRANCH" ]] || fail "cannot infer addideas-govoplan-website branch; pass --branch"
|
[[ -n "$BRANCH" ]] || fail "cannot infer govoplan-website branch; pass --branch"
|
||||||
|
|
||||||
CATALOG_PATH="$WEB_ROOT/public/catalogs/v1/channels/$CHANNEL.json"
|
CATALOG_PATH="$WEB_ROOT/public/catalogs/v1/channels/$CHANNEL.json"
|
||||||
KEYRING_PATH="$WEB_ROOT/public/catalogs/v1/keyring.json"
|
KEYRING_PATH="$WEB_ROOT/public/catalogs/v1/keyring.json"
|
||||||
@@ -257,7 +257,7 @@ if [[ "$COMMIT" -eq 1 ]]; then
|
|||||||
run git -C "$WEB_ROOT" add -A "$CATALOG_PATH" "$KEYRING_PATH" "$MODULE_DIRECTORY_PATH"
|
run git -C "$WEB_ROOT" add -A "$CATALOG_PATH" "$KEYRING_PATH" "$MODULE_DIRECTORY_PATH"
|
||||||
if [[ "$DRY_RUN" -eq 0 ]]; then
|
if [[ "$DRY_RUN" -eq 0 ]]; then
|
||||||
if git -C "$WEB_ROOT" diff --cached --quiet; then
|
if git -C "$WEB_ROOT" diff --cached --quiet; then
|
||||||
echo "No addideas-govoplan-website catalog changes to commit."
|
echo "No govoplan-website catalog changes to commit."
|
||||||
else
|
else
|
||||||
run git -C "$WEB_ROOT" commit -m "Publish GovOPlaN v$VERSION $CHANNEL catalog"
|
run git -C "$WEB_ROOT" commit -m "Publish GovOPlaN v$VERSION $CHANNEL catalog"
|
||||||
fi
|
fi
|
||||||
@@ -268,7 +268,7 @@ fi
|
|||||||
|
|
||||||
if [[ "$TAG_WEB" -eq 1 ]]; then
|
if [[ "$TAG_WEB" -eq 1 ]]; then
|
||||||
if git -C "$WEB_ROOT" rev-parse --quiet --verify "refs/tags/$TAG_NAME" >/dev/null; then
|
if git -C "$WEB_ROOT" rev-parse --quiet --verify "refs/tags/$TAG_NAME" >/dev/null; then
|
||||||
fail "addideas-govoplan-website tag already exists: $TAG_NAME"
|
fail "govoplan-website tag already exists: $TAG_NAME"
|
||||||
fi
|
fi
|
||||||
run git -C "$WEB_ROOT" tag -a "$TAG_NAME" -m "Publish GovOPlaN v$VERSION $CHANNEL catalog"
|
run git -C "$WEB_ROOT" tag -a "$TAG_NAME" -m "Publish GovOPlaN v$VERSION $CHANNEL catalog"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ Options:
|
|||||||
latest migration release baseline.
|
latest migration release baseline.
|
||||||
--skip-migration-audit Do not run the release migration audit.
|
--skip-migration-audit Do not run the release migration audit.
|
||||||
--publish-web-catalog After core/modules are pushed, publish a signed release
|
--publish-web-catalog After core/modules are pushed, publish a signed release
|
||||||
catalog into addideas-govoplan-website.
|
catalog into govoplan-website.
|
||||||
--web-root <path> addideas-govoplan-website checkout for --publish-web-catalog.
|
--web-root <path> govoplan-website checkout for --publish-web-catalog.
|
||||||
Defaults to ../addideas-govoplan-website.
|
Defaults to ../govoplan-website.
|
||||||
--catalog-signing-key <key-id=/path/private.pem>
|
--catalog-signing-key <key-id=/path/private.pem>
|
||||||
Catalog signing key for --publish-web-catalog. May be
|
Catalog signing key for --publish-web-catalog. May be
|
||||||
repeated during key rotation.
|
repeated during key rotation.
|
||||||
@@ -44,7 +44,7 @@ Options:
|
|||||||
--catalog-public-url <url>
|
--catalog-public-url <url>
|
||||||
Public website URL. Defaults to
|
Public website URL. Defaults to
|
||||||
https://govoplan.add-ideas.de.
|
https://govoplan.add-ideas.de.
|
||||||
--build-web-catalog Run npm run build in addideas-govoplan-website before committing the
|
--build-web-catalog Run npm run build in govoplan-website before committing the
|
||||||
catalog update.
|
catalog update.
|
||||||
--npm <path> npm executable for lockfile generation.
|
--npm <path> npm executable for lockfile generation.
|
||||||
-y, --yes Do not prompt before committing, tagging, and pushing.
|
-y, --yes Do not prompt before committing, tagging, and pushing.
|
||||||
@@ -174,7 +174,7 @@ GENERATE_RELEASE_LOCK=1
|
|||||||
MIGRATION_AUDIT_MODE="auto"
|
MIGRATION_AUDIT_MODE="auto"
|
||||||
NPM_BIN="${NPM:-}"
|
NPM_BIN="${NPM:-}"
|
||||||
PUBLISH_WEB_CATALOG=0
|
PUBLISH_WEB_CATALOG=0
|
||||||
WEB_ROOT="$PARENT/addideas-govoplan-website"
|
WEB_ROOT="$PARENT/govoplan-website"
|
||||||
CATALOG_CHANNEL="stable"
|
CATALOG_CHANNEL="stable"
|
||||||
CATALOG_SEQUENCE=""
|
CATALOG_SEQUENCE=""
|
||||||
CATALOG_EXPIRES_DAYS="90"
|
CATALOG_EXPIRES_DAYS="90"
|
||||||
@@ -813,7 +813,7 @@ if ! command -v "$NPM_BIN" >/dev/null 2>&1; then
|
|||||||
fail "npm executable not found: $NPM_BIN"
|
fail "npm executable not found: $NPM_BIN"
|
||||||
fi
|
fi
|
||||||
if [[ "$PUBLISH_WEB_CATALOG" -eq 1 ]]; then
|
if [[ "$PUBLISH_WEB_CATALOG" -eq 1 ]]; then
|
||||||
[[ -d "$WEB_ROOT/.git" ]] || fail "addideas-govoplan-website repo not found: $WEB_ROOT"
|
[[ -d "$WEB_ROOT/.git" ]] || fail "govoplan-website repo not found: $WEB_ROOT"
|
||||||
[[ -x "$META_ROOT/tools/release/publish-release-catalog.sh" ]] || fail "missing executable catalog publisher: $META_ROOT/tools/release/publish-release-catalog.sh"
|
[[ -x "$META_ROOT/tools/release/publish-release-catalog.sh" ]] || fail "missing executable catalog publisher: $META_ROOT/tools/release/publish-release-catalog.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -521,7 +521,7 @@ def migration_findings(migration_audits: dict[str, dict[str, Any]], *, target_ve
|
|||||||
|
|
||||||
|
|
||||||
def collect_catalog_state(*, workspace_root: Path, target_version: str | None, online: bool) -> dict[str, Any]:
|
def collect_catalog_state(*, workspace_root: Path, target_version: str | None, online: bool) -> dict[str, Any]:
|
||||||
web_root = workspace_root / "addideas-govoplan-website"
|
web_root = workspace_root / "govoplan-website"
|
||||||
catalog_path = web_root / "public" / "catalogs" / "v1" / "channels" / "stable.json"
|
catalog_path = web_root / "public" / "catalogs" / "v1" / "channels" / "stable.json"
|
||||||
keyring_path = web_root / "public" / "catalogs" / "v1" / "keyring.json"
|
keyring_path = web_root / "public" / "catalogs" / "v1" / "keyring.json"
|
||||||
state: dict[str, Any] = {
|
state: dict[str, Any] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user