Skip to content

Commit

Permalink
updating readme [skip ci]
Browse files Browse the repository at this point in the history
  • Loading branch information
miquelduranfrigola authored and ersilia-bot committed Nov 10, 2024
0 parents commit c2d6a96
Show file tree
Hide file tree
Showing 26 changed files with 101,978 additions and 0 deletions.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
model/framework/fit
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.joblib filter=lfs diff=lfs merge=lfs -text
49 changes: 49 additions & 0 deletions .github/scripts/resolve_dockerfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import sys
import os
import requests

from ersilia_pack.parsers import DockerfileInstallParser, YAMLInstallParser

REPO_PATH = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.."))
PY_VERSION_MAP = {
'3.8': 'py38',
'3.9': 'py39',
'3.10': 'py310',
'3.11': 'py311',
'3.12': 'py312'
}
model_id = sys.argv[1]
def resolve_parser():
if os.path.exists(os.path.abspath(os.path.join(REPO_PATH, "Dockerfile"))):
return DockerfileInstallParser(file_dir=REPO_PATH)
elif os.path.exists(os.path.join(REPO_PATH, "install.yml")):
return YAMLInstallParser(file_dir=REPO_PATH)
else:
raise ValueError("No install file found")

def resolve_python_version(parser):
return parser._get_python_version()

def read_dockerfile(parser):
commands = parser._get_commands()
has_conda = parser._has_conda(commands)
if has_conda:
file_url = "https://raw.githubusercontent.com/ersilia-os/ersilia/master/dockerfiles/dockerize-ersiliapack/model/Dockerfile.conda"
else:
file_url = "https://raw.githubusercontent.com/ersilia-os/ersilia/master/dockerfiles/dockerize-ersiliapack/model/Dockerfile.pip"
response = requests.get(file_url)
return response.text

def write_version_and_model_id(file_content, python_version):
python_version = PY_VERSION_MAP[python_version]
file_content = file_content.replace("eos_identifier", model_id)
lines = file_content.split("\n")
lines[0] = lines[0].replace("VERSION", python_version)
with open(os.path.join(REPO_PATH, "../", "Dockerfile"), "w") as f:
f.write("\n".join(lines))

if __name__ == "__main__":
parser = resolve_parser()
python_version = resolve_python_version(parser)
dockerfile = read_dockerfile(parser)
write_version_and_model_id(dockerfile, python_version)
27 changes: 27 additions & 0 deletions .github/scripts/verify_model_outcome.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import csv

def check_non_null_outcomes_in_output_csv(csv_file_path):
with open(csv_file_path, 'r') as csv_file:
csv_reader = csv.reader(csv_file)
header = next(csv_reader)
row = next(csv_reader)
for val in row[2:]: # Skip the first two columns (Inchikey and input)
if val not in ['', None]:
return False
return True

if __name__ == '__main__':
# Read file path from command line
import sys
if len(sys.argv) < 2:
print('Usage: python verify_model_output.py <output_csv_file>')
exit(1)

output_csv_file = sys.argv[1]

if check_non_null_outcomes_in_output_csv(output_csv_file):
# If there are null outcomes, exit with status code 1
print('All outcomes are null')
else:
print('Some outcomes are not null')

18 changes: 18 additions & 0 deletions .github/workflows/json-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: json syntax check

on:
push:
paths:
- "**.json"
pull_request:

jobs:
json-test:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # [email protected]

- name: json syntax check
id: json-yaml-validate
uses: GrantBirki/json-yaml-validate@87b2d309a02f4942c5e602183eeea11008a640f9 # [email protected]
179 changes: 179 additions & 0 deletions .github/workflows/post-model-upload.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
name: Post Model Upload actions

on:
workflow_run:
workflows: ["Upload model to DockerHub"]
types:
- completed

jobs:
post-model-upload:
if: ${{ github.repository != 'ersilia-os/eos-template' }}
runs-on: ubuntu-latest
steps:

- name: Checkout repository
uses: actions/checkout@v4

- name: Download arch.txt
uses: actions/download-artifact@v4
with:
name: arch
path: .
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ secrets.GITHUB_TOKEN }}

- name: Check metadata file
id: checkMetadata
continue-on-error: true
run: |
if [[ ! -f metadata.yml ]]; then
echo "metadata.yml file not found"
exit 1
fi
- name: Update Metadata YAML file with DockerHub info
id: updateMetadataYAML
if: steps.checkMetadata.outcome == 'success'
run: |
python3 -c "
import yaml
with open('metadata.yml', 'r') as f:
data = yaml.safe_load(f)
print(data)
with open('arch.txt', 'r') as f:
arch = f.read().rstrip()
arch = arch.split(',')
data['DockerHub'] = 'https://hub.docker.com/r/ersiliaos/{0}'.format(data['Identifier'])
data['Docker Architecture'] = arch
with open('metadata.yml', 'w') as f:
yaml.dump(data, f, default_flow_style=False, sort_keys=False)
"
rm arch.txt
- name: Update Metadata JSON file with DockerHub info
id: updateMetadataJSON
if: steps.checkMetadata.outcome == 'failure'
run: |
python3 -c "
import json
with open('metadata.json', 'r') as f:
data = json.load(f)
print(data)
with open('arch.txt', 'r') as f:
arch = f.read().rstrip()
arch = arch.split(',')
data['DockerHub'] = 'https://hub.docker.com/r/ersiliaos/{0}'.format(data['Identifier'])
data['Docker Architecture'] = arch
with open('metadata.json', 'w') as f:
json.dump(data, f, indent=4)
"
rm arch.txt

- name: Commit and push changes done to the Metadata file
uses: actions-js/push@156f2b10c3aa000c44dbe75ea7018f32ae999772 # [email protected]
with:
author_name: "ersilia-bot"
author_email: "[email protected]"
message: "updating metadata [skip ci]"
repository: "ersilia-os/${{ github.event.repository.name }}"
github_token: ${{ secrets.GITHUB_TOKEN }}
amend: true
force: true

# Setup conda
- name: Setup conda
id: setupConda
uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
python-version: "3.10.10"

# Install ersilia
- name: Install dependencies in Conda environment
id: installDependenciesInConda
run: |
conda install gh -c conda-forge
python -m pip install git+https://github.com/ersilia-os/ersilia.git
- name: Update metadata to AirTable
id: update-metadata-to-airtable
env:
USER_NAME: ${{ github.repository_owner }}
BRANCH: "main"
REPO_NAME: ${{ github.event.repository.name }}
AIRTABLE_API_KEY: ${{ secrets.AIRTABLE_API_KEY }}
run: |
echo "Updating metadata to AirTable looking at owner: $USER_NAME"
wget https://raw.githubusercontent.com/ersilia-os/ersilia/master/.github/scripts/update_metadata_to_airtable.py
python3 update_metadata_to_airtable.py $USER_NAME $REPO_NAME $BRANCH $AIRTABLE_API_KEY
rm update_metadata_to_airtable.py
- name: Update README file
id: update-readme-file
env:
MODEL_ID: ${{ github.event.repository.name }}
run: |
echo "Updating README file with AirTable metadata for model: $MODEL_ID"
wget https://raw.githubusercontent.com/ersilia-os/ersilia/master/.github/scripts/update_readme_from_airtable.py
python3 update_readme_from_airtable.py $MODEL_ID .
rm update_readme_from_airtable.py
less README.md
- name: Commit and push changes done to the README file
uses: actions-js/push@156f2b10c3aa000c44dbe75ea7018f32ae999772 # [email protected]
with:
author_name: "ersilia-bot"
author_email: "[email protected]"
message: "updating readme [skip ci]"
repository: "ersilia-os/${{ github.event.repository.name }}"
github_token: ${{ secrets.GITHUB_TOKEN }}
amend: true
force: true

- name: Docker Hub Description
uses: peter-evans/dockerhub-description@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
repository: ersiliaos/${{ github.event.repository.name }}
short-description: "Ersilia Model Hub Identifier: ${{ github.event.repository.name }}"

# Create an issue within the repository to track that this model is ready for testing

- name: Shuffle assignees
id: shuffle
run: |
export assignees=$(echo "${{ vars.assignees }}" | awk 'BEGIN {FS=","}; {srand();split($0,a,FS); print a[int(rand()*NF+1)]}')
echo "$assignees" >> $GITHUB_STEP_SUMMARY
echo "shuffled_assignee=$assignees" >> $GITHUB_OUTPUT
echo "shuffled_assignee=$assignees" >> $GITHUB_ENV
- name: Check for existing issue
id: check_existing_test_issue
run: |
gh auth login --with-token <<< ${{ secrets.GITHUB_TOKEN }}
issue_number=$(gh issue list --limit 100 --search "${{ vars.test_issue_title }}" --json number --jq '.[0].number')
echo "::set-output name=issue_number::$issue_number"
- name: Create a Test issue
uses: actions-ecosystem/action-create-issue@b63bc2bbacb6a838dfe4a9f70da6665ae0962a49
id: create_test_issue
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
title: ${{ vars.TEST_ISSUE_TITLE }}
assignees: |
${{ steps.shuffle.outputs.shuffled_assignee }}
body: |
This model is a new incorporation to the Ersilia Model Hub or it has been modified. If you are assigned to this issue, please try it out and ensure everything works!
To test a model, first clone it in your local system (ideally, from dockerhub) using the CLI commands:
```
ersilia -v fetch eosxxxx --from_dockerhub
ersilia serve eosxxxx
ersilia test
```
The test command will automatically check that the model can handle null outputs and whether it produces consistent results. Please copy here the result of the test command. If it passes, simply close the issue as completed. If it fails, please detail at which step and whether you have taken any steps to solve it. Please tag the original model contributor and one of Ersilia's maintainers for support.
labels: |
test
if: steps.check_existing_test_issue.outputs.issue_number == ''
17 changes: 17 additions & 0 deletions .github/workflows/post2slack.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Send Slack message
on:
issues:
types: [opened]

jobs:
slack:
runs-on: ubuntu-latest
steps:
- name: post slack
uses: slackapi/[email protected]
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_TOKEN }}
with:
slack-message: |
"new issue: https://github.com/${{ github.repository }}/issues/${{ github.event.issue.number }} created."
channel-id: ${{ secrets.SLACK_CHANNEL_TESTER }}
94 changes: 94 additions & 0 deletions .github/workflows/test-model-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Model Test on PR

on:
pull_request:

jobs:
test:
if: github.repository != 'ersilia-os/eos-template'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # [email protected]
with:
lfs: true

# This might stop working in the future, so we need to keep an eye on it
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true

# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
swap-storage: true

- name: Add conda to system path
run: echo $CONDA/bin >> $GITHUB_PATH

- name: Source conda
run: source $CONDA/etc/profile.d/conda.sh

- name: Set Python to 3.10.10
run:
conda install -y python=3.10.10

- name: Install dependencies
run: |
source activate
conda init
conda install git-lfs -c conda-forge
git-lfs install
conda install gh -c conda-forge
- name: Install ersilia
run: |
source activate
python --version
echo "After conda init"
conda init
python -m pip install git+https://github.com/ersilia-os/ersilia.git
- name: Check metadata before updating to AirTable
id: check-metadata
env:
USER_NAME: ${{ github.event.pull_request.head.repo.owner.login }}
BRANCH: "main"
REPO_NAME: ${{ github.event.repository.name }}
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 3
command: |
source activate
wget https://raw.githubusercontent.com/ersilia-os/ersilia/master/.github/scripts/update_metadata_to_airtable.py
python3 update_metadata_to_airtable.py $USER_NAME $REPO_NAME $BRANCH
- name: Predict output
env:
MODEL_ID: ${{ github.event.repository.name }}
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 3
command: |
source activate
echo "Sample model id selected: $MODEL_ID"
ersilia -v fetch $MODEL_ID --repo_path .
ersilia -v serve $MODEL_ID
ersilia sample -n 5 -f input.csv
ersilia -v api -i input.csv
ersilia close
- name: Upload log output
if: always()
uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb #pin v3.1.1
with:
name: debug-logs
retention-days: 14
path: /home/runner/eos/*.log
Loading

0 comments on commit c2d6a96

Please sign in to comment.