в тасках build и copy нужно обязательно делать return. Он сигнализирует о том, что задача закончилась (возвращает Promise) и можно синхронно выполнять следующую
И вообще во всех тасках по феншую надо делать return
gulp.task('copy', function () {
return gulp.src('src/**/*.*')
.pipe(gulp.dest('public'))
;
});