SlideShare a Scribd company logo
Luis Majano
@lmajano
@ortussolutions
www.ortussolutions.com
WHO AM I?
‱ Luis Majano
‱ Computer Engineer
‱ Imported from El Salvador
‱ CEO of Ortus Solutions
‱ Adobe Community Professional
‱ Sandals & Beaches -> ESRI -> Ortus
Legacy CFML
Modern CFML
CommandBox
Packages
ForgeBox
Collaboration
Making CFML Huuugeee Again!
HOW DO WE WORK IN CF?
Code% App%
Code
Code
Code
Code
Code
Code
Code
IT’S ALIVE!
CFML SHAMING
‱ Lack of tooling
‱ Package Management
‱ CLI
‱ OS Integrations
‱ Applications
‱ Legacy Hell
‱ Way behind the cool kids
How we should work!
App#Package#
Manager#
CLI#
REPL#
Automa6on#
OS#
Take CFML Back to
The Future
CommandBox & ForgeBox Package Management
Package Manager, REPL, CLI + More
3Years Now!
What is CommandBox?
CLI Package‹
Manager
REPL
Read-Eval‹
Print-Loop
Integrated‹
Server
ScaffoldingForgeBox
CFML
ColdFusion
Automation
Task Runners
CFML
Engines
PORTABILITY CONTAINERS
https://commandbox.ortusbooks.com
CLI Package‹
Manager
REPL
Read-Eval‹
Print-Loop
Integrated‹
Server
ScaffoldingForgeBox
CFML
ColdFusion
Automation
Task Runners
What is CommandBox?
Don’t touch that Node!
Brad Wood‹
Salsa King
http://bit.ly/dont-touch-node-use-commandbox
We have everything we need in
CFML
We just need you to write packages
Usage - CLI vs Shell
box myapp.cfm Shell
Commands
‱ How you get things done!
‱ Built-in Help
‱ command help
‱ Command Namespaces
‱ Commands
‱ Aliases
‱ Parameters/Arguments
‱ Tab-Completion
‱ Commands, Parameters, Paths, ForgeBox, Custom
What’s a package?
‱ A folder or zip/tar ïŹle that must contain:
‱ box.json
‱ It must be in the root!
init name="My Package" version="1.0.0"
Where can it be used?
CFML ‹
App
$ CLI
box.json
‱ Package Descriptor
‱ Declares package metadata
‱ Name
‱ Slug
‱ Version
‱ Author
‱ Dependencies
‱ DevDependencies
‱ Installation Details
‱ Custom Metadata
‱ Package Scripts
‱ Listen to CLI/Server/OS Events
BOX.JSON
{
"name":"cbdebugger Builder",
"version":"1.5.0",
"slug":"cbdebugger-shell",
"dependencies":{
"coldbox":"^4.3.0",
"workbench":"git+https://github.com/Ortus-Solutions/unified-workbench.git"
},
"devDependencies":{
"testbox":"2.3.0+00044"
},
"installPaths":{
"testbox":"testbox",
"coldbox":"coldbox",
"workbench":"workbench"
},
"testbox":{
"runner":"http://localhost:49616"
},
"scripts":{
"postVersion":"recipe workbench/bump.boxr"
}
}
Working With Packages
$ package help
Where do they come from?
‱ ForgeBox
‱ File zip/tar
‱ Directory
‱ Git
‱ SVN
‱ Github
‱ Bitbucket
‱ HTTP/S
‱ JAR
Code Endpoints
install coldbox@4.3.0
install coldbox@be
install http://www.site.com/myPackage.zip
install https://maven/myjar.jar
install /var/libs/myPackage.zip
install /var/libs/myPackage/
install username/repoName.git#v1.5.6
Packaging Features
‱ Can distribute without dependencies
‱ Can have development dependencies
‱ Dependencies Inception
‱ “install” to initialize a project
‱ “update” to update dependencies
‱ “outdated” to check for versions
‱ “list” to visualize dependencies
‱ “uninstall” to uninstall dependencies
Multi-Version Support
‱ ForgeBox Endpoint Only
‱ Public/Private Packages
‱ Based on SemanticVersioning: https://semver.org
‱ <major>.<minor>.<patch>
‱ Used for versioning your packages
‱ Used for installing/updating packages
# Latest stable version
CommandBox> install foo
# Same as above
CommandBox> install foo@stable
# latest version, even if pre release (bleeding edge)
CommandBox> install foo@be
# A specific version
CommandBox> install foo@1.2.3
# Any version with a major number of 4 (4.1, 4.2, 4.9, etc)
CommandBox> install foo@4.x
# Any version greater than 1.5.0
CommandBox> install foo@>1.5.0
# Any version greater than 5.2 but less than or equal to 6.3.4
CommandBox> install "foo@>5.2 <=6.3.4"
# Any version greater than or equal to 1.2 but less than or equal to 3.2
CommandBox> install "foo@1.2 - 3.2"
# Allows patch-level changes if a minor version exists. Allows minor-level changes if not. ‹
(2.1.2, 2.1.3, 2.1.4, etc)
CommandBox> install foo@~2.1
# Any greater version that does not modify the left-most non-zero digit. 4.2, 4.3, 4.9, etc
CommandBox> install foo@^4.1.4
Package Scripts
‱ Interceptor-based CLI Scripts
‱ Listen to CommandBox Events
‱ Supports Expansions, CFML functions, piping, environment variables, etc.
"scripts" : {
"postVersion" : "package set location='gitUser/gitRepo#v`package version`'",
"postPublish" : "!git push --follow-tags"
}
‱ Ad-hoc Scripts as well
"scripts" : {
"build" : "!grunt build && testsbox run && run-script generateAPIDocs && bump --patch && publish",
"generateAPIDocs" : "docbox generate"
}
Artifacts
‱ CommandBox caches downloaded artifcacts: ~/.Commandbox/artifacts
‱ artifacts help
‱ Snapshots are always downloaded
‱ Packages are organized by slug and versions
‱ Used for disconnected installs and accelerated build processes
CommandBox & ForgeBox Package Management
What is ForgeBox
‱ https://forgebox.io
‱ ColdFusion (CFML) Code Directory
‱ Foster Community
‱ Works in Unison with CommandBox
‱ Cloud Package Management
ForgeBox Registration
‱ CLI or UI
‱ Ask you a few questions
‱ Ready to start publishing
‱ Registers an API Key for you
forgebox register
https://forgebox.io/security/registration
ForgeBox Commands
$ forgebox help
ForgeBox Identities
‱ Login from CLI
‱ forgebox login
‱ Stores your API Key
‱ ~user./CommandBox
‱ Supports multiple logins
‱ forgebox use username
‱ Supports Who you are
‱ forgebox whoami
ForgeBox Publish
‱ Publishes your public/private packages
‱ Reads your box.json
‱ Can push your readme ïŹles, changelogs, instructions
‱ Make sure location key is set
forgebox publish
Package Location
‱ ForgeBox needs to know where your package is
‱ ForgeBox Private will give you storage access (Soon)
‱ Can be any code endpoint
‱ HTTP/S
‱ Git
‱ Another ForgeBox slug
"location" : “http://downloads.ortussolutions.com/cbantisamy/1.0.0/cbantisamy-1.0.0.zip”
“location” : “cbfreshbooks@latest”
“location” : “coldbox-modules/testing#v1.2.3”
Dynamic Location
‱ CommandBox Interceptors - Lifecycle events
‱ Execute on pre+post publishing/versions/etc
‱ `` Denotes a dynamic evaluation
‱ Use Package Commands, etc
{
"scripts" : {
"postVersion" : "package set location='gitUser/gitRepo#`package version`'"
"postPublish" : "!git push",
"onServerStart" : "echo 'Hi, thanks for starting `server show name` on port `server
show web.http.port` in directory `pwd`'"
}
}
ForgeBox Un-publish
‱ Un-publish your version in the box.json
‱ Un-publish other versions, then go to UI
forgebox unpublish
Bump Command
‱ Bump major, minor or patch placeholder
‱ If using a git repo, it will tag and commit for you
bump --patch message="Finalized awesome features."
cb-module-template
‱ By Eric Peterson @elpete
‱ box.json and ModuleConïŹg.cfc values set
‱ UnitTesting
‱ IntegrationTesting with a built-in ColdBox app
‱ Publishing to ForgeBox with one command! (bump --major)
‱ AutomaticTravis-CI integration to run your tests on 5 different CF engine/versions
with pass/fail badge on your readme.
box module scaffold myCoolModule "Short Module Description"
PRO ACCOUNTS
‱ Monthly Subscription Service
‱ Private Packages
‱ Optional S3 Storage
‱ Unique Installation Strings
‱ FREE for limited time
install @ortus/rafflebox
‱ ForgeBox for Enterprise + Government
‱ Docker Image
‱ Encapsulated Dependencies
‱ Unique URI entrypoint
‱ Unique CommandBox Registrations
forgebox register ortus http://fb.ortus.com
install ortus:cfbox
install ortus:@lmajano/cfbox
ENTERPRISE IMAGE
‱ Monthly Subscription Service
‱ Managed Containers @ Ortus Cloud
‱ Unique URI entrypoint
‱ Unique CommandBox Registrations
ENTERPRISE MANAGED
WE NEEDYOU
‱ Get out of legacy hell, modernize
‱ Build cool apps,APIs, libraries
‱ Collaborate with open source
‱ Share in forgebox.io
‱ Blog, present, share your knowledge
‱ Proud of your CFML apps again!
Gracias!
Q & A

More Related Content

PDF
North Virginia Coldfusion User Group Meetup - Testbox - July 19th 2017
PDF
Automate Thyself
PDF
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
PDF
cf.Objective() 2017 - Design patterns - Brad Wood
PDF
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
PDF
How do I Write Testable Javascript so I can Test my CF API on Server and Client
PDF
Securing Legacy CFML Code
PDF
Can you contain the future - Docker, Container Technologies, The Future, and You
North Virginia Coldfusion User Group Meetup - Testbox - July 19th 2017
Automate Thyself
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
cf.Objective() 2017 - Design patterns - Brad Wood
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I Write Testable Javascript so I can Test my CF API on Server and Client
Securing Legacy CFML Code
Can you contain the future - Docker, Container Technologies, The Future, and You

What's hot (20)

PDF
Hack & Fix, Hands on ColdFusion Security Training
PDF
Cfml features modern_coding
PPTX
Automated Testing with Cucumber, PhantomJS and Selenium
PDF
Command Box ColdFusion Package Manager, Automation
PDF
Testing Automaton - CFSummit 2016
PDF
One commit, one release. Continuously delivering a Symfony project.
PDF
Continous Delivering a PHP application
PDF
Capybara testing
PDF
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
KEY
Agile JavaScript Testing
PPTX
My Database Skills Killed the Server
PDF
Jest: Frontend Testing leicht gemacht @EnterJS2018
PDF
Automated acceptance test
PDF
JCConf 2015 workshop ć‹•æ‰‹çŽ© Java ć°ˆæĄˆć»șçœźć·„ć…·
PDF
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
PDF
Jest: Frontend Testing richtig gemacht @WebworkerNRW
PDF
3 WAYS TO TEST YOUR COLDFUSION API
PPTX
Symfony Under Control by Maxim Romanovsky
PDF
Locking Down CF Servers
PDF
Hack & Fix, Hands on ColdFusion Security Training
Cfml features modern_coding
Automated Testing with Cucumber, PhantomJS and Selenium
Command Box ColdFusion Package Manager, Automation
Testing Automaton - CFSummit 2016
One commit, one release. Continuously delivering a Symfony project.
Continous Delivering a PHP application
Capybara testing
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
Agile JavaScript Testing
My Database Skills Killed the Server
Jest: Frontend Testing leicht gemacht @EnterJS2018
Automated acceptance test
JCConf 2015 workshop ć‹•æ‰‹çŽ© Java ć°ˆæĄˆć»șçœźć·„ć…·
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Jest: Frontend Testing richtig gemacht @WebworkerNRW
3 WAYS TO TEST YOUR COLDFUSION API
Symfony Under Control by Maxim Romanovsky
Locking Down CF Servers
Ad

Similar to CommandBox & ForgeBox Package Management (20)

PDF
CommandBox at CFCamp 2014
PDF
Intro To CommandBox CLI,Package Manager, Server at the Japan CFUG
PDF
CommandBox : Free CFML
PDF
ITB2016 - ForgeBox 2 Package Management
PDF
Command box
PDF
Command box
PPTX
ITB2015 - Go Commando with CommandBox CLI
ODP
CommandBox REPL, CLI, and Package Manager
KEY
Homebrew atlrug
PPTX
Command box, Package Manager, Automation, REPL
PDF
Securing applications
PDF
Laravel Forge: Hello World to Hello Production
PDF
Getting Started with Go
PDF
Midwest php 2013 deploying php on paas- why & how
PPTX
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
 
PDF
Stress Free Deployment - Confoo 2011
PDF
Cape Cod Web Technology Meetup - 3
PDF
Deploying PHP on PaaS: Why and How?
PPTX
Automation in Cloud
PPTX
Geecon 2019 - Taming Code Quality in the Worst Language I Know: Bash
CommandBox at CFCamp 2014
Intro To CommandBox CLI,Package Manager, Server at the Japan CFUG
CommandBox : Free CFML
ITB2016 - ForgeBox 2 Package Management
Command box
Command box
ITB2015 - Go Commando with CommandBox CLI
CommandBox REPL, CLI, and Package Manager
Homebrew atlrug
Command box, Package Manager, Automation, REPL
Securing applications
Laravel Forge: Hello World to Hello Production
Getting Started with Go
Midwest php 2013 deploying php on paas- why & how
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
 
Stress Free Deployment - Confoo 2011
Cape Cod Web Technology Meetup - 3
Deploying PHP on PaaS: Why and How?
Automation in Cloud
Geecon 2019 - Taming Code Quality in the Worst Language I Know: Bash
Ad

More from Ortus Solutions, Corp (20)

PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
PDF
June Webinar: BoxLang-Dynamic-AWS-Lambda
PDF
BoxLang-Dynamic-AWS-Lambda by Luis Majano.pdf
PDF
What's-New-with-BoxLang-Brad Wood.pptx.pdf
PDF
Getting Started with BoxLang - CFCamp 2025.pdf
PDF
CFCamp2025 - Keynote Day 1 led by Luis Majano.pdf
PDF
What's New with BoxLang Led by Brad Wood.pdf
PDF
Vector Databases and the BoxLangCFML Developer.pdf
PDF
Using cbSSO in a ColdBox App Led by Jacob Beers.pdf
PDF
Use JSON to Slash Your Database Performance.pdf
PDF
Portable CI wGitLab and Github led by Gavin Pickin.pdf
PDF
Tame the Mesh An intro to cross-platform tracing and troubleshooting.pdf
PDF
Supercharging CommandBox with Let's Encrypt.pdf
PDF
Spice up your site with cool animations using GSAP..pdf
PDF
Passkeys and cbSecurity Led by Eric Peterson.pdf
PDF
Legacy Code Nightmares , Hellscapes, and Lessons Learned.pdf
PDF
Integrating the OpenAI API in Your Coldfusion Apps.pdf
PDF
Hidden Gems in FusionReactor for BoxLang, ACF, and Lucee Users.pdf
PDF
Geting-started with BoxLang Led By Raymon Camden.pdf
PDF
From Zero to CRUD with ORM - Led by Annette Liskey.pdf
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
June Webinar: BoxLang-Dynamic-AWS-Lambda
BoxLang-Dynamic-AWS-Lambda by Luis Majano.pdf
What's-New-with-BoxLang-Brad Wood.pptx.pdf
Getting Started with BoxLang - CFCamp 2025.pdf
CFCamp2025 - Keynote Day 1 led by Luis Majano.pdf
What's New with BoxLang Led by Brad Wood.pdf
Vector Databases and the BoxLangCFML Developer.pdf
Using cbSSO in a ColdBox App Led by Jacob Beers.pdf
Use JSON to Slash Your Database Performance.pdf
Portable CI wGitLab and Github led by Gavin Pickin.pdf
Tame the Mesh An intro to cross-platform tracing and troubleshooting.pdf
Supercharging CommandBox with Let's Encrypt.pdf
Spice up your site with cool animations using GSAP..pdf
Passkeys and cbSecurity Led by Eric Peterson.pdf
Legacy Code Nightmares , Hellscapes, and Lessons Learned.pdf
Integrating the OpenAI API in Your Coldfusion Apps.pdf
Hidden Gems in FusionReactor for BoxLang, ACF, and Lucee Users.pdf
Geting-started with BoxLang Led By Raymon Camden.pdf
From Zero to CRUD with ORM - Led by Annette Liskey.pdf

Recently uploaded (20)

PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
top salesforce developer skills in 2025.pdf
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Reimagine Home Health with the Power of Agentic AI​
PPTX
Transform Your Business with a Software ERP System
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
 
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Digital Strategies for Manufacturing Companies
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
How to Migrate SBCGlobal Email to Yahoo Easily
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Softaken Excel to vCard Converter Software.pdf
Odoo Companies in India – Driving Business Transformation.pdf
top salesforce developer skills in 2025.pdf
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Reimagine Home Health with the Power of Agentic AI​
Transform Your Business with a Software ERP System
wealthsignaloriginal-com-DS-text-... (1).pdf
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Navsoft: AI-Powered Business Solutions & Custom Software Development
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
 
Operating system designcfffgfgggggggvggggggggg
Digital Strategies for Manufacturing Companies
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Internet Downloader Manager (IDM) Crack 6.42 Build 41
CHAPTER 2 - PM Management and IT Context
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
How to Choose the Right IT Partner for Your Business in Malaysia

CommandBox & ForgeBox Package Management

  • 2. WHO AM I? ‱ Luis Majano ‱ Computer Engineer ‱ Imported from El Salvador ‱ CEO of Ortus Solutions ‱ Adobe Community Professional ‱ Sandals & Beaches -> ESRI -> Ortus
  • 4. HOW DO WE WORK IN CF? Code% App% Code Code Code Code Code Code Code
  • 6. CFML SHAMING ‱ Lack of tooling ‱ Package Management ‱ CLI ‱ OS Integrations ‱ Applications ‱ Legacy Hell ‱ Way behind the cool kids
  • 7. How we should work! App#Package# Manager# CLI# REPL# Automa6on# OS#
  • 8. Take CFML Back to The Future
  • 10. Package Manager, REPL, CLI + More 3Years Now!
  • 11. What is CommandBox? CLI Package‹ Manager REPL Read-Eval‹ Print-Loop Integrated‹ Server ScaffoldingForgeBox CFML ColdFusion Automation Task Runners
  • 15. Don’t touch that Node! Brad Wood‹ Salsa King http://bit.ly/dont-touch-node-use-commandbox We have everything we need in CFML We just need you to write packages
  • 16. Usage - CLI vs Shell box myapp.cfm Shell
  • 17. Commands ‱ How you get things done! ‱ Built-in Help ‱ command help ‱ Command Namespaces ‱ Commands ‱ Aliases ‱ Parameters/Arguments ‱ Tab-Completion ‱ Commands, Parameters, Paths, ForgeBox, Custom
  • 18. What’s a package? ‱ A folder or zip/tar ïŹle that must contain: ‱ box.json ‱ It must be in the root! init name="My Package" version="1.0.0"
  • 19. Where can it be used? CFML ‹ App $ CLI
  • 20. box.json ‱ Package Descriptor ‱ Declares package metadata ‱ Name ‱ Slug ‱ Version ‱ Author ‱ Dependencies ‱ DevDependencies ‱ Installation Details ‱ Custom Metadata ‱ Package Scripts ‱ Listen to CLI/Server/OS Events
  • 22. Working With Packages $ package help
  • 23. Where do they come from? ‱ ForgeBox ‱ File zip/tar ‱ Directory ‱ Git ‱ SVN ‱ Github ‱ Bitbucket ‱ HTTP/S ‱ JAR Code Endpoints install coldbox@4.3.0 install coldbox@be install http://www.site.com/myPackage.zip install https://maven/myjar.jar install /var/libs/myPackage.zip install /var/libs/myPackage/ install username/repoName.git#v1.5.6
  • 24. Packaging Features ‱ Can distribute without dependencies ‱ Can have development dependencies ‱ Dependencies Inception ‱ “install” to initialize a project ‱ “update” to update dependencies ‱ “outdated” to check for versions ‱ “list” to visualize dependencies ‱ “uninstall” to uninstall dependencies
  • 25. Multi-Version Support ‱ ForgeBox Endpoint Only ‱ Public/Private Packages ‱ Based on SemanticVersioning: https://semver.org ‱ <major>.<minor>.<patch> ‱ Used for versioning your packages ‱ Used for installing/updating packages
  • 26. # Latest stable version CommandBox> install foo # Same as above CommandBox> install foo@stable # latest version, even if pre release (bleeding edge) CommandBox> install foo@be # A specific version CommandBox> install foo@1.2.3 # Any version with a major number of 4 (4.1, 4.2, 4.9, etc) CommandBox> install foo@4.x # Any version greater than 1.5.0 CommandBox> install foo@>1.5.0 # Any version greater than 5.2 but less than or equal to 6.3.4 CommandBox> install "foo@>5.2 <=6.3.4" # Any version greater than or equal to 1.2 but less than or equal to 3.2 CommandBox> install "foo@1.2 - 3.2" # Allows patch-level changes if a minor version exists. Allows minor-level changes if not. ‹ (2.1.2, 2.1.3, 2.1.4, etc) CommandBox> install foo@~2.1 # Any greater version that does not modify the left-most non-zero digit. 4.2, 4.3, 4.9, etc CommandBox> install foo@^4.1.4
  • 27. Package Scripts ‱ Interceptor-based CLI Scripts ‱ Listen to CommandBox Events ‱ Supports Expansions, CFML functions, piping, environment variables, etc. "scripts" : { "postVersion" : "package set location='gitUser/gitRepo#v`package version`'", "postPublish" : "!git push --follow-tags" } ‱ Ad-hoc Scripts as well "scripts" : { "build" : "!grunt build && testsbox run && run-script generateAPIDocs && bump --patch && publish", "generateAPIDocs" : "docbox generate" }
  • 28. Artifacts ‱ CommandBox caches downloaded artifcacts: ~/.Commandbox/artifacts ‱ artifacts help ‱ Snapshots are always downloaded ‱ Packages are organized by slug and versions ‱ Used for disconnected installs and accelerated build processes
  • 30. What is ForgeBox ‱ https://forgebox.io ‱ ColdFusion (CFML) Code Directory ‱ Foster Community ‱ Works in Unison with CommandBox ‱ Cloud Package Management
  • 31. ForgeBox Registration ‱ CLI or UI ‱ Ask you a few questions ‱ Ready to start publishing ‱ Registers an API Key for you forgebox register https://forgebox.io/security/registration
  • 33. ForgeBox Identities ‱ Login from CLI ‱ forgebox login ‱ Stores your API Key ‱ ~user./CommandBox ‱ Supports multiple logins ‱ forgebox use username ‱ Supports Who you are ‱ forgebox whoami
  • 34. ForgeBox Publish ‱ Publishes your public/private packages ‱ Reads your box.json ‱ Can push your readme ïŹles, changelogs, instructions ‱ Make sure location key is set forgebox publish
  • 35. Package Location ‱ ForgeBox needs to know where your package is ‱ ForgeBox Private will give you storage access (Soon) ‱ Can be any code endpoint ‱ HTTP/S ‱ Git ‱ Another ForgeBox slug "location" : “http://downloads.ortussolutions.com/cbantisamy/1.0.0/cbantisamy-1.0.0.zip” “location” : “cbfreshbooks@latest” “location” : “coldbox-modules/testing#v1.2.3”
  • 36. Dynamic Location ‱ CommandBox Interceptors - Lifecycle events ‱ Execute on pre+post publishing/versions/etc ‱ `` Denotes a dynamic evaluation ‱ Use Package Commands, etc { "scripts" : { "postVersion" : "package set location='gitUser/gitRepo#`package version`'" "postPublish" : "!git push", "onServerStart" : "echo 'Hi, thanks for starting `server show name` on port `server show web.http.port` in directory `pwd`'" } }
  • 37. ForgeBox Un-publish ‱ Un-publish your version in the box.json ‱ Un-publish other versions, then go to UI forgebox unpublish
  • 38. Bump Command ‱ Bump major, minor or patch placeholder ‱ If using a git repo, it will tag and commit for you bump --patch message="Finalized awesome features."
  • 39. cb-module-template ‱ By Eric Peterson @elpete ‱ box.json and ModuleConïŹg.cfc values set ‱ UnitTesting ‱ IntegrationTesting with a built-in ColdBox app ‱ Publishing to ForgeBox with one command! (bump --major) ‱ AutomaticTravis-CI integration to run your tests on 5 different CF engine/versions with pass/fail badge on your readme. box module scaffold myCoolModule "Short Module Description"
  • 40. PRO ACCOUNTS ‱ Monthly Subscription Service ‱ Private Packages ‱ Optional S3 Storage ‱ Unique Installation Strings ‱ FREE for limited time install @ortus/rafflebox
  • 41. ‱ ForgeBox for Enterprise + Government ‱ Docker Image ‱ Encapsulated Dependencies ‱ Unique URI entrypoint ‱ Unique CommandBox Registrations forgebox register ortus http://fb.ortus.com install ortus:cfbox install ortus:@lmajano/cfbox ENTERPRISE IMAGE
  • 42. ‱ Monthly Subscription Service ‱ Managed Containers @ Ortus Cloud ‱ Unique URI entrypoint ‱ Unique CommandBox Registrations ENTERPRISE MANAGED
  • 43. WE NEEDYOU ‱ Get out of legacy hell, modernize ‱ Build cool apps,APIs, libraries ‱ Collaborate with open source ‱ Share in forgebox.io ‱ Blog, present, share your knowledge ‱ Proud of your CFML apps again!