-->

Come configurare una pipeline di test automatici (CI/CD) per script Octave con GitHub Action su Ubuntu

GNU Octave 11 Open-Source Scientific Programming Language Officially  Released - 9to5Linux

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

  1. Fai il commit e push del file .github/workflows/octave-ci.yml su GitHub.

  2. Vai nella scheda Actions del tuo repository su GitHub per visualizzare l'esecuzione della pipeline in tempo reale.

  3. Se un'asserzione assert fallisce, la funzione runtests() restituirà un valore falso, causando l'uscita con codice 1 (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 come test_somma.m ed esegui runtests('tests').

  • Standardizzazione dei log: Utilizza il flag --no-gui e --quiet per ridurre l'output verboso nei log di GitHub Actions.

Nessun commento:

Posta un commento

Random Posts

I miei preferiti in Instagram

Archivio