mirror of
https://gitea.com/jolheiser/sip
synced 2024-11-26 07:33:48 +01:00
Add attachment removal and change message (#36)
Add attachment removal and change message Signed-off-by: jolheiser <john.olheiser@gmail.com> Co-authored-by: jolheiser <john.olheiser@gmail.com> Reviewed-on: https://gitea.com/jolheiser/sip/pulls/36
This commit is contained in:
parent
cce2360f0f
commit
0bbe2e35ff
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"gitea.com/jolheiser/sip/flag"
|
"gitea.com/jolheiser/sip/flag"
|
||||||
@ -20,6 +21,9 @@ var ReleaseAttach = cli.Command{
|
|||||||
Name: "attach",
|
Name: "attach",
|
||||||
Usage: "Attach files to a release",
|
Usage: "Attach files to a release",
|
||||||
Action: doReleaseAttach,
|
Action: doReleaseAttach,
|
||||||
|
Subcommands: []*cli.Command{
|
||||||
|
&ReleaseAttachRemove,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func doReleaseAttach(_ *cli.Context) error {
|
func doReleaseAttach(_ *cli.Context) error {
|
||||||
@ -71,7 +75,7 @@ func doReleaseAttach(_ *cli.Context) error {
|
|||||||
|
|
||||||
info := color.Info
|
info := color.Info
|
||||||
cyan := color.New(color.FgCyan)
|
cyan := color.New(color.FgCyan)
|
||||||
fmt.Println(info.Format("Release"), cyan.Format(release.TagName), info.Format("updated!"))
|
fmt.Println(info.Format("Added"), cyan.Format(strconv.Itoa(len(files))), info.Format("attachments."))
|
||||||
fmt.Println(cyan.Format(fmt.Sprintf("%s/releases/tag/%s", flag.FullURL(), release.TagName)))
|
fmt.Println(cyan.Format(fmt.Sprintf("%s/releases/tag/%s", flag.FullURL(), release.TagName)))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -91,7 +95,6 @@ func fileGlobs(globList string) ([]string, error) {
|
|||||||
|
|
||||||
func attachFiles(client *gitea.Client, releaseID int64, files []string) error {
|
func attachFiles(client *gitea.Client, releaseID int64, files []string) error {
|
||||||
beaver.Infof("Attachments:\n\t%s", strings.Join(files, "\n\t"))
|
beaver.Infof("Attachments:\n\t%s", strings.Join(files, "\n\t"))
|
||||||
|
|
||||||
var confirm bool
|
var confirm bool
|
||||||
if err := survey.AskOne(&survey.Confirm{Message: "The above files will be attached, is the list correct?"}, &confirm); err != nil {
|
if err := survey.AskOne(&survey.Confirm{Message: "The above files will be attached, is the list correct?"}, &confirm); err != nil {
|
||||||
return err
|
return err
|
||||||
|
79
cmd/release_attach_remove.go
Normal file
79
cmd/release_attach_remove.go
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"gitea.com/jolheiser/sip/flag"
|
||||||
|
"gitea.com/jolheiser/sip/sdk"
|
||||||
|
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"github.com/AlecAivazis/survey/v2"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
"go.jolheiser.com/beaver/color"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ReleaseAttachRemove = cli.Command{
|
||||||
|
Name: "remove",
|
||||||
|
Aliases: []string{"delete", "rm"},
|
||||||
|
Usage: "Remove attachments from a release",
|
||||||
|
Action: doReleaseAttachRemove,
|
||||||
|
}
|
||||||
|
|
||||||
|
func doReleaseAttachRemove(_ *cli.Context) error {
|
||||||
|
client, err := getClient(true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
releases, err := sdk.GetReleases(client, flag.Owner, flag.Repo, gitea.ListReleasesOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
releaseNames := make([]string, len(releases))
|
||||||
|
releaseMap := make(map[string]*gitea.Release)
|
||||||
|
for idx, rel := range releases {
|
||||||
|
releaseNames[idx] = rel.TagName
|
||||||
|
releaseMap[rel.TagName] = rel
|
||||||
|
}
|
||||||
|
|
||||||
|
releaseQ := &survey.Select{Message: "Release", Options: releaseNames}
|
||||||
|
var releaseA string
|
||||||
|
if err := survey.AskOne(releaseQ, &releaseA); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
release := releaseMap[releaseA]
|
||||||
|
attachments, err := sdk.GetReleaseAttachments(client, flag.Owner, flag.Repo, release.ID, gitea.ListReleaseAttachmentsOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
attachmentMap := make(map[string]*gitea.Attachment)
|
||||||
|
attachmentOptions := make([]string, len(attachments))
|
||||||
|
for idx, attachment := range attachments {
|
||||||
|
display := fmt.Sprintf("%s (%s)", attachment.Name, attachment.UUID)
|
||||||
|
attachmentOptions[idx] = display
|
||||||
|
attachmentMap[display] = attachment
|
||||||
|
}
|
||||||
|
|
||||||
|
attachmentQ := &survey.MultiSelect{Message: "Delete Attachments", Options: attachmentOptions}
|
||||||
|
var attachmentA []string
|
||||||
|
if err := survey.AskOne(attachmentQ, &attachmentA); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, a := range attachmentA {
|
||||||
|
attachment := attachmentMap[a]
|
||||||
|
if _, err := client.DeleteReleaseAttachment(flag.Owner, flag.Repo, release.ID, attachment.ID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
info := color.Info
|
||||||
|
cyan := color.New(color.FgCyan)
|
||||||
|
fmt.Println(info.Format("Removed"), cyan.Format(strconv.Itoa(len(attachmentA))), info.Format("attachments."))
|
||||||
|
fmt.Println(cyan.Format(fmt.Sprintf("%s/releases/tag/%s", flag.FullURL(), release.TagName)))
|
||||||
|
return nil
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package sdk
|
package sdk
|
||||||
|
|
||||||
import "code.gitea.io/sdk/gitea"
|
import (
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
)
|
||||||
|
|
||||||
// GetReleases returns all matching Releases from a Gitea instance
|
// GetReleases returns all matching Releases from a Gitea instance
|
||||||
func GetReleases(client *gitea.Client, owner, repo string, opts gitea.ListReleasesOptions) ([]*gitea.Release, error) {
|
func GetReleases(client *gitea.Client, owner, repo string, opts gitea.ListReleasesOptions) ([]*gitea.Release, error) {
|
||||||
@ -21,3 +23,24 @@ func GetReleases(client *gitea.Client, owner, repo string, opts gitea.ListReleas
|
|||||||
}
|
}
|
||||||
return releases, nil
|
return releases, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetReleaseAttachments returns all attachments from a release
|
||||||
|
func GetReleaseAttachments(client *gitea.Client, owner, repo string, releaseID int64, opts gitea.ListReleaseAttachmentsOptions) ([]*gitea.Attachment, error) {
|
||||||
|
attachments := make([]*gitea.Attachment, 0)
|
||||||
|
p := 1
|
||||||
|
for {
|
||||||
|
opts.Page = p
|
||||||
|
list, _, err := client.ListReleaseAttachments(owner, repo, releaseID, opts)
|
||||||
|
if err != nil {
|
||||||
|
return attachments, err
|
||||||
|
}
|
||||||
|
p++
|
||||||
|
attachments = append(attachments, list...)
|
||||||
|
|
||||||
|
// FIXME Seems paging doesn't want to work with release attachments
|
||||||
|
if len(list) == 0 || len(list) < 50 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return attachments, nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user