code: func (p *Project) Deploy() error {
  	p.Log.Debugf("deploying %d functions", len(p.Functions))
  
  	sem := make(semaphore.Semaphore, p.Concurrency)
  	errs := make(chan error)
  
  	go func() {
  		for _, fn := range p.Functions {
  			fn := fn
  			sem.Acquire()
  
  			go func() {
  				defer sem.Release()
  
  				err := fn.Deploy()
  				if err != nil {
  					err = fmt.Errorf("function %s: %s", fn.Name, err)
  				}
  
  				errs <- err
  			}()
  		}
  
  		sem.Wait()
  		close(errs)
  	}()
  
  	for err := range errs {
  		if err != nil {
  			return err
  		}
  	}
  
  	return nil
  }
docs: // Deploy functions and their configurations.