1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/pkg/npm/publish.go
Christopher Fenner f78777f784
feat(npm): allow to publish artifact to registry (#2871)
* add new paraeters

* update generated sources

* run npm publish

* add repositoryUrl parameter

* handle registry credentials

* rename parameter

* handle base64encoding

* remove vault reference

* make username secret

* add publish method

* use publish method

* use dedicated registry

* use dry run

* fix

* prepend path

* fix workdir

* move code to npm package

* do changes

* update dependencies

* correct property init

* remomve dry-run

* regenerate

* add mock

* add logging

* add debug log

* dry-run

* remove try run

* remove append

* add debug outut

* change

* add debug output

* changes

* cleanup

* use different auth property

* add credential utils

* add debug log outputs

* remove auth handling & reuse writeFile

* rename

* fix debug output

* remove comments

* update comment

* rename function

* update docs

* update generated files

* handle npm ignore

* remove commented code

* add debug output
2021-07-15 14:46:04 +02:00

95 lines
3.0 KiB
Go

package npm
import (
"fmt"
"path/filepath"
"github.com/pkg/errors"
"github.com/SAP/jenkins-library/pkg/log"
CredentialUtils "github.com/SAP/jenkins-library/pkg/piperutils"
FileUtils "github.com/SAP/jenkins-library/pkg/piperutils"
)
// PublishAllPackages executes npm publish for all package.json files defined in packageJSONFiles list
func (exec *Execute) PublishAllPackages(packageJSONFiles []string, registry, username, password string) error {
for _, packageJSON := range packageJSONFiles {
fileExists, err := exec.Utils.FileExists(packageJSON)
if err != nil {
return fmt.Errorf("cannot check if '%s' exists: %w", packageJSON, err)
}
if !fileExists {
return fmt.Errorf("package.json file '%s' not found: %w", packageJSON, err)
}
err = exec.publish(packageJSON, registry, username, password)
if err != nil {
return err
}
}
return nil
}
// publish executes npm publish for package.json
func (exec *Execute) publish(packageJSON, registry, username, password string) error {
execRunner := exec.Utils.GetExecRunner()
npmignore := NewNPMIgnore(filepath.Dir(packageJSON))
if exists, err := FileUtils.FileExists(npmignore.filepath); exists {
if err != nil {
return errors.Wrapf(err, "failed to check for existing %s file", npmignore.filepath)
}
log.Entry().Debugf("loading existing %s file", npmignore.filepath)
if err = npmignore.Load(); err != nil {
return errors.Wrapf(err, "failed to read existing %s file", npmignore.filepath)
}
} else {
log.Entry().Debug("creating .npmignore file")
}
log.Entry().Debug("adding **/piper")
npmignore.Add("**/piper")
log.Entry().Debug("adding **/sap-piper")
npmignore.Add("**/sap-piper")
// update .npmrc
if err := npmignore.Write(); err != nil {
return errors.Wrapf(err, "failed to update %s file", npmignore.filepath)
}
if len(registry) > 0 {
npmrc := NewNPMRC(filepath.Dir(packageJSON))
// check existing .npmrc file
if exists, err := FileUtils.FileExists(npmrc.filepath); exists {
if err != nil {
return errors.Wrapf(err, "failed to check for existing %s file", npmrc.filepath)
}
log.Entry().Debugf("loading existing %s file", npmrc.filepath)
if err = npmrc.Load(); err != nil {
return errors.Wrapf(err, "failed to read existing %s file", npmrc.filepath)
}
} else {
log.Entry().Debug("creating .npmrc file")
}
// set registry
log.Entry().Debugf("adding registry %s", registry)
npmrc.Set("registry", registry)
// set registry auth
if len(username) > 0 && len(password) > 0 {
log.Entry().Debug("adding registry credentials")
npmrc.Set("_auth", CredentialUtils.EncodeUsernamePassword(username, password))
npmrc.Set("always-auth", "true")
}
// update .npmrc
if err := npmrc.Write(); err != nil {
return errors.Wrapf(err, "failed to update %s file", npmrc.filepath)
}
} else {
log.Entry().Debug("no registry provided")
}
err := execRunner.RunExecutable("npm", "publish", filepath.Dir(packageJSON))
if err != nil {
return err
}
return nil
}