mirror of
https://github.com/d9pouces/id_configurator.git
synced 2026-11-09 01:47:21 +01:00
6b6bc541dd
Signed-off-by: d9pouces <github@19pouces.net>
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
"""Configure Composer to use the configured PhpRepository entries instead of
|
|
(in addition to) Packagist.
|
|
|
|
Composer has no "replace the default registry" switch either: Packagist
|
|
stays enabled unless a repository is explicitly declared under the name
|
|
"packagist.org" and disabled. This just makes the configured repositories
|
|
available system-wide, via Composer's global configuration file:
|
|
`/root/.composer/config.json` (`COMPOSER_HOME/config.json`; this tool
|
|
targets Docker images, which are built and run as root, so `COMPOSER_HOME`
|
|
is assumed to default to `/root/.composer`, exactly like a fresh Composer
|
|
install does when not overridden).
|
|
|
|
Composer's own HTTPS client (PHP's stream wrapper, generally backed by
|
|
curl) already trusts whatever the `certificates` module installs into the
|
|
system CA store, so no per-repository certificate configuration is needed
|
|
here, unlike Poetry's.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import logging
|
|
|
|
from id_configurator.config import PhpRepository
|
|
from id_configurator.context import Context
|
|
from id_configurator.modules.base import Module, register
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_COMPOSER_CONFIG = "root/.composer/config.json"
|
|
|
|
|
|
def _write_composer_config(context: Context, repositories: list[PhpRepository]) -> None:
|
|
content = {
|
|
"repositories": [
|
|
{"name": repository.name, "type": "composer", "url": repository.url}
|
|
for repository in repositories
|
|
]
|
|
}
|
|
context.write_file(
|
|
_COMPOSER_CONFIG, (json.dumps(content, indent=4) + "\n").encode("utf-8")
|
|
)
|
|
logger.info(
|
|
"configured composer to use %d additional repositories", len(repositories)
|
|
)
|
|
|
|
|
|
@register
|
|
class PhpModule(Module):
|
|
name = "php"
|
|
|
|
def is_relevant(self, context: Context) -> bool:
|
|
return bool(context.config.configurations.php.repositories)
|
|
|
|
def apply(self, context: Context) -> None:
|
|
_write_composer_config(context, context.config.configurations.php.repositories)
|