fix(cmd): improve editor selection logic in edit command
* Enhance the editor selection to check for nvim and nano before defaulting to vi. * Return an error if no suitable editor is found. fix(cmd): track unchanged units in syncup command * Add tracking for unchanged units during syncup process. * Update completion message to include count of unchanged units. fix(runtime): change command type to slice in podman container * Update command field in podmanContainer struct to be a slice of strings. * Adjust ListRunning method to join command slice into a single string for output. fix(ci): enhance release notes generation in workflow * Collect commit messages since the last tag for release notes. * Format release body to include detailed change log.
This commit is contained in:
@@ -58,10 +58,23 @@ jobs:
|
|||||||
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
TAG="${{ github.event.inputs.tag || github.ref_name }}"
|
||||||
API="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases"
|
API="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases"
|
||||||
|
|
||||||
|
# Collect commits since the previous tag (or last 20 if no prior tag)
|
||||||
|
PREV_TAG=$(git tag --sort=-version:refname | grep -v "^${TAG}$" | head -1)
|
||||||
|
if [ -n "$PREV_TAG" ]; then
|
||||||
|
RANGE="${PREV_TAG}..${TAG}"
|
||||||
|
else
|
||||||
|
RANGE="HEAD~20..HEAD"
|
||||||
|
fi
|
||||||
|
NOTES=$(git log "$RANGE" --pretty=format:"- %s" --no-merges)
|
||||||
|
BODY="## What's changed"$'\n'"${NOTES}"
|
||||||
|
|
||||||
|
# Escape for JSON
|
||||||
|
BODY_JSON=$(printf '%s' "$BODY" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))')
|
||||||
|
|
||||||
RELEASE=$(curl -s -X POST "$API" \
|
RELEASE=$(curl -s -X POST "$API" \
|
||||||
-H "Authorization: token ${GITHUB_TOKEN}" \
|
-H "Authorization: token ${GITHUB_TOKEN}" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\",\"body\":\"Release ${TAG}\"}")
|
-d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\",\"body\":${BODY_JSON}}")
|
||||||
|
|
||||||
UPLOAD_URL=$(echo "$RELEASE" | grep -o '"upload_url":"[^"]*"' | cut -d'"' -f4)
|
UPLOAD_URL=$(echo "$RELEASE" | grep -o '"upload_url":"[^"]*"' | cut -d'"' -f4)
|
||||||
if [ -z "$UPLOAD_URL" ]; then
|
if [ -z "$UPLOAD_URL" ]; then
|
||||||
|
|||||||
10
cmd/edit.go
10
cmd/edit.go
@@ -21,7 +21,15 @@ func init() {
|
|||||||
func runEdit(cmd *cobra.Command, args []string) error {
|
func runEdit(cmd *cobra.Command, args []string) error {
|
||||||
editor := os.Getenv("EDITOR")
|
editor := os.Getenv("EDITOR")
|
||||||
if editor == "" {
|
if editor == "" {
|
||||||
editor = "vi"
|
for _, e := range []string{"nvim", "nano", "vi"} {
|
||||||
|
if _, err := exec.LookPath(e); err == nil {
|
||||||
|
editor = e
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if editor == "" {
|
||||||
|
return fmt.Errorf("no editor found; set $EDITOR")
|
||||||
}
|
}
|
||||||
c := exec.Command(editor, configPath)
|
c := exec.Command(editor, configPath)
|
||||||
c.Stdin = os.Stdin
|
c.Stdin = os.Stdin
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ func runSyncup(cmd *cobra.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
added := 0
|
added := 0
|
||||||
|
unchanged := 0
|
||||||
discovered := map[string]bool{}
|
discovered := map[string]bool{}
|
||||||
|
|
||||||
// Discover running containers across all runtimes
|
// Discover running containers across all runtimes
|
||||||
@@ -51,6 +52,8 @@ func runSyncup(cmd *cobra.Command, args []string) error {
|
|||||||
if cfg.AddUnit(unit) {
|
if cfg.AddUnit(unit) {
|
||||||
fmt.Printf(" + added: %s (%s)\n", c.Name, c.Runtime)
|
fmt.Printf(" + added: %s (%s)\n", c.Name, c.Runtime)
|
||||||
added++
|
added++
|
||||||
|
} else {
|
||||||
|
unchanged++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,6 +89,6 @@ func runSyncup(cmd *cobra.Command, args []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("\nDone. Added: %d Disabled: %d Re-enabled: %d\n", added, disabled, reenabled)
|
fmt.Printf("\nDone. Added: %d Unchanged: %d Disabled: %d Re-enabled: %d\n", added, unchanged, disabled, reenabled)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ type podmanContainer struct {
|
|||||||
ID string `json:"Id"`
|
ID string `json:"Id"`
|
||||||
Names []string `json:"Names"`
|
Names []string `json:"Names"`
|
||||||
Image string `json:"Image"`
|
Image string `json:"Image"`
|
||||||
Command string `json:"Command"`
|
Command []string `json:"Command"`
|
||||||
State string `json:"State"`
|
State string `json:"State"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ func (p *Podman) ListRunning() ([]Container, error) {
|
|||||||
containers = append(containers, Container{
|
containers = append(containers, Container{
|
||||||
Name: name,
|
Name: name,
|
||||||
Image: c.Image,
|
Image: c.Image,
|
||||||
Command: c.Command,
|
Command: strings.Join(c.Command, " "),
|
||||||
Runtime: "podman",
|
Runtime: "podman",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user