Skip to content

Commit

Permalink
Merge pull request #34 from kbaseapps/dev-fix_build_and_upgrade
Browse files Browse the repository at this point in the history
Fix build and upgrade to 5.2.0
  • Loading branch information
MrCreosote authored Oct 7, 2024
2 parents f6be7c2 + 14a8810 commit dcb6361
Show file tree
Hide file tree
Showing 12 changed files with 200 additions and 88 deletions.
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
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

0 comments on commit dcb6361

Please sign in to comment.