Skip to content
/ bashew Public template
forked from pforret/bashew

bash script micro-framework - from small stand-alone script to complex projects with CI/CD and testing

License

Notifications You must be signed in to change notification settings

JohnCrafton/bashew

 
 

Repository files navigation

Part of part of Bashful Scripting network network / Install with basher install

Latest tag: version / latest release: version / Bash CI Shellcheck CI

bashew

Bashew Logo

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
  • 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)
  • 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

Program: bashew 1.18.2 by peter@forret.com
Updated: May  1 16:49:18 2022
Description: package_description
Usage: bashew [-h] [-q] [-v] [-f] [-l <log_dir>] [-t <tmp_dir>] [-n <name>] <action>
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
    <action>         : [parameter] action to perform: script/project/init/update

1. create new bash script (without repo)

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:

$ bashew script
⏳  1. first we need the information of the author
Author full name         (pforret) > Peter Forret
Author email             (peter@forret.com) > 
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.sh -f -q script
./iffiest_prepays.sh

2. create new bash project folder/repo (with README.md, CI/CD)

bashew.sh project               # will interactively ask for author & script details
bashew.sh -f project            # will create new project with random name
bashew.sh -f -n "tango" project # will create new project in folder "tango"

Example:

> bashew.sh -f project
…  Creating project ./tendon_mingle ...
CHANGELOG.md README.md VERSION.md LICENSE .gitignore tendon_mingle.sh bitbucket-pipelines .github/workflows  
✔  next step: 'cd ./tendon_mingle' and start scripting!

3. create a bash script repo, with CI/CD, with README, with tests, with versioning ...

git clone https://github.com/<you>/<your repo>.git
cd <your repo>
./bashew.sh init             # will ask for details and initialise/clean up the repo

and then, if you have setver.sh:

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

git clone --depth=1 https://github.com/pforret/bashew.git <newname>
cd <newname>
./bashew.sh init             # will ask for details and iniialise/clean up the repo

🚀 Installation

  • manually
git clone https://github.com/pforret/bashew.git
ln -s bashew/bashew.sh /usr/local/bin
  • or with basher package manager basher install
basher install pforret/bashew

🙏 Acknowledgements

🤔 What's that name? Bashew?

  • derived from 'bash new'
  • rhymes with cashew

Stargazers over time

Stargazers over time

About

bash script micro-framework - from small stand-alone script to complex projects with CI/CD and testing

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Shell 100.0%