Enlace a la descripción de la práctica
Enlace al campus virtual
El concepto de Infraestructura como Servicio (IaaS, Infrastructure as a Service) es uno de los tres modelos fundamentales en el campo del cloud computing, junto con el de Plataforma como Servicio (PaaS, Platform as a Service) y el de Software como Servicio (SaaS, Software as a Service).
Enlace al gitbook desplegado en el IAAS de la ULL (Aitor)
Enlace al gitbook desplegado en el IAAS de la ULL (Néstor)
Enlace al gitbook desplegado en el IAAS de la ULL (Omar)
Heroku es una plataforma como servicio de computación en la Nube que soporta distintos lenguajes de programación.
Enlace al gitbook desplegdo en Heroku
Hemos hecho un port de los scripts realizados en Shell a JavaScript, con el fin de tener unos scripts más sencillos de comprender y universales.
Script que tiene como función principal recopilar los contribuyentes (commits) a través de un archivo JSON previamente creado mediante otro script (git-log.js)
let exec = require('child_process').exec
let mod = require('fs')
Hacemos uso de dos módulos, child process y fs, para conseguir recoger la ejecución del comando git log por shell, (inicializado en el script git-log.js), además de usar operaciones varías con ficheros.
child =exec ('node git-log.js',(error,stdout,stderr) => {
Se realiza la ejecución del script git-log.js, el cual realiza la ejecución del comando git log en shell, tomando todos los commit de los usuarios contribuyentes en el proyecto.
let content = mod.readFileSync("contributors.json");
Se accede al fichero *contributors.json, donde se aloja toda la información de los commit, para más tarde alojar esta información en el archivo MAINTAINERS (si no está creado, lo crea automáticamente) con un append
mod.appendFile("../MAINTAINERS","<Autor: "+jsonContent[i].author+">\n"+"Last Commit: "+jsonContent[i].date+" ("+jsonContent[i].message+")"+"\n"+" "+"\n",(err) => {
Script que tiene como función, como su nombre indica, desplegar un libro en gh-pages, formado por los archivos .html alojados en la carpeta txt
let path = require('path')
let ghpages = require('gh-pages')
En este script necesitamos utilizar dos módulos, path y gh-pages
ghpages.publish(path.join(__dirname,'../_book'),(err) => {
Este script lo único que realiza es hacer un publish del contenido del directorio _book, alojado en la rama de gh-pages
Script para desplegar la wiki de manera automatizada, las wikis proporcionan un lugar en el repositorio para establecer juntos el mapa de ruta del proyecto, mostrar el estado actual y documentar mejor el software.
require('shells/global');
Usamos el módulo shelljs que es una implementación portátil (Windows / Linux / OS X) de comandos de shell de Unix en la parte de NodeJS Como por ejemplo:
rm('-rf','.git');
Creamos una variable 'REPO' para acceder a la wiki del repositorio, a través del package.json. Desplegamos la wiki a través de git
Script que realiza un build en GitBook, es decir, crea el website estático para un libro en GitBook.
let exec = require('child_process').exec
let child
En este caso, solo hacemos uso del módulo child process para poder recoger el resultado de la ejecución del comando por shell gitbook build
child =exec ("../node_modules/.bin/gitbook build ../txt ../_book",(error,stdout,stderr)
Se realiza la ejecución del comando gitbook build de todos los archivos *.html de la carpeta _book
Script que crea (en el caso de que no esté creada) la wiki del repositorio, donde se mostrará de forma más detallada la documentación del software en cuestión.
var path = require('path');
var fs = require('fs-extra');
var async = require('async');
Se hace uso de los módulos path, fs-extra y async
fs.mkdir(output, function() {
// if it dir exists already, just override content
generateWiki(input, output, function(err) {
if(err) {
return console.error(err);
}
console.log('generated wiki');
Básicamente, lo que realiza es comprobar que la wiki no está creada, y si no, la crea.
function generateWiki(input, output, cb) {
Esta función crea los elementos que forman la wiki (Ej. README.md, SUMMARY.md)
Script que trabaja con el número de versión en el package.json, es decir, puede aceptar la modificación de la versión en el mismo o simplemente mostrar el número de versión actual.
let mod = require('fs')
const readline = require('readline');
let jsonfile = require('jsonfile')
Para este script, hacemos uso de los módulos fs, readline y jsonfile, los cuales nos permiten estar trabajando con diversos archivos (package.json)
case 'm':
rl.question('Introduzca la version ', (answer) => {
let content = mod.readFileSync("../package.json");
let jsonContent = JSON.parse(content);
console.log("Version actual: "+jsonContent.version)
console.log("La version introducida es: "+answer);
La primera opción permite al usuario poder modificar la versión en el package.json, así como posteriormente mostrarle la versión modificada.
case 'v':
const jsonContent = require('../package.json')
console.log("Version actual: " + jsonContent.version)
La segunda opción del script sería mostrar al usuario la versión actual incluida en el package.json
Script que realiza la ejecución del comando por shell git log, con el fin de recopilar y mostrar los commit de los contribuyentes del proyecto, para posteriormente pasar su resultado al script contributors.js
let exec = require('child_process').exec
Como concretamos anteriormente, se hace uso del módulo child process para permitir la ejecución de comandos por shell.
child =exec ('git log --pretty=format:\'{%n \"commit\": \"%H\",%n \"author\": \"%aN <%aE>\",%n \"date\": \"%ad\",%n \"message\": \"%f\"%n},\' $@ | perl -pe \'BEGIN{print \"[\"}; END{print \"]\n\"}\' | perl -pe \'s/},]/}]/\n\'' ,(error,stdout,stderr) => {
Se realiza un exec con la ejecución del comando git log, con el formato que se desea mostrar el resultado de la ejecución.