Introducing the Monday Project
Monday is a versatile command-line interface (CLI) tool designed for developers who work with microservices. It facilitates the local development of applications while providing the flexibility to forward applications through Kubernetes. Whether you're working with Go, NodeJS, Rust, or various other technologies, Monday streamlines your development environment.
Key Features of Monday
Monday offers a range of capabilities to make developers' lives easier:
-
Unified Application Setup: It allows developers to define a consistent setup process for their applications, ensuring all team members can easily replicate the environment.
-
Local Application Management: Developers can run local applications with ease and even set them to automatically reload when changes are detected.
-
Port Forwarding: The tool can forward applications locally using a remote connection via Kubernetes, SSH, or TCP, without needing the application to be installed locally.
-
Multiple Port Forwarding and Monitoring: Developers can forward the same port multiple times and monitor the performance of local and forwarded applications.
-
Automatic Reconnection: In the event of a lost port-forward connection, Monday can automatically reconnect.
Installation Options
There are multiple ways to install Monday, depending on your operating system and preference:
-
For macOS Users: Installation can be done quickly via Homebrew with the following command:
$ brew install eko/homebrew-tap/monday
-
Downloading the Binary: Pre-built binaries are available for different architectures such as i386, amd64, and arm. These can be downloaded directly from the project's releases page.
-
Building from Source: If preferred, users can clone the repository or use
go get
to download and build the tool directly from source.
Configuring Monday
Configuration for Monday is flexible, residing in YAML files. By default, a configuration file named monday.yaml
is created using the command monday init
. Users can organize their setup into multiple files if needed, perhaps splitting local applications, forwarding configurations, and projects into separate YAML files.
-
Local Projects: Users can define local projects specifying the path, commands to build, environment variables, and files required for the development process.
-
Port-Forwarded Projects: Projects that require port forwarding through Kubernetes can also be specified, with details such as the Kubernetes context, namespace, and labels.
Running Projects with Monday
To run projects, Monday requires initial setup through its CLI. Developers can initialize and edit their configuration files, and once the setup is ready, they can run Monday to execute their projects. There's also an option to enable a user interface using --ui
, enhancing the experience beyond simple logging.
For specific projects, running commands directly targeting them is straightforward:
$ monday run [--ui] <project name>
Environment Variables
Monday supports several environment variables allowing further customization, such as:
MONDAY_CONFIG_PATH
to specify where configuration YAML files are stored.MONDAY_EDITOR
andMONDAY_EDITOR_ARGS
for setting preferences for editing these files.MONDAY_ENABLE_UI
for enabling a user interface during execution.MONDAY_KUBE_CONFIG
to locate the Kubernetes config file if it's not in the default directory.
Community and Testing
Monday has an active community accessible via a Slack space, where users can discuss issues or new features. For developers, a suite of tests can be run to ensure the tool's functionality is as expected using the Go testing framework.
$ go test -v ./...
Whether you're a solo developer or part of a larger team, Monday aims to make microservice development smoother by handling both local applications and remote configurations efficiently.