Skip to content

Enhance notebook testing and API key retrieval #111

Enhance notebook testing and API key retrieval

Enhance notebook testing and API key retrieval #111

Workflow file for this run

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