--- a +++ b/.github/workflows/tests_talk2knowledgegraphs.yml @@ -0,0 +1,397 @@ +# This is a basic workflow to help you get started with GitHub Actions +name: TESTS Talk2KnowledgeGraphs + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events + pull_request: + branches: [ main ] + paths: + - 'aiagents4pharma/talk2knowledgegraphs/**' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + +# This workflow contains jobs covering linting and code coverage (along with testing). +jobs: + # pylint job for macos + pylint-macos: + # The type of runner that the job will run on + name: pylint + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [macos-13] + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.12 + + - name: Cache files + uses: actions/cache@v4 + id: cache + with: + path: | + ${{ github.workspace }}/venv/* + key: ${{ runner.os }}-venv + + # install requirements + - name: Install the requirements + if: steps.cache.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }} + run: | + python3 -m venv venv + source venv/bin/activate + pip install --upgrade pip + pip3 install --break-system-packages -r requirements.txt + + # pylint + - name: Run pylint + working-directory: ${{ github.workspace }} + run: | + source venv/bin/activate + pylint --disable=R0801,R0902,W0221,W0122 aiagents4pharma/talk2knowledgegraphs + + # pylint job for ubuntu + pylint-ubuntu: + # The type of runner that the job will run on + name: pylint + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest] + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.12 + + - name: Cache files + uses: actions/cache@v4 + id: cache + with: + path: | + ${{ github.workspace }}/venv/* + key: ${{ runner.os }}-venv + + # install requirements + - name: Install the requirements + if: steps.cache.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }} + run: | + python3 -m venv venv + source venv/bin/activate + pip install --upgrade pip + pip3 install --break-system-packages -r requirements.txt + + # pylint + - name: Run pylint + working-directory: ${{ github.workspace }} + run: | + source venv/bin/activate + pylint --disable=R0801,R0902,W0221,W0122 aiagents4pharma/talk2knowledgegraphs + + # pylint job for windows + pylint-windows: + # The type of runner that the job will run on + name: pylint + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [windows-latest] + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.12 + + - name: Cache files + uses: actions/cache@v4 + id: cache + with: + path: | + ${{ github.workspace }}\venv\* + key: ${{ runner.os }}-venv + + # install requirements + - name: Install the requirements + if: steps.cache.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }} + run: | + python3 -m venv venv + venv\Scripts\activate + pip install --upgrade pip + pip3 install --break-system-packages -r requirements.txt + + # pylint + - name: Run pylint + working-directory: ${{ github.workspace }} + run: | + venv\Scripts\activate + pylint --disable=R0801,R0902,W0221,W0122 aiagents4pharma/talk2knowledgegraphs + + # code coverage job for macos + code-cov-macos: + name: code-coverage + needs: pylint-macos + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [macos-13] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.12 + + - name: Cache venv + uses: actions/cache@v4 + id: cache_venv + with: + path: | + ${{ github.workspace }}/venv/* + key: ${{ runner.os }}-venv + + - name: Cache Ollama models + uses: actions/cache@v4 + id: cache_ollama + with: + path: | + /Users/runner/.ollama/models/* + key: ${{ runner.os }}-ollama + + - name: Install and Pull Ollama models + if: steps.cache_ollama.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }} + run: | + source venv/bin/activate + brew install ollama + ollama serve & + sleep 10 + ollama pull llama3.2:1b + ollama list + + - name: Reading cached Ollama models + working-directory: ${{ github.workspace }} + run: | + echo "Cache Hit Status - ${{ steps.cache_ollama.outputs.cache-hit }}" + source venv/bin/activate + brew install ollama + ollama serve & + sleep 10 + ollama list + + - name: Run tests with coverage + working-directory: ${{ github.workspace }} + run: | + source venv/bin/activate + coverage run --include=aiagents4pharma/talk2knowledgegraphs/* -m pytest --cache-clear aiagents4pharma/talk2knowledgegraphs/tests/ + + - name: Check coverage + working-directory: ${{ github.workspace }} + run: | + source venv/bin/activate + coverage report -m + TOTAL_COVERAGE=$(coverage report -m | awk 'END {print int($NF)}') + if [[ $TOTAL_COVERAGE -ne 100 ]]; then + echo "Code coverage is not 100%. Please check the coverage report." + exit 1 + fi + env: + COVERAGE_FILE: './.coverage' + + # code coverage job for ubuntu + code-cov-ubuntu: + name: code-coverage + needs: pylint-ubuntu + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.12 + + - name: Cache venv + uses: actions/cache@v4 + id: cache_venv + with: + path: | + ${{ github.workspace }}/venv/* + key: ${{ runner.os }}-venv + + - name: Cache Ollama models + uses: actions/cache@v4 + id: cache_ollama + with: + path: | + /usr/share/ollama/.ollama/models/* + test + key: ${{ runner.os }}-ollama + + - name: Install and Pull Ollama models + if: steps.cache_ollama.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }} + run: | + mkdir test + echo "Hello, World!" > test/hello.txt + source venv/bin/activate + curl -fsSL https://ollama.com/install.sh | sh + ollama serve & + sleep 10 + ollama pull llama3.2:1b + ls -l ~/.ollama/ + ls -l /usr/share/ollama/.ollama/ + + - name: Reading cached Ollama models + working-directory: ${{ github.workspace }} + run: | + cat test/hello.txt + echo "Cache Hit Status - ${{ steps.cache_ollama.outputs.cache-hit }}" + source venv/bin/activate + curl -fsSL https://ollama.com/install.sh | sh + ollama serve & + sleep 10 + mkdir -p ~/.ollama/models/ + cp -r /usr/share/ollama/.ollama/models/* ~/.ollama/models/ + ollama list + du -sh ~/.ollama/ + du -sh /usr/share/ollama/.ollama/ + + - name: Run tests with coverage + working-directory: ${{ github.workspace }} + run: | + source venv/bin/activate + coverage run --include=aiagents4pharma/talk2knowledgegraphs/* -m pytest --cache-clear aiagents4pharma/talk2knowledgegraphs/tests/ + + - name: Check coverage + working-directory: ${{ github.workspace }} + run: | + source venv/bin/activate + coverage report -m + TOTAL_COVERAGE=$(coverage report -m | awk 'END {print int($NF)}') + if [[ $TOTAL_COVERAGE -ne 100 ]]; then + echo "Code coverage is not 100%. Please check the coverage report." + exit 1 + fi + env: + COVERAGE_FILE: './.coverage' + + # code coverage job for windows + code-cov-windows: + name: code-coverage + needs: pylint-windows + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [windows-latest] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.12 + + - name: Cache venv + uses: actions/cache@v4 + id: cache_venv + with: + path: | + ${{ github.workspace }}\venv\* + key: ${{ runner.os }}-venv + + - name: Cache Ollama models + uses: actions/cache@v4 + id: cache_ollama + with: + path: | + C:\Users\runneradmin\.ollama\models + key: ${{ runner.os }}-ollama + + - name: Install and Pull Ollama models + if: steps.cache_ollama.outputs.cache-hit != 'true' + working-directory: ${{ github.workspace }} + run: | + venv\Scripts\activate + curl -L https://ollama.com/download/ollama-windows-amd64.zip -o ollama-windows-amd64.zip + tar -xzf .\ollama-windows-amd64.zip + start ollama serve + sleep 10 + cmd /k ollama pull llama3.2:1b + cmd /k ollama list + + - name: Reading cached Ollama models + working-directory: ${{ github.workspace }} + run: | + echo "Cache Hit Status - ${{ steps.cache_ollama.outputs.cache-hit }}" + venv\Scripts\activate + curl -L https://ollama.com/download/ollama-windows-amd64.zip -o ollama-windows-amd64.zip + tar -xzf .\ollama-windows-amd64.zip + start ollama serve + sleep 10 + cmd /k ollama list + + - name: Run tests with coverage + working-directory: ${{ github.workspace }} + run: | + venv\Scripts\activate + coverage run --include=aiagents4pharma/talk2knowledgegraphs/* -m pytest --cache-clear aiagents4pharma/talk2knowledgegraphs/tests/ + + - name: Check coverage + working-directory: ${{ github.workspace }} + run: | + venv\Scripts\activate + coverage report -m + # $TOTAL_COVERAGE=(& coverage report -m | Select-Object -Last 1) -replace "[^\d]" # Extract the last line and remove non-numeric characters + $TOTAL_COVERAGE=(& coverage report -m | Select-Object -Last 1) + # split and extract the last element + $TOTAL_COVERAGE=($TOTAL_COVERAGE -split " ")[-1] + # remove non-numeric characters + $TOTAL_COVERAGE=($TOTAL_COVERAGE -replace "[^\d]") + # convert to int + $TOTAL_COVERAGE=[int]$TOTAL_COVERAGE + echo "Total coverage: $TOTAL_COVERAGE" + if ($TOTAL_COVERAGE -ne 100) { + Write-Host "Code coverage is not 100%. Please check the coverage report." + exit 1 + } + env: + COVERAGE_FILE: './.coverage'