Gradio component library maintenance #4
This file contains 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: Run Xircuits Workflows Test | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: "*" | |
workflow_dispatch: | |
jobs: | |
build-and-run: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.10", "3.11"] | |
env: | |
TEST_XIRCUITS: | | |
examples/DataCollectionInterface.xircuits | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Create virtual environment | |
run: | | |
python -m venv venv | |
echo "${{ github.workspace }}/venv/bin" >> $GITHUB_PATH | |
- name: Install xircuits in virtual environment | |
run: pip install xircuits | |
- name: Set Environment Variables | |
run: | | |
LIBRARY_NAME=$(echo "${GITHUB_REPOSITORY##*/}" | sed 's/-/_/g') | |
echo "LIBRARY_NAME=$LIBRARY_NAME" >> $GITHUB_ENV | |
COMPONENT_LIBRARY_PATH="xai_components/${LIBRARY_NAME}" | |
echo "COMPONENT_LIBRARY_PATH=$COMPONENT_LIBRARY_PATH" >> $GITHUB_ENV | |
if [ "${{ github.event_name }}" == "pull_request" ]; then | |
echo "BRANCH_NAME=${{ github.head_ref }}" >> $GITHUB_ENV | |
else | |
echo "BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV | |
fi | |
- name: List Xircuits | |
run: xircuits list | |
- name: Clone Repository | |
run: | | |
rm -rf ${{ env.COMPONENT_LIBRARY_PATH }} | |
if [ "${{ github.event_name }}" == "pull_request" ]; then | |
REPO_URL="${{ github.event.pull_request.head.repo.clone_url }}" | |
else | |
REPO_URL="https://github.com/${{ github.repository }}" | |
fi | |
git clone -b ${{ env.BRANCH_NAME }} $REPO_URL ${{ env.COMPONENT_LIBRARY_PATH }} | |
- name: Install Component Library | |
run: | | |
if [ -f "${{ env.COMPONENT_LIBRARY_PATH }}/requirements.txt" ]; then | |
echo "requirements.txt found, installing dependencies..." | |
pip install -r ${{ env.COMPONENT_LIBRARY_PATH }}/requirements.txt | |
else | |
echo "requirements.txt not found." | |
fi | |
- name: Test .xircuits Workflows | |
run: | | |
LOG_FILE="${GITHUB_WORKSPACE}/workflow_logs.txt" | |
echo "Starting Gradio interface test..." > $LOG_FILE | |
# Compile the Xircuits workflow and log the output | |
FULL_PATH="${COMPONENT_LIBRARY_PATH}/${TEST_XIRCUITS}" | |
echo "Compiling Xircuits workflow: ${FULL_PATH}" >> $LOG_FILE | |
xircuits compile $FULL_PATH "${FULL_PATH%.*}.py" 2>&1 | tee -a $LOG_FILE | |
# Run the Python script in the background | |
export PYTHONPATH="${GITHUB_WORKSPACE}:${PYTHONPATH}" | |
echo "Running Python script: ${FULL_PATH%.*}.py" >> $LOG_FILE | |
python "${FULL_PATH%.*}.py" 2>&1 | tee -a $LOG_FILE & | |
PYTHON_PID=$! | |
# Wait for the Gradio server to start | |
echo "Waiting 20 seconds for the Gradio server to initialize..." >> $LOG_FILE | |
sleep 20 | |
# Try to connect to Gradio URL to confirm it's running | |
echo "Checking if Gradio server is accessible..." >> $LOG_FILE | |
if curl --fail http://127.0.0.1:7860; then | |
echo "Gradio server is accessible and running." | tee -a $LOG_FILE | |
else | |
echo "Gradio server did not start or is not accessible." | tee -a $LOG_FILE | |
echo "Killing Gradio process (PID: $PYTHON_PID)..." >> $LOG_FILE | |
kill -9 $PYTHON_PID | |
exit 1 | |
fi | |
# Simulate user interactions or wait a fixed amount of time | |
echo "Simulating user interaction with Gradio interface for 5 seconds..." >> $LOG_FILE | |
sleep 5 | |
# Check if the Python script is still running, and if so, kill it | |
if ps -p $PYTHON_PID > /dev/null; then | |
echo "Gradio interface ran successfully for the duration of the test. Killing the process..." | tee -a $LOG_FILE | |
kill -9 $PYTHON_PID | |
else | |
echo "Gradio interface finished execution before the test completed." | tee -a $LOG_FILE | |
fi | |
echo "Gradio interface test completed." >> $LOG_FILE | |
- name: Upload log file | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.LIBRARY_NAME }}-validation-workflow-${{ matrix.python-version }} | |
path: ${{ github.workspace }}/workflow_logs.txt |