Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix build and upgrade to 5.2.0 #34

Merged
merged 3 commits into from
Oct 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 10 additions & 19 deletions .github/workflows/kb_sdk_test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,20 @@ on:
jobs:

sdk_tests:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:

- name: Check out GitHub repo
if: "!contains(github.event.head_commit.message, 'skip ci')"
uses: actions/checkout@v2

- name: Check out Actions CI files
if: "!contains(github.event.head_commit.message, 'skip ci')"
uses: actions/checkout@v2
with:
repository: 'kbaseapps/kb_sdk_actions'
path: 'kb_sdk_actions'


- name: Set up test environment
if: "!contains(github.event.head_commit.message, 'skip ci')"
shell: bash
env:
KBASE_TEST_TOKEN: ${{ secrets.KBASE_TEST_TOKEN }}
run: |
# Verify kb_sdk_actions clone worked
test -f "$HOME/kb_sdk_actions/bin/kb-sdk" && echo "CI files cloned"
# Pull kb-sdk & create startup script
docker pull kbase/kb-sdk

sh $GITHUB_WORKSPACE/kb_sdk_actions/bin/make_testdir && echo "Created test_local"
sh GHA_scripts/make_testdir && echo "Created test_local"
test -f "test_local/test.cfg" && echo "Confirmed config exists"

- name: Configure authentication
Expand All @@ -55,8 +42,12 @@ jobs:
- name: Run tests
if: "!contains(github.event.head_commit.message, 'skip ci')"
shell: bash
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
run: |
sh $GITHUB_WORKSPACE/kb_sdk_actions/bin/kb-sdk test
bash <(curl -s https://codecov.io/bash)
sh GHA_scripts/kb-sdk test --verbose

# TODO COVERAGE alter the Makefile to generate coverage info and uncomment
# - name: Upload coverage to Codecov
# uses: codecov/codecov-action@v3
# with:
# token: ${{ secrets.CODECOV_TOKEN }}
# fail_ci_if_error: true
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
test_local
sdk.cfg
/.project
/.pydevproject
/.settings/
35 changes: 11 additions & 24 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,35 +1,22 @@
FROM kbase/sdkbase2:python
FROM kbase/sdkpython:3.8.10
MAINTAINER KBase Developer
# -----------------------------------------

# Insert apt-get instructions here to install
# any required dependencies for your module.

# RUN apt-get update


RUN apt-get update \
&& apt-get -y install libboost-all-dev \
&& apt-get -y install wget \
&& apt-get -y install g++
RUN apt update && apt install -y g++ nano tree

RUN python -m pip install --upgrade pip \
&& pip install psutil \
&& pip install matplotlib

# DO NOT use install_full - downloads the Silva database, which has a non open source license
# As a result cannot use MetaQUAST
# deletes genemark executables, also non open source license
RUN cd /opt \
&& wget https://github.com/ablab/quast/releases/download/quast_5.0.2/quast-5.0.2.tar.gz \
&& tar -xzf quast-5.0.2.tar.gz \
&& cd quast-5.0.2 \
&& ./setup.py install \
&& rm -r quast_libs/genemark\
&& rm -r quast_libs/genemark-es

RUN apt-get install nano \
&& apt-get install tree
&& pip install \
psutil==6.0.0 \
matplotlib==3.7.5 \
quast==5.2.0 \
biopython==1.83 \
&& rm -r /opt/conda3/lib/python3.8/site-packages/quast_libs/genemark \
&& rm -r /opt/conda3/lib/python3.8/site-packages/quast_libs/genemark-es

# Genemark is not open source for non-academic use, and so can't be used in KBase

# -----------------------------------------

Expand Down
12 changes: 12 additions & 0 deletions GHA_scripts/kb-sdk
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh

# TODO may want to make the image an env var or argument

# See https://github.com/kbaseapps/kb_sdk_actions/blob/master/bin/kb-sdk for source

# Cache the group for the docker file
if [ ! -e $HOME/.kbsdk.cache ] ; then
docker run -i -v /var/run/docker.sock:/var/run/docker.sock --entrypoint ls ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 -l /var/run/docker.sock|awk '{print $4}' > $HOME/.kbsdk.cache
fi

exec docker run -i --rm -v $HOME:$HOME -w $(pwd) -v /var/run/docker.sock:/var/run/docker.sock -e DSHELL=$SHELL --group-add $(cat $HOME/.kbsdk.cache) ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 $@
16 changes: 16 additions & 0 deletions GHA_scripts/make_testdir
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/sh

# TODO may want to make the image an env var or argument

# See https://github.com/kbaseapps/kb_sdk_actions/blob/master/bin/make_testdir for source

# Disable the default `return 1` when creating `test_local`
set +e

# Cache the group for the docker file
if [ ! -e $HOME/.kbsdk.cache ] ; then
docker run -i -v /var/run/docker.sock:/var/run/docker.sock --entrypoint ls ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 -l /var/run/docker.sock|awk '{print $4}' > $HOME/.kbsdk.cache
fi

exec docker run -i --rm -v $HOME:$HOME -u $(id -u) -w $(pwd) -v /var/run/docker.sock:/var/run/docker.sock -e DUSER=$USER -e DSHELL=$SHELL --group-add $(cat $HOME/.kbsdk.cache) ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 test
exit
5 changes: 5 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
### 1.1.0

- Updated base image to `kbase/sdkpython:3.8.10` to fix build
- Updated QUAST to 5.2.0

### 1.0.0
- Version bump to meet release requirements. No other changes.

Expand Down
2 changes: 1 addition & 1 deletion kb_quast.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion kbase.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ service-language:
python

module-version:
1.0.0
1.1.0

owners:
[gaprice]
94 changes: 94 additions & 0 deletions lib/kb_quast/authclient.py
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure how things worked without this file before, but it's imported by the server and post upgrade everything failed because it wasn't available. Copied from the installed_clients folder.

Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
'''
Created on Aug 1, 2016

A very basic KBase auth client for the Python server.

@author: [email protected]
'''
import time as _time
import requests as _requests
import threading as _threading
import hashlib


class TokenCache(object):
''' A basic cache for tokens. '''

_MAX_TIME_SEC = 5 * 60 # 5 min

_lock = _threading.RLock()

def __init__(self, maxsize=2000):
self._cache = {}
self._maxsize = maxsize
self._halfmax = maxsize / 2 # int division to round down

def get_user(self, token):
token = hashlib.sha256(token.encode('utf-8')).hexdigest()
with self._lock:
usertime = self._cache.get(token)
if not usertime:
return None

user, intime = usertime
if _time.time() - intime > self._MAX_TIME_SEC:
return None
return user

def add_valid_token(self, token, user):
if not token:
raise ValueError('Must supply token')
if not user:
raise ValueError('Must supply user')
token = hashlib.sha256(token.encode('utf-8')).hexdigest()
with self._lock:
self._cache[token] = [user, _time.time()]
if len(self._cache) > self._maxsize:
sorted_items = sorted(
list(self._cache.items()),
key=(lambda v: v[1][1])
)
for i, (t, _) in enumerate(sorted_items):
if i <= self._halfmax:
del self._cache[t]
else:
break


class KBaseAuth(object):
'''
A very basic KBase auth client for the Python server.
'''

_LOGIN_URL = 'https://kbase.us/services/auth/api/legacy/KBase/Sessions/Login'

def __init__(self, auth_url=None):
'''
Constructor
'''
self._authurl = auth_url
if not self._authurl:
self._authurl = self._LOGIN_URL
self._cache = TokenCache()

def get_user(self, token):
if not token:
raise ValueError('Must supply token')
user = self._cache.get_user(token)
if user:
return user

d = {'token': token, 'fields': 'user_id'}
ret = _requests.post(self._authurl, data=d)
if not ret.ok:
try:
err = ret.json()
except Exception as e:
ret.raise_for_status()
raise ValueError('Error connecting to auth service: {} {}\n{}'
.format(ret.status_code, ret.reason,
err['error']['message']))

user = ret.json()['user_id']
self._cache.add_valid_token(token, user)
return user
48 changes: 26 additions & 22 deletions lib/kb_quast/kb_quastImpl.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ class kb_quast:
# state. A method could easily clobber the state set by another while
# the latter method is running.
######################################### noqa
VERSION = "0.0.6"
GIT_URL = "https://github.com/kbaseapps/kb_quast.git"
GIT_COMMIT_HASH = "8d29af55af662fa41442c0134dd90c45decd8cf4"
VERSION = "1.1.0"
GIT_URL = "https://github.com/kbaseapps/kb_quast"
GIT_COMMIT_HASH = "f6be7c27bbf44a0d65b0250dbdb8079b5df9d7ae"

#BEGIN_CLASS_HEADER

Expand Down Expand Up @@ -195,13 +195,15 @@ def run_QUAST_app(self, ctx, params):
QUAST as a Narrative application. workspace_name - the name of the
workspace where the KBaseReport object will be saved. assemblies -
the list of assemblies upon which QUAST will be run. force_glimmer
- running '--glimmer' option regardless of assembly object size)
-> structure: parameter "workspace_name" of String, parameter
"assemblies" of list of type "assembly_ref" (An X/Y/Z style
reference to a workspace object containing an assembly, either a
KBaseGenomes.ContigSet or KBaseGenomeAnnotations.Assembly.),
parameter "force_glimmer" of type "boolean" (A boolean - 0 for
false, 1 for true. @range (0, 1))
- running '--glimmer' option regardless of assembly object size
min_contig_length - set the minimum size of contigs to process.
Defaults to 500, minimum allowed is 50.) -> structure: parameter
"workspace_name" of String, parameter "assemblies" of list of type
"assembly_ref" (An X/Y/Z style reference to a workspace object
containing an assembly, either a KBaseGenomes.ContigSet or
KBaseGenomeAnnotations.Assembly.), parameter "force_glimmer" of
type "boolean" (A boolean - 0 for false, 1 for true. @range (0,
1)), parameter "min_contig_length" of Long
:returns: instance of type "QUASTAppOutput" (Output of the
run_quast_app function. report_name - the name of the
KBaseReport.Report workspace object. report_ref - the workspace
Expand Down Expand Up @@ -256,18 +258,20 @@ def run_QUAST(self, ctx, params):
be run. -OR- files - the list of FASTA files upon which QUAST will
be run. Optional arguments: make_handle - create a handle for the
new shock node for the report. force_glimmer - running '--glimmer'
option regardless of file/assembly object size) -> structure:
parameter "assemblies" of list of type "assembly_ref" (An X/Y/Z
style reference to a workspace object containing an assembly,
either a KBaseGenomes.ContigSet or
KBaseGenomeAnnotations.Assembly.), parameter "files" of list of
type "FASTAFile" (A local FASTA file. path - the path to the FASTA
file. label - the label to use for the file in the QUAST output.
If missing, the file name will be used.) -> structure: parameter
"path" of String, parameter "label" of String, parameter
"make_handle" of type "boolean" (A boolean - 0 for false, 1 for
true. @range (0, 1)), parameter "force_glimmer" of type "boolean"
(A boolean - 0 for false, 1 for true. @range (0, 1))
option regardless of file/assembly object size min_contig_length -
set the minimum size of contigs to process. Defaults to 500,
minimum allowed is 50.) -> structure: parameter "assemblies" of
list of type "assembly_ref" (An X/Y/Z style reference to a
workspace object containing an assembly, either a
KBaseGenomes.ContigSet or KBaseGenomeAnnotations.Assembly.),
parameter "files" of list of type "FASTAFile" (A local FASTA file.
path - the path to the FASTA file. label - the label to use for
the file in the QUAST output. If missing, the file name will be
used.) -> structure: parameter "path" of String, parameter "label"
of String, parameter "make_handle" of type "boolean" (A boolean -
0 for false, 1 for true. @range (0, 1)), parameter "force_glimmer"
of type "boolean" (A boolean - 0 for false, 1 for true. @range (0,
1)), parameter "min_contig_length" of Long
:returns: instance of type "QUASTOutput" (Ouput of the run_quast
function. shock_id - the id of the shock node where the zipped
QUAST output is stored. handle - the new handle for the shock
Expand Down
Loading
Loading