Search code examples
gulpoctopus-deploy

Gulp-octo is ignoring my choice of output directory


I'm trying to build an Octopus Deploy package for an angular-cli project using Gulp and Gulp-Octo:

const gulp = require("gulp"),
    octopus = require("@octopusdeploy/gulp-octo"),
    version = require("./package.json").version;

gulp.task("octopack",
    ["build-prod"],
    () => gulp.src("dist/*")
        .pipe(octopus.pack(
            "zip", // octopackjs does not support nupkg format yet
            {
                id: "myprojectid",
                version: `${version}.${commandLineOptions.buildnumber}`
            }))
        .pipe(gulp.dest('./octopus'))
);

This creates a package with the correct contents and version number, but it always goes into the current directory (alongside gulpfile.js) instead of the directory that I specified in gulp.dest().

I have tried all of the following variations in the call to gulp.dest, with the same result:

  • ./octopus
  • ./octopus/
  • octopus/
  • octopus
  • path.join(__dirname, 'octopus')

Am I misunderstanding how gulp.dest() works, or is octopus.pack() doing something weird?

(Note: If I leave out the gulp.dest() altogether then no zip file is created.)


Solution

  • It's a bug in gulp-octo. In this line they set the path of the generated archive. Unfortunately they just use the filename of the archive instead of a full path (which is what they're supposed to do), so the file is always written relative to the current working directory.

    I might send them a pull request when I get the chance, since this is an easy fix.

    In the meantime you can use the following workaround:

    var path = require('path');
    
    gulp.task("default",
        () => gulp.src("dist/*")
            .pipe(octopus.pack(
                "zip", // octopackjs does not support nupkg format yet
                {
                    id: "myprojectid",
                    version: `${version}.${commandLineOptions.buildnumber}`
                }))
            .on('data', (f) => { f.path = path.join(f.base, f.path) })
            .pipe(gulp.dest('./octopus'))
    );