/
Grunt based build scripts planning
Grunt based build scripts planning
The first pass at implementing Grunt based build scripts has been implement and committed to the project repo. (See:
Error rendering macro 'jira' : Unable to locate Jira server for this macro. It may be due to Application Link configuration.
)
This includes
- removal of ant based build scripts
- removal of CSS generation (currently a static set of pre-generated files is committed into the repo)
- dependency management of local modules
- minification
- custom builds
The builder site has been taken down, with no current plans of replacing it. For now, all builds should be done through the grunt build scripts.
Pain Points
- Head rewriting to switch between using MyInfusion and individual files
- The tools for debugging JavaScript are more mature in browsers than in Node.js; we'd like to be able to debug kettle apps in the browser (need 'require')
- Our current builder tool is hard to update and maintain, doesn't support exclusions, and is feeling a little out of date
- Working with multiple repositories is manual and tedious
- managing relative include paths is error-prone
- managing absolute paths is even worse
- Version handling
- developers want to be able to say "I want exactly this <version>/<revision>/<repository> of Infusion"
- currently not possible to use multiple version of infusion from the same pre-release (e.g. 1.5-SNAPSHOT), but a user might like 1.5-REV_HASH
- Having to build CSS (for UIO) is awkward and easy to forget
- a CSS pre-processor ( less, sass) may be the correct way to implement this.
- Maven and Ant are hard to setup.
- No top-level "infusion" directory when you unpack the built zip
Collaborative Development Project Roadmap
- KILL MAVEN
- Port existing Ant scripts to Grunt
- Update the PHP Builder to use these Grunt scripts instead of Ant (ASK Cindy for help)
Potential Technologies
- Node.js
- Grunt
- Bower ( what does this offer over just npm? )
- Require.js ( will need some form of require, but may not be Require.js )
JIRAs for require-type functionality:
- FLUID-4911 - "Remove requireStub in favour of the default pattern" - contains BIG COMMENT
- FLUID-4675 - "Stub out require() and fluid.require()"
Requirements
Major daily use cases for a build tool
- Allow the efficient use of "require-style" code in production - the two non-build-time approaches to this are unacceptable in performance -
- The use of "synchronous AJAX" is conceivable only for use in test cases
- The use of "asynchrouons AJAX" is still unsupportable for production code, given its great inferiority in performance to code written literally into head in <script> blocks - this is the only good option for fast IPL code
- Facilitate "multi-repository" work styles together with a checkout of Infusion
- Right now, the biggest barrier to "unbundling" components from our image, or spawning new repositories based on infusion, is the annoyance of ensuring a "stable relative checkout path" between the different repos. We should have a "one-stop shop" that rebases a checkout relative to a checkout of infusion, but also somehow "by magic" not corrupting tags written into the documents when the user tries to checkin again.
- IDEA SCHEME: perhaps a "magic eraser" mode for the build tool, that is run immediately before any "git commit" in order to wipe out evidence of concrete relative include paths in an Infusion-dependent project - then IMMEDIATELY AFTER git commit, the build tool is run again to unpack the relative paths again
- Replacement for our pre-flood PHP-based Infusion builder tool on the WEB
Feature Parity with ant scripts
- Minify js files
- Concatenate js files
- Create zip bundles
- Generate UIO Themes
- Rewrite URL's in demos/unit tests for relase testing
- change URL's to point at the concatenated js file
- Dependency Management
- Include modules
- Exclude modules
Others
- pull in dependencies (e.g. jQuery)
- minify
- concatenate
- build css (e.g. UIO themes)
- build font icon sets (see: https://github.com/twolfson/grunt-fontsmith)
ARCHITECTURAL SKETCH for "multi-resolution head rewriting"
Should be possible to write a comment, say, that directs "Include Infusion" - and this is expanded to various levels of detail - this can "pack and unpack" based on the development style (when debugging, running a "demo", or "full production").