Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pforret/bashew
bash script micro-framework - from small stand-alone script to complex projects with CI/CD and testing
https://github.com/pforret/bashew
bash bash-script bash-scripting basher bashew boilerplate-template option-parsing shellcheck template
Last synced: 6 days ago
JSON representation
bash script micro-framework - from small stand-alone script to complex projects with CI/CD and testing
- Host: GitHub
- URL: https://github.com/pforret/bashew
- Owner: pforret
- License: mit
- Created: 2020-08-05T16:46:51.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-05-19T19:17:42.000Z (7 months ago)
- Last Synced: 2024-12-04T21:51:28.716Z (19 days ago)
- Topics: bash, bash-script, bash-scripting, basher, bashew, boilerplate-template, option-parsing, shellcheck, template
- Language: Shell
- Homepage:
- Size: 1.35 MB
- Stars: 267
- Watchers: 6
- Forks: 22
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
[![Shellcheck CI](https://github.com/pforret/bashew/actions/workflows/shellcheck.yml/badge.svg)](https://github.com/pforret/bashew/actions/workflows/shellcheck.yml)
[![bash_unit CI](https://github.com/pforret/bashew/actions/workflows/bash_unit.yml/badge.svg)](https://github.com/pforret/bashew/actions/workflows/bash_unit.yml)
[![version](https://img.shields.io/github/v/tag/pforret/bashew)](https://github.com/pforret/bashew/tags)
[![version](https://img.shields.io/github/v/release/pforret/bashew)](https://github.com/pforret/bashew/releases)Part of [![part of Bashful Scripting network](https://img.shields.io/badge/bashful-scripting-orange)](https://blog.forret.com/portfolio/bashful/) network
/
Install with [![basher install](https://img.shields.io/badge/basher-install-white?logo=gnu-bash&style=flat)](https://www.basher.it/package/)# bashew.sh
![Bashew Logo](assets/bashew.jpg)
bash script / project creator
## ⏳ TL;DR
to create a new stand-alone **SCRIPT** (just a xyz.sh script), with option parsing, color output (cf `1.`)
bashew.sh script
to create a new standalone script **PROJECT** (in a folder, with README) (cf `2.`)bashew.sh project
to initialize a bashew-based **REPO** with CI/CD you just cloned (cf `3.`)
bashew init
## 🎯 Features### Self-contained
* all code contained in 1 single file (no external dependencies)
* comes with `README.md`, `CHANGELOG.md`, ... markdown files
* edit only `Script:main()` function and subroutines in beginning of script, all template code is at the end of the script### Option parsing
* definition of flags/options/parameters in 1 place only
* automatic creation of usage text based on definition above
* short/long option parsing, based on definition above
* option `--lorem [value]` is available inside the script as `$lorem`### [function library](doc/functions.md)
* `IO:` functions for IO, with intelligent color usage (not when output is piped) (e.g. `IO.success`, `IO.die`)
* `Str:` functions for string manipulation (e.g `Str:lower`, `Str:digest`)
* `Os:` functions for e.g. required program checking (e.g. `Os:require convert imagemagick`)### [batteries included](doc/features.md)
* read multiple `.env` configuration files
* predefined `--quiet` (no output) and `--verbose` (more output) modes
* folder for temporary files (with automatic cleanup)
* folder for log files (with automatic cleanup)
* correct determination of script installation folder (resolve symbolic links)
* easy CI/CD for Github (with shellcheck)## 🔥 Usage
```ini
Program: bashew 1.18.2 by [email protected]
Updated: May 1 16:49:18 2022
Description: package_description
Usage: bashew [-h] [-q] [-v] [-f] [-l ] [-t ] [-n ]
Flags, options and parameters:
-h|--help : [flag] show usage [default: off]
-q|--quiet : [flag] no output [default: off]
-v|--verbose : [flag] output more [default: off]
-f|--force : [flag] do not ask for confirmation (always yes) [default: off]
-l|--log_dir > : [option] folder for debug files [default: /Users/pforret/log/bashew]
-t|--tmp_dir > : [option] folder for temp files [default: /tmp/bashew]
-n|--name > : [option] name of new script or project
: [parameter] action to perform: script/project/init/update
```### 1. create new bash script (without repo)
```shell
bashew.sh script # will interactively ask for author & script details
bashew.sh -f script # will create new script with random name
bashew.sh -f -n "../list.sh" script # will create new script ../list.sh
```Example:
```console
$ bashew script
⏳ 1. first we need the information of the author
Author full name (pforret) > Peter Forret
Author email ([email protected]) >
Author (github) username (pforret) >
⏳ 2. now we need the path and name of this new script/repo
Script name (./bespoke_bunny.sh) >
⏳ 3. give some description of what the script should do
Script description (This is my script bespoke_bunny) > process log files
⏳ Creating script ./bespoke_bunny.sh ...
./bespoke_bunny.sh$ bashew -f script
⏳ Creating script ./mediums_appease.sh ...
./mediums_appease.sh
```### 2. create new bash project folder/repo (with README.md, CI/CD)
```console
$ bashew project # will interactively ask for author & script details
or
$ bashew -f project # will create new project with random name
or
$ bashew -f -n "tango" project # will create new project in folder "tango"
```Example:
```console
$ bashew -f project
⏳ Creating project ./bounden_brawled ...
CHANGELOG.md README.md VERSION.md LICENSE .gitignore .env.example bounden_brawled.sh bitbucket-pipelines .github
✅ next step: 'cd ./bounden_brawled' and start scripting!
```### 3. create a bash script repo, with CI/CD, with README, with tests, with versioning ...
* on [github.com/pforret/bashew](https://github.com/pforret/bashew), click on '**Use this template**'
* then clone your new repo
```console
$ git clone https://github.com//.git
$ cd
$ ./bashew.sh init # will ask for details and initialise/clean up the repo
```#### and then, if you have [setver.sh](https://github.com/pforret/setver):
```console
$ setver push # will commit and push new code
$ setver new patch # will set new version to 0.0.1
$ setver set 1.0.0 # when your first working version is committed
```
### 4. git clone into new repo
```console
$ git clone --depth=1 https://github.com/pforret/bashew.git
$ cd
$ ./bashew.sh init # will ask for details and iniialise/clean up the repo
```## 🚀 Installation
* manually
````console
$ git clone https://github.com/pforret/bashew.git
$ ln -s bashew/bashew.sh /usr/local/bin
````
* or with [basher](https://github.com/basherpm/basher) package manager
[![basher install](https://img.shields.io/badge/basher-install-white?logo=gnu-bash&style=flat)](https://basher.gitparade.com/package/)````console
$ basher install pforret/bashew
````## 🦪 Built with Bashew
* [bumpkeys](https://github.com/pforret/bumpkeys): upgrade your SSH keys for better security
* [crontask](https://github.com/pforret/crontask): call scripts or URLs from a crontab file, with optional logging and webhook upon success/failure
* [jekyll_taxonomy](https://github.com/pforret/jekyll_taxonomy): Generate tag and category pages for Jekyll static sites
* [m1_homebrew](https://github.com/pforret/m1_homebrew): Install homebrew in native mode on Apple MacOS ARM
* [mkdox](https://github.com/pforret/mkdox): create and run Mkdocs Material websites using Docker image
* [netcheck](https://github.com/pforret/netcheck): test network: interfaces, gateway, router, internet
* [note](https://github.com/pforret/note): Manage your notes, todo, ... with this nifty script
* [pa](https://github.com/pforret/pa): like "php artisan" but more intelligent (use optimal PHP version for the project
* [progressbar](https://github.com/pforret/progressbar): Easy, clever progress bar for (bash) scripts
* [rexec](https://github.com/pforret/rexec): repeat a command and be alerted when the output changes
* [saild](https://github.com/pforret/saild): Start up your Laravel Sail dev setup in one go - Docker, Browser, Shell
* [screenshots](https://github.com/pforret/screenshots): Let GitHub automatically make 📸 screenshots of all your websites
* [setver](https://github.com/pforret/setver): Easy semver tool -- get/set git version (one-line superfast git commit)
* [shaml](https://github.com/pforret/shaml): Read YAML files inside bash scripts
* [shini](https://github.com/pforret/shini): Read INI files inside bash scripts
* [shlaunch](https://github.com/pforret/shlaunch): Launch desktop/GUI apps from CLI (e.g. Chrome, PHPStorm, Photoshop ...)
* [shlorem](https://github.com/pforret/shlorem): Lorem Ipsum generator for the command line
* [shmixcloud](https://github.com/pforret/shmixcloud): download Mixcloud shows and add album art to m4a files
* [shoarma](https://github.com/pforret/shoarma): Static Image Site Generator - make e.g. Jekyll posts from folder of images
* [shtext](https://github.com/pforret/shtext): Text manipulation in bash, by always using the fastest method
* [shwiki](https://github.com/pforret/shwiki): Wikipedia CLI in bash
* [shwordle](https://github.com/pforret/shwordle): Wordle-clone with variable # of letters and multiple languages
* [splashmark](https://github.com/pforret/splashmark): download/create (unsplash/pixabay/replicate) pics and resize/add effects/add attribution/watermark
* [teams-cli](https://github.com/cinemapub/teams-cli): Send messages to MS Teams channels from CLI
* [xkcd](https://github.com/pforret/xkcd): View a XKCD comic in your console/TTY## 🙏 Acknowledgements
* [bash_unit](https://github.com/pgrange/bash_unit): bash unit testing enterprise edition framework (used for CI/CD)
* [shellcheck](https://github.com/koalaman/shellcheck): a static analysis tool for shell scripts (used for CI/CD)
* [bash-boilerplate (2012)](https://github.com/oxyc/bash-boilerplate) on which I based my [bash-boilerplate (2020)](https://github.com/pforret/bash-boilerplate) which eventually became this [bashew](https://github.com/pforret/bashew)
* Bash documentation from [Google](https://google.github.io/styleguide/shellguide.html), [BashPitfalls](https://mywiki.wooledge.org/BashPitfalls), [Microsoft](https://github.com/microsoft/code-with-engineering-playbook/blob/master/code-reviews/recipes/Bash.md)## 🤔 What's that name? Bashew?
* derived from 'bash new'
* rhymes with cashew## Stargazers over time
[![Stargazers over time](https://starchart.cc/pforret/bashew.svg)](https://starchart.cc/pforret/bashew)