code: func (p *defaultProvisioner) Provision(ctx context.Context, appName, os, arch string, paths Paths) (err error) {
  	// Retrieve provision status
  	var s ProvisionStatus
  	if s, err = p.ProvisionStatus(paths); err != nil {
  		err = errors.Wrap(err, "retrieving provisioning status failed")
  		return
  	}
  	defer p.updateProvisionStatus(paths, &s)
  
  	// Provision astilectron
  	if err = p.provisionAstilectron(ctx, paths, s); err != nil {
  		err = errors.Wrap(err, "provisioning astilectron failed")
  		return
  	}
  	s.Astilectron = &ProvisionStatusPackage{Version: VersionAstilectron}
  
  	// Provision electron
  	if err = p.provisionElectron(ctx, paths, s, appName, os, arch); err != nil {
  		err = errors.Wrap(err, "provisioning electron failed")
  		return
  	}
  	s.Electron[provisionStatusElectronKey(os, arch)] = &ProvisionStatusPackage{Version: VersionElectron}
  	return
  }
docs: // Provision implements the provisioner interface
  // TODO Package app using electron instead of downloading Electron + Astilectron separately