feat: auto detect hostname

This commit is contained in:
Romain Bertrand 2026-01-05 12:47:28 +01:00
parent 2c27823e18
commit c0baf4fa3b
13 changed files with 300 additions and 125 deletions

View file

@ -219,7 +219,7 @@ func runRunList(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -277,7 +277,7 @@ func runRunView(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -507,7 +507,7 @@ func runActionsSecretList(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -550,7 +550,7 @@ func runActionsSecretCreate(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -591,7 +591,7 @@ func runActionsSecretDelete(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -626,7 +626,7 @@ func runActionsVariableGet(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -654,7 +654,7 @@ func runActionsVariableCreate(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -683,7 +683,7 @@ func runActionsVariableUpdate(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}
@ -712,7 +712,7 @@ func runActionsVariableDelete(cmd *cobra.Command, args []string) error {
return fmt.Errorf("failed to load config: %w", err)
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return fmt.Errorf("failed to create client: %w", err)
}

View file

@ -108,7 +108,7 @@ func runIssueList(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -166,7 +166,7 @@ func runIssueView(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -220,7 +220,7 @@ func runIssueCreate(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -261,7 +261,7 @@ func runIssueComment(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -296,7 +296,7 @@ func runIssueClose(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -339,7 +339,7 @@ func runIssueEdit(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}

View file

@ -11,7 +11,6 @@ import (
"github.com/spf13/cobra"
"codeberg.org/romaintb/fgj/internal/api"
"codeberg.org/romaintb/fgj/internal/config"
"codeberg.org/romaintb/fgj/internal/git"
)
var prCmd = &cobra.Command{
@ -88,7 +87,7 @@ func runPRList(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -144,7 +143,7 @@ func runPRView(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -198,7 +197,7 @@ func runPRCreate(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -252,7 +251,7 @@ func runPRMerge(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -281,21 +280,3 @@ func runPRMerge(cmd *cobra.Command, args []string) error {
return nil
}
func parseRepo(repo string) (string, string, error) {
// If repo flag is provided, use it
if repo != "" {
parts := strings.Split(repo, "/")
if len(parts) != 2 {
return "", "", fmt.Errorf("invalid repository format: %s (expected: owner/name)", repo)
}
return parts[0], parts[1], nil
}
// Try to auto-detect from git
owner, name, err := git.DetectRepo()
if err != nil {
return "", "", fmt.Errorf("repository flag is required (use -R owner/name) or run from a git repository: %w", err)
}
return owner, name, nil
}

View file

@ -111,7 +111,7 @@ func runReleaseList(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -176,7 +176,7 @@ func runReleaseView(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -258,7 +258,7 @@ func runReleaseCreate(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -309,7 +309,7 @@ func runReleaseUpload(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -341,7 +341,7 @@ func runReleaseDelete(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}

View file

@ -76,7 +76,7 @@ func runRepoView(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -108,7 +108,7 @@ func runRepoList(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -160,7 +160,7 @@ func runRepoClone(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}
@ -221,7 +221,7 @@ func runRepoFork(cmd *cobra.Command, args []string) error {
return err
}
client, err := api.NewClientFromConfig(cfg, "")
client, err := api.NewClientFromConfig(cfg, "", getDetectedHost())
if err != nil {
return err
}

View file

@ -3,9 +3,11 @@ package cmd
import (
"fmt"
"os"
"strings"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"codeberg.org/romaintb/fgj/internal/git"
)
var cfgFile string
@ -53,3 +55,34 @@ func initConfig() {
_ = viper.ReadInConfig()
}
// parseRepo parses the repository string in the format "owner/name".
// If not provided, it attempts to auto-detect from the git repository.
func parseRepo(repo string) (string, string, error) {
// If repo flag is provided, use it
if repo != "" {
parts := strings.Split(repo, "/")
if len(parts) != 2 {
return "", "", fmt.Errorf("invalid repository format: %s (expected: owner/name)", repo)
}
return parts[0], parts[1], nil
}
// Try to auto-detect from git
owner, name, err := git.DetectRepo()
if err != nil {
return "", "", fmt.Errorf("repository flag is required (use -R owner/name) or run from a git repository: %w", err)
}
return owner, name, nil
}
// getDetectedHost attempts to auto-detect the Forgejo instance hostname.
// Returns empty string if detection fails, which will fall back to other methods.
func getDetectedHost() string {
host, err := git.DetectHost()
if err != nil {
return ""
}
return host
}