Skip to content

Commit 48217f6

Browse files
authored
fix: nil pointer at asset upload (#213)
1 parent 203a3e7 commit 48217f6

File tree

4 files changed

+47
-48
lines changed

4 files changed

+47
-48
lines changed

.vscode/extensions.json

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
{
2-
"recommendations": [
3-
"golang.go",
4-
"esbenp.prettier-vscode",
5-
"asciidoctor.asciidoctor-vscode"
6-
]
7-
}
2+
"recommendations": ["golang.go", "esbenp.prettier-vscode"]
3+
}

internal/app/awesome-ci/scm-portal/github/release.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package github
33
import (
44
"errors"
55
"fmt"
6+
"os"
67
"time"
78

89
"github.com/fullstack-devops/awesome-ci/internal/pkg/tools"
@@ -94,24 +95,27 @@ func (ghrc *GitHubRichClient) PublishRelease(
9495
if len(uploadArtifacts) > 0 {
9596
releaseBodyAssets = "### Assets\n"
9697

97-
for _, fileAndInfo := range uploadArtifacts {
98-
logrus.Infof("uploading %s as asset to release\n", fileAndInfo.Name)
98+
for _, asset := range uploadArtifacts {
99+
logrus.Infof("uploading %s as asset to release\n", asset.Name)
100+
file, err := os.Open(asset.FilePath)
101+
if err != nil {
102+
return releaseAssets, err
103+
}
99104
// Upload assets to GitHub Release
100105
relAsset, _, err := ghrc.Client.Repositories.UploadReleaseAsset(
101106
ctx,
102107
ghrc.Owner,
103108
ghrc.Repository,
104109
releaseID,
105110
&github.UploadOptions{
106-
Name: fileAndInfo.Name,
111+
Name: asset.Name,
107112
},
108-
&fileAndInfo.File)
113+
file)
109114
if err != nil {
110115
logrus.Warnln("error at uploading asset to release: ", err)
111116
} else {
112117
// add asset to release body
113-
releaseBodyAssets = fmt.Sprintf("%s\n- [%s](%s) `%s`\n Sha256: `%x`", releaseBodyAssets, fileAndInfo.Name, *relAsset.BrowserDownloadURL, fileAndInfo.Infos.ModTime().Format(time.RFC3339), fileAndInfo.Hash)
114-
118+
releaseBodyAssets = fmt.Sprintf("%s\n- [%s](%s) `%s`\n Sha256: `%x`", releaseBodyAssets, asset.Name, *relAsset.BrowserDownloadURL, asset.ModTime.Format(time.RFC3339), asset.Hash)
115119
releaseAssets = append(releaseAssets, relAsset)
116120
}
117121
}

internal/app/awesome-ci/service/release.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func ReleaseCreate(args *ReleaseArgs) {
6565
}
6666
}
6767

68-
func ReleasePublish(args *ReleaseArgs, releaseID int64, assets []string) {
68+
func ReleasePublish(args *ReleaseArgs, releaseID int64, assetsStr []string) {
6969
scmLayer, err := scmportal.LoadSCMPortalLayer()
7070
if err != nil {
7171
log.Fatalln(err)
@@ -80,17 +80,17 @@ func ReleasePublish(args *ReleaseArgs, releaseID int64, assets []string) {
8080
}
8181
}
8282

83-
var assetsEncoded []uploadasset.UploadAsset
84-
if len(assets) > 0 {
85-
for _, asset := range assets {
86-
assetInfo, err := uploadasset.GetAsset(asset)
83+
var assets []uploadasset.UploadAsset
84+
if len(assetsStr) > 0 {
85+
for _, asset := range assetsStr {
86+
newAsset, err := uploadasset.GetAsset(asset)
8787
if err != nil {
8888
log.Fatalln("not all specified assets available, please check", err)
8989
}
90-
assetsEncoded = append(assetsEncoded, *assetInfo)
90+
assets = append(assets, newAsset)
9191
}
9292
}
93-
log.Infof("will upload %d assets", len(assets))
93+
log.Infof("will upload %d assets", len(assetsStr))
9494

9595
body, err := tools.ReadFileToString(args.Body)
9696
if err != nil {
@@ -101,7 +101,7 @@ func ReleasePublish(args *ReleaseArgs, releaseID int64, assets []string) {
101101
log.Infof("Would publishing release: %s", version)
102102
} else {
103103
log.Infof("Publishing release: %s - %d", version, releaseID)
104-
_, err := scmLayer.PublishRelease(version, releasePrefix, args.ReleaseBranch, body, releaseID, assetsEncoded)
104+
_, err := scmLayer.PublishRelease(version, releasePrefix, args.ReleaseBranch, body, releaseID, assets)
105105
if err != nil {
106106
log.Fatalln(err)
107107
}

internal/pkg/uploadasset/asset.go

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ import (
77
"crypto/sha256"
88
"fmt"
99
"io"
10-
"io/fs"
1110
"os"
1211
"path/filepath"
1312
"strings"
13+
"time"
1414
)
1515

1616
type UploadAsset struct {
17-
File os.File
18-
Name string
19-
Infos fs.FileInfo
20-
Hash []byte
17+
Name string
18+
ModTime time.Time
19+
FilePath string
20+
Hash []byte
2121
}
2222

2323
// GetAsset takes a string as argument which must be in the format `<assetformat>=<filename>`.
@@ -34,33 +34,32 @@ type UploadAsset struct {
3434
//
3535
// An error will be returned if the asset format is not supported or if an
3636
// error occurs while creating the asset.
37-
func GetAsset(assetLocation string) (asset *UploadAsset, err error) {
37+
func GetAsset(assetLocation string) (asset UploadAsset, err error) {
3838
assetName := strings.Split(assetLocation, "=")
3939

4040
switch assetName[0] {
41-
4241
case "file":
4342
file, err := os.OpenFile(assetName[1], os.O_RDWR, 0644)
4443
if err != nil {
45-
return nil, err
44+
return UploadAsset{}, err
4645
}
4746
if err := asset.New(assetName[1], file); err != nil {
48-
return nil, err
47+
return UploadAsset{}, err
4948
}
5049
return asset, nil
5150
case "zip":
5251
return createZipFile(assetName[1])
5352
case "tgz":
5453
return createTgzFile(assetName[1])
5554
default:
56-
return nil, fmt.Errorf("not an valid asset format")
55+
return UploadAsset{}, fmt.Errorf("not an valid asset format")
5756
}
5857
}
5958

60-
func createZipFile(name string) (asset *UploadAsset, err error) {
61-
tmpFile, err := os.CreateTemp("awesome-ci", "upload-asset-")
59+
func createZipFile(name string) (asset UploadAsset, err error) {
60+
tmpFile, err := os.CreateTemp("awesome-ci", "upload-asset-*")
6261
if err != nil {
63-
return nil, err
62+
return UploadAsset{}, err
6463
}
6564
defer tmpFile.Close()
6665
zipWriter := zip.NewWriter(tmpFile)
@@ -88,24 +87,24 @@ func createZipFile(name string) (asset *UploadAsset, err error) {
8887
return nil
8988
})
9089
if err != nil {
91-
return nil, err
90+
return UploadAsset{}, err
9291
}
9392
err = zipWriter.Close()
9493
if err != nil {
95-
return nil, err
94+
return UploadAsset{}, err
9695
}
9796

98-
if err := asset.New(fmt.Sprintf("%s.zip", filepath.Base(name)), tmpFile); err != nil {
99-
return nil, err
97+
if err := asset.New(fmt.Sprintf("%s.zip", name), tmpFile); err != nil {
98+
return UploadAsset{}, err
10099
}
101100

102101
return
103102
}
104103

105-
func createTgzFile(name string) (asset *UploadAsset, err error) {
106-
tmpFile, err := os.CreateTemp("awesome-ci", "upload-asset-")
104+
func createTgzFile(name string) (asset UploadAsset, err error) {
105+
tmpFile, err := os.CreateTemp("awesome-ci", "upload-asset-*")
107106
if err != nil {
108-
return nil, err
107+
return UploadAsset{}, err
109108
}
110109
defer tmpFile.Close()
111110
gzipWriter := gzip.NewWriter(tmpFile)
@@ -138,19 +137,19 @@ func createTgzFile(name string) (asset *UploadAsset, err error) {
138137
return nil
139138
})
140139
if err != nil {
141-
return nil, err
140+
return UploadAsset{}, err
142141
}
143142
err = tarWriter.Close()
144143
if err != nil {
145-
return nil, err
144+
return UploadAsset{}, err
146145
}
147146
err = gzipWriter.Close()
148147
if err != nil {
149-
return nil, err
148+
return UploadAsset{}, err
150149
}
151150

152-
if err := asset.New(fmt.Sprintf("%s.tgz", filepath.Base(name)), tmpFile); err != nil {
153-
return nil, err
151+
if err := asset.New(fmt.Sprintf("%s.tgz", name), tmpFile); err != nil {
152+
return UploadAsset{}, err
154153
}
155154

156155
return
@@ -169,9 +168,9 @@ func (ua *UploadAsset) New(name string, file *os.File) (err error) {
169168
}
170169

171170
// set values
172-
ua.Name = name
173-
ua.File = *file
174-
ua.Infos = info
171+
ua.Name = info.Name()
172+
ua.FilePath = name
173+
ua.ModTime = info.ModTime()
175174
ua.Hash = h.Sum(nil)
176175
return nil
177176
}

0 commit comments

Comments
 (0)