Examen del segundo parcial de Fundamentos de Desarrollo Web.
En este parcial vimos JavaScript y la manipulación de HTML y el DOM, por lo que es lo que tendremos que hacer.
Importante: Podemos utilizar el framework de CSS que realizamos en este parcial:
- FDW: Examen 2P - Lista de tareas
Inicio | Entrega |
---|---|
Lunes, 8 de noviembre del 2021 [6PM] | Miércoles, 9 / NOV / 2021 [11:59PM] |
Desarrollar una aplicación que sirva como lista de tareas que cumpla con los siguientes puntos:
- Tener un modal que despliegue el formulario para crear una tarea. Este debe ser válido y solicitar al usuario que al menos se guarde el título de la tarea.
- Las tareas se van guardando en LocalStorage. Para identificar cada una, crear un ID auxiliar con la fecha en la que se crea la tarea (investigarlo).
- En la pantalla se debe desplegar la lista de las tarea que están sin completar por default.
- Cuando se utilice el filtro de "ver todas" se deben visualizar todas las tareas existentes y resaltar de alguna forma aquellas que ya han sido completadas.
- La interfaz debe ser responsiva.
FDW - Instrucciones examen segundo parcial
NOTA: Es importante que no tengas una rama ya publicada con el mismo nombre en el repositorio remoto de GitHub,ya que no se podrá publicar la rama local que crearás.
Para esto, quise crear una rama vacía en donde solo se encuentre el código que se suba automáticamente con GitHub Actions, por lo que seguí lo que indicaba la siguiente respuesta de Stack Overflow:
git switch --orphan YourBranchHere
-
Tal como se encuentra en la documentación de Git:
"Switch to a specified branch. The working tree and the index are updated to match the branch. All new commits will be added to the tip of this branch".
--orphan <new-branch>
Create a new orphan branch, named . All tracked files are removed.
Realicé lo siguiente para crear la rama (comenzando desde main
):
git switch --orphan gh-pages # Creamos rama sin archivos, historial ni parent.
Como se creó una rama sin "parent", historial ni archivos, no se podrá hacer push de la misma, por lo que hay que tener al menos algo de contenido para subirla.
Creé un README con una línea de texto y la subí a GitHub. Después de eso ya pude establecerla como GitHub Page.
echo "# GitHub Pages branch" > README.md
git add -A
git commit -m "Creación branch vacía para GitHub Pages"
git push -u origin gh-pages
Después de lo anterior, ya podríamos regresar a la rama principal, que en mi
caso es main
.
git checkout main
Para publicar el sitio web, podemos hacerlo normalmente eligiendo una rama de nuestro repositorio, pero solo podemos publicar el sitio si tenemos el contenido en:
/(root)
/docs/
En mi caso, prefiero tener el código en una carpeta ./src/
, y de ahí es en
donde me gustaría publicar el sitio web. El problema es que, de base no se puede
publicar solo el contenido de un directorio, y hacerlo con las ramas manualmente
teniendo una estructura de archivos diferentes (que en la rama de la página solo
se tenga lo que está dentro de ./src/
en el root en lugar de toda la
estructura) es un lío y solo me rompo la cabeza.
Encontré una herramienta que me ayudaría a lidiar con esta situación: GitHub Actions, en la cual, se pueden configurar flujos o acciones a partir de ciertos activadores que nosotros podemos indicar dependiendo de la acción.
Para este caso encontré una llamada "GitHub Pages Action" y está muy bien documentada. Es verdad que nunca he utilizado GitHub Actions, por lo que me llego a confundir, pero es la herramienta que utilicé.
En mi caso quiero publicar la carpeta ./src
cuando haga un push
a main
a
la rama gh-pages
o cuando se haga un Pull Request
, dado a que trabajaré en
otra rama para que no se envíe al sitio todo lo que haga, ya que a veces no subo
código del todo funcional.
Hay diversos puntos a tomar en cuenta al utilizar GitHub Actions. A continuación indicaré algunos:
- Hay un límite de minutos gratis por mes dependiendo del tipo de cuenta
- Al exceder el límite gratuito, se comenzará a cobrar una cuota dependiendo de lo que se utilice. Esto puede ser limitado con un límite de gastos en tu cuenta o en GitHub Actions.
- Los "jobs" hospedados por GitHub pueden ser ejecutados en
Windows
,macOS
yLinux
, pero hay una gran problemática:Windows
ymacOS
tienen multiplicadores de minutos, mientras queLinux
no. Los multiplicadores son los siguientes:Windows
: x2macOS
: x10Linux
: x1
- En el parámetro
job: runs-on:
se especifica el tipo de la máquina en la cual se ejecutará el "job". Esta puede ser tanto "GitHub-hosted runner" o una "self-hosted runner" que ejecutemos nosotros.- La lista de los GitHub-hosted runners se encuentra en el siguiente enlace:
- Lista de GitHub-hosted runners / Virtual environments
En mi caso utilicé
Ubuntu 20.04
por lo mencionado anteriormente respecto a los multiplicadores en los otros SO. ElYAML workflow label
es:ubuntu-latest
oubuntu-20.04
.
- Lista de GitHub-hosted runners / Virtual environments
- La lista de los GitHub-hosted runners se encuentra en el siguiente enlace:
Según la
documentación de GitHub respecto a GitHub actions
los parámetros obligatorios en el archivo YAML
son los siguientes:
- on
- Evento de GitHub que activa el workflow.
- jobs.<job_id>.runs-on
- El tipo de máquina en el que se ejecutará el trabajo (job). Puede ser tanto GitHub-hosted runner como un self-hosted runner.
En la sección Getting started indica lo siguiente:
Add your workflow file
.github/workflows/gh-pages.yml
and push it to your remote default branch.
En el sitio de la action que se encuentra en el marketplace de GitHub (GitHub / peaceiris / actions-gh-page) se encuentran las instrucciones de instalación, las cuales son las siguientes:
- Copy and paste the following snippet into your
.yml
file.
- name: GitHub Pages action
uses: peaceiris/actions-gh-pages@v3.7.3
En mi caso solo quiero subir los cambios a gh-pages
una vez que pase el código
a main
, ya que sería el funcional. Esto podría ser a través de un push
directamente o mediante un pull request
en main
, por lo que tengo que
indicarlo para que no se suban los cambios de otras ramas también.
name: Deploy GitHub Pages desde main
on:
# Que el workflow se active en un push o pull request en la "main" branch.
push:
branches:
- main
pull_request:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
# Permite ejecutar el workflow manualmente desde la pestaña de "Actions" en
# GitHub.
workflow_dispatch:
jobs:
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_id
# jobs.<job_id> <- Puede ser cualquier nombre mientras sea único.
deploy:
name: Despliegue de la página en GitHub Pages
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobs
# Hay que especificar un "runner environment" en donde se ejecutará el
# "job".
# Este entra en los límites del "workflow usage", ya que hay límites de
# uso y costes por uso.
#
# https://docs.github.com/en/actions/learn-github-actions/usage-limits-billing-and-administration
runs-on: ubuntu-20.04
# Concurrencia para que si hubiese más de una tarea en el workflow, se
# ejecuten secuencialmente y solo se pueda ejecutar una tarea hasta que
# termine la anterior.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
# https://github.com/actions/checkout
# Indicamos que utilizamos esta versión de la action.
# Esta action permite hacer un check-out del repositorio para que el
# workflow pueda acceder al mismo.
- uses: actions/checkout@v2
# Nombre del workflow. Este se muestra en la página de actions del
# repositorio.
- name: Deploy GitHub Page
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsuses
# Indicar la versión que utilizamos de la versión. De lo contrario,
# esto podría romper los workflows o provocar comportamientos
# inesperados cuando el propietaro de la `action` haga una actualización.
uses: peaceiris/actions-gh-pages@v3.7.3
with:
# https://docs.github.com/en/actions/security-guides/automatic-token-authentication
# Token único generado automáticamente.
github_token: ${{ secrets.GITHUB_TOKEN }}
# Publicar contenido de ./src/
publish_dir: ./src
# Nombre de la rama en donde publicaremos la GitHub Page.
publish_branch: gh-pages # default: gh-pages
Después de realizar los pasos anteriores pude verificar si funcionó lo que hice
o no. Y, realmente funcionó. De hecho incluso se eliminó el README.md
que
había creado para publicar la rama y solo se publicó el código, por lo que fue
muchísimo mejor de lo que esperaba.
Por ahora solo ha sido activada la acción con push
en main
y funcionó, por
lo que, me imagino que será igual con un Pull Request exitoso. Esto lo
necesitaré porque trabajaré en otra rama con la cual solo subiré los cambios
importantes.
Imagen | Descripción |
---|---|
Runs from all workflows | |
Runs for only gh-pages.yaml workflow |
|
Workflow file in GitHub | |
Workflow jobs and their statuses | |
1 workflow summary |
- Workflow syntax for GitHub Actions
- GitHub Actions — Run on Pull Request
- Automatic token authentication
- Usage limits, billing, and administration
- Administrar tu límite de gastos para GitHub Actions
- Acerca de la facturación para GitHub Actions
- Lista de GitHub-hosted runners / Virtual environments
- GitHub / actions / checkout
- GitHub Pages action
- GitHub / peaceiris / actions-gh-page