Add the ability to set tools download source (Gitea)

This change adds 2 new options to gitea forge endpoints:

* Tools metadata URL
* Use internal tools URLs

By default, GARM looks in the releases page of the gitea arc_runner
to determine where it can download the runner binary from for a particular
OS/arch. The tools metadata URL option can be set on an endpoint and can point
to a mirror of the upstream repo. The requirement is that the asset names
exactly mirror upstream naming conventions.

The second option disables GARM calling out to the tools metadata URL entirely.
GARM has some hardcoded values for nightly binaries. If this option is checked,
GARM will use those values, without making any kind of outgoing API call to
determine availability. This is useful in air-gapped environments.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
This commit is contained in:
Gabriel Adrian Samfira 2025-09-26 15:03:19 +00:00 committed by Gabriel
parent 56618473d1
commit 5fdb69ac18
91 changed files with 700 additions and 185 deletions

View file

@ -30,6 +30,7 @@ import (
"github.com/cloudbase/garm/auth"
dbCommon "github.com/cloudbase/garm/database/common"
"github.com/cloudbase/garm/params"
"github.com/cloudbase/garm/util/appdefaults"
)
func (s *sqlDatabase) sqlToParamsInstance(instance Instance) (params.Instance, error) {
@ -952,7 +953,7 @@ func (s *sqlDatabase) sqlGiteaToCommonForgeCredentials(creds GiteaCredentials) (
}
func (s *sqlDatabase) sqlToCommonGithubEndpoint(ep GithubEndpoint) (params.ForgeEndpoint, error) {
return params.ForgeEndpoint{
ret := params.ForgeEndpoint{
Name: ep.Name,
Description: ep.Description,
APIBaseURL: ep.APIBaseURL,
@ -962,7 +963,16 @@ func (s *sqlDatabase) sqlToCommonGithubEndpoint(ep GithubEndpoint) (params.Forge
CreatedAt: ep.CreatedAt,
EndpointType: ep.EndpointType,
UpdatedAt: ep.UpdatedAt,
}, nil
}
if ep.EndpointType == params.GiteaEndpointType {
ret.UseInternalToolsMetadata = &ep.UseInternalToolsMetadata
if ep.ToolsMetadataURL == "" {
ret.ToolsMetadataURL = appdefaults.GiteaRunnerReleasesURL
} else {
ret.ToolsMetadataURL = ep.ToolsMetadataURL
}
}
return ret, nil
}
func getUIDFromContext(ctx context.Context) (uuid.UUID, error) {