Full Code of jbrodriguez/hugulp for AI

master 32d69d613179 cached
33 files
35.7 KB
10.9k tokens
5 symbols
1 requests
Download .txt
Repository: jbrodriguez/hugulp
Branch: master
Commit: 32d69d613179
Files: 33
Total size: 35.7 KB

Directory structure:
gitextract_nmjweurq/

├── .cix.yml
├── .gitignore
├── .prettierrc
├── CHANGES
├── LICENSE
├── README.md
├── VERSION
├── docker/
│   ├── Dockerfile.template
│   └── docker-compose.yaml.template
├── gulp/
│   ├── build.js
│   ├── util.js
│   └── watch.js
├── index.js
├── metadata/
│   └── changes/
│       ├── 0.1.0.txt
│       ├── 1.0.0.txt
│       ├── 1.1.0.txt
│       ├── 1.1.1.txt
│       ├── 1.1.2.txt
│       ├── 1.2.0.txt
│       ├── 1.3.0.txt
│       ├── 1.4.0.txt
│       ├── 2.0.0.txt
│       ├── 2.0.1.txt
│       ├── 2.0.2.txt
│       ├── 2.0.3.txt
│       ├── 2.0.4.txt
│       ├── 2.0.5.txt
│       └── 2.0.6.txt
├── package.json
└── scripts/
    ├── bump-hook
    ├── create-docker-machine-and-run-it
    ├── create-hugo-site
    └── rel-push-prog

================================================
FILE CONTENTS
================================================

================================================
FILE: .cix.yml
================================================
test:
    script:
        # - scripts/rel-push-prog
    only:
        - /^wrk.*$/

deploy:
    script:
        - scripts/rel-push-prog
        - npm publish
    only:
        - /^rel.*$/


================================================
FILE: .gitignore
================================================
.DS_Store
public

# node
node_modules
*.log

# bower
bower_components
src/vendor

# docker
Dockerfile
docker-compose.yaml


================================================
FILE: .prettierrc
================================================
{
	"singleQuote": true,
	"printWidth": 80,
	"semi": false,
	"useTabs": false,
	"tabWidth": 2
}


================================================
FILE: CHANGES
================================================
Version 2.0.6 - 2018-10-28
- log relative path while watching styles (#45)


Version 2.0.5 - 2017-12-12
- Fix scripts task build source


Version 2.0.4 - 2017-12-12
- Set saner htmlmin defaults


Version 2.0.3 - 2017-12-12
- Make cleancss the default styles transformation
- Display pipeline being executed
- Restore default styles logic
- Add callback to sequence call
- Display space optimization achieved


Version 2.0.2 - 2017-12-12
- Fix plugin names


Version 2.0.1 - 2017-12-12
- Run styles/scripts tasks on watch invocation
- Use proper JSON syntax
- Fix update instructions
- Add granular imagemin configuration
- Adjust default .hugulprc


Version 2.0.0 - 2017-12-12
- Read/compile sass and scss (#37)
- Replace var (#34)
- Replace yarn with npm5
- Use standard format
- Implement hugulp next
- Add init command
- Clean up & add logging
- Code refactoring
- Add missing package
- Update docs for v2
- Implements next
- Remove v1 code
- Fix inclusion of production files
- Use vscode instead of atom


Version 1.4.0 - 2017-11-27
- Add docker support (#24)
- Minifyhtml (#31)


Version 1.3.0 - 2017-03-20
- Add less support
- Ignore log files
- Expand glob for assets
- Update README
- Remove log file
- Release 1.2.0
- Display hugulp version
- Add less to watched files
- Upgrade dependencies
- Replace gulp.watch with gulp-watch
- Fix styles folder watch
- Update README


Version 1.2.0 - 2017-03-18
- Ignore log files
- Add less support
- Expand glob for assets
- Update README
- Remove log file


Version 1.1.2 - 2017-03-17
- Process subdirectories


Version 1.1.1 - 2017-02-12
- Fix build command


Version 1.1.0 - 2017-01-28
- Use hugo default config file


Version 1.0.0 - 2017-01-08
- Add commander dependency
- Create cli interface
- Rename src folder to assets
- Remove files no longer required
- Support css files
- Rewrite instructions
- Publish to npm on CI
- Update package.json upon new release


Version 0.1.0 - 2017-01-06
- Initial commit
- syntax fix for package.json
- Add missing semicolons
- Replace tabs with spaces
- Update reference.js
- - Update packages
- Improve project details and instructions
- Fix syntax error
- Delete public folder when running gulp task. Also delete (if existing) the public folder inside hugo.
- Update dependencies
- Implement CI automation
- Add missing variable


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2015 Juan B. Rodriguez

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# DEPRECATION NOTICE

I'll archive the repo by the end of August 2021.

The main reason is [Hugo pipes](https://gohugo.io/hugo-pipes/) are built-in and pretty much cover what Hugulp does.

I think the only part missing is image optimization, but I think you can build a pipe to do it.

The other reason is it badly needs an update to gulp 4 and although it doesn't seem like that hard a task, I don't have the appetite to do it.

# hugulp 2

## v2 Breaking changes

If you're using hugulp v1, please take note of the following changes:

* hugo is no longer invoked by hugulp

  use hugo as per its docs, then invoke hugulp build

* put your assets in the static folder

  for example, static/styles, static/images, static/scripts

* themes are supported out of the box

_Note: If you need sass/less/js pre-processing, read v2 docs below_

## Description

`hugulp` is a tool to optimize the assets of a [Hugo](https://gohugo.io) website.

The main idea is to recreate the famous [Ruby on Rails Asset Pipeline](http://guides.rubyonrails.org/asset_pipeline.html), which minifies, concatenates and fingerprints the assets used in your website.

This leads to less and smaller network requests to your page, improving overall user experience.

Read [this blog post](https://jbrio.net/posts/mobile-friendly-website-2/) and [this article](https://medium.com/@juanbrodriguez/hugulp-a-hugo-gulp-toolchain-94f72ccc3577) for additional context.

_Note: These articles refer to v1_

It's internally driven by [Gulp](https://gulpjs.com).

This project Includes the following tools, tasks and workflows:

* [sass](https://github.com/dlmanning/gulp-sass) (super fast libsass)
* [less](https://github.com/plus3network/gulp-less)
* [autoprefixer](https://github.com/sindresorhus/gulp-autoprefixer)
* [clean-css](https://github.com/scniro/gulp-clean-css)
* [jshint](https://github.com/spalger/gulp-jshint)
* [uglify](https://github.com/terinjokes/gulp-uglify)
* [imagemin](https://github.com/sindresorhus/gulp-imagemin) (only [changed images](https://github.com/sindresorhus/gulp-changed))
* [gulp-rev](https://github.com/sindresorhus/gulp-rev), [gulp-rev-replace](https://github.com/jamesknelson/gulp-rev-replace) (fingerprinting)
* [htmlmin](https://github.com/jonschlinkert/gulp-htmlmin)
* [watch](https://github.com/floatdrop/gulp-watch)

## Installation

[Node](https://nodejs.org) needs to be installed in your system.

Then just

```bash
$ npm install -g hugulp
```

Or you can build and run using [docker](https://www.docker.com):

```bash
# Default docker setup:
$ ./scripts/create-docker-machine-and-run-it

# -- OR --

# Run with custom machine name, specific hugo version, specific node version and run docker in detached mode:
$ ./scripts/create-docker-machine-and-run-it -a app-devel -g 0.20.6 -n 6.10.0 -d
```

**Note:** You only run the `./scripts/create-docker-machine-and-run-it` if you want to create a new docker machine. Once the docker machine is created, you have to use docker commands to manage it. Please be familiar with docker in this regard.

## Getting Started

The most common usage scenario would be:

```bash
$ hugo new site yoursite
$ cd yoursite
$ hugulp init
# create content
# add images (static/images), css (static/styles) and javascript (static/scripts)
$ hugo server -D # for development
# development is done, ready to publish
$ rm -rf public # clean up public folder, it will be re-generated by hugo
$ hugo # for release/production/deployment
$ hugulp build # optimize the site by running the asset pipeline
```

Another scenario would be to include sass/less pre-processing:

```bash
$ hugo new site yoursite
$ cd yoursite
$ hugulp init
# create content
# add images (static/images), and javascript (static/scripts)
# add sass/less (assets/styles)
$ hugo server -D # for development
$ hugulp watch # to convert sass/less (assets/styles) into css (static/styles)
# development is done, ready to publish
$ rm -rf public # clean up public folder, it will be re-generated by hugo
$ hugo # for release/production/deployment
$ hugulp build # optimize the site by running the asset pipeline
```

In both cases, you could chain the last 3 commands:

```bash
$ rm -rf public && hugo && hugulp build
```

`hugulp` requires a configuration file (`.hugulprc`), which is created by the `hugulp init` command (you can create the file manually if you want).

This is the default `.hugulprc`:

```json
{
  "version": 2,
  "pipeline": ["images", "styles", "scripts", "fingerprint", "html"],
  "path": {
    "styles": "styles",
    "images": "images",
    "scripts": "scripts"
  },
  "watch": {
    "source": "assets",
    "target": "static"
  },
  "build": {
    "source": "public",
    "target": "public"
  },
  "autoprefixer": {
    "browsers": ["last 2 versions"]
  },
  "cleancss": {
    "advanced": false
  },
  "htmlmin": {
    "collapseWhitespace": true
  },
  "gifsicle": { "interlaced": true },
  "jpegtran": { "progressive": true },
  "optipng": { "optimizationLevel": 5 },
  "svgo": {
    "plugins": [{ "removeViewBox": true }, { "cleanupIDs": false }]
  }
}
```

You can easily customize `hugulp`'s behavior, by modifying this configuration file, as described below.

## Available Commands

### hugulp watch

`hugulp` will assist you if you're using sass/less (and javascript), which require pre-processing.

It will watch for changes to styles or script files, process them and write them to hugo's static folder, according to the following table

| In Folder      |      Looks for       | Operation                              | Written to     |
| -------------- | :------------------: | -------------------------------------- | -------------- |
| assets/styles  | s[a\|c]ss, less, css | Convert sass/less to css               | static/styles  |
| assets/scripts |          js          | Lint javascript code (_soon babelify_) | static/scripts |

_Note: It searches the folders recursively_

The table above applies to `hugulp` run with a default `.hugulprc`.

You can customize the folder names: `resources` instead of `assets`, `js` instead of `scripts` and so on.

This is described in the `.hugulprc` section below.

### hugulp build

It optimizes the site that hugo built, by running the asset pipeline as defined in `.hugulprc` (field _pipeline_).

Additionally, files are not watched for changes

### hugulp version

Display installed version.

### hugulp init

Create a default `.hugulprc`.

## Configuration

By editing the `.hugulprc` configuration file, you can customize almost anything about `hugulp`.

Description of each field follows:

### pipeline

Defines which tasks of the asset pipeline will be executed (`hugulp build` command)

Type: array <br>
Default:

```json
"pipeline": ["images", "styles", "scripts", "fingerprint", "html"]
```

| Task        | Description                                                        |
| ----------- | ------------------------------------------------------------------ |
| images      | minify images with `imagemin`                                      |
| styles      | pre-process `sass`/`less`/css, then `clean-css`                    |
| scripts     | `jshint`, then `uglify`                                            |
| fingerprint | fingerprint with `rev`, then replace references with `rev-replace` |
| html        | minify html with `htmlmin`                                         |

Let's say you don't want to fingerprint the assets. Just set _pipeline_ to

```json
"pipeline": ["images", "styles", "scripts", "html"]
```

By removing the _fingerprint_ task, it will not be executed.

Note that tasks are executed sequentially.

### path

Defines the name of the folders where your assets are located/will be transferred to.

Type: object <br>
Default:

```json
"path": {
  "styles": "styles",
  "images": "images",
  "scripts": "scripts"
}
```

So if you prefer your styles folder to be called css, and scripts to be called js, you would change it to:

```json
"path": {
  "styles": "css",
  "images": "images",
  "scripts": "js"
}
```

### watch

Define which folders to watch for changes, for the `hugulp watch` command.

Type: object <br>
Default:

```json
"watch": {
  "source": "assets",
  "target": "static"
}
```

This field works together with the path field.

With a default `.hugulprc`, it will watch `assets/styles` and `assets/scripts` (recursively).

If you customized `path` as per above, it will watch `assets/css` and `assets/js`.

If you additionally want the `assets` folder to be called `resources`, change _source_ to `resources`

```json
"watch": {
  "source": "resources",
  "target": "static"
}
```

then it will watch `resources/css` and `resources/js`

Finally, the changes will be written to the well-known hugo static folder.

With a default `.hugulprc`, files will be written to `static/styles` and `static/scripts`.

### build

Defines the folders referenced during the `hugulp build` command

Type: object <br>
Default:

```json
"build": {
  "source": "public",
  "target": "public"
}
```

This should generally be left unchanged.

`hugo` will output to the public folder by default, so `hugulp build` will process the files in-place.

### autoprefixer

Options for `autoprefixer`. Check [gulp-autoprefixer](https://github.com/sindresorhus/gulp-autoprefixer) for documentation.

Task: `styles`

Type: object<br>
Default:

```json
"autoprefixer": {
  "browsers": ["last 2 versions"]
}
```

### cleancss

Options for `clean-css`. Check [gulp-clean-css](https://github.com/scniro/gulp-clean-css) for documentation.

Task: `styles`

Default:

```json
"cleancss": {
  "advanced": false
}
```

### htmlmin

Options for `htmlmin`. Check [gulp-htmlmin](https://github.com/jonschlinkert/gulp-htmlmin) for documentation.

Task: `html`

Default:

```json
"htmlmin": {
  "collapsedWhitespace": true
}
```

### gifsicle

Options for `gifsicle`. Check [gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin) for documentation.

Task: `images`

Default:

```json
"gifsicle": {
  "interlaced": true
}
```

### jpegtran

Options for `jpegtran`. Check [gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin) for documentation.

Task: `images`

Default:

```json
"jpegtran": {
  "progressive": true
}
```

### optipng

Options for `optipng`. Check [gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin) for documentation.

Task: `images`

Default:

```json
"optipng": {
  "optimizationLevel": 5
}
```

### svgo

Options for `svgo`. Check [gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin) for documentation.

Task: `images`

Default:

```json
"svgo": {
  "plugins": [{ "removeViewBox": true }, { "cleanupIDs": false }]
}
```

## How to update

Whenever a new `hugulp` version becomes available, you can update it by running

```bash
$ npm install -g hugulp
```

## PR

Pull Requests are welcome :thumbsup:.

## Share

Made by [Juan B. Rodriguez](http://jbrodriguez.io), with a MIT License.

Please [share the article or leave your comments](http://jbrodriguez.io/mobile-friendly-website-2/).


================================================
FILE: VERSION
================================================
2.0.6


================================================
FILE: docker/Dockerfile.template
================================================
FROM node:7.9.0-alpine
# Set environment variable
ARG RUN_AS=node
ARG HUGO_VERSION=0.20.6
ARG HUGO_BINARY="hugo_${HUGO_VERSION}_Linux-64bit"
RUN apk update && apk add py-pygments && rm -rf /var/cache/apk/*
# Download and install hugo
RUN mkdir /usr/local/hugo
ADD https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY}.tar.gz \
    /usr/local/hugo/
RUN tar xzf /usr/local/hugo/${HUGO_BINARY}.tar.gz -C /usr/local/hugo/ \
    && ln -s /usr/local/hugo/hugo /usr/local/bin/hugo \
    && rm /usr/local/hugo/${HUGO_BINARY}.tar.gz
RUN npm install -g hugulp
ENV HOME=/home/$RUN_AS
COPY package.json $HOME/web/
RUN chmod 755 $HOME/* && chown -R $RUN_AS:$RUN_AS $HOME/*
USER $RUN_AS
# Change working directory
WORKDIR $HOME/web/
USER root
COPY . $HOME/web/
RUN chown -R $RUN_AS:$RUN_AS $HOME/*
USER $RUN_AS

================================================
FILE: docker/docker-compose.yaml.template
================================================
---
version: '3'
services:
  app:
    labels: 
      app: "app"
    build:
      context: .
    command: /bin/sh -c './scripts/create-hugo-site -a ./app;cd app;hugulp watch'
    volumes:
      - .:/home/node/app
      - /home/node/app/node_modules
    ports:
      - "3000:3000"
      - "3001:3001"


================================================
FILE: gulp/build.js
================================================
// system
const fs = require('fs')
const path = require('path')

// parameters
const config = JSON.parse(
  fs.readFileSync(path.join(process.cwd(), '.hugulprc'))
)

// common
const gulp = require('gulp')
const sequence = require('run-sequence')
const debug = require('gulp-debug')
const size = require('gulp-size')
const pump = require('pump')
const gutil = require('gulp-util')

// images
const imagemin = require('gulp-imagemin')

// styles
const autoprefixer = require('gulp-autoprefixer')
const cleancss = require('gulp-clean-css')
const merge = require('merge-stream')
const concat = require('gulp-concat')
const helper = require('./util')
// const changed = require('gulp-changed')

// scripts
const jshint = require('gulp-jshint')
const uglify = require('gulp-uglify')

// revision
const rev = require('gulp-rev')
const revdel = require('rev-del')
const delorg = require('gulp-rev-delete-original')
const del = require('del')

// reference
const replace = require('gulp-rev-replace')

// minify html
const htmlmin = require('gulp-htmlmin')

gulp.task('build', function(cb) {
  gutil.log(
    gutil.colors.green(`building site ... (${JSON.stringify(config.pipeline)})`)
  )

  // config.pipeline is an array of task names
  // i.e.: ['images', 'styles']
  sequence(...config.pipeline, cb)
})

// .pipe(changed('staging/img'))
gulp.task('images', function() {
  return gulp
    .src(path.join(config.build.source, config.path.images, '**', '*.*')) // i.e.: public/images/**/*.*
    .pipe(
      imagemin([
        imagemin.gifsicle(config.gifsicle),
        imagemin.jpegtran(config.jpegtran),
        imagemin.optipng(config.optipng),
        imagemin.svgo(config.svgo)
      ])
    )
    .pipe(gulp.dest(path.join(config.build.target, config.path.images))) // i.e.: public/images
})

gulp.task('styles:cleancss', function() {
  const streams = helper.getStylesStreams()

  return merge(...streams)
    .pipe(autoprefixer(config.autoprefixer))
    .pipe(cleancss(config.cleancss))
    .pipe(concat('styles.css'))
    .pipe(size({ title: 'styles: ' }))
    .pipe(gulp.dest(path.join(config.build.target, config.path.styles))) // i.e.: public/styles/styles.css
})

// default styles task
gulp.task('styles', function(cb) {
  sequence('styles:cleancss', cb)
})

gulp.task('scripts', function() {
  return gulp
    .src(path.join(config.watch.source, config.path.scripts, '**', '*.js'))
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(uglify())
    .pipe(size({ title: 'scripts: ' }))
    .pipe(gulp.dest(path.join(config.build.target, config.path.scripts)))
})

gulp.task('revision', function() {
  return gulp
    .src(
      [
        path.join(config.build.source, config.path.styles, '**/*.css'),
        path.join(config.build.source, config.path.scripts, '**/*.js'),
        path.join(config.build.source, config.path.images, '**/*.*')
      ],
      { base: path.join(process.cwd(), config.build.source) }
    )
    .pipe(rev())
    .pipe(delorg())
    .pipe(gulp.dest(config.build.target))
    .pipe(rev.manifest())
    .pipe(revdel({ dest: config.build.target }))
    .pipe(gulp.dest(config.build.target))
})

gulp.task('reference', function() {
  const manifest = gulp.src(path.join(config.build.source, 'rev-manifest.json'))

  return gulp
    .src([
      path.join(config.build.source, '**/*.html'),
      path.join(config.build.source, '**/*.xml'),
      path.join(config.build.source, '**/*.css')
    ])
    .pipe(
      replace({
        manifest: manifest,
        replaceInExtensions: ['.html', '.xml', '.css']
      })
    )
    .pipe(gulp.dest(config.build.target))
})

gulp.task('fingerprint', function(cb) {
  sequence('revision', 'reference', cb)
})

gulp.task('html', function(cb) {
  pump(
    [
      gulp.src(path.join(config.build.source, '**', '*.html')),
      htmlmin(config.htmlmin),
      size({ title: 'html: ' }),
      gulp.dest(config.build.target)
    ],
    cb
  )
})


================================================
FILE: gulp/util.js
================================================
// system
const fs = require('fs')
const path = require('path')

// common
const gulp = require('gulp')

// styles
const sass = require('gulp-sass')
const less = require('gulp-less')
const concat = require('gulp-concat')

// parameters
const config = JSON.parse(
  fs.readFileSync(path.join(process.cwd(), '.hugulprc'))
)

// helper functions
function getStylesStreams() {
  const lessStream = gulp
    .src(path.join(config.watch.source, config.path.styles, '**/*.less')) // i.e.: assets/styles/**/*.less
    .pipe(less())
    .pipe(concat('less-files.css'))

  const scssStream = gulp
    .src(path.join(config.watch.source, config.path.styles, '**/*.s[a|c]ss')) // i.e.: assets/styles/**/*.s[a|c]ss
    .pipe(sass())
    .pipe(concat('scss-files.css'))

  const cssStream = gulp
    .src(path.join(config.watch.source, config.path.styles, '**/*.css')) // i.e.: assets/styles/**/*.css
    .pipe(concat('css-files.css'))

  return [lessStream, scssStream, cssStream]
}

module.exports = { getStylesStreams }


================================================
FILE: gulp/watch.js
================================================
// system
const fs = require('fs')
const path = require('path')

// parameters
const config = JSON.parse(
  fs.readFileSync(path.join(process.cwd(), '.hugulprc'))
)

// common
const gulp = require('gulp')
const sequence = require('run-sequence')
const watch = require('gulp-watch')
const gutil = require('gulp-util')

// styles
const merge = require('merge-stream')
const concat = require('gulp-concat')
const helper = require('./util')

// scripts
const jshint = require('gulp-jshint')

gulp.task('watch', function() {
  const styles = [
    path.join(config.watch.source, config.path.styles, '**', '*.s[a|c]ss'),
    path.join(config.watch.source, config.path.styles, '**', '*.less'),
    path.join(config.watch.source, config.path.styles, '**', '*.css')
  ]

  gutil.log(gutil.colors.green(`running styles task ...`))
  gulp.start('styles')

  gutil.log(gutil.colors.green(`watching ${JSON.stringify(styles)}`))

  watch(styles, {}, function handle(param) {
    const relativePath = function(path) {
      return path.substring(String(process.cwd()).length)
    }
    gutil.log(
      gutil.colors.yellow(
        `styles: ${JSON.stringify(relativePath(param.history[0]))} - ${param.event}`
      )
    )

    gulp.start('styles')
  })

  const scripts = [
    path.join(config.watch.source, config.path.scripts, '**', '*.js')
  ]

  gutil.log(gutil.colors.green(`running scripts task ...`))
  gulp.start('scripts')

  gutil.log(gutil.colors.green(`watching ${JSON.stringify(scripts)}`))

  watch(scripts, {}, function handle(param) {
    gutil.log(
      gutil.colors.yellow(
        `scripts: ${JSON.stringify(param.history[0])} - ${param.event}`
      )
    )

    gulp.start('scripts')
  })
})

gulp.task('styles:cleancss', function() {
  const streams = helper.getStylesStreams()

  return merge(...streams)
    .pipe(concat('styles.css'))
    .pipe(gulp.dest(path.join(config.watch.target, config.path.styles))) // i.e.: static/styles/styles.css
})

// default styles task
gulp.task('styles', function(cb) {
  sequence('styles:cleancss', cb)
})

gulp.task('scripts', function() {
  return gulp
    .src(path.join(config.watch.source, config.path.scripts, '**', '*.js'))
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(gulp.dest(path.join(config.watch.target, config.path.scripts)))
})


================================================
FILE: index.js
================================================
#!/usr/bin/env node

const path = require('path')
const fs = require('fs')
const program = require('commander')
const gulp = require('gulp')
const pkginfo = require('pkginfo')(module, 'version')
const gutil = require('gulp-util')

function init() {
  gutil.log(gutil.colors.red(`hugulp v${module.exports.version}`))

  const hugulpRc = path.join(process.cwd(), '.hugulprc')

  if (fs.existsSync(hugulpRc)) {
    gutil.log(
      gutil.colors.yellow('.hugulprc already exists (initialization skipped)')
    )
    return
  }

  const config = {
    version: 2,
    pipeline: ['images', 'styles', 'scripts', 'fingerprint', 'html'],
    path: {
      styles: 'styles',
      images: 'images',
      scripts: 'scripts'
    },
    watch: {
      source: 'assets',
      target: 'static'
    },
    build: {
      source: 'public',
      target: 'public'
    },
    autoprefixer: {
      browsers: ['last 2 versions']
    },
    cleancss: {
      advanced: false
    },
    htmlmin: {
      collapseWhitespace: true
    },
    gifsicle: { interlaced: true },
    jpegtran: { progressive: true },
    optipng: { optimizationLevel: 5 },
    svgo: {
      plugins: [{ removeViewBox: true }, { cleanupIDs: false }]
    }
  }

  fs.writeFileSync(hugulpRc, JSON.stringify(config, null, '  '))

  gutil.log(
    gutil.colors.green(
      'hugulp has been initialized (.hugulprc was created with default values)'
    )
  )
}

function build() {
  gutil.log(gutil.colors.red(`hugulp v${module.exports.version}`))

  require(path.join(fs.realpathSync(__dirname), 'gulp', 'build'))
  gulp.start('build')
}

function watch() {
  gutil.log(gutil.colors.red(`hugulp v${module.exports.version}`))

  require(path.join(fs.realpathSync(__dirname), 'gulp', 'watch'))
  gulp.start('watch')
}

function version() {
  console.log('hugulp v' + module.exports.version)
}

program
  .command('init')
  .description('create default .hugulprc')
  .action(init)

program
  .command('version')
  .description('display version information')
  .action(version)

program
  .command('build')
  .description('optimize site (for publishing purposes)')
  .action(build)

program
  .command('watch')
  .description('watch for changes to styles and/or javascript')
  .action(watch)

program.parse(process.argv)


================================================
FILE: metadata/changes/0.1.0.txt
================================================
2017-01-06 - 0.1.0
- Initial commit
- syntax fix for package.json
- Add missing semicolons
- Replace tabs with spaces
- Update reference.js
- - Update packages
- Improve project details and instructions
- Fix syntax error
- Delete public folder when running gulp task. Also delete (if existing) the public folder inside hugo.
- Update dependencies
- Implement CI automation
- Add missing variable




================================================
FILE: metadata/changes/1.0.0.txt
================================================
2017-01-08 - 1.0.0
hugulp is now a standalone tool.

This allows for the following improvements
- Easier to work on multiple sites
- Easier to update
- Can be used in CI/CD workflows


================================================
FILE: metadata/changes/1.1.0.txt
================================================
2017-01-28 - 1.1.0

hugulp now uses hugo default config file (config.toml)

You can specify an alternative config, via a command line switch
-c, --config


================================================
FILE: metadata/changes/1.1.1.txt
================================================
2017-02-12 - 1.1.1

```hugulp build``` now creates a site without drafts and without
baseUrl


================================================
FILE: metadata/changes/1.1.2.txt
================================================
2017-03-17 - 1.1.2

```hugulp``` now processes subdirectories in the assets folders, if present.


================================================
FILE: metadata/changes/1.2.0.txt
================================================
2017-03-18 - 1.2.0

Add support for less files


================================================
FILE: metadata/changes/1.3.0.txt
================================================
2017-03-20 - 1.3.0

Added a command to display the current version: ```hugulp version```

A bug that was preventing the styles folder to react to changes was fixed.

Additionally:
- Upgrade dependencies
- Replace gulp.watch with gulp-watch


================================================
FILE: metadata/changes/1.4.0.txt
================================================
2017-11-27 - 1.4.0

- Add docker support (#24)
- Minifyhtml (#31)


================================================
FILE: metadata/changes/2.0.0.txt
================================================
2017-12-12 - 2.0.0

This is a re-thinking of hugulp, in order to be more flexible and better support hugo's features.

hugulp now works as a post-processor, optimizing the output that hugo generates in the public folder.

You can now invoke hugo from the command line as it best suits you and use any theme you want.

Check the README for v2 docs.


================================================
FILE: metadata/changes/2.0.1.txt
================================================
2017-12-12 - 2.0.1

- Run styles/scripts tasks on watch invocation
- Add granular imagemin configuration
- Adjust default .hugulprc
- Fix JSON syntax in README
- Fix update instructions


================================================
FILE: metadata/changes/2.0.2.txt
================================================
2017-12-12 - 2.0.2

- Fix plugin names


================================================
FILE: metadata/changes/2.0.3.txt
================================================
2017-12-12 - 2.0.3

- Make sure all tasks are executed
- Display pipeline being executed
- Display space optimization achieved


================================================
FILE: metadata/changes/2.0.4.txt
================================================
2017-12-12 - 2.0.4

- Set saner htmlmin defaults


================================================
FILE: metadata/changes/2.0.5.txt
================================================
2017-12-12 - 2.0.5

- Fix scripts task build source


================================================
FILE: metadata/changes/2.0.6.txt
================================================
2018-10-28 - 2.0.6

- Log relative path while watching styles

================================================
FILE: package.json
================================================
{
  "name": "hugulp",
  "version": "2.0.6",
  "description": "website",
  "files": [
    "index.js",
    "gulp"
  ],
  "bin": {
    "hugulp": "./index.js"
  },
  "scripts": {
    "gulp": "gulp",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Juan B. Rodriguez",
  "license": "MIT",
  "dependencies": {
    "commander": "^2.12.2",
    "del": "^3.0.0",
    "gulp": "^3.9.1",
    "gulp-autoprefixer": "^4.0.0",
    "gulp-changed": "^3.1.1",
    "gulp-clean-css": "^3.9.0",
    "gulp-concat": "^2.6.1",
    "gulp-debug": "^3.1.0",
    "gulp-htmlmin": "^3.0.0",
    "gulp-imagemin": "^4.0.0",
    "gulp-jshint": "^2.0.4",
    "gulp-less": "^3.3.2",
    "gulp-rev": "^8.1.0",
    "gulp-rev-delete-original": "^0.2.3",
    "gulp-rev-replace": "^0.4.3",
    "gulp-sass": "^3.1.0",
    "gulp-size": "^2.1.0",
    "gulp-svgmin": "^1.2.4",
    "gulp-uglify": "^3.0.0",
    "gulp-util": "^3.0.8",
    "gulp-watch": "^4.3.11",
    "jshint": "^2.9.5",
    "merge-stream": "^1.0.1",
    "path": "^0.12.7",
    "pkginfo": "^0.4.1",
    "pump": "^2.0.0",
    "rev-del": "^1.0.5",
    "run-sequence": "^2.2.0"
  }
}


================================================
FILE: scripts/bump-hook
================================================
#!/usr/bin/env bash

function error {
	NAME=$1

	printf "$1"
	exit 1
}

APP_VERSION=$(cat VERSION 2> /dev/null)

if [[ -z $APP_VERSION ]]; then
	error "Unable to find VERSION file. Please check and try again"
fi

echo "Version is $APP_VERSION"

npm --no-git-tag-version -f version ${APP_VERSION}

TAG=`git describe --abbrev=0 --tags 2> /dev/null`

if [[ -z "$TAG" ]]; then
	COMMITS=`git --no-pager log --reverse --pretty=format:'- %s' | egrep -v '.*Closes' | egrep -v '.*Merge' 2> /dev/null`
else
	COMMITS=`git --no-pager log --reverse --pretty=format:'- %s' "$TAG"...HEAD | egrep -v '.*Closes' | egrep -v '.*Merge' 2> /dev/null`
fi

PREVIOUS=`cat metadata/changes/${TAG}.txt 2> /dev/null`

cat <<EOF > metadata/changes/${APP_VERSION}.txt
`date +%F` - ${APP_VERSION}
${COMMITS}

${PREVIOUS}
EOF

code metadata/changes/${APP_VERSION}.txt

echo "Bumped versions successfully"


================================================
FILE: scripts/create-docker-machine-and-run-it
================================================
#!/bin/bash
#
# Setup a docker machine for development
set -eu

readonly PROGNAME=$(basename "$0")
readonly ARGS=("$@")
# Docker settings
HUGO_VERSION=0.20.6
NODE_VERSION="7.9.0-alpine"
APP_NAME="app"
DETACHED=
check_where_cmd_is_run() {
  # Check if script is being run from the root directory
  if [ ! -d 'gulp' ]; then
    cat <<- EOF
		Please run this script from the root directory.

		Example:
			./scripts/create-docker-machine-and-run-it

		-- OR --

		bash ./scripts/create-docker-machine-and-run-it
		EOF
		exit 1
	fi
}

usage() {
  cat <<- EOF
	Usage: ./scripts/$PROGNAME optional options

	Setups a docker machine and runs it for development.

	OPTIONS:
	   -g --hugo-version the hugo version to be installed. Minus v or version prefix. It defaults to 0.9
	   -n --node-version the node version to be installed. Minus v or version prefix. It defaults to 6.10.0
	   -a --app-name the name of the app. It defaults to app
	   -d --detached detached mode: Run containers in the background, print new container names.
	   -h --help show this help

	Examples:
	Run with default settings:

	   ./scripts/$PROGNAME

	Run with custom machine name, specific hugo version, specific node version and run docker in detached mode:

	   bash ./scripts/$PROGNAME -a app-name -g 0.9 -n 6.10.0
	EOF
}

cmdline() {
  local arg=
  local args=
  for arg; do
    local delim=""
    case "$arg" in
      # Copied from: http://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming/
      # Translate --machine-name to -m (short options)
      --hugo-version)   args="${args}-g ";;
      --node-version)   args="${args}-n ";;
      --app-name)       args="${args}-a ";;
      --detached)       args="${args}-d ";;
      --help)           args="${args}-h ";;
      #pass through anything else
      *) [[ "${arg:0:1}" == "-" ]] || delim="\""
          args="${args}${delim}${arg}${delim} ";;
    esac
  done
  while getopts "g:n:a:dh" OPTION; do
    case "$OPTION" in
      h)
        usage
        exit 0
        ;;
      g)
        HUGO_VERSION=$OPTARG
        ;;
      n)
        NODE_VERSION=$OPTARG
        ;;
      a)
        APP_NAME=$OPTARG
        ;;
      d)
        DETACHED='-d'
        ;;
    esac
  done
  return 0
}

create_docker_file() {
  # Check to make sure Dockerfile exist
  if [ ! -f './docker/Dockerfile.template' ]; then
    echo "This script requires ./docker/Dockerfile.template file to setup docker."
  exit 1
  fi
  echo "Creating Dockerfile file..."
  cp ./docker/Dockerfile.template ./Dockerfile
  # Replace some lines in existing Dockerfile.
  # Set sed -i option to '' to prevent it from creating backup files
  # Replace node version set value
  sed -i '' -e "s|^FROM node:\([0-9\.]*\).*|FROM node:$NODE_VERSION|" \
    Dockerfile
  # Replace hugo version with set value
  sed -i '' -e "s|^ARG HUGO_VERSION=\([0-9\.]*\).*|ARG HUGO_VERSION=$HUGO_VERSION|" \
    Dockerfile
  # Replace app home directory with set value
  sed -i '' -e "s|\$HOME/[a-zA-Z0-9]*/$|\$HOME/$APP_NAME/|g" \
    Dockerfile
  echo "Dockerfile successfully created."
}

setup_docker() {
  # Check if docker is installed on the machine
  if ! docker version > /dev/null; then
    echo "Please docker-engine and docker-compose are required to be installed on the host machine"
    echo "https://docs.docker.com/engine/installation/"
    echo "https://docs.docker.com/compose/"
    exit 1
  fi
  create_docker_file
}

setup_docker_compose() {
  # Check to make sure docker-compose template file exist
  if [ ! -f './docker/docker-compose.yaml.template' ]; then
    echo "This script requires ./docker/docker-compose.yaml.template file to setup docker-compose."
    exit 1
  fi
  echo "Creating docker-compose.yaml file..."
  cp ./docker/docker-compose.yaml.template ./docker-compose.yaml
  echo "docker-compose.yaml successfully created."
  sed -i '' -e "s/app:/${APP_NAME}:/" \
    docker-compose.yaml
  sed -i '' -e "s/app/$APP_NAME/g" \
    docker-compose.yaml
  if [[ "$DETACHED" != "" ]]; then
    docker-compose up --build "$DETACHED" "$APP_NAME"
  else
    docker-compose up --build "$APP_NAME"
  fi
}

#######################
#    Main function    #
#######################
if [[ $# -gt 0 ]]; then
  cmdline "${ARGS[@]}"
fi
check_where_cmd_is_run
setup_docker
setup_docker_compose


================================================
FILE: scripts/create-hugo-site
================================================
#!/bin/sh
#
# Creates pre-requiste hugo site
set -eu

readonly PROGNAME=$(basename "$0")
readonly ARGS="$@"
APP_NAME="app"

usage() {
	cat <<- EOF
	Usage: ./scripts/$PROGNAME optional options

	Creates folders needed to run hulgulp if they do not exist

	OPTIONS:
		-a --app-name the name of the app. It defaults to app
		-h --help show this help

	Example:
	Run with a hugo website name set to website

		./scripts/$PROGNAME -a website
	EOF
}

cmdline() {
  local arg=
  local args=
  for arg; do
    local delim=""
    case "$arg" in
      # Copied from: http://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming/
      # Translate --machine-name to -m (short options)
      --app-name)       args="${args}-a ";;
      --help)           args="${args}-h ";;
      #pass through anything else
      *) [[ "${arg:0:1}" == "-" ]] || delim="\""
          args="${args}${delim}${arg}${delim} ";;
    esac
  done

  OPTIND=1
  while getopts "ha:" OPTION; do
    case "$OPTION" in
      h)
        usage
        exit 0
        ;;
      a)
        APP_NAME=$OPTARG
        ;;
    esac
  done
  shift "$((OPTIND-1))" # Shift off the options and optional --.
  return 0
}

create_hugo_site() {
  if [ ! -d "$APP_NAME" ]; then
    hugo new site "$APP_NAME"
  fi
}

create_assets_folders() {
  if [ ! -d "${APP_NAME}/assets" ]; then
    mkdir -p "${APP_NAME}"/assets/img
    mkdir -p "${APP_NAME}"/assets/styles
    mkdir -p "${APP_NAME}"/assets/scripts
  fi
}

#######################
#    Main function    #
#######################
if [[ $# -gt 0 ]]; then
  cmdline "$@"
fi
create_hugo_site
create_assets_folders


================================================
FILE: scripts/rel-push-prog
================================================
#!/usr/bin/env bash

function error {
  echo -e "$1" >&2
  exit 1
}

PROG="hugulp"
VERSION=`cat VERSION 2> /dev/null`

git checkout rel/$VERSION

# This sections deals with pushing the current tag
# to the $PROG github repo
REMOTE=`git remote get-url github 2> /dev/null`
if [[ -z "$REMOTE" ]]; then
	git remote add github gitjbr:jbrodriguez/$PROG.git
else
	git remote set-url github gitjbr:jbrodriguez/$PROG.git
fi

# TAG=`git describe --abbrev=0 --tags 2> /dev/null`
# if [[ -z "$TAG" ]]; then
# 	error "Unable to retrieve latest tag"
# fi

BRANCH=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
if [[ -z $BRANCH ]]; then
	error "Unable to obtain branch name. Please check and try again."
fi

git push --tags github $BRANCH
if [ $? -ne 0 ]; then
	error "Unable to push branch ${BRANCH} to github"
fi

DESCRIPTION=`cat metadata/changes/$VERSION.txt 2> /dev/null`

github-release --verbose release \
    --user jbrodriguez \
    --repo "$PROG" \
    --tag "$VERSION" \
    --name "$VERSION" \
    --description "$DESCRIPTION" \
Download .txt
gitextract_nmjweurq/

├── .cix.yml
├── .gitignore
├── .prettierrc
├── CHANGES
├── LICENSE
├── README.md
├── VERSION
├── docker/
│   ├── Dockerfile.template
│   └── docker-compose.yaml.template
├── gulp/
│   ├── build.js
│   ├── util.js
│   └── watch.js
├── index.js
├── metadata/
│   └── changes/
│       ├── 0.1.0.txt
│       ├── 1.0.0.txt
│       ├── 1.1.0.txt
│       ├── 1.1.1.txt
│       ├── 1.1.2.txt
│       ├── 1.2.0.txt
│       ├── 1.3.0.txt
│       ├── 1.4.0.txt
│       ├── 2.0.0.txt
│       ├── 2.0.1.txt
│       ├── 2.0.2.txt
│       ├── 2.0.3.txt
│       ├── 2.0.4.txt
│       ├── 2.0.5.txt
│       └── 2.0.6.txt
├── package.json
└── scripts/
    ├── bump-hook
    ├── create-docker-machine-and-run-it
    ├── create-hugo-site
    └── rel-push-prog
Download .txt
SYMBOL INDEX (5 symbols across 2 files)

FILE: gulp/util.js
  function getStylesStreams (line 19) | function getStylesStreams() {

FILE: index.js
  function init (line 10) | function init() {
  function build (line 64) | function build() {
  function watch (line 71) | function watch() {
  function version (line 78) | function version() {
Condensed preview — 33 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (40K chars).
[
  {
    "path": ".cix.yml",
    "chars": 187,
    "preview": "test:\n    script:\n        # - scripts/rel-push-prog\n    only:\n        - /^wrk.*$/\n\ndeploy:\n    script:\n        - scripts"
  },
  {
    "path": ".gitignore",
    "chars": 122,
    "preview": ".DS_Store\npublic\n\n# node\nnode_modules\n*.log\n\n# bower\nbower_components\nsrc/vendor\n\n# docker\nDockerfile\ndocker-compose.yam"
  },
  {
    "path": ".prettierrc",
    "chars": 95,
    "preview": "{\n\t\"singleQuote\": true,\n\t\"printWidth\": 80,\n\t\"semi\": false,\n\t\"useTabs\": false,\n\t\"tabWidth\": 2\n}\n"
  },
  {
    "path": "CHANGES",
    "chars": 2325,
    "preview": "Version 2.0.6 - 2018-10-28\n- log relative path while watching styles (#45)\n\n\nVersion 2.0.5 - 2017-12-12\n- Fix scripts ta"
  },
  {
    "path": "LICENSE",
    "chars": 1084,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Juan B. Rodriguez\n\nPermission is hereby granted, free of charge, to any person"
  },
  {
    "path": "README.md",
    "chars": 11034,
    "preview": "# DEPRECATION NOTICE\n\nI'll archive the repo by the end of August 2021.\n\nThe main reason is [Hugo pipes](https://gohugo.i"
  },
  {
    "path": "VERSION",
    "chars": 6,
    "preview": "2.0.6\n"
  },
  {
    "path": "docker/Dockerfile.template",
    "chars": 822,
    "preview": "FROM node:7.9.0-alpine\n# Set environment variable\nARG RUN_AS=node\nARG HUGO_VERSION=0.20.6\nARG HUGO_BINARY=\"hugo_${HUGO_V"
  },
  {
    "path": "docker/docker-compose.yaml.template",
    "chars": 299,
    "preview": "---\nversion: '3'\nservices:\n  app:\n    labels: \n      app: \"app\"\n    build:\n      context: .\n    command: /bin/sh -c './s"
  },
  {
    "path": "gulp/build.js",
    "chars": 3931,
    "preview": "// system\nconst fs = require('fs')\nconst path = require('path')\n\n// parameters\nconst config = JSON.parse(\n  fs.readFileS"
  },
  {
    "path": "gulp/util.js",
    "chars": 1009,
    "preview": "// system\nconst fs = require('fs')\nconst path = require('path')\n\n// common\nconst gulp = require('gulp')\n\n// styles\nconst"
  },
  {
    "path": "gulp/watch.js",
    "chars": 2314,
    "preview": "// system\nconst fs = require('fs')\nconst path = require('path')\n\n// parameters\nconst config = JSON.parse(\n  fs.readFileS"
  },
  {
    "path": "index.js",
    "chars": 2267,
    "preview": "#!/usr/bin/env node\n\nconst path = require('path')\nconst fs = require('fs')\nconst program = require('commander')\nconst gu"
  },
  {
    "path": "metadata/changes/0.1.0.txt",
    "chars": 399,
    "preview": "2017-01-06 - 0.1.0\n- Initial commit\n- syntax fix for package.json\n- Add missing semicolons\n- Replace tabs with spaces\n- "
  },
  {
    "path": "metadata/changes/1.0.0.txt",
    "chars": 183,
    "preview": "2017-01-08 - 1.0.0\nhugulp is now a standalone tool.\n\nThis allows for the following improvements\n- Easier to work on mult"
  },
  {
    "path": "metadata/changes/1.1.0.txt",
    "chars": 154,
    "preview": "2017-01-28 - 1.1.0\n\nhugulp now uses hugo default config file (config.toml)\n\nYou can specify an alternative config, via a"
  },
  {
    "path": "metadata/changes/1.1.1.txt",
    "chars": 93,
    "preview": "2017-02-12 - 1.1.1\n\n```hugulp build``` now creates a site without drafts and without\nbaseUrl\n"
  },
  {
    "path": "metadata/changes/1.1.2.txt",
    "chars": 97,
    "preview": "2017-03-17 - 1.1.2\n\n```hugulp``` now processes subdirectories in the assets folders, if present.\n"
  },
  {
    "path": "metadata/changes/1.2.0.txt",
    "chars": 47,
    "preview": "2017-03-18 - 1.2.0\n\nAdd support for less files\n"
  },
  {
    "path": "metadata/changes/1.3.0.txt",
    "chars": 240,
    "preview": "2017-03-20 - 1.3.0\n\nAdded a command to display the current version: ```hugulp version```\n\nA bug that was preventing the "
  },
  {
    "path": "metadata/changes/1.4.0.txt",
    "chars": 66,
    "preview": "2017-11-27 - 1.4.0\n\n- Add docker support (#24)\n- Minifyhtml (#31)\n"
  },
  {
    "path": "metadata/changes/2.0.0.txt",
    "chars": 348,
    "preview": "2017-12-12 - 2.0.0\n\nThis is a re-thinking of hugulp, in order to be more flexible and better support hugo's features.\n\nh"
  },
  {
    "path": "metadata/changes/2.0.1.txt",
    "chars": 186,
    "preview": "2017-12-12 - 2.0.1\n\n- Run styles/scripts tasks on watch invocation\n- Add granular imagemin configuration\n- Adjust defaul"
  },
  {
    "path": "metadata/changes/2.0.2.txt",
    "chars": 39,
    "preview": "2017-12-12 - 2.0.2\n\n- Fix plugin names\n"
  },
  {
    "path": "metadata/changes/2.0.3.txt",
    "chars": 127,
    "preview": "2017-12-12 - 2.0.3\n\n- Make sure all tasks are executed\n- Display pipeline being executed\n- Display space optimization ac"
  },
  {
    "path": "metadata/changes/2.0.4.txt",
    "chars": 49,
    "preview": "2017-12-12 - 2.0.4\n\n- Set saner htmlmin defaults\n"
  },
  {
    "path": "metadata/changes/2.0.5.txt",
    "chars": 52,
    "preview": "2017-12-12 - 2.0.5\n\n- Fix scripts task build source\n"
  },
  {
    "path": "metadata/changes/2.0.6.txt",
    "chars": 61,
    "preview": "2018-10-28 - 2.0.6\n\n- Log relative path while watching styles"
  },
  {
    "path": "package.json",
    "chars": 1127,
    "preview": "{\n  \"name\": \"hugulp\",\n  \"version\": \"2.0.6\",\n  \"description\": \"website\",\n  \"files\": [\n    \"index.js\",\n    \"gulp\"\n  ],\n  \""
  },
  {
    "path": "scripts/bump-hook",
    "chars": 874,
    "preview": "#!/usr/bin/env bash\n\nfunction error {\n\tNAME=$1\n\n\tprintf \"$1\"\n\texit 1\n}\n\nAPP_VERSION=$(cat VERSION 2> /dev/null)\n\nif [[ -"
  },
  {
    "path": "scripts/create-docker-machine-and-run-it",
    "chars": 4283,
    "preview": "#!/bin/bash\n#\n# Setup a docker machine for development\nset -eu\n\nreadonly PROGNAME=$(basename \"$0\")\nreadonly ARGS=(\"$@\")\n"
  },
  {
    "path": "scripts/create-hugo-site",
    "chars": 1613,
    "preview": "#!/bin/sh\n#\n# Creates pre-requiste hugo site\nset -eu\n\nreadonly PROGNAME=$(basename \"$0\")\nreadonly ARGS=\"$@\"\nAPP_NAME=\"ap"
  },
  {
    "path": "scripts/rel-push-prog",
    "chars": 1028,
    "preview": "#!/usr/bin/env bash\n\nfunction error {\n  echo -e \"$1\" >&2\n  exit 1\n}\n\nPROG=\"hugulp\"\nVERSION=`cat VERSION 2> /dev/null`\n\ng"
  }
]

About this extraction

This page contains the full source code of the jbrodriguez/hugulp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 33 files (35.7 KB), approximately 10.9k tokens, and a symbol index with 5 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!