GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - pforret/bashew: bash script micro-framework - from small stand-alone script to complex projects with CI/CD and testing

BranchesTags
Open more actions menu

Latest commit

 

History

256 Commits
256 Commits

Folders and files

NameName
Last commit message
Last commit date
.githooks
.githooks
 
 
.github
.github
 
 
assets
assets
 
 
docs
docs
 
 
template
template
 
 
tests
tests
 
 
.gitignore
.gitignore
 
 
CHANGELOG.md
CHANGELOG.md
 
 
CLAUDE.md
CLAUDE.md
 
 
CODE_OF_CONDUCT.md
CODE_OF_CONDUCT.md
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
VERSION.md
VERSION.md
 
 
bashew
bashew
 
 
bashew.sh
bashew.sh
 
 
mkdocs.yml
mkdocs.yml
 
 

Repository files navigation

Shellcheck CI bash_unit CI version version

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

bashew.sh

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

function library

  • 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

  • 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 [email protected]
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             ([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)

$ 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:

$ 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, click on 'Use this template'
  • then clone your new repo
$ 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

🦪 Built with Bashew

  • bumpkeys: upgrade your SSH keys for better security
  • crontask: call scripts or URLs from a crontab file, with optional logging and webhook upon success/failure
  • jekyll_taxonomy: Generate tag and category pages for Jekyll static sites
  • m1_homebrew: Install homebrew in native mode on Apple MacOS ARM
  • mkdox: create and run Mkdocs Material websites using Docker image
  • netcheck: test network: interfaces, gateway, router, internet
  • note: Manage your notes, todo, ... with this nifty script
  • pa: like "php artisan" but more intelligent (use optimal PHP version for the project
  • progressbar: Easy, clever progress bar for (bash) scripts
  • rexec: repeat a command and be alerted when the output changes
  • saild: Start up your Laravel Sail dev setup in one go - Docker, Browser, Shell
  • screenshots: Let GitHub automatically make 📸 screenshots of all your websites
  • setver: Easy semver tool -- get/set git version (one-line superfast git commit)
  • shaml: Read YAML files inside bash scripts
  • shini: Read INI files inside bash scripts
  • shlaunch: Launch desktop/GUI apps from CLI (e.g. Chrome, PHPStorm, Photoshop ...)
  • shlorem: Lorem Ipsum generator for the command line
  • shmixcloud: download Mixcloud shows and add album art to m4a files
  • shoarma: Static Image Site Generator - make e.g. Jekyll posts from folder of images
  • shtext: Text manipulation in bash, by always using the fastest method
  • shwiki: Wikipedia CLI in bash
  • shwordle: Wordle-clone with variable # of letters and multiple languages
  • splashmark: download/create (unsplash/pixabay/replicate) pics and resize/add effects/add attribution/watermark
  • teams-cli: Send messages to MS Teams channels from CLI
  • xkcd: View a XKCD comic in your console/TTY

🙏 Acknowledgements

  • bash_unit: bash unit testing enterprise edition framework (used for CI/CD)
  • shellcheck: a static analysis tool for shell scripts (used for CI/CD)
  • bash-boilerplate (2012) on which I based my bash-boilerplate (2020) which eventually became this bashew
  • Bash documentation from Google, BashPitfalls, Microsoft

🤔 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

Topics

bashbash-scriptbash-scriptingbasherbashewboilerplate-templateoption-parsingshellchecktemplate

Resources

Readme
MIT license

Code of conduct

Code of conduct

Contributing

Contributing
Activity

Stars

297 stars

Watchers

5 watching

Forks

23 forks
Report repository

Releases

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.