feat: read repository base URL from workflow vars

This commit is contained in:
Micheal Wilkinson
2026-03-20 23:52:12 +00:00
parent 6a83abe4db
commit 1959aa33d8
3 changed files with 42 additions and 4 deletions

View File

@@ -126,6 +126,7 @@ runs:
env:
VOCIFERATE_BIN: ${{ steps.resolve-binary.outputs.binary_path }}
USE_BINARY: ${{ steps.resolve-binary.outputs.use_binary }}
VOCIFERATE_REPOSITORY_URL: ${{ vars.VOCIFERATE_REPOSITORY_URL }}
run: |
set -euo pipefail

View File

@@ -337,10 +337,13 @@ func readLatestChangelogVersion(rootDir, changelogPath string) (string, bool, er
func deriveRepositoryURL(rootDir string) (string, bool) {
override := strings.TrimSpace(os.Getenv("VOCIFERATE_REPOSITORY_URL"))
if override != "" {
if normalized, ok := normalizeRepoURL(override); ok {
return normalized, true
repositoryPath, ok := deriveRepositoryPath(rootDir)
if !ok {
return "", false
}
return strings.TrimSuffix(override, "/"), true
baseURL := strings.TrimSuffix(strings.TrimSpace(override), "/")
return baseURL + "/" + repositoryPath, true
}
serverURL := strings.TrimSpace(os.Getenv("GITHUB_SERVER_URL"))
@@ -368,6 +371,38 @@ func deriveRepositoryURL(rootDir string) (string, bool) {
return repoURL, true
}
func deriveRepositoryPath(rootDir string) (string, bool) {
repository := strings.TrimSpace(os.Getenv("GITHUB_REPOSITORY"))
if repository != "" {
return strings.TrimPrefix(repository, "/"), true
}
gitConfigPath := filepath.Join(rootDir, ".git", "config")
contents, err := os.ReadFile(gitConfigPath)
if err != nil {
return "", false
}
remoteURL, ok := originRemoteURLFromGitConfig(string(contents))
if !ok {
return "", false
}
repoURL, ok := normalizeRepoURL(remoteURL)
if !ok {
return "", false
}
parsedURL := strings.TrimPrefix(repoURL, "https://")
parsedURL = strings.TrimPrefix(parsedURL, "http://")
slash := strings.Index(parsedURL, "/")
if slash == -1 || slash == len(parsedURL)-1 {
return "", false
}
return parsedURL[slash+1:], true
}
func originRemoteURLFromGitConfig(config string) (string, bool) {
inOrigin := false
for _, line := range strings.Split(config, "\n") {
@@ -403,7 +438,8 @@ func normalizeRepoURL(remoteURL string) (string, bool) {
}
if strings.HasPrefix(remoteURL, "http://") || strings.HasPrefix(remoteURL, "https://") {
return strings.TrimSuffix(remoteURL, ".git"), true
normalized := strings.TrimSuffix(strings.TrimSuffix(remoteURL, "/"), ".git")
return normalized, true
}
if strings.HasPrefix(remoteURL, "ssh://") {

View File

@@ -142,6 +142,7 @@ runs:
VOCIFERATE_BIN: ${{ steps.resolve-binary.outputs.binary_path }}
USE_BINARY: ${{ steps.resolve-binary.outputs.use_binary }}
INPUT_VERSION: ${{ inputs.version }}
VOCIFERATE_REPOSITORY_URL: ${{ vars.VOCIFERATE_REPOSITORY_URL }}
run: |
set -euo pipefail