
Per configurare una pipeline di integrazione continua (CI/CD) con GitHub Actions, occorre definire un file di workflow .yml che prepari l'ambiente Ubuntu, installi GNU Octave ed esegua la suite di test ad ogni push o pull_request.
1. Strutturare i Test Unitari in Octave
Octave supporta i test unitari integrati all'interno dei file .m tramite i blocchi %!test.
Crea ad esempio un file di funzione chiamato somma.m:
Snippet di codice
function s = somma(a, b)
s = a + b;
endfunction
%!test
%! assert(somma(2, 3), 5);
%! assert(somma(-1, 1), 0);
La funzione nativa runtests() cercherà automaticamente tutti i file .m nella directory corrente ed eseguirà i relativi blocchi di test.
2. Creare il Workflow di GitHub Actions
Crea nella radice del repository la struttura di cartelle .github/workflows/ e aggiungi un file denominato octave-ci.yml:
YAML
name: Octave CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout del codice
uses: actions/checkout@v4
- name: Aggiornamento ed installazione di GNU Octave
run: |
sudo apt-get update
sudo apt-get install -y octave liboctave-dev
- name: Ripristino Cache Pacchetti Octave (Opzionale)
uses: actions/cache@v4
with:
path: ~/.octave_packages
key: ${{ runner.os }}-octave-${{ hashFiles('**/pkg_list.m') }}
- name: Installazione Dipendenze (Se presenti)
run: |
# Esempio: installazione del pacchetto 'control' se necessario
# octave --no-gui --eval "pkg install -forge control"
octave --no-gui --eval "pkg list"
- name: Esecuzione Test
run: |
octave --no-gui --eval " \
results = runtests(); \
if (!results) \
disp('ERRORE: Uno o piu test sono falliti.'); \
exit(1); \
else \
disp('TUTTI I TEST SUPERATI'); \
exit(0); \
endif"
3. Gestione dei Risultati e Correzioni
-
Fai il commit e push del file
.github/workflows/octave-ci.ymlsu GitHub. -
Vai nella scheda Actions del tuo repository su GitHub per visualizzare l'esecuzione della pipeline in tempo reale.
-
Se un'asserzione
assertfallisce, la funzioneruntests()restituirà un valore falso, causando l'uscita con codice1(exit(1)). Questo segnerà il job di GitHub Actions come fallito e bloccherà eventuale codice difettoso.
Buone Pratiche per CI/CD con Octave
-
Separazione dei file di test: Se non vuoi includere i test nello stesso file della funzione, crea una cartella
tests/contenente file dedicati cometest_somma.med eseguiruntests('tests'). -
Standardizzazione dei log: Utilizza il flag
--no-guie--quietper ridurre l'output verboso nei log di GitHub Actions.

Nessun commento:
Posta un commento