func debBuild(dest platforms.Platform, tp TaskParams) (err error) { metadata := tp.Settings.GetTaskSettingMap(TASK_PKG_BUILD, "metadata") armArchName := getArmArchName(tp.Settings) metadataDeb := tp.Settings.GetTaskSettingMap(TASK_PKG_BUILD, "metadata-deb") rmtemp := tp.Settings.GetTaskSettingBool(TASK_PKG_BUILD, "rmtemp") debDir := filepath.Join(tp.OutDestRoot, tp.Settings.GetFullVersionName()) //v0.8.1 dont use platform dir tmpDir := filepath.Join(debDir, ".goxc-temp") if rmtemp { defer os.RemoveAll(tmpDir) } os.MkdirAll(tmpDir, 0755) err = ioutil.WriteFile(filepath.Join(tmpDir, "debian-binary"), []byte("2.0\n"), 0644) if err != nil { return err } description := "?" if desc, keyExists := metadata["description"]; keyExists { description, err = typeutils.ToString(desc, "description") if err != nil { return err } } maintainer := "?" if maint, keyExists := metadata["maintainer"]; keyExists { maintainer, err = typeutils.ToString(maint, "maintainer") if err != nil { return err } } controlContent := getDebControlFileContent(tp.AppName, maintainer, tp.Settings.GetFullVersionName(), dest.Arch, armArchName, description, metadataDeb) if tp.Settings.IsVerbose() { log.Printf("Control file:\n%s", string(controlContent)) } err = ioutil.WriteFile(filepath.Join(tmpDir, "control"), controlContent, 0644) if err != nil { return err } err = archive.TarGz(filepath.Join(tmpDir, "control.tar.gz"), []archive.ArchiveItem{archive.ArchiveItem{FileSystemPath: filepath.Join(tmpDir, "control"), ArchivePath: "control"}}) if err != nil { return err } //build items := []archive.ArchiveItem{} for _, mainDir := range tp.MainDirs { var exeName string if len(tp.MainDirs) == 1 { exeName = tp.Settings.AppName } else { exeName = filepath.Base(mainDir) } binPath, err := core.GetAbsoluteBin(dest.Os, dest.Arch, tp.Settings.AppName, exeName, tp.WorkingDirectory, tp.Settings.GetFullVersionName(), tp.Settings.OutPath, tp.Settings.ArtifactsDest) if err != nil { return err } items = append(items, archive.ArchiveItem{FileSystemPath: binPath, ArchivePath: "/usr/bin/" + exeName}) } //TODO add resources to /usr/share/appName/ err = archive.TarGz(filepath.Join(tmpDir, "data.tar.gz"), items) if err != nil { return err } targetFile := filepath.Join(debDir, fmt.Sprintf("%s_%s_%s.deb", tp.AppName, tp.Settings.GetFullVersionName(), getDebArch(dest.Arch, armArchName))) //goxc_0.5.2_i386.deb") inputs := [][]string{ []string{filepath.Join(tmpDir, "debian-binary"), "debian-binary"}, []string{filepath.Join(tmpDir, "control.tar.gz"), "control.tar.gz"}, []string{filepath.Join(tmpDir, "data.tar.gz"), "data.tar.gz"}} err = ar.ArForDeb(targetFile, inputs) return }
func debSourceBuild(tp TaskParams) (err error) { metadata := tp.Settings.GetTaskSettingMap(TASK_PKG_SOURCE, "metadata") metadataDeb := tp.Settings.GetTaskSettingMap(TASK_PKG_SOURCE, "metadata-deb") //default to just package <packagename> description := "package " + tp.AppName if desc, keyExists := metadata["description"]; keyExists { description, err = typeutils.ToString(desc, "description") if err != nil { return err } } maintainer := "?" if maint, keyExists := metadata["maintainer"]; keyExists { maintainer, err = typeutils.ToString(maint, "maintainer") if err != nil { return err } } maintainerEmail := "?" if maint, keyExists := metadata["maintainerEmail"]; keyExists { maintainerEmail, err = typeutils.ToString(maint, "maintainerEmail") if err != nil { return err } } version := tp.Settings.GetFullVersionName() arches := "all" items, err := sdeb.SdebGetSourcesAsArchiveItems(tp.WorkingDirectory, tp.AppName+"-"+tp.Settings.GetFullVersionName()) if err != nil { return err } if err != nil { return err } //build //1. generate orig.tar.gz destDir := filepath.Join(tp.OutDestRoot, tp.Settings.GetFullVersionName(), "source-deb") err = os.MkdirAll(destDir, 0777) if err != nil { return err } //set up template templateDir := tp.Settings.GetTaskSettingString(TASK_PKG_SOURCE, "templateDir") templateVars := getTemplateVars(tp.AppName, tp.Settings.GetFullVersionName(), maintainer, maintainerEmail, tp.Settings.GetFullVersionName(), arches, description, metadataDeb) //TODO add/exclude resources to /usr/share origTgzName := tp.AppName + "_" + version + ".orig.tar.gz" origTgzPath := filepath.Join(destDir, origTgzName) err = archive.TarGz(origTgzPath, items) if err != nil { return err } log.Printf("Created %s", origTgzPath) checksumMd5, checksumSha1, checksumSha256, err := checksums(origTgzPath, origTgzName) if err != nil { return err } templateVars.Files = append(templateVars.Files, *checksumMd5) templateVars.ChecksumsSha1 = append(templateVars.ChecksumsSha1, *checksumSha1) templateVars.ChecksumsSha256 = append(templateVars.ChecksumsSha256, *checksumSha256) //2. generate .debian.tar.gz (just containing debian/ directory) //debian/control controlData, err := getDebMetadataFileContent(filepath.Join(templateDir, "control.tpl"), sdeb.TEMPLATE_SOURCEDEB_CONTROL, templateVars) if err != nil { return err } //compat compatData, err := getDebMetadataFileContent(filepath.Join(templateDir, "compat.tpl"), sdeb.TEMPLATE_DEBIAN_COMPAT, templateVars) if err != nil { return err } //debian/rules rulesData, err := getDebMetadataFileContent(filepath.Join(templateDir, "rules.tpl"), sdeb.TEMPLATE_DEBIAN_RULES, templateVars) if err != nil { return err } //debian/source/format sourceFormatData, err := getDebMetadataFileContent(filepath.Join(templateDir, "source_format.tpl"), sdeb.TEMPLATE_DEBIAN_SOURCE_FORMAT, templateVars) if err != nil { return err } //debian/source/options sourceOptionsData, err := getDebMetadataFileContent(filepath.Join(templateDir, "source_options.tpl"), sdeb.TEMPLATE_DEBIAN_SOURCE_OPTIONS, templateVars) if err != nil { return err } //debian/rules copyrightData, err := getDebMetadataFileContent(filepath.Join(templateDir, "copyright.tpl"), sdeb.TEMPLATE_DEBIAN_COPYRIGHT, templateVars) if err != nil { return err } //debian/changelog (slightly different) changelogFilename := tp.Settings.GetTaskSettingString(TASK_PKG_SOURCE, "changelogFile") var changelogData []byte _, err = os.Stat(changelogFilename) if os.IsNotExist(err) { initialChangelogTemplate := sdeb.TEMPLATE_CHANGELOG_HEADER + "\n\n" + sdeb.TEMPLATE_CHANGELOG_INITIAL_ENTRY + "\n\n" + sdeb.TEMPLATE_CHANGELOG_FOOTER changelogData, err = getDebMetadataFileContent(filepath.Join(templateDir, "initial-changelog.tpl"), initialChangelogTemplate, templateVars) if err != nil { return err } } else if err != nil { return err } else { changelogData, err = ioutil.ReadFile(changelogFilename) if err != nil { return err } } //generate debian/README.Debian //TODO: try pulling in README.md etc //debian/README.Debian readmeData, err := getDebMetadataFileContent(filepath.Join(templateDir, "readme.tpl"), sdeb.TEMPLATE_DEBIAN_README, templateVars) if err != nil { return err } debTgzName := tp.AppName + "_" + version + ".debian.tar.gz" debTgzPath := filepath.Join(destDir, debTgzName) err = archive.TarGz(debTgzPath, []archive.ArchiveItem{ archive.ArchiveItemFromBytes(changelogData, "debian/changelog"), archive.ArchiveItemFromBytes(copyrightData, "debian/copyright"), archive.ArchiveItemFromBytes(compatData, "debian/compat"), archive.ArchiveItemFromBytes(controlData, "debian/control"), archive.ArchiveItemFromBytes(readmeData, "debian/README.Debian"), archive.ArchiveItemFromBytes(rulesData, "debian/rules"), archive.ArchiveItemFromBytes(sourceFormatData, "debian/source/format"), archive.ArchiveItemFromBytes(sourceOptionsData, "debian/source/options")}) if err != nil { return err } log.Printf("Created %s", debTgzPath) checksumMd5, checksumSha1, checksumSha256, err = checksums(debTgzPath, debTgzName) if err != nil { return err } templateVars.Files = append(templateVars.Files, *checksumMd5) templateVars.ChecksumsSha1 = append(templateVars.ChecksumsSha1, *checksumSha1) templateVars.ChecksumsSha256 = append(templateVars.ChecksumsSha256, *checksumSha256) dscData, err := getDebMetadataFileContent(filepath.Join(templateDir, "dsc.tpl"), sdeb.TEMPLATE_DEBIAN_DSC, templateVars) if err != nil { return err } //3. generate .dsc file dscPath := filepath.Join(destDir, tp.AppName+"_"+version+".dsc") err = ioutil.WriteFile(dscPath, dscData, 0644) if err == nil { log.Printf("Wrote %s", dscPath) } return err }