in dev-tools/mage/pkg.go [22:131]
func Package() error {
fmt.Println("--- Package artifact")
if len(Platforms) == 0 {
fmt.Println(">> package: Skipping because the platform list is empty")
return nil
}
if len(Packages) == 0 {
return fmt.Errorf("no package specs are registered. Call " +
"UseCommunityBeatPackaging, UseElasticBeatPackaging or USeElasticBeatWithoutXPackPackaging first")
}
// platforms := updateWithDarwinUniversal(Platforms)
platforms := Platforms
if mg.Verbose() {
debugSelectedPackageSpecsWithPlatform := make([]string, 0, len(Packages))
for _, p := range Packages {
debugSelectedPackageSpecsWithPlatform = append(debugSelectedPackageSpecsWithPlatform, fmt.Sprintf("spec %s on %s/%s", p.Spec.Name, p.OS, p.Arch))
}
log.Printf("Packaging for platforms %v, packages %v", platforms, debugSelectedPackageSpecsWithPlatform)
}
tasks := make(map[string][]interface{})
for _, target := range platforms {
for _, pkg := range Packages {
if pkg.OS != target.GOOS() || pkg.Arch != "" && pkg.Arch != target.Arch() {
continue
}
// Checks if this package is compatible with the FIPS settings
if pkg.Spec.FIPS != FIPSBuild {
log.Printf("Skipping %s/%s package type because FIPS flag doesn't match [pkg=%v, build=%v]", pkg.Spec.Name, pkg.OS, pkg.Spec.FIPS, FIPSBuild)
continue
}
for _, pkgType := range pkg.Types {
if !IsPackageTypeSelected(pkgType) {
log.Printf("Skipping %s package type because it is not selected", pkgType)
continue
}
if pkgType == Docker && !IsDockerVariantSelected(pkg.Spec.DockerVariant) {
log.Printf("Skipping %s docker variant type because it is not selected", pkg.Spec.DockerVariant)
continue
}
if target.Name == "linux/arm64" && pkgType == Docker && runtime.GOARCH != "arm64" {
log.Printf("Skipping Docker package type because build host isn't arm")
continue
}
packageArch, err := getOSArchName(target, pkgType)
if err != nil {
log.Printf("Skipping arch %v for package type %v: %v", target.Arch(), pkgType, err)
continue
}
agentPackageType := TarGz
if pkg.OS == "windows" {
agentPackageType = Zip
}
agentPackageArch, err := getOSArchName(target, agentPackageType)
if err != nil {
log.Printf("Skipping arch %v for package type %v: %v", target.Arch(), pkgType, err)
continue
}
agentPackageDrop, _ := os.LookupEnv("AGENT_DROP_PATH")
spec := pkg.Spec.Clone()
spec.OS = target.GOOS()
spec.Arch = packageArch
spec.Snapshot = Snapshot
spec.evalContext = map[string]interface{}{
"GOOS": target.GOOS(),
"GOARCH": target.GOARCH(),
"GOARM": target.GOARM(),
"Platform": target,
"AgentArchName": agentPackageArch,
"PackageType": pkgType.String(),
"BinaryExt": binaryExtension(target.GOOS()),
"AgentDropPath": agentPackageDrop,
}
spec.packageDir, err = pkgType.PackagingDir(packageStagingDir, target, spec)
if err != nil {
log.Printf("Skipping arch %v for package type %v: %v", target.Arch(), pkgType, err)
continue
}
spec = spec.Evaluate()
if mg.Verbose() {
log.Printf("Adding task for packaging %s on %s/%s", spec.Name, target.GOOS(), target.Arch())
}
tasks[target.GOOS()+"-"+target.Arch()] = append(tasks[target.GOOS()+"-"+target.Arch()], packageBuilder{target, spec, pkgType}.Build)
}
}
}
for k, v := range tasks {
fmt.Printf(">> package: Building %s\n", k)
Parallel(v...)
}
return nil
}