$ box
______ ______
/ ____/___ ____ ___ ____ ___ ____ _____ ____/ / __ )____ _ __
/ / / __ \/ __ `__ \/ __ `__ \/ __ `/ __ \/ __ / __ / __ \| |/_/
/ /___/ /_/ / / / / / / / / / / / /_/ / / / / /_/ / /_/ / /_/ /> <
\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ /_/\__,_/_____/\____/_/|_| (R) v5.2.1+00295
Talk is cheap. Show me the code. --Linus Torvalds
Welcome to CommandBox!
CommandBox>
# PRESENTING CODE
Writing Command Line Utilities With CommandBox Modules
By Abram Adams
Who Am I?
Developer, DevOps Engineer, Manager, etc...
Abram Adams
# TryCF
Also Built TryCF.com
- Why CLI - GUI's are so easy
- CommandBox Modules
- Development
- CommandBox Ecosystem
- Deploying CommandBox Modules
Key Takeaways
# Why Though?
Why CLI?
Reasons
1.
2.
3.
# Why Though?
Automation
Automation
Automation
- Complements Other Tools
- Adds Consistency Across Teams
- Leverage Large Ecosystem
- Simplifies Workflows/Tasks
- Etc...
Many Others
# Why Though?
Makes You A Wizard
# Why Though?
- CommandBox (CFML)
- Oclif.io (JavaScript/TypeScript)
-
urfave/cli (Go)
- spf13/cobra (Go)
- Cement (Python)
- .... endless others
CLI Frameworks
# CLI Frameworks
- CommandBox (CFML)
- Oclif.io (JavaScript/TypeScript)
-
urfave/cli (Go)
- spf13/cobra (Go)
- Cement (Python)
- .... endless others
CLI Frameworks
# CLI Frameworks
- Build your CLI in a language you already know
- Leverage forgebox ecosystem
- Pair with CommandBox docker images for CI/CD
- Brad Wood
Why CommandBox?
# CLI Frameworks
{code}
Let's Look At Code
- Interactive inputs
- Free-form prompt
- Confirmation (y/n)
- Multiple choice
- Hot-key
User Input
# CLI Inputs
{code}
Interactive Inputs
- Make it DRY
- Write it like any modern CFML
Helper Methods
# Helper Methods
{code}
Helper Methods
- Run other CommandBox commands
- Run shell commands
- Run other binaries/executables
- Full filesystem interaction
Running Commands & Filesystem Resources
# Modules/DI
{code}
Shell and Filesystem
- Write and Inject Modules (ColdBox style)
- Install external Modules
Modules/DI
# Modules/DI
{code}
Modules/Dependency Injection
- Flags
- CLI Arguments
- Environment Variables
Arguments
# Arguments
{code}
Arguments - Automation
- Automation
- Security/Secrets
- Consistent Configurations
Environment Variables
# Environment
{code}
Environment Variables
- Template config files
- Template CF/YAML/JSON/etc..
- Automation
Templating -
System Variable Expansion
# Templating
{code}
System Variable Expansion
# Create user (first time only)
forgebox register username password your@email.com firstName lastName
forgebox login username password
# Create package
mkdir mypackage --cd
package init slug=my-package type=modules
bump --major
# Publish it
publish
# Viewable and installable by the world!
forgebox show my-package
install my-package
# Publishing
Publishing Your CommandBox Module
- aadams@cfxchange.com
- abram CFML Slack
- github.com/abramadams
Thank You!
Writing Command Line Utilities with CommandBox Modules
By Abram Adams
Writing Command Line Utilities with CommandBox Modules
- 313