You've already forked go-semantic-release
Merge pull request #41 from Nightapes/fix.assets
fix(assets): when file is zipped, upload zipped file instead of unzipped file
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"crypto/sha512"
|
"crypto/sha512"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
"hash"
|
"hash"
|
||||||
"hash/crc32"
|
"hash/crc32"
|
||||||
"io"
|
"io"
|
||||||
@@ -24,6 +25,7 @@ import (
|
|||||||
type Asset struct {
|
type Asset struct {
|
||||||
name string
|
name string
|
||||||
path string
|
path string
|
||||||
|
zippedPath string
|
||||||
algorithm string
|
algorithm string
|
||||||
isCompressed bool
|
isCompressed bool
|
||||||
}
|
}
|
||||||
@@ -63,8 +65,12 @@ func NewAsset(repository string, assetConfig config.Asset, algorithm string) (*A
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *Asset) getChecksum() (string, error) {
|
func (a *Asset) getChecksum() (string, error) {
|
||||||
log.Debugf("Calculating checksum for %s", a.path)
|
path, err := a.GetPath()
|
||||||
file, err := os.Open(a.path)
|
if err != nil {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
log.Debugf("Calculating checksum for %s", path)
|
||||||
|
file, err := os.Open(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", errors.Wrapf(err, "Failed to open file %s to calculate checksum", a.name)
|
return "", errors.Wrapf(err, "Failed to open file %s to calculate checksum", a.name)
|
||||||
}
|
}
|
||||||
@@ -98,13 +104,16 @@ func (a *Asset) getChecksum() (string, error) {
|
|||||||
// GetPath where the file is located, if zipped true, it will compress it and give you the new location
|
// GetPath where the file is located, if zipped true, it will compress it and give you the new location
|
||||||
func (a *Asset) GetPath() (string, error) {
|
func (a *Asset) GetPath() (string, error) {
|
||||||
if a.isCompressed {
|
if a.isCompressed {
|
||||||
return a.zipFile()
|
return a.ZipFile()
|
||||||
}
|
}
|
||||||
return a.path, nil
|
return a.path, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetName of asset
|
// GetName of asset
|
||||||
func (a *Asset) GetName() string {
|
func (a *Asset) GetName() string {
|
||||||
|
if a.isCompressed {
|
||||||
|
return fmt.Sprintf("%s.zip", a.name)
|
||||||
|
}
|
||||||
return a.name
|
return a.name
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +123,11 @@ func (a *Asset) IsCompressed() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ZipFile compress given file in zip format
|
// ZipFile compress given file in zip format
|
||||||
func (a *Asset) zipFile() (string, error) {
|
func (a *Asset) ZipFile() (string, error) {
|
||||||
|
|
||||||
|
if a.zippedPath != "" {
|
||||||
|
return a.zippedPath, nil
|
||||||
|
}
|
||||||
|
|
||||||
path := a.path
|
path := a.path
|
||||||
fileToZip, err := os.Open(path)
|
fileToZip, err := os.Open(path)
|
||||||
@@ -156,5 +169,6 @@ func (a *Asset) zipFile() (string, error) {
|
|||||||
if err := zipFile.Close(); err != nil {
|
if err := zipFile.Close(); err != nil {
|
||||||
return "", errors.Wrap(err, "Could not close file")
|
return "", errors.Wrap(err, "Could not close file")
|
||||||
}
|
}
|
||||||
return filepath.Abs(fileToZipInfo.Name())
|
a.zippedPath, err = filepath.Abs(zipFile.Name())
|
||||||
|
return a.zippedPath, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
// Set struct
|
// Set struct
|
||||||
type Set struct {
|
type Set struct {
|
||||||
Assets []*Asset
|
assets []*Asset
|
||||||
repository string
|
repository string
|
||||||
algorithm string
|
algorithm string
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ type Set struct {
|
|||||||
//New container for assets
|
//New container for assets
|
||||||
func New(repository, algorithm string) *Set {
|
func New(repository, algorithm string) *Set {
|
||||||
return &Set{
|
return &Set{
|
||||||
Assets: []*Asset{},
|
assets: []*Asset{},
|
||||||
repository: repository,
|
repository: repository,
|
||||||
algorithm: algorithm,
|
algorithm: algorithm,
|
||||||
}
|
}
|
||||||
@@ -34,13 +34,13 @@ func (s *Set) Add(assetConfigs ...config.Asset) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
s.Assets = append(s.Assets, asset)
|
s.assets = append(s.assets, asset)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Set) All() []*Asset {
|
func (s *Set) All() []*Asset {
|
||||||
return s.Assets
|
return s.assets
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Set) GenerateChecksum() error {
|
func (s *Set) GenerateChecksum() error {
|
||||||
@@ -50,7 +50,7 @@ func (s *Set) GenerateChecksum() error {
|
|||||||
}
|
}
|
||||||
defer checksumFile.Close()
|
defer checksumFile.Close()
|
||||||
lines := []string{}
|
lines := []string{}
|
||||||
for _, asset := range s.Assets {
|
for _, asset := range s.assets {
|
||||||
checksum, err := asset.getChecksum()
|
checksum, err := asset.getChecksum()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -68,7 +68,7 @@ func (s *Set) GenerateChecksum() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Assets = append(s.Assets, &Asset{
|
s.assets = append(s.assets, &Asset{
|
||||||
path: filePath,
|
path: filePath,
|
||||||
name: "checksum.txt",
|
name: "checksum.txt",
|
||||||
isCompressed: false,
|
isCompressed: false,
|
||||||
|
|||||||
@@ -128,15 +128,14 @@ func (g *Client) uploadAssets(assets *assets.Set) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fileInfo, _ := file.Stat()
|
|
||||||
|
|
||||||
_, resp, err := g.client.Repositories.UploadReleaseAsset(g.context, g.config.User, g.config.Repo, g.release.GetID(), &github.UploadOptions{Name: fileInfo.Name()}, file)
|
_, resp, err := g.client.Repositories.UploadReleaseAsset(g.context, g.config.User, g.config.Repo, g.release.GetID(), &github.UploadOptions{Name: asset.GetName()}, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode >= http.StatusBadRequest {
|
if resp.StatusCode >= http.StatusBadRequest {
|
||||||
return fmt.Errorf("could not upload asset %s: %s", file.Name(), resp.Status)
|
return fmt.Errorf("could not upload asset %s: %s", asset.GetName(), resp.Status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,9 +148,8 @@ func (g *Client) uploadAssets(assets *assets.Set) error {
|
|||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
fileInfo, _ := file.Stat()
|
|
||||||
|
|
||||||
result, err := g.uploadFile(fileInfo.Name(), file)
|
result, err := g.uploadFile(asset.GetName(), file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not upload asset %s: %s", file.Name(), err.Error())
|
return fmt.Errorf("could not upload asset %s: %s", file.Name(), err.Error())
|
||||||
}
|
}
|
||||||
@@ -159,7 +158,7 @@ func (g *Client) uploadAssets(assets *assets.Set) error {
|
|||||||
|
|
||||||
g.log.Infof("Uploaded file %s to gitlab can be downloaded under %s", file.Name(), downloadURL)
|
g.log.Infof("Uploaded file %s to gitlab can be downloaded under %s", file.Name(), downloadURL)
|
||||||
|
|
||||||
uploadURL := fmt.Sprintf("%s/projects/%s/releases/%s/assets/links?name=%s&url=%s", g.apiURL, util.PathEscape(g.config.Repo), g.Release, util.PathEscape(fileInfo.Name()), downloadURL)
|
uploadURL := fmt.Sprintf("%s/projects/%s/releases/%s/assets/links?name=%s&url=%s", g.apiURL, util.PathEscape(g.config.Repo), g.Release, util.PathEscape(asset.GetName()), downloadURL)
|
||||||
|
|
||||||
req, err := http.NewRequest("POST", uploadURL, nil)
|
req, err := http.NewRequest("POST", uploadURL, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Masterminds/semver"
|
"github.com/Masterminds/semver"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/Nightapes/go-semantic-release/internal/analyzer"
|
"github.com/Nightapes/go-semantic-release/internal/analyzer"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/assets"
|
"github.com/Nightapes/go-semantic-release/internal/assets"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/cache"
|
"github.com/Nightapes/go-semantic-release/internal/cache"
|
||||||
@@ -16,7 +18,6 @@ import (
|
|||||||
"github.com/Nightapes/go-semantic-release/internal/releaser"
|
"github.com/Nightapes/go-semantic-release/internal/releaser"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/shared"
|
"github.com/Nightapes/go-semantic-release/internal/shared"
|
||||||
"github.com/Nightapes/go-semantic-release/pkg/config"
|
"github.com/Nightapes/go-semantic-release/pkg/config"
|
||||||
log "github.com/sirupsen/logrus"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// SemanticRelease struct
|
// SemanticRelease struct
|
||||||
@@ -228,16 +229,26 @@ func (s *SemanticRelease) Release(provider *ci.ProviderConfig, force bool) error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.assets.GenerateChecksum(); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
hook := hooks.New(s.config, releaseVersion)
|
hook := hooks.New(s.config, releaseVersion)
|
||||||
if err := hook.PreRelease(); err != nil {
|
if err := hook.PreRelease(); err != nil {
|
||||||
log.Debugf("Error during pre release hook")
|
log.Debugf("Error during pre release hook")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.config.Checksum.Algorithm != "" {
|
||||||
|
if err := s.assets.GenerateChecksum(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, asset := range s.assets.All() {
|
||||||
|
if asset.IsCompressed() {
|
||||||
|
if _, err := asset.ZipFile(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err = s.releaser.CreateRelease(releaseVersion, generatedChangelog, s.assets); err != nil {
|
if err = s.releaser.CreateRelease(releaseVersion, generatedChangelog, s.assets); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user