xruben136x / SZZ_unisannio

Implementation of SZZ Algorithm
Mozilla Public License 2.0
4 stars 0 forks source link

Add build.yaml file for build automation #7

Closed nik200122 closed 10 months ago

nik200122 commented 10 months ago

This issue is opened to integrate a yaml script to automate the build process, using chatGPT. Question: che tipo di struttura deve avere il progetto per far sì che l'automation della build tramite GitHub sia ottimale?

Answer: Per ottimizzare l'automazione della build tramite GitHub Actions, è consigliabile organizzare il tuo progetto in modo pulito e strutturato. Ecco una possibile struttura che potrebbe funzionare bene:

plaintext Copy code . ├── src/ # Contiene il codice sorgente principale │ ├── algorithm/ # Moduli specifici del tuo algoritmo │ │ ├── init.py │ │ ├── szz.py │ └── init.py ├── tests/ # Contiene i test unitari │ ├── init.py │ ├── test_szz.py ├── notebooks/ # Contiene i tuoi Jupyter Notebooks ├── .github/ # Configurazioni per GitHub Actions │ └── workflows/ │ └── build.yml ├── .gitignore # Specifica i file/directory da ignorare in Git ├── requirements.txt # Elenco delle dipendenze del progetto ├── README.md # Documentazione principale del progetto Alcuni suggerimenti:

.github/workflows/build.yml: Configura GitHub Actions in modo che esegua i tuoi test e altre verifiche necessarie ogni volta che qualcuno fa push o apre una pull request. Struttura del codice: Mantieni il tuo codice ben organizzato. Dividi il codice in moduli, utilizza buone pratiche di programmazione e documentazione. Tests: Assicurati di avere un solido set di test unitari nella directory tests. Puoi eseguire questi test durante la build per verificare che il codice funzioni come previsto. Documentazione: Includi documentazione chiara nel tuo codice, soprattutto nei notebook Jupyter. Una buona documentazione rende il progetto più comprensibile e utilizzabile. Requirements: Elenca tutte le dipendenze del tuo progetto nel file requirements.txt. In questo modo, GitHub Actions può installarle durante la build. Gitignore: Assicurati di avere un file .gitignore ben configurato per evitare di includere file indesiderati nel repository (ad esempio, file generati durante l'esecuzione dei notebook o file di configurazione specifici di PyCharm). Notebooks: Mantieni i tuoi notebook Jupyter nella directory notebooks. Se necessario, considera di convertirli in script Python .py durante la build per eseguire i test in modo più standard. README: Assicurati di avere un buon file README.md che fornisca informazioni dettagliate su come installare, eseguire e contribuire al tuo progetto. Adattando questa struttura alle esigenze specifiche del tuo progetto, sarai sulla buona strada per una build automatizzata e una gestione del codice efficace su GitHub.

Question: Mi fai un esempio completo di workflow per bulinare il progetto comprendendo anche la fase di conversione del notebook in un file .py? La struttura del progetto è quella che mi hai specificato. L'unico file con del codice presente nel progetto è il notebook stesso

Answer: Certamente! Ecco un esempio completo di un workflow per GitHub Actions che include la conversione del notebook Jupyter in un file .py. Assumiamo che il tuo notebook si trovi nella cartella notebooks e che il file requirements.txt elenchi le dipendenze del progetto.

yaml Copy code name: Build and Test

on: push: branches:

jobs: build: runs-on: ubuntu-latest

steps:
- name: Checkout repository
  uses: actions/checkout@v2

- name: Set up Python
  uses: actions/setup-python@v2
  with:
    python-version: 3.x

- name: Install dependencies
  run: |
    pip install -r requirements.txt

- name: Convert Jupyter Notebooks to Python
  run: |
    jupyter nbconvert --to script notebooks/*.ipynb

- name: Run tests
  run: |
    python -m unittest discover tests/

Add additional steps if needed for deployment, code coverage, etc.

Questo workflow fa quanto segue:

Controlla il repository: Prende il codice dal repository. Imposta Python: Configura un ambiente Python. Installa le dipendenze: Installa le dipendenze del progetto elencate in requirements.txt. Converte i notebook in file .py: Utilizza il comando jupyter nbconvert per convertire tutti i notebook nella cartella notebooks in file .py. Esegue i test: Esegue i test unitari presenti nella cartella tests. Aggiungi questo file .github/workflows/build.yml alla tua repository GitHub, e il workflow verrà eseguito ogni volta che viene effettuato un push sul branch main. Assicurati che il comando jupyter nbconvert funzioni correttamente nel tuo ambiente e che i test siano configurati come previsto.

Puoi aggiungere o personalizzare ulteriormente il tuo workflow in base alle esigenze specifiche del tuo progetto.

nik200122 commented 10 months ago

Question: per far sì che il file.py derivato dal Jupyter convertito venga inserito in un'altraccartella e non quella dove si trova il notebook cosa devo fare? Answer: Per fare in modo che il file .py derivato dalla conversione di un notebook Jupyter venga inserito in un'altra cartella anziché nella stessa cartella del notebook, puoi specificare un percorso di output personalizzato nell'istruzione jupyter nbconvert.

Ecco come modificare il passo di conversione del tuo workflow per inserire il file risultante in un'altra cartella (ad esempio, scripts):

yaml Copy code name: Build and Test

on: push: branches:

jobs: build: runs-on: ubuntu-latest

steps:
- name: Checkout repository
  uses: actions/checkout@v2

- name: Set up Python
  uses: actions/setup-python@v2
  with:
    python-version: 3.x

- name: Install Jupyter
  run: |
    python -m pip install jupyter

- name: Install dependencies
  run: |
    pip install -r requirements.txt

- name: Convert Jupyter Notebooks to Python
  run: |
    jupyter nbconvert --to script --output-dir=scripts notebooks/*.ipynb

- name: Run tests
  run: |
    python -m unittest discover tests/

Nell'istruzione jupyter nbconvert, ho aggiunto l'opzione --output-dir=scripts che indica di mettere i file di output nella cartella scripts. Puoi personalizzare scripts con il percorso desiderato.

Assicurati che la cartella di output esista e che l'utente che esegue il flusso di lavoro abbia i permessi necessari per scriverci.