1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-01-10 03:47:03 +02:00
goreleaser/internal/pipe/winget/template.go
2023-09-17 14:22:39 -03:00

139 lines
5.1 KiB
Go

package winget
import (
"fmt"
"os"
"path/filepath"
"strings"
"github.com/caarlos0/log"
"github.com/goreleaser/goreleaser/internal/artifact"
"github.com/goreleaser/goreleaser/internal/yaml"
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/goreleaser/goreleaser/pkg/context"
)
func createYAML(ctx *context.Context, winget config.Winget, in any, tp artifact.Type) error {
versionContent, err := yaml.Marshal(in)
if err != nil {
return err
}
filename := winget.PackageIdentifier + extFor(tp)
path := filepath.Join(ctx.Config.Dist, "winget", winget.Path, filename)
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
return err
}
log.WithField("path", path).Info("writing")
if err := os.WriteFile(path, []byte(strings.Join([]string{
generatedHeader,
langserverLineFor(tp),
string(versionContent),
}, "\n")), 0o644); err != nil { //nolint: gosec
return fmt.Errorf("failed to write winget version: %w", err)
}
ctx.Artifacts.Add(&artifact.Artifact{
Name: filename,
Path: path,
Type: tp,
Extra: map[string]interface{}{
wingetConfigExtra: winget,
artifact.ExtraID: winget.Name,
},
})
return nil
}
const (
manifestVersion = "1.5.0"
versionLangServer = "# yaml-language-server: $schema=https://aka.ms/winget-manifest.version.1.5.0.schema.json"
installerLangServer = "# yaml-language-server: $schema=https://aka.ms/winget-manifest.installer.1.5.0.schema.json"
defaultLocaleLangServer = "# yaml-language-server: $schema=https://aka.ms/winget-manifest.defaultLocale.1.5.0.schema.json"
defaultLocale = "en-US"
generatedHeader = `# This file was generated by GoReleaser. DO NOT EDIT.`
)
// nolint: tagliatelle
type Version struct {
PackageIdentifier string `yaml:"PackageIdentifier,omitempty"`
PackageVersion string `yaml:"PackageVersion,omitempty"`
DefaultLocale string `yaml:"DefaultLocale,omitempty"`
ManifestType string `yaml:"ManifestType,omitempty"`
ManifestVersion string `yaml:"ManifestVersion,omitempty"`
}
// nolint: tagliatelle
type InstallerItemFile struct {
RelativeFilePath string `yaml:"RelativeFilePath,omitempty"`
PortableCommandAlias string `yaml:"PortableCommandAlias,omitempty"`
}
// nolint: tagliatelle
type InstallerItem struct {
Architecture string `yaml:"Architecture,omitempty"`
NestedInstallerType string `yaml:"NestedInstallerType,omitempty"`
NestedInstallerFiles []InstallerItemFile `yaml:"NestedInstallerFiles,omitempty"`
InstallerURL string `yaml:"InstallerUrl,omitempty"`
InstallerSha256 string `yaml:"InstallerSha256,omitempty"`
UpgradeBehavior string `yaml:"UpgradeBehavior,omitempty"`
}
// nolint: tagliatelle
type Installer struct {
PackageIdentifier string `yaml:"PackageIdentifier,omitempty"`
PackageVersion string `yaml:"PackageVersion,omitempty"`
InstallerLocale string `yaml:"InstallerLocale,omitempty"`
InstallerType string `yaml:"InstallerType,omitempty"`
Commands []string `yaml:"Commands,omitempty"`
ReleaseDate string `yaml:"ReleaseDate,omitempty"`
Installers []InstallerItem `yaml:"Installers,omitempty"`
ManifestType string `yaml:"ManifestType,omitempty"`
ManifestVersion string `yaml:"ManifestVersion,omitempty"`
Dependencies Dependencies `yaml:"Dependencies,omitempty"`
}
// nolint: tagliatelle
type Dependencies struct {
PackageDependencies []PackageDependency `yaml:"PackageDependencies,omitempty"`
}
// nolint: tagliatelle
type PackageDependency struct {
PackageIdentifier string `yaml:"PackageIdentifier"`
MinimumVersion string `yaml:"MinimumVersion,omitempty"`
}
// nolint: tagliatelle
type Locale struct {
PackageIdentifier string `yaml:"PackageIdentifier,omitempty"`
PackageVersion string `yaml:"PackageVersion,omitempty"`
PackageLocale string `yaml:"PackageLocale,omitempty"`
Publisher string `yaml:"Publisher,omitempty"`
PublisherURL string `yaml:"PublisherUrl,omitempty"`
PublisherSupportURL string `yaml:"PublisherSupportUrl,omitempty"`
Author string `yaml:"Author,omitempty"`
PackageName string `yaml:"PackageName,omitempty"`
PackageURL string `yaml:"PackageUrl,omitempty"`
License string `yaml:"License,omitempty"`
LicenseURL string `yaml:"LicenseUrl,omitempty"`
Copyright string `yaml:"Copyright,omitempty"`
CopyrightURL string `yaml:"CopyrightUrl,omitempty"`
ShortDescription string `yaml:"ShortDescription,omitempty"`
Description string `yaml:"Description,omitempty"`
Moniker string `yaml:"Moniker,omitempty"`
Tags []string `yaml:"Tags,omitempty"`
ReleaseNotes string `yaml:"ReleaseNotes,omitempty"`
ReleaseNotesURL string `yaml:"ReleaseNotesUrl,omitempty"`
ManifestType string `yaml:"ManifestType,omitempty"`
ManifestVersion string `yaml:"ManifestVersion,omitempty"`
}
var fromGoArch = map[string]string{
"amd64": "x64",
"386": "x86",
"arm64": "arm64",
}