gulp-frau-publisher

A free-range-app utility for publishing apps and libraries to our CDN.


Keywords
d2l, free-range
License
Apache-2.0
Install
npm install gulp-frau-publisher@2.5.0

Documentation

frau-publisher

NPM version

A free-range-app utility for publishing to our CDN.

Installation

Install frau-publisher as a dev dependency:

npm install frau-publisher

Usage

From CLI

The FRAU publisher can be run either directly on the console CLI (assuming dependencies are installed), or specified as a script in package.json. Arguments may be passed directly on the CLI, or may be configured in package.json. In addition, the publish key secret, dev tag, and version can either be explicitly specified, or can be read from the build environment.

To get credentials for your CI job, use repo-settings's cdn functionality.

Typical configuration for running in GitHub Actions:

frau-publisher --moduletype|-m app|lib 
               --targetdir|-t 'cdn directory' 
               --devtagvar GIT_COMMIT 
               --versionvar GIT_TAG 
               --files|-f './dist/**'
"scripts": {
  "publish-release": "frau-publisher"
},
"config": {
  "frauPublisher": {
    "files": "./dist/**",
    "moduleType": "app|lib",
    "targetDirectory": "cdn directory",
    "devTagVar": "GIT_COMMIT",
    "versionVar": "GIT_TAG"
  }
}

Explicitly specifying credentials, dev tag, and/or version:

Note: never publish or commit unencrypted credentials.

frau-publisher --moduletype|-m app 
               --targetdir|-t 'cdn directory' 
               --key|-k yourkey 
               --secret|-s yoursecret 
               --devtag yourtag 
               --version|-v yourversion ex. 0.0.1 
               --files|-f './dist/**'
"scripts": {
  "publish-release": "frau-publisher"
},
"config": {
  "frauPublisher": {
    "files": "./dist/**",
    "moduleType": "app|lib",
    "targetDirectory": "cdn directory",
    "creds": {
      "key": "your key",
      "secret": "your secret"
    },
    "devTag": "your tag",
    "version": "0.0.1"
  }
}

From JavaScript/Gulp

To publish an app to the CDN:

var publisher = require('frau-publisher');

var options = {
	targetDirectory: 'cdn directory',
	devTag: 'your tag'
};

var appPublisher = publisher.app( options );

gulp.src('./dist/**')
	.pipe(appPublisher.getStream());

To publish a library (e.g. jQuery, Angular, etc.) to the CDN:

var libPublisher = publisher.lib( options );

gulp.src('./lib/jquery/**')
	.pipe(libPublisher.getStream());

Publish to Production

To publish the released/production version of your app or library, you must change the devTag property to version and you must specify a valid version number that follows the guideline specified in Semantic Versioning.

In your options variable, set the version tag with a valid version:

var options = {
	targetDirectory: 'cdn directory',
	version: '0.0.1'
};

Publishing Options

Property Description
targetDirectory Unique target directory where the app or library will be published.
creds Credentials key/secret for the specified app. Do not commit the secret to source control. Either load it from a file (which is excluded from source control) or use an environment or command-line variable. Prefer to get these from the standard environment variables.
devTag The development version of the app or library.
version The released/production version of the app or library. Unlike devTag, this property must follow the guidelines in Semantic Versioning.

Get Published Location

To get the final location of where the files are on the CDN:

var appPublisher = require('frau-publisher').app(options);

var location = appPublisher.getLocation();

Versioning and Releasing

This repo is configured to use semantic-release. Commits prefixed with fix: and feat: will trigger patch and minor releases when merged to main.

To learn how to create major releases and release from maintenance branches, refer to the semantic-release GitHub Action documentation.

Contributing

Contributions are welcome, please submit a pull request!

Code Style

This repository is configured with EditorConfig rules and contributions should make use of them.