Enhance notebook testing and API key retrieval #115
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test Notebooks | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| jobs: | |
| discover: | |
| name: Discover notebooks | |
| runs-on: ubuntu-22.04 | |
| outputs: | |
| notebooks: ${{ steps.find-notebooks.outputs.notebooks }} | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v4 | |
| - name: Find all notebooks | |
| id: find-notebooks | |
| run: | | |
| echo "==================================================" | |
| echo "Discovering notebooks" | |
| echo "==================================================" | |
| notebooks=$(find . -name "*.ipynb" -type f | jq -R -s -c 'split("\n")[:-1]') | |
| echo "Found notebooks:" | |
| echo "$notebooks" | jq -r '.[]' | |
| echo "notebooks=$notebooks" >> $GITHUB_OUTPUT | |
| test: | |
| name: Test ${{ matrix.notebook }} | |
| needs: discover | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| notebook: ${{ fromJson(needs.discover.outputs.notebooks) }} | |
| steps: | |
| - name: Check out code | |
| uses: actions/checkout@v4 | |
| - name: Set up Conda | |
| uses: conda-incubator/setup-miniconda@v2 | |
| with: | |
| activate-environment: myenv | |
| environment-file: environment.yml | |
| python-version: "3.11" | |
| auto-activate-base: false | |
| - name: Prepare Conda environment | |
| shell: bash -l {0} | |
| run: | | |
| echo "==================================================" | |
| echo "Preparing Conda environment for ${{ matrix.notebook }}" | |
| echo "==================================================" | |
| if conda env list | grep -q 'myenv'; then | |
| echo "✓ Environment 'myenv' already exists, updating environment" | |
| conda env update --name myenv --file environment.yml --prune | |
| else | |
| echo "✓ Creating new environment 'myenv'" | |
| conda env create -f environment.yml | |
| fi | |
| echo "✓ Conda environment ready" | |
| - name: Verify environment | |
| shell: bash -l {0} | |
| run: | | |
| echo "==================================================" | |
| echo "Verifying environment setup" | |
| echo "==================================================" | |
| conda activate myenv | |
| echo "✓ Python version:" | |
| python --version | |
| echo "" | |
| echo "✓ Installed packages:" | |
| conda list | grep -E "(jupyter|qiskit|cirq|pennylane|qbraid|requests)" || echo " (packages not shown)" | |
| echo "" | |
| echo "✓ IONQ_API_KEY status:" | |
| if [ -n "$IONQ_API_KEY" ]; then | |
| echo " API key is set (length: ${#IONQ_API_KEY} characters)" | |
| else | |
| echo " WARNING: API key is not set!" | |
| fi | |
| env: | |
| IONQ_API_KEY: ${{ secrets.IONQ_API_KEY }} | |
| - name: Execute notebook | |
| shell: bash -l {0} | |
| run: | | |
| echo "==================================================" | |
| echo "Executing: ${{ matrix.notebook }}" | |
| echo "Timeout: 600s" | |
| echo "==================================================" | |
| conda activate myenv | |
| start_time=$(date +%s) | |
| echo "Starting execution at $(date '+%Y-%m-%d %H:%M:%S')" | |
| python -m jupyter nbconvert \ | |
| --to html \ | |
| --execute \ | |
| --ExecutePreprocessor.timeout=600 \ | |
| "${{ matrix.notebook }}" | |
| exit_code=$? | |
| end_time=$(date +%s) | |
| elapsed=$((end_time - start_time)) | |
| if [ $exit_code -eq 0 ]; then | |
| echo "✓ PASSED in ${elapsed}s" | |
| echo "Completed at $(date '+%Y-%m-%d %H:%M:%S')" | |
| else | |
| echo "✗ FAILED after ${elapsed}s" | |
| exit $exit_code | |
| fi | |
| env: | |
| IONQ_API_KEY: ${{ secrets.IONQ_API_KEY }} | |
| - name: Upload execution artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: notebook-output-${{ hashFiles(matrix.notebook) }} | |
| path: | | |
| **/*.html | |
| retention-days: 7 | |
| summary: | |
| name: Test Summary | |
| needs: test | |
| runs-on: ubuntu-22.04 | |
| if: always() | |
| steps: | |
| - name: Summary | |
| run: | | |
| echo "==================================================" | |
| echo "Test Execution Complete" | |
| echo "==================================================" | |
| if [ "${{ needs.test.result }}" == "success" ]; then | |
| echo "✓ All notebook tests passed successfully!" | |
| else | |
| echo "✗ Some tests failed. Check individual job logs for details." | |
| exit 1 | |
| fi |