From 01a3924c7d5826fed1801e89408da37637c43795 Mon Sep 17 00:00:00 2001 From: Chemaclass Date: Sun, 15 Sep 2024 19:16:17 +0200 Subject: [PATCH] add .github/ with workflows and basic setup --- .github/CODE_OF_CONDUCT.md | 41 +++++++++ .github/CONTRIBUTING.md | 120 ++++++++++++++++++++++++++ .github/FUNDING.yml | 1 + .github/PULL_REQUEST_TEMPLATE.md | 23 +++++ .github/RELEASE.md | 9 ++ .github/workflows/linter.yml | 24 ++++++ .github/workflows/static_analysis.yml | 28 ++++++ .github/workflows/tests.yml | 34 ++++++++ README.md | 5 ++ 9 files changed, 285 insertions(+) create mode 100644 .github/CODE_OF_CONDUCT.md create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/FUNDING.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/RELEASE.md create mode 100644 .github/workflows/linter.yml create mode 100644 .github/workflows/static_analysis.yml create mode 100644 .github/workflows/tests.yml diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..3b9c8da --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,41 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we +pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, +submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free experience for everyone, regardless of level +of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, +race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic addresses, without explicit permission +* Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, +issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these +principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of +Conduct may be permanently removed from the project team. + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the +project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project maintainer +at chemaclass@outlook.es. All complaints will be reviewed and investigated and will result in a response that is deemed +necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the +reporter of an incident. + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.3.0, available +at [https://contributor-covenant.org/version/1/3/0/][version] + +[homepage]: https://contributor-covenant.org + +[version]: https://contributor-covenant.org/version/1/3/0/ diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..43e1442 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,120 @@ +# Contributing + +## We have a Code of Conduct + +Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). +By participating in this project you agree to abide by its terms. + +## Any contributions you make will be under the MIT License + +When you submit code changes, your submissions are understood to be under the +same [MIT](../LICENSE) that covers the project. By contributing to this +project, you agree that your contributions will be licensed under its MIT. + +## Write bug reports with detail, background, and sample code + +In your bug report, please provide the following: + +* A quick summary and/or background +* Steps to reproduce + * Be specific! + * Give sample code if you can. +* What you expected would happen +* What actually happens +* Notes (possibly including why you think this might be happening, or stuff you tried that didn't work) + +Please post code and output as text ([using proper markup](https://guides.github.com/features/mastering-markdown/)). +Additional screenshots to help contextualize behavior are ok. + +## Workflow for Pull Requests + +1. Fork/clone the repository. +2. Create your branch from `main` if you plan to implement new functionality or change existing code significantly. +3. Implement your change and add tests for it. +4. Ensure the test suite passes. +5. Ensure the code complies with our coding guidelines (see below). +6. Send that pull request! + +Please make sure you have [set up your username and email address](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for +use with Git. Strings such as `silly nick name ` looks bad in the commit history of a project. + + +--- + +## Development + +- Entry point `main` +- Isolated testable functions inside files under the `src` directory + +### Build + +You can build the whole project into a single executable script combining all files from src and the entry point. + +```bash +./build.sh +``` + +## Testing + +Install dependencies: `./install-dependencies.sh` + +Run tests: + +```bash +# using make +make test + +# using bashunit directly +lib/bashunit tests +``` + +## Coding Guidelines + +### ShellCheck + +To contribute to this repository you must have [ShellCheck](https://github.com/koalaman/shellcheck) installed on your +local machine or IDE, since it is the static code analyzer that is being used in continuous integration pipelines. + +Installation: https://github.com/koalaman/shellcheck#installing + +#### Example of usage + +```bash +# using make +make sa + +# using ShellCheck itself +shellcheck ./**/**/*.sh -C +``` + +### editorconfig-checker + +To contribute to this repository, consider installing [editorconfig-checker](https://github.com/editorconfig-checker/editorconfig-checker) +to check all project files regarding the `.editorconfig` to ensure we all fulfill the standard. + +Installation: https://github.com/editorconfig-checker/editorconfig-checker#installation + +To run it, use the following command: + +```bash +# using make +make lint + +# using editorconfig-checker itself +ec -config .editorconfig +``` + +This command will be executed on the CI to ensure the project's quality standards. + +#### We recommend + +To install the pre-commit of the project with the following command: + +**Please note that you will need to have ShellCheck and editorconfig-checker installed on your computer.** +See above how to install in your local. + +```bash +make pre_commit/install +``` + +[Shell Guide](https://google.github.io/styleguide/shellguide.html#s7.2-variable-names) by Google Conventions. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..a605fce --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ["https://chemaclass.com/sponsor"] diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..7841528 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,23 @@ +### 🔗 Ticket + +{{ TICKET_LINK }} + +## 🤔 Background + + + +## 💡 Goal + + + +## 🔖 Changes + + + +## 🖼️ Screenshots + + + +#### BEFORE + +#### AFTER diff --git a/.github/RELEASE.md b/.github/RELEASE.md new file mode 100644 index 0000000..3ee2181 --- /dev/null +++ b/.github/RELEASE.md @@ -0,0 +1,9 @@ +# Release + +This is a guide to know the steps to create a new release. + +1. Update the version in [BASH_SKELETON_VERSION](../main) +1. Update the version in [CHANGELOG.md](../CHANGELOG.md) +1. Build the project `./build.sh bin` - This generates `bin/main` & `bin/checksum` +1. Create a [new release](https://github.com/Chemaclass/bash-skeleton/releases/new) from GitHub +1. Attach `bin/main` and `bin/checksum` to the release diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml new file mode 100644 index 0000000..6679506 --- /dev/null +++ b/.github/workflows/linter.yml @@ -0,0 +1,24 @@ +name: Editorconfig Linter + +on: + pull_request: + push: + branches: + - main + +jobs: + linter: + name: "Run Lint on ${{ matrix.os }}" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Editorconfig Linter + uses: editorconfig-checker/action-editorconfig-checker@main + + - name: Run Linter + run: editorconfig-checker + diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml new file mode 100644 index 0000000..f64ee09 --- /dev/null +++ b/.github/workflows/static_analysis.yml @@ -0,0 +1,28 @@ +name: Static Analysis + +on: + pull_request: + push: + branches: + - main + +jobs: + shellcheck: + name: ShellCheck + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Run ShellCheck + uses: ludeeus/action-shellcheck@master + env: + SHELLCHECK_OPTS: -e SC1091 -e SC2155 + diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..ce4add7 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,34 @@ +name: Tests + +on: + pull_request: + push: + branches: + - main + +jobs: + tests: + name: "Run tests on ${{ matrix.os }}" + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + include: + - os: ubuntu-latest + script_name: 'make test' + - os: macos-latest + script_name: 'make test' + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: "Install bashunit" + run: "./install-dependencies.sh" + + - name: Run Tests + run: ${{ matrix.script_name }} + diff --git a/README.md b/README.md index e9b0373..73fdcd9 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,8 @@ This is a skeleton to start building bash scripts within a powerful yet simple a - GitHub Actions to ensure every commit and PR are passing the acceptable - Optional pre-commit git hook to trigger tests, linter and static-analysis - A Makefile ready with basic commands + +## Contribute + +Suggestions, ideas and PRs are more than welcome here! +Please, Check out our [CONTRIBUTING.md](.github/CONTRIBUTING.md) guidelines.