generated from LuisPalacios/cpp-plantilla
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c98f310
commit f2e083d
Showing
12 changed files
with
3,603 additions
and
163 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -32,4 +32,4 @@ jobs: | |
uses: codecov/[email protected] | ||
with: | ||
token: ${{ secrets.CODECOV_TOKEN }} | ||
slug: LuisPalacios/CppPlantilla | ||
slug: LuisPalacios/cpp-libparchis |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,5 @@ | ||
The MIT License (MIT) | ||
# LICENCIA CC BY-NC-ND 4.0 DEED | ||
|
||
Copyright (c) 2015, Luis Palacios | ||
Atribución-NoComercial-SinDerivadas 4.0 Internacional | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. | ||
<p xmlns:cc="http://creativecommons.org/ns#" xmlns:dct="http://purl.org/dc/terms/"><a property="dct:title" rel="cc:attributionURL" href="https://github.com/LuisPalacios/cpp-libparchis">Librería juego del Parchis en C++</a> © 2024 por <a rel="cc:attributionURL dct:creator" property="cc:attributionName" href="https://www.luispa.com/about/">Luis Palacios Derqui</a> licenciada bajo <a href="http://creativecommons.org/licenses/by-nc-nd/4.0/deed.es/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -43,164 +43,35 @@ | |
|
||
| ||
|
||
## Qué es esta plantilla? | ||
|
||
Puedes utilizarla a la hora de crear un repositorio nuevo para un proyecto C++ en tu cuenta de GitHub. Incluye todo lo siguiente: | ||
|
||
- Buenas prácticas separando los fuentes y las cabeceras en carpetas distintas | ||
- Uso de CMake para construir y compilar | ||
- Soporte de bibliotecas externas, usando uno de los tres siguientes gestores: | ||
- Gestor de paquetes [CPM](https://github.com/cpm-cmake/CPM.cmake) | ||
- Gestor de paquetes [Conan](https://conan.io/) | ||
- Gestor de paquetes [VCPKG](https://github.com/microsoft/vcpkg) | ||
- Incluye varias bibliotecas de propósito general a modo de ejemplo: [JSON](https://github.com/nlohmann/json), [spdlog](https://github.com/gabime/spdlog), [cxxopts](https://github.com/jarro2783/cxxopts) y [fmt](https://github.com/fmtlib/fmt) | ||
- Incluye Unit Tests con [Catch2](https://github.com/catchorg/Catch2) v2 | ||
- Pruebas de integración continua con Github Actions y [pre-commit](https://pre-commit.com/) | ||
- Informes de cobertura del código, incluida la carga automática a [Codecov](https://codecov.io) | ||
- Documentación del código con [Doxygen](https://doxygen.nl/) y [Github Pages](https://franneck94.github.io/CppProjectTemplate/) | ||
- Herramientas: Clang-Format, Cmake-Format, Clang-tidy, Sanitizers | ||
# libparchis c++ | ||
|
||
| ||
|
||
## Estructura | ||
|
||
``` text | ||
├── CMakeLists.txt | ||
├── app | ||
│ ├── CMakesLists.txt | ||
│ └── main.cc | ||
├── cmake | ||
│ └── cmake modules | ||
├── docs | ||
│ ├── Doxyfile | ||
│ └── html/ | ||
├── external | ||
│ ├── CMakesLists.txt | ||
│ ├── ... | ||
├── src | ||
│ ├── CMakesLists.txt | ||
│ ├── my_lib.h | ||
│ └── my_lib.cc | ||
└── tests | ||
├── CMakeLists.txt | ||
└── main.cc | ||
``` | ||
|
||
El código de la librería está en [src/](src/), el programa en [app/](app) y los tests en [tests/](tests/). | ||
<div align="center"> | ||
|
||
| ||
|
||
## Requisitos de software | ||
![Parchis](art/[email protected]?raw=true "logo-libparchis") | ||
|
||
- CMake 3.21+ | ||
- GNU Makefile | ||
- Doxygen | ||
- Conan or VCPKG | ||
- MSVC >= 2017, G++ >= 9, Clang++ >= 9 | ||
- Opcional: Code Coverage (Solo sobre GNU|Clang): lcov, gcovr | ||
- Optional: Makefile, Doxygen, Conan, VCPKG | ||
<div align="left"> | ||
|
||
| ||
|
||
## Instalación y construcción | ||
|
||
Primero hacer un clone y seguir los pasos que describo al principio (*Cómo utilizar la plantilla*). | ||
|
||
```shell | ||
git clone --recursive https://github.com/LuisPalacios/CppPlantilla.git | ||
make prepare | ||
``` | ||
|
||
- Crear el ejecutable | ||
|
||
```shell | ||
cd build | ||
cmake -DCMAKE_BUILD_TYPE=Release .. | ||
cmake --build . --config Release --target main | ||
cd app | ||
./main | ||
``` | ||
Este proyecto consiste en la librería del juego del Parchis desarrollada C++ que hago disponible como open source en febrero de 2024. ¿Qué es el Parchis?... pues un juego de tables, que también se conoce como Pachisi, Parchisi, Parchesi, Veinticinco o Parchís. Se trata de una adaptación del juego indio de la cruz y el círculo *Pachisi*. Creado en la India alrededor del año 500 a.C., el juego suele subtitularse Juego Real de la India porque supuestamente la realeza jugaba utilizando bailarines disfrazados como piezas en grandes tableros al aire libre (se conserva un tablero de este tipo en Fatehpur Sikri). | ||
|
||
- Unit testing | ||
Empecé a desarrollar El Parchis en 1995 para aprender Visual Basic, luego lo rehice en Java, después lo volví a hacer en C++ (aquí es donde creé la primera versión de esta librería), más adelante he creado versiones del fronted (gui) en Qt, Objective-C y la última en Swift y un intento en OpenGL. | ||
|
||
```shell | ||
cd build | ||
cmake -DCMAKE_BUILD_TYPE=Debug .. | ||
cmake --build . --config Debug --target unit_tests | ||
cd tests | ||
./unit_tests | ||
``` | ||
Para mi ha constituido un proyecto de aprendizaje de programación. Siempre es más fácil aprender un lenguaje nuevo cuando tienes un objetivo en mente. | ||
|
||
- Documentación | ||
|
||
La documentación que genera doxygen en el directorio `html` puede subirse a GitHub Pages. Consultar la siguiente sección. | ||
|
||
```shell | ||
cd build | ||
cmake -DCMAKE_BUILD_TYPE=Debug .. | ||
cmake --build . --config Debug --target docs | ||
``` | ||
|
||
- Code Coverage | ||
|
||
```shell | ||
cd build | ||
cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=ON .. | ||
cmake --build . --config Debug --target coverage | ||
``` | ||
|
||
Si quieres saber más sobre CMake consulta [este artículo](./README_cmake.md). | ||
La parte frontend no la he subido a GitHub, de momento... | ||
|
||
| ||
|
||
## Preparar GitHub Pages | ||
|
||
Si has creado un repositorio nuevo partiendo de esta plantilla no necesitas crear la rama `gh-pages+ de nuevo, dejo aquí documentado todo el proceso solo como referencia. | ||
|
||
GitHub permite, a través de su servicio *GitHub Pages* hospedar tus propias páginas web en cada uno de tus repositorios. Podemos usarlo para subir la documentación de nuestro repositorio. | ||
|
||
El proceso está documentado en [pages.github.com](https://pages.github.com) y en su [documentación oficial](https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/creating-a-github-pages-site-with-jekyll). | ||
|
||
Para este respositorio sigue esta chuleta: | ||
|
||
- Crea la rama `gh-pages` | ||
|
||
Crea una nueva branch, sin histórico ni contenido, llamada `gh-pages` | ||
|
||
```shell | ||
git checkout --orphan gh-pages | ||
git rm -rf . | ||
|
||
mkdir docs | ||
cd docs | ||
touch .keep.txt | ||
git add . | ||
git commit -m 'Creación inicial de la rama gh-pages' | ||
git push --set-upstream origin gh-pages | ||
``` | ||
|
||
- Entra en GitHub desde el navegador y activa GitHub Pages. | ||
|
||
- Haz clic en la pestaña Configuración / Settings. | ||
- Haz clic en `Pages` en la parte izquierda. | ||
- Source: Deploy from a branch | ||
- Branch: gh-pages Directorio: /(root)) Clic en SAVE | ||
|
||
- Verifica que tienes el fichero [~/.github/workflows/documentation.yaml](./.github/workflows/documentation.yml) preparado con las acciones a realizar. | ||
|
||
- Verifica que tienes permisos. | ||
<div align="center"> | ||
|
||
- Haz clic en la pestaña Configuración / Settings. | ||
- Haz clic en `Actions->General` en la parte izquierda. | ||
- Workflow Permissions: Read and write | ||
![Parchis](ParchisDiv.png?raw=true "ParchisDiv") | ||
|
||
- Haz un push al repositorio. | ||
<div align="left"> | ||
|
||
```shell | ||
touch algo.txt | ||
git push | ||
``` | ||
|
||
- Ve a tu repositorio -> Actions (debería estar construyendo la documentación) | ||
--- | ||
|
||
</br> | ||
<p xmlns:cc="http://creativecommons.org/ns#" xmlns:dct="http://purl.org/dc/terms/"><a property="dct:title" rel="cc:attributionURL" href="https://github.com/LuisPalacios/cpp-libparchis">Librería juego del Parchis en C++</a> © 2024 por <a rel="cc:attributionURL dct:creator" property="cc:attributionName" href="https://www.luispa.com/about/">Luis Palacios Derqui</a> licenciada bajo <a href="http://creativecommons.org/licenses/by-nc-nd/4.0/deed.es/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-ND 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nd.svg?ref=chooser-v1"></a></p> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.