Update README #6
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.9", "3.10", "3.11"] | |
env: | |
TEST_XIRCUITS: | | |
examples/DeclarativeExample.xircuits | |
examples/InlineExample.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 Flask .xircuits Workflow | |
run: | | |
export PYTHONPATH="${GITHUB_WORKSPACE}:${PYTHONPATH}" | |
LOG_FILE="${GITHUB_WORKSPACE}/workflow_logs.txt" | |
TEST_FILES=$(echo "$TEST_XIRCUITS" | tr '\n' ' ') | |
echo "Starting Flask .xircuits workflow test..." > $LOG_FILE | |
IFS=' ' read -r -a FILE_ARRAY <<< "$TEST_FILES" | |
if [ ${#FILE_ARRAY[@]} -eq 0 ]; then | |
echo "Error: No .xircuits files specified for testing." | tee -a $LOG_FILE | |
exit 1 | |
fi | |
for FILE in "${FILE_ARRAY[@]}"; do | |
FULL_PATH="${COMPONENT_LIBRARY_PATH}/${FILE}" | |
echo "Processing file: $FULL_PATH" | tee -a $LOG_FILE | |
if [ ! -f "$FULL_PATH" ]; then | |
echo "Error: Xircuits file not found at $FULL_PATH" | tee -a $LOG_FILE | |
exit 1 | |
fi | |
echo "Compiling Xircuits workflow: ${FULL_PATH}" >> $LOG_FILE | |
xircuits compile "$FULL_PATH" "${FULL_PATH%.*}.py" 2>&1 | tee -a $LOG_FILE | |
if [ ! -f "${FULL_PATH%.*}.py" ]; then | |
echo "Error: Compiled Python file not found at ${FULL_PATH%.*}.py" | tee -a $LOG_FILE | |
exit 1 | |
fi | |
echo "Running Python script: ${FULL_PATH%.*}.py" >> $LOG_FILE | |
python "${FULL_PATH%.*}.py" 2>&1 | tee -a $LOG_FILE & | |
PYTHON_PID=$! | |
echo "Waiting for Flask server to initialize..." >> $LOG_FILE | |
sleep 10 | |
TEST_ENDPOINT="http://127.0.0.1:8080/hello/world" | |
RETRIES=3 | |
SUCCESS=0 | |
for i in $(seq 1 $RETRIES); do | |
echo "Attempt $i: Checking endpoint $TEST_ENDPOINT..." | tee -a $LOG_FILE | |
if curl -s "$TEST_ENDPOINT" | grep -q "Hello World!"; then | |
echo "Flask test successful: Endpoint $TEST_ENDPOINT is running as expected." | tee -a $LOG_FILE | |
SUCCESS=1 | |
break | |
else | |
echo "Attempt $i failed. Retrying in 5 seconds..." | tee -a $LOG_FILE | |
sleep 5 | |
fi | |
done | |
if [ $SUCCESS -ne 1 ]; then | |
echo "Flask test failed: Endpoint $TEST_ENDPOINT did not respond as expected after $RETRIES attempts." | tee -a $LOG_FILE | |
if ps -p $PYTHON_PID > /dev/null; then | |
echo "Killing Python script process (PID: $PYTHON_PID)..." >> $LOG_FILE | |
kill -9 $PYTHON_PID | |
fi | |
exit 1 | |
fi | |
if ps -p $PYTHON_PID > /dev/null; then | |
echo "Python script ran successfully for the duration of the test. Killing the process..." | tee -a $LOG_FILE | |
kill -9 $PYTHON_PID | |
else | |
echo "Python script finished execution before the test completed." | tee -a $LOG_FILE | |
fi | |
echo "Completed testing file: $FULL_PATH" | tee -a $LOG_FILE | |
done | |
echo "All Flask and Python script tests completed successfully." >> $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 |