mirror of
https://github.com/d9pouces/id_configurator.git
synced 2026-11-09 01:47:21 +01:00
bf56cdfcd2
Signed-off-by: d9pouces <github@19pouces.net>
56 lines
2.3 KiB
Python
56 lines
2.3 KiB
Python
"""Configure the Go toolchain to use the configured GoRepository entries as
|
|
its module proxy (GOPROXY), replacing the default (proxy.golang.org). Since
|
|
an air-gapped mirror won't be listed in the public checksum database and
|
|
sum.golang.org is unreachable anyway, GOSUMDB is also turned off - each
|
|
module's hash is then simply trusted on first use, exactly as it would be
|
|
for any other GOPROXY.
|
|
|
|
Go's own HTTPS client already trusts whatever the `certificates` module
|
|
installs into the system CA store, so no separate certificate configuration
|
|
is needed here, unlike npm's.
|
|
|
|
Written to `$GOROOT/go.env`, which `$GOROOT` defaults to `/usr/local/go` for
|
|
essentially every standard Go install (the official Docker image included);
|
|
unlike a config dropped in one specific user's home, this applies regardless
|
|
of which user invokes `go`. The go command reads `$GOROOT/go.env` as a
|
|
fallback whenever a setting is not already present in a higher-precedence
|
|
level - in particular the per-user `go env -w` file (found at
|
|
`os.UserConfigDir()/go/env`, e.g. `$HOME/.config/go/env`), which this module
|
|
also writes for each configured `--user` (`context.users`), so that one
|
|
takes precedence should that user ever run `go env -w` themselves.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from id_configurator.config import GoRepository
|
|
from id_configurator.context import Context
|
|
from id_configurator.modules.base import Module, register
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_GO_ENV = "usr/local/go/go.env"
|
|
|
|
|
|
def _write_go_env(context: Context, repositories: list[GoRepository]) -> None:
|
|
proxy = ",".join(repository.url for repository in repositories)
|
|
lines = [f"GOPROXY={proxy}", "GOSUMDB=off"]
|
|
content = ("\n".join(lines) + "\n").encode("utf-8")
|
|
context.write_file(_GO_ENV, content)
|
|
for user in context.users:
|
|
context.write_file(f"{context.home_dir(user)}/.config/go/env", content)
|
|
logger.info("configured go for user %s", user)
|
|
logger.info("configured go to use %d module prox(y/ies)", len(repositories))
|
|
|
|
|
|
@register
|
|
class GoModule(Module):
|
|
name = "go"
|
|
|
|
def is_relevant(self, context: Context) -> bool:
|
|
return bool(context.config.configurations.go.repositories)
|
|
|
|
def apply(self, context: Context) -> None:
|
|
_write_go_env(context, context.config.configurations.go.repositories)
|