Giter VIP home page Giter VIP logo

mush's Introduction

🎉 Exciting News 🎉
Release 0.3.0 on March 14, 2025!

Dear users and enthusiasts of our project,

We are thrilled to announce that the release 0.3.0 of our project is on its way, and there's a special reason to celebrate it! 🚀

Release Date: March 14th, on Pi Day (3.14) 🥳

This update will bring a slew of new features, improvements, and bug fixes, and we can't wait to share it with you.

Keep an eye on this repository for further details on the new features and upgrade instructions.

Thank you for your ongoing support and for being a part of our community. We look forward to celebrating with you on Pi Day! 🎈

Stay tuned!


🍄 Mush

autobuild ShellCheck

Mush is the shell package builder. Mush downloads your shell package’s dependencies, compiles your packages, makes distributable packages, and uploads them to GitHub, as public community’s package registry.

This project is mostly inspired by Rust and Cargo!

Supported Shells

We try to do everything possible to ensure maximum compatibility with these platforms

bash bosh busybox dash ksh mksh posh yash zsh

Documentation

To start using Mush, learn more at the Mush website.

Demo

mush

Local Demo

Create a new demo package on your system with the following command

curl https://mush.javanile.org/demo | bash

Add your custom code to src/main.sh or src/utils/module.sh files then run it with

cd demo && ./bin/mush run 

In case you are ready to release your package, type the following command

cd demo && ./bin/mush build --release

Cheat Sheet

This cheatsheet provides an overview of essential keywords used in the Mush scripting language and their purposes.

  • module: Loads a module, encapsulating code and allowing for modularity. A module can be a single file or a folder containing a module.sh file.

  • public: Marks a submodule as accessible from outside the module.

  • extern package: Specifies an external package or dependency to be used.

  • embed: Includes external files or resources into the Mush codebase.

For further details, please consult the Reference documentation.

Contributing

See CONTRIBUTING.md in the repo, obviously pull-request are welcome.

Security Vulnerabilities

If you discover a security vulnerability within Laravel, please send an e-mail to Francesco Bianco via [email protected]. All security vulnerabilities will be promptly addressed.

Community & Questions

To interact with us, you can find us in the following ways:

  • GitHub Issues: Report a bug or raise a feature request to the Mush core team
  • Mush on Discord: Join the #mush channel on the Javanile Discord community
  • StackOverflow Tag: See existing Q&A for BASH and Unit Testing. We look at them often

License

Mush is open-sourced software licensed under the MIT license.

mush's People

Contributors

booniepepper avatar francescobianco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

booniepepper

mush's Issues

Use records.sh for core logging

I see https://github.com/orbit-online/records.sh as good solution for core logging

Hi @andsens @orbit-online,

I would like to thank you for your tremendous work on open-source projects like Orbit Online. I am grateful that you have recognized BPKG as a package manager.

I'm in the last year work on MUSH another side-project mostly inspired to Rush with the mission to create a Builder tool for large Shell projects.

Please consider if it can have impact on your work, we are open to contributions and supports.

🔒 Security TOC

  • Bash validate script before run (Add bash core api that implement integrity check before run or source any script, based on notable integrity external or remote tool)

Come Posso Contribuire? 🌟

👋 Benvenuto

Grazie tante per il tuo tempo prezioso, eccoti le istruzioni per poterti permettere di non sprecare nenche un minuto

📝 Istruzioni

  1. Fai il fork di questo progetto: https://github.com/javanile/mush
  2. Fai il fork di questo progetto: https://github.com/francescobianco/mush-packages
  3. Crea una issue usando questo link ed incolla dentro i link dei tuoi fork, useremo questa issue per discutere vari dettagli e varie casistiche rilevate nei tuoi test
  4. Installa Mush da riga di comando usando la guida seguente: https://mush.javanile.org/
  5. Crea nel tuo fork mush-packages un nuovo package all'interno della cartella packages/, prova a creare uno strumento semplice che magari usa un argomento in input al tuo progetto per generare un file con la data nel nome (guarda la sezione seguente "Esempio Pratico")
  6. Crea una pull request per aggiungere il tuo nome in questo file: contributors.md
  7. Crea una pull request per aggiungere tre idee di package in questo file package-ideas.md
  8. Prova a create un package che possa essere utile per te o per le persone con cui collabori o con cui condivi una passione (es. Scacchi, Arduino, Droni, ecc...)
  9. Crea nel README.md del tuo progetto mush-packages una lista dei pacchetti che esso contine e per ogniuno indica una descrizione e come e possibile installarlo

🛠️ Esempio Pratico

Creare dentro il proprio mush-packages un progetto chiamato fileshot che semplicemente passatogli il nome di un file esistente nel proprio pc, esso crei una copia di quel file ma aggiunga nel nome un timestamp relativo al momento della chiamata del comando fileshot, in modo da avere qualcosa di simile a questo

$ fileshot mybackup.zip
Snapshot was created with the name: mybackup_202309131200.zip

🎯 Finalità

Tutti questi passaggi hanno lo scopo di farti esplorare il progetto Mush, e di far emergere il tuo punto di vista sulle attività. Nulla qui, è scritto sulla pietra, tutto può essere messo in discussione, sulla base delle esisgenze specifiche che ogniuno ritrova nel proprio quotidiano.

🙏 Grazie

Se hai completato la lista voglio ringraziarti ancora una volta. Molto probabilmente, se ti fa piacere, potrei farlo pubblicamente con un post su tutti i miei social e sul mio blog. Inoltre se dovessi trovarti dalle mie parti, ovviamente sarai ringrazianto con una buona quantita di: Arancine, Cannoli e Olio DOP di altissima qualità.

Hard TODO

... it's not clear what this is, from this post, the github repo, or the webstie....

What is meant by a "shell package" ? This is not a standard concept by far, you're going to need to explain what the problem domain is before getting to talk about the solution...

What does this do? Multiple shell scripts combined to one? (it's a shell script linker?) A combination of the binaries a shell script calls? (an environment gatherer for consistent dependencies? how does that even get resolved?)

The only front page example shows compiling main() { echo "Hello world" ; } but neither use-case above would be needed for it.

And it produces a binary? like, an ELF or EXE? How is that related, or even desirable, for shell scripts? Sounds like a horrendous idea... what kind of benefits even come from this?

Safety isn't a feature of shell scripting, convenience is its hallmark. Where does rust fit into this? Is this transpiling shell scripts into rust, and compiling that? why?

We can't see what this project is about. With the current materials, it looks ... like it doesn't itself even know what it is...

The project seems to be very incomplete, and it is still not clear what it aims to achieve. More work on its explanations are needed, as I stated in prior comment. I gave it a try, it doesn't seem to do any linking, just source calling. So the output executables aren't portable.

The idea seems interesting though. The promise of solving cross-environment compatibility and dependency sounds interesting though. But from my experience so far, trying to guarantee identicity of runtime from shell scripting is non-trivial.

The reason we can have guarantees for programming languages is that the dependencies are first-citizens in the language's ecosystem.

Shell scripting relies on arbitrary binaries of various implementation-flavours. grep is not the same grep on two distros. rsync is not the same rsync on different distros. ssh is not the same implementation on different distros. Their default behaviours are not the same across distros.

So making the promise of cross-platform execution.... is a tall order. My take has been: do basic linking/source inclusion into a single file ; normalise the runtime environments across your park, or write highly-portable scripts using common-denominator utility features. Use re-usable code snippets and linking to abstract away flavour-switching.

SPAM!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.