Skip to content

Commit 7bd83eb

Browse files
authored
fix: defer keyring initialization to prevent build-time keychain errors (goharbor#562)
Signed-off-by: Rui Chen <rui@chenrui.dev>
1 parent 7d1568b commit 7bd83eb

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

pkg/utils/encryption.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"os"
2424
"path/filepath"
2525
"strings"
26+
"sync"
2627

2728
"github.com/sirupsen/logrus"
2829
"github.com/zalando/go-keyring"
@@ -35,10 +36,12 @@ type KeyringProvider interface {
3536
}
3637

3738
var keyringProvider KeyringProvider
39+
var keyringProviderOnce sync.Once
3840

39-
func init() {
40-
// Initialize with the appropriate provider
41-
keyringProvider = GetKeyringProvider()
41+
func ensureKeyringProvider() {
42+
keyringProviderOnce.Do(func() {
43+
keyringProvider = GetKeyringProvider()
44+
})
4245
}
4346

4447
type SystemKeyring struct{}
@@ -162,6 +165,7 @@ const KeyringService = "harbor-cli"
162165
const KeyringUser = "harbor-cli-encryption-key"
163166

164167
func GenerateEncryptionKey() error {
168+
ensureKeyringProvider()
165169
existingKey, err := keyringProvider.Get(KeyringService, KeyringUser)
166170
if err == nil && existingKey != "" {
167171
return nil
@@ -175,6 +179,7 @@ func GenerateEncryptionKey() error {
175179
}
176180

177181
func GetEncryptionKey() ([]byte, error) {
182+
ensureKeyringProvider()
178183
keyBase64, err := keyringProvider.Get(KeyringService, KeyringUser)
179184
if err != nil || keyBase64 == "" {
180185
// Attempt to generate a new key if not found

0 commit comments

Comments
 (0)