Skip to content
This repository has been archived by the owner on Mar 31, 2024. It is now read-only.

Commit

Permalink
Scaffold y v5 (#39)
Browse files Browse the repository at this point in the history
* Quito extensión .out

* Reorganizo bastantes cosas

* Reorganizo settings

* Extraigo funcion

* Mejoro logs

* Automatizo scaffold

* Fix typo

* Intento mejorar el scaffold

* Faltaba el origin

* Pusheo a este mismo repo

* Otra prueba más

* Copilot dice que va así

* Youngblood say you want me

* Ayuda no se usar mv

* Faltaban los ignorados

* Da loco copiamelooo

* Lalalaaa lai to mi

* Quito watch y actualizo snippets

* Settings configuration

* Deploy flags en readme

* Generar main

* Actualizo tests.md

* Actualizo versión
  • Loading branch information
RaniAgus authored Mar 24, 2024
1 parent 258aa21 commit 1e075ad
Show file tree
Hide file tree
Showing 56 changed files with 410 additions and 371 deletions.
49 changes: 49 additions & 0 deletions .github/workflows/scaffold.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Build scaffold

on:
workflow_dispatch:
inputs:
projects:
description: 'Projects to generate, separated by spaces'
required: true
default: 'kernel memoria cpu filesystem'
static:
description: 'Static lib to generate'
required: true
default: 'utils'
external:
description: 'External libs to include, separated by spaces'
required: true
default: 'commons pthread readline m'
branch:
description: 'Branch to push the generated files'
required: true
default: 'scaffold'

jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: oven-sh/setup-bun@v1
with:
bun-version: latest

- name: Generate scaffold files
run: |
bun ./scripts/scaffold.js \
--projects "${{ github.event.inputs.projects }}" \
--staticLib "${{ github.event.inputs.static }}" \
--externalLibs "${{ github.event.inputs.external }}"
- name: Push to scaffold branch
run: |
git switch --orphan ${{ github.event.inputs.branch }}
mv dist/{.gitignore,*} .
git add .
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git commit -m "Generate tp-scaffold files"
git push -f origin ${{ github.event.inputs.branch }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1 change: 0 additions & 1 deletion .github/workflows/vitepress.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
name: Deploy to GitHub Pages
on:
workflow_dispatch: {}
push:
branches:
- main
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ node_modules
.temp
*cache
dist/
.vscode/
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ Templates para facilitar la creación de proyectos en Lenguaje C.
mkdir mi-nuevo-proyecto && cd mi-nuevo-proyecto

# descargar el template
wget -qO- https://github.com/RaniAgus/so-project-template/releases/download/v4.0.3/project-v4.0.3.tar.gz \
wget -qO- https://github.com/RaniAgus/so-project-template/releases/download/v5.0.0/project-v5.0.0.tar.gz \
| tar -xzvf - --strip-components 1

# compilar con make
make

# ejecutar
./bin/mi-nuevo-proyecto.out
./bin/mi-nuevo-proyecto
```

Para agregar bibliotecas, compartir código entre proyectos, importar en
Expand Down
4 changes: 0 additions & 4 deletions docs/.vitepress/configs/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,6 @@ export const sidebar = {
// text: 'Shared Libraries',
// link: '/guia/avanzado/shared-libraries'
// },
{
text: 'Escuchar cambios en el código',
link: '/guia/avanzado/escuchar-cambios'
},
],
},
],
Expand Down
2 changes: 1 addition & 1 deletion docs/guia/args.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Es probable que para el TP requieran pasar argumentos a `main()` para, por
ejemplo, parametrizar el archivo config que se va a utilizar:

```bash
./bin/ejemplo.out ejemplo.config
./bin/ejemplo ejemplo.config
```

Y recibir el path hacia el archivo config en la función `config_create()`:
Expand Down
6 changes: 3 additions & 3 deletions docs/guia/avanzado/code.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ El mismo cuenta con una task especificando lo siguiente:

::: code-group

<<< @/../src/project/.vscode/tasks.json#build{json:line-numbers}
<<< @/../src/configs/vscode/tasks.json{4-13 json:line-numbers}

:::

Expand All @@ -46,7 +46,7 @@ el cual se indica, entre otras cosas:

::: code-group

<<< @/../src/project/.vscode/launch.json#run{json:line-numbers}
<<< @/../src/configs/vscode/launch.json{json:line-numbers}

:::

Expand Down Expand Up @@ -88,7 +88,7 @@ posibles bugs. Veamos cómo está conformado `c_cpp_properties.json`:

::: code-group

<<< @/../src/project/.vscode/c_cpp_properties.json{7-10 json:line-numbers}
<<< @/../src/configs/vscode/c_cpp_properties.json{5-7 json:line-numbers}

:::

Expand Down
45 changes: 0 additions & 45 deletions docs/guia/avanzado/escuchar-cambios.md

This file was deleted.

45 changes: 40 additions & 5 deletions docs/guia/avanzado/tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ archivos.
::: tip

En general es una buena práctica que el archivo fuente que contiene la función
`main()` tenga muy poco código con la lógica más _core_ de la aplicación,
delegando cada tarea a otras funciones de otros archivos fuente que sí son más
`main()` tenga muy poco código con la lógica más _core_ de la aplicación,
delegando cada tarea a otras funciones de otros archivos fuente que sí son más
acordes para ser testeadas de forma unitaria.

:::
Expand Down Expand Up @@ -141,12 +141,47 @@ para poder identificar bien qué parte del código cubre cada suite:

## Ejecutar el proyecto

- Desde Visual Studio Code: ya contamos con la configuración necesaria para
ejecutarlo, simplemente elegimos la alternativa `test` entre las opciones.

- Desde Eclipse: hacemos click derecho sobre el ejecutable y seleccionamos
`Run As...` > `Local C/C++ Application`.

- Desde Visual Studio Code: debemos agregar la siguiente configuración a nuestro
archivo `launch.json` y luego simplemente elegimos la alternativa `test` entre
las opciones:

::: code-group

```json [launch.json]
{
// See https://go.microsoft.com/fwlink/?linkid=830387
// for the documentation about the launch.json format
"version": "0.2.0",
"configurations": [
{ // [!code focus]
"name": "test", // [!code focus]
"type": "cppdbg", // [!code focus]
"request": "launch", // [!code focus]
"program": "${workspaceFolder}/bin/${workspaceFolderBasename}_tests.out", // [!code focus]
"args": [], // [!code focus]
"stopAtEntry": false, // [!code focus]
"cwd": "${workspaceFolder}", // [!code focus]
"environment": [], // [!code focus]
"externalConsole": false, // [!code focus]
"MIMode": "gdb", // [!code focus]
"setupCommands": [ // [!code focus]
{ // [!code focus]
"description": "Enable pretty-printing for gdb", // [!code focus]
"text": "-enable-pretty-printing", // [!code focus]
"ignoreFailures": true // [!code focus]
} // [!code focus]
], // [!code focus]
"preLaunchTask": "build" // [!code focus]
} // [!code focus]
]
}
```

:::

## Valgrind

Para utilizar Valgrind, desde la consola podemos ejecutar:
Expand Down
10 changes: 5 additions & 5 deletions docs/guia/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ tree bin obj
```
.
├── bin
│ └── {nombre-del-proyecto}.out
│ └── {nombre-del-proyecto}
└── obj
└── main.o
```
Expand All @@ -84,25 +84,25 @@ $ ls -l bin src

bin:
total 20
-rwxrwxr-x 1 utnso utnso 17256 Mar 12 11:43 ejemplo.out
-rwxrwxr-x 1 utnso utnso 17256 Mar 12 11:43 ejemplo

src:
total 4
-rw-rw-r-- 1 utnso utnso 118 Mar 12 11:22 main.c
```

En este caso, se da cuenta que `ejemplo.out` fue modificado después que
En este caso, se da cuenta que `ejemplo` fue modificado después que
`main.c`, por lo que no hace falta recompilar.

:::

## Ejecución

Por último, para ejecutar el archivo compilado podemos ingresar
`./bin/{nombre-del-proyecto}.out`:
`./bin/{nombre-del-proyecto}`:

```bash
./bin/ejemplo.out
./bin/ejemplo
```

El cual nos mostrará el mensaje `Hello world!!`.
Expand Down
2 changes: 1 addition & 1 deletion docs/guia/linkear-bibliotecas.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ biblioteca que queremos usar al momento de la compilación con `gcc`. Al
ejecutar `make` veremos algo como:

```bash
gcc -o bin/ejemplo.out src/main.c -lcommons
gcc -o bin/ejemplo src/main.c -lcommons
```

Ese `-lcommons` es lo que agregamos al editar `LIBS`.
Expand Down
2 changes: 1 addition & 1 deletion docs/guia/static-libraries.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ Una vez compilemos con `make` veremos que se agregó el flag `-L{path}/bin` a
`gcc`:

```bash
gcc src/main.c -o "bin/ejemplo.out" -I../utils/src -L../utils/bin -lutils
gcc src/main.c -o "bin/ejemplo" -I../utils/src -L../utils/bin -lutils
```

### Incluir en el código
Expand Down
2 changes: 1 addition & 1 deletion docs/snippets/guia/args/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"name": "run",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/${workspaceFolderBasename}.out",
"program": "${workspaceFolder}/bin/${workspaceFolderBasename}",
"args": [ // [!code focus:4]
// TODO: Agregar los argumentos que se necesiten // [!code --]
"ejemplo.config" // [!code ++]
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "so-project-template",
"version": "4.0.3",
"version": "5.0.0",
"description": "Templates para facilitar la creación de proyectos en Lenguaje C.",
"main": "index.js",
"type": "module",
Expand Down
47 changes: 14 additions & 33 deletions scripts/release.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import { $ } from 'bun';
import { dirname } from 'path';
import { parseArgs } from 'util';
import { Templates, exportTemplate } from './utils';

const { values } = parseArgs({
args: Bun.argv,
options: {
tag: {
type: 'string',
default: 'SNAPSHOT'
},
src: {
type: 'string',
Expand All @@ -17,54 +16,36 @@ const { values } = parseArgs({
type: 'string',
default: 'dist'
},
templates: {
type: 'string',
default: 'project,static,shared'
},
},
allowPositionals: true,
});

const main = async ({ tag, src, dest, templates }) => {
console.log(`cleaning up ${dest}...\n\n`);

await $`rm -rfv ${dest}`;
await $`mkdir -p ${dest}`;
const main = async ({ tag, src, dest }) => {
await cleanupDir(dest);

console.log(`\n\nparsing templates from ${src}...`);

for (const template of templates.split(',')) {
console.log(`\n\nparsing ${template}...\n\n`);

await $`rsync -r --exclude-from=${src}/${template}/.gitignore ${src}/${template} ${dest}`;
await $`rsync -r ${src}/${template}/.vscode ${dest}/${template}`
for (const template of Object.values(Templates)) {
await exportTemplate(src, dest, template);

const makefile = await parseMakefile(`${src}/${template}/makefile`);
await $`echo ${makefile} | tee makefile`.cwd(`${dest}/${template}`);
if (!tag) {
continue;
}

console.log(`packing ${template} with tag ${tag}...\n\n`);

await $`tar -czvf ${template}-${tag}.tar.gz ${template}`.cwd(dest)
await $`md5sum ${template}-${tag}.tar.gz > ${template}-${tag}.tar.gz.md5`.cwd(dest);
await $`sha1sum ${template}-${tag}.tar.gz > ${template}-${tag}.tar.gz.sha1`.cwd(dest);
await compressAndGenerateChecksums(tag, `${dest}/${template}`);

console.log(`\n\ncleaning up ${template}...\n\n`);

await $`rm -rfv ${template}`.cwd(dest)
await $`rm -rfv ${template}`.cwd(dest);
}
};

const parseMakefile = async (file) => {
const lines = []
for await(const line of $`cat ${file}`.lines()) {
lines.push(await parseMakefileLine(file, line));
}
return lines.join('\n');
}

const parseMakefileLine = async (file, line) => {
const [_, include] = line.split('include ../');
return include ? $`cat ${dirname(file)}/../${include}`.text() : line;
const compressAndGenerateChecksums = async (tag, dir) => {
await $`tar -czvf ${dir}-${tag}.tar.gz ${dir}`
await $`md5sum ${dir}-${tag}.tar.gz > ${dir}-${tag}.tar.gz.md5`;
await $`sha1sum ${dir}-${tag}.tar.gz > ${dir}-${tag}.tar.gz.sha1`;
}

await main(values);
Loading

0 comments on commit 1e075ad

Please sign in to comment.