ftrucli
is a Food Truck CLI used to find food trucks near a geospatial coordinate (especially in San Francisco).
This section describes the author's intent while building the minimum viable product (MVP) for trucli
(and will be refactored once project is beyond MVP stage).
Above and beyond all else, the intent of this project is to...
- Demonstrate author's values
- Showcase problem solving process
- Curate collaboration environment (provide ideal open-source dev experience)
- Cut a release ~3 hours after
init commit
The following areas of focus drove the design of the trucli
MVP...
- Implement bare minimum feature set (give at least five (5) food trucks, given a coordinate pair)
- Prioritize production rediness by focusing on...
- Organization
- Design
- Testing
- Deployment
- Documentation
- Design for extensibility
Out of scope features for the MVP...
--open-now
- filter for open food trucks- data caching - all queries will be against the SF SODA endpoint
- search by street address, using the Bing Maps API
- using an app token (and storing it in a
.env
file or Azure Key Vault)
The CLI will follow the basic flow of the following diagram...
Author may or may not have time to implement factories for extensibility. If they do, then the Output
class will be the first refactoring candidate (to output results in either a prettified table or raw json
).
This section describes how to set up the project's build toolchain.
# Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
source ~/.bashrc
# Install node14
nvm install 14
nvm use 14
npm install --global pnpm
pnpm install --global @rushstack/heft
NOTE: Since this project uses
pnpm
, please use it to install new packages (instead ofnpm
). This helps maintain thepnpm-lock.yaml
file.
This project uses heft
as a build coordinator.
heft build
This project uses heft
as a test orchestrator (jest
under the covers).
heft build
This project uses eslint for linting. (TSLint is now deprecated.)
This section details this project's CI and CD practices.
Continuous integration is performed on TravisCI, as defined by .travis.yml
. Heft is installed, used to build the project, then used to test the project.
Continuous deployment is out of scope, but on the roadmap.
The plan is to use GitHub actions to "watch" branches of the pattern release/*
and publish built artifacts to a npm
repo.
Decision | Brief Description |
---|---|
Rushstack used as project tool chain | Rushstack provides us with build and CLI tools. |
TravisCI used for CI | TravisCI is this project's continuous integration tool. |