A CLI (command line interface) common core tester.
$ pilates
pilates v0.2.1 - Ultimate Pilates Machine
pilates is an educational devops tool designed to help you along your curriculum.
Available commands:
libft Install and run unit tests, benchmarks, norm check, makefile check & memory leaks checks.
Flags:
-h, --help
Get help on the 'pilates' command.
-u, --update
Update Pilates to the latest version.
-v, --version
Pilates CLI version.
Manual
-
Download the latest stable (or beta) release.
-
Move the binary in
/usr/local/bin(or a custom location).
If you opt for custom location you may need to include it in you Path.
You may need to restart any open Terminal sessions for the change to take effect.
Manual
-
Download the latest stable (or beta) release.
-
Move the binary in
$HOME/.local/bin(or a custom location).
Path
You may need to include the directory in your path.
Open you ~/.bashrc or ~/.profile etc amd add the line
PATH="$HOME/.local/bin:$PATH"
To load the changes run source ~/.profile or source ~/.bashrc etc.
You can install pilates via an install.sh script.
curl -sfL https://raw.githubusercontent.com/study-group-99/pilates/main/install.sh | sh
This will download and install latest stable release. If you feel adventurous you can download the script and run locally pointing to latest beta ie. sh install.sh pilates-v0.1.0-beta.1. Please check releases for latest beta version.
Path
See relevant path instructions for your platform above.
Note: minimum go version required is 1.6+.
go install github.com/study-group-99/pilates/cmd/pilates
Remember that you need to have $GOPATH/bin in your path.
-
Clone the repo
git clone https://github.com/study-group-99/pilates.git -
Change in the
pilatesdirectorycd pilates -
Build the app
go build ./cmd/pilates
To print the help screen of root command run pilates -h or pilates --help.
In there you will find information about pilates available subcommands and options (flags).
Each sub command has a more thorough help section available under the -h of the subcommand. For example pilates libft -h will return the expanded relevant section of the libft subcommand and its options.
Dependencies: Cmake, Gcovr, Norminette
Pilates needs Cmake for building the unit tests. In addition Gcovr is needed if you you would like to use the -c, --coverage option. We assume Norminette is already installed but if not please do or option -n, --norm will return an err.
Linux:
- Debian/Ubuntu
sudo apt-get install cmake gcovr - RHEL/Fedora/CentOS/
sudo yum install cmake gcovr
Mac:
- Via brew
brew install cmake gcovr - Manually from https://cmake.org/download/
pip install gcovr
Norminette:
python3 -m pip install norminette
new
pilates is using the google test framework which is written in C++. Consequently new can not be used as argument in any of your C prototypes or tests wont even build.
To circumvent this issue rename all arguments named new to something different in both libft.h and the equivalent ft_*.c file.
pilates can do this for you automagically by running pilates libft init --fix-new. Behind the scenes pilates will edit your libft.h and all ft_*.c files necessary, replacing new with neew.
Open a terminal and cd in you libft directory. Run pilates libft init. pilates will create a .gitignore file if it does not exists, two CMakeLists files a pilates directory.
If for any reason you would like to re-init you can use the -f, --force option pilates libft init -f.
All tests are .cpp files that live inside pilates directory. You are strongly advised to look inside! If you know what you are doing you of-course can edit/comment out/delete or add code.
Files and directories generated by pilates are all listed in the .gitignore so when you submit your project no artifacts will be present.
The run subcommand is intended to be used with one of the bellow options. Trying to run it without one will return an error. To print help run pilates libft run -h.
pilates libft run --unit or pilates libft run -u for short.
The -u, --unit option will run unit tests against your libft files. There is no part one/two, bonus options etc. pilates will test against all ft_*.c found on top level directory.
Building and running the unit tests will create a new directory build.
You can optionally see the coverage of you code by passing the -c --coverage option.
pilates libft run -m the makefile option will attempt to build your Makefile checking that all that should exist work.
pilates libft run -n runs linter checks. It is meant to be used along -r, --report option for wholesomeness.
pilates libft run -ur generates a report.txt log file. Report option can not be used alone.
pilates libft run -a option -a, --all will turn all other options true. It is the equivalent of pilates libft run -unmcr.
pilates is written in go 1.6+. Older versions won't work because of the embed feature use.
Go unit tests use all the dependencies needed for end users so the same applies here as well.
If the contribution is go code + new feature instead of bug fix, please include at least an example usage unit test.
We use gitflow workflow so all development is happening in the dev branch.
All commit messages should adhere to conventional commits.
-
Open/assign your self to a ticket in discussions/issues.
-
Fork/clone the repo, checkout
devbranch and then branch off to a new branch named after the feature you are implementing/bug fixing, ie.git checkout -b feat/libft_benchmarksorgit checkout -b fix/libftmemeoryleaks. -
Push changes and open a pull request against
devbranch. -
The title of the pull requests should be in the form of
feat: feature name (#19). #19 is the number of the issue/discussion. -
Wait for reviews to finish.
-
Once all
lgtmsquash merge. The message when squashing should look something likefeat: bug name (#19) (#25)orfix: feature name (#19) (#25)with the second (#25) being the pull requests itself.
note: org members do not need to fork but outside collaborators do.
On successful merge on dev branch automation fires a new beta release for testing purposes.
When a pull request against main branch is successfully merged automation will make a new release (see /workflows/release.yml & ./goreleaser.yml). If commit messages contain feat a minor bump will run v0.1.0 to v0.2.0, if commit messages contain fix a patch bump will run ie. v0.1.0 to v0.1.1. If messages contain breaking a major bump will run v0.1.0 to v1.0.0.
When implementing a feature or patch for a bug the two ways to test what you did are
go install ./cmd/pilateswhich will build a binary insidego/bin. You can you use this binary against some test directory.go test ./... -vto run through all unit tests.
Regardless the branch contributors can comment/trig certain actions (see /workflows/comments.yml).
/libft-ci : Triggers cpp unit tests for libft. Comments back the result once actions is done.
-
Go tests (see
/workflows/gotests.yml) run on every pull request made ondevandmainbranches. -
Individual c/cpp tests (see
/workflows/main.yml) run only onmain.
All active students and alumni are welcome to contribute.
We are especially interested in forming a small "core" team of maintainers.
-
Code ~ A good place to start is to check for open issues (bugs) or in discussions for unassigned feature request tickets. Once you have identified what you would like to contribute to assign yourself and let others know.
-
Bug reports ~ Bug reports are very welcome. If you spot
pilatesmisbehaving do open an issue describing the bug, your OS, and pilates version. -
Feature requests ~ If
pilatesdoes not have the functionality you wish, open a ticket in discussions underfeature requestdescribing the clearest you can how the new feature should behave and what it accomplishes. -
Reviews ~ If you would like to sharpen your code review skills contact someone that is already in org to send an invitation and start reviewing voluntarily any of the open pull requests.
- Libft
- ft_printf
- get_next_line
- minitalk (?)
- pipex (?)
- so_long (?)
- Fdf (?)
- fract-ol (?)
- push_swap (?)
- minishell (?)
- Philosophers (?)
- cub3d (?)
- miniRT (?)
- ft_containers (?)
- ft_services (?)
- Inception (?)
- ft_irc (?)
- webserv (?)
- cpp module (?)
Reviewers/Testers: @ignan1, @Zyanite7, @LePlaYa, @dejanzivanov, @Madasanya, @Lillzz, @berlintrabby.
Test cases for libft unit tests also came from: @berlintrabby, @alelievr & @ska42.
