Instal·la les dependències necessàries per executar MkDocs.
Compila el lloc web amb l'ordre mkdocs build.
Emmagatzema el directori amb la documentació generada (site/) com a artefacte per a la
següent tasca amb l'acció predefinida actions/upload-pages-artifact.
Publica el lloc web a GitHub Pages.
Sols s'executa si la tasca anterior s'ha executat correctament.
Publica l'artefacte generat en la tasca anterior l'acció predefinida actions/deploy-pages.
.github/workflows/deploy.yml
name:deploy# Nom de l'automatitzacióon:# Events que disparen l'automatitzaciópush:branches:-main# Quan es fa un push a la branca mainworkflow_dispatch:permissions:# Permisos que es concedeixen a l'automatitzaciócontents:readpages:writeid-token:writeconcurrency:group:github-pagescancel-in-progress:truejobs:# Llista de tasques a executarbuild:# Nom de la tascaruns-on:ubuntu-latest# Sistema operatiu on s'executarà la tascasteps:# Passos a executar-uses:actions/checkout@v4# Acció per clonar i còpiar el repositori a l'entorn d'execuciówith:fetch-depth:0-uses:actions/setup-python@v5# Acció per configurar Pythonwith:python-version:3.xcache:'pip'-name:Install dependencies# Acció per instal·lar les dependènciesrun:pip install -r requirements.txt-name:Build# Acció per compilar la documentaciórun:mkdocs build --clean-name:Upload static files as artifact# Acció per pujar els fitxers estàtics com a artefacteuses:actions/upload-pages-artifact@v3with:path:./site/# Ruta dels fitxers estàtics generats per MkDocsdeploy:# Nom de la tascaenvironment:name:github-pagesurl:${{ steps.deployment.outputs.page_url }}runs-on:ubuntu-latest# Sistema operatiu on s'executarà la tascaneeds:build# Aquesta tasca depèn de la tasca "build"steps:# Passos a executar-name:Deploy to GitHub Pages# Acció per desplegar a GitHub Pagesid:deploymentuses:actions/deploy-pages@v4
Exemple en el repositori d'aquesta documentació: curs-git
Aquest flux de treball comprova la correcció ortogràfica de la documentació
del repositori utilitzant el programa pyspelling.
S'executa quan es crea Pull Request o es marca com a que està llesta per a revisió
sobre la branca main.
El flux de treball es compon de dues tasques. S'ha configurat d'aquesta manera
perquè la tasca de correcció ortogràfica només s'executa quan s'han modificat fitxers de documentació,
evitant així executar-la innecessàriament quan es modifiquen altres fitxers.
changed-files: Comprova si cal realitzar la correcció ortogràfica.
Comprova si s'han modificat fitxers de documentació (*.md) respecte a la branca main.
Emmagatzema el resultat en la variable EXIST_CHANGED_FILES.
spellcheck: En cas afirmatiu, comprova la correcció ortogràfica dels fitxers modificats.
S'executa només si needs.changed-files.outputs.EXIST_CHANGED_FILES == 1.
Instal·la les dependències.
Es descarrega els diccionaris necessaris.
Executa la correcció ortogràfica amb pyspelling.
.github/workflows/spellcheck.yml
name:spellcheck# Nom de l'automatitzacióon:# Events que disparen l'automatitzaciópull_request:# Tipus d'events sobre la pull requesttypes:['opened','edited','reopened','synchronize','ready_for_review']branches:-'main'# Quan s'obri un pull request a la branca 'main'jobs:# Llista de tasques a executarchanged-files:# Nom de la tascaif:github.event.pull_request.draft == false# Condició per executar la tascaruns-on:ubuntu-latest# Sistema operatiu on s'executarà la tascaoutputs:EXIST_CHANGED_FILES:${{ steps.get-changed-files.outputs.EXIST_CHANGED_FILES }}steps:# Passos a executar-uses:actions/checkout@v4# Acció per clonar i còpiar el repositori a l'entorn d'execuciówith:fetch-depth:0-name:Get changed filesid:get-changed-filesrun:|CHANGED_FILES=$(git diff --name-only origin/main HEAD | grep 'docs/.*\.md$' || true)EXIST_CHANGED_FILES=0if [ -n "$CHANGED_FILES" ]; thenEXIST_CHANGED_FILES=1fiecho "EXIST_CHANGED_FILES=$EXIST_CHANGED_FILES" >> $GITHUB_OUTPUTspellcheck:# Nom de la tascaneeds:changed-files# Tasca que s'executarà abansif:github.event.pull_request.draft == false && needs.changed-files.outputs.EXIST_CHANGED_FILES == '1'# Condició per executar la tascaruns-on:ubuntu-latest# Sistema operatiu on s'executarà la tascaenv:# Variables d'entornDICPATH:.hunspell/CHANGED_FILES:${{ needs.changed-files.outputs.CHANGED_FILES }}steps:# Passos a executar-uses:actions/checkout@v4# Acció per clonar i còpiar el repositori a l'entorn d'execuciówith:fetch-depth:0-uses:actions/setup-python@v5# Acció per configurar Pythonwith:python-version:3.xcache:'pip'-name:Install dependencies# Acció per instal·lar les dependènciesrun:pip install -U -r requirements.txt-name:Install pyspelling# Acció per instal·lar el paquet pyspellingrun:pip install pyspelling-name:Install hunspell# Acció per instal·lar el corrector ortogràfic hunspellrun:|sudo apt updatesudo apt install hunspell -y-name:Build documents# Acció per compilar la documentaciórun:CI=false mkdocs build --clean-name:Download dictionary# Acció per descarregar el diccionari que s'utilitzarà en el corrector ortogràficrun:|mkdir -p .hunspellcurl -L https://raw.githubusercontent.com/Softcatala/catalan-dict-tools/refs/heads/master/resultats/hunspell/catalan-valencia.dic -o .hunspell/ca_ES_valencia.diccurl -L https://raw.githubusercontent.com/Softcatala/catalan-dict-tools/refs/heads/master/resultats/hunspell/catalan-valencia.aff -o .hunspell/ca_ES_valencia.affhunspell -D-name:Spell check# Acció per comprovar l'ortografia dels documentsrun:|CHANGED_FILES=$(git diff --name-only origin/main HEAD | grep 'docs/.*\.md$' | sed 's/\/index//' | sed 's/docs/site/' | sed 's/.md$/\/index.html/')echo "CHANGED_FILES=$CHANGED_FILES"for FILE in $(echo "$CHANGED_FILES"); doif [ -f $FILE ]; thenSOURCES="$SOURCES -S $FILE"fidoneecho "SOURCES=$SOURCES"if [ -z "$SOURCES" ]; thenecho "No files to check"exit 0fiSPELL_ARGS="$SPELL_ARGS --name mkdocs $SOURCES"pyspelling $SPELL_ARGS
Execució de proves unitàries i d'integració en un projecte Java amb Maven¶
En els commits posteriors a haver marcat la Pull Request com a llesta per a revisió, sí que s'han executat les proves.
Aquest flux de treball s'executa cada vegada que es publiquen canvis a la branca main
o quan es crea o actualitza una pull request cap a les branques main o dev.
Es basa en dues tasques:
unit-tests: Executa les proves unitàries del projecte.
Configura l'entorn amb JDK 21.
Executa les proves unitàries amb l'ordre mvn test.
integration-tests: Executa les proves d'integració del projecte.
Sols s'executa si la tasca unit-test s'ha executat correctament.
Configura l'entorn amb JDK 21.
Executa les proves d'integració amb l'ordre mvn verify, sense tornar a executar les proves unitàries.
.github/workflows/tests.yml
name:Testson:pull_request:branches:-dev-maintypes:[opened,synchronize,reopened,ready_for_review]jobs:unit-tests:name:Tests Unitarisruns-on:ubuntu-latest# Evitar executar en PR en draftif:github.event.pull_request.draft == falsesteps:-name:Checkout del codiuses:actions/checkout@v4-name:Configurar Java 21uses:actions/setup-java@v4with:java-version:'21'distribution:'temurin'cache:'maven'-name:Executar tests unitarisrun:mvn clean testintegration-tests:name:Tests d'Integracióruns-on:ubuntu-latestneeds:unit-testsif:github.event.pull_request.draft == falsesteps:-name:Checkout del codiuses:actions/checkout@v4-name:Configurar Java 21uses:actions/setup-java@v4with:java-version:'21'distribution:'temurin'cache:'maven'-name:Executar tests d'integraciórun:mvn clean verify -Dskip.unit.tests=true
pom.xml
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.2</version><relativePath/></parent><groupId>com.example</groupId><artifactId>task-management-api</artifactId><version>1.0.0</version><name>TaskManagementAPI</name><description>SpringBootRESTAPIforTaskManagement</description><properties><java.version>21</java.version><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><skip.unit.tests>false</skip.unit.tests></properties><dependencies><!-- Spring Boot Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- H2 Database --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- Spring Boot Validation --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><!-- Spring Boot DevTools (optional) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!-- Spring Boot Test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- Surefire Plugin for Unit Tests --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>${skip.unit.tests}</skip><argLine>-XX:+EnableDynamicAgentLoading</argLine><includes><include>**/*Test.java</include></includes><excludes><exclude>**/*IT.java</exclude></excludes></configuration></plugin><!-- Failsafe Plugin for Integration Tests --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-failsafe-plugin</artifactId><configuration><argLine>-XX:+EnableDynamicAgentLoading</argLine><includes><include>**/*IT.java</include></includes></configuration><executions><execution><goals><goal>integration-test</goal><goal>verify</goal></goals></execution></executions></plugin></plugins></build></project>
Aquest flux de treball compila i publica les distribucions d'un paquet de Python
a PyPI cada vegada que es publica una nova etiqueta (tag)
al repositori.
name:Publish Python 🐍 distributions 📦 to PyPIon:push:tags:-"*"jobs:build-n-publish:runs-on:ubuntu-latestname:Build and publish Python 🐍 distributions 📦 to PyPIenvironment:name:pypiurl:https://pypi.org/p/pygments-shell-consolepermissions:id-token:write# IMPORTANT: this permission is mandatory for trusted publishingsteps:-name:Set up Python 3.8uses:actions/checkout@master-name:Set up Python 3.8uses:actions/setup-python@v1with:python-version:3.8-name:Install pypa/buildrun:>-python -mpip installbuild--user-name:Build a binary wheel and a source tarballrun:>-python -mbuild--sdist--wheel--outdir dist/-name:Publish package distributions to PyPIuses:pypa/gh-action-pypi-publish@release/v1
Aquest flux de treball s'executa cada vegada que es publica una nova etiqueta al repositori amb el format v*.*.*.
També es pot executar manualment ja que està configurat amb el workflow_dispatch.
Consisteix en una única tasca que realitza els següents passos:
Còpia el repositori a l'entorn d'execució amb l'acció predefinida actions/checkout.