code: func doArchive(cmdline []string) {
  	var (
  		arch   = flag.String("arch", runtime.GOARCH, "Architecture cross packaging")
  		atype  = flag.String("type", "zip", "Type of archive to write (zip|tar)")
  		signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. LINUX_SIGNING_KEY)`)
  		upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`)
  		ext    string
  	)
  	flag.CommandLine.Parse(cmdline)
  	switch *atype {
  	case "zip":
  		ext = ".zip"
  	case "tar":
  		ext = ".tar.gz"
  	default:
  		log.Fatal("unknown archive type: ", atype)
  	}
  
  	var (
  		env = build.Env()
  
  		basegeth = archiveBasename(*arch, params.ArchiveVersion(env.Commit))
  		geth     = "geth-" + basegeth + ext
  		alltools = "geth-alltools-" + basegeth + ext
  
  		baseswarm = archiveBasename(*arch, sv.ArchiveVersion(env.Commit))
  		swarm     = "swarm-" + baseswarm + ext
  	)
  	maybeSkipArchive(env)
  	if err := build.WriteArchive(geth, gethArchiveFiles); err != nil {
  		log.Fatal(err)
  	}
  	if err := build.WriteArchive(alltools, allToolsArchiveFiles); err != nil {
  		log.Fatal(err)
  	}
  	if err := build.WriteArchive(swarm, swarmArchiveFiles); err != nil {
  		log.Fatal(err)
  	}
  	for _, archive := range []string{geth, alltools, swarm} {
  		if err := archiveUpload(archive, *upload, *signer); err != nil {
  			log.Fatal(err)
  		}
  	}
  }
docs: // Release Packaging