Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
bf01311
Regenerate stale test fixtures against current Virtuoso baseline
marpaia Jun 28, 2026
5d34501
Fix invalid FROM clause inside subquery in searchCount.sparql
marpaia Jun 28, 2026
9ee100e
Make the test error-log helper backend-agnostic and non-fatal
marpaia Jun 28, 2026
5af025a
Add SynBioHub-on-sbol-db test harness
marpaia Jun 28, 2026
1691074
makePublic: credit the publishing user instead of an empty creator
marpaia Jun 28, 2026
7558aa6
Re-baseline advancedSearch fixture: drop duplicate collection facet
marpaia Jun 28, 2026
ab6a1be
Revert advancedSearch fixture re-baseline (the duplicate was real)
marpaia Jun 28, 2026
db9f8e6
Cache yarn install in its own Docker layer
marpaia Jun 28, 2026
357fbe6
fetch-sbol-object-recursive: omit FROM <null> for public-only fetches
marpaia Jun 28, 2026
40f0a2b
Use INSERT DATA for ground-triple attachment inserts
marpaia Jun 28, 2026
9d5fa77
harness: track config.local.json and serve sbol-db at virtuoso:8890
marpaia Jun 28, 2026
4dfbb5c
Re-baseline admin-graphs fixture: drop Virtuoso system graphs
marpaia Jun 28, 2026
963ad4f
harness: add --persist phase (restart + test_docker_persist.py)
marpaia Jun 28, 2026
1892ad5
harness: add SBOLTestRunner conformance runner for sbol-db
marpaia Jun 28, 2026
8d27d52
harness: use the published GHCR sbol-db image
marpaia Jun 28, 2026
84b8964
Add benchmark scripts for sbol-db vs virtuoso
marpaia Jun 29, 2026
aef35ab
Order queries deterministically and re-basline test results
marpaia Jun 30, 2026
e2675f6
Update sbol-db container to v0.1.1
marpaia Jun 30, 2026
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
18 changes: 12 additions & 6 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,27 @@ FROM node:11.1.0-alpine
RUN apk add nss git openjdk8-jre openjdk8 maven python alpine-sdk libxml2-dev yarn g++ gcc bash raptor2 jq

WORKDIR /synbiohub
COPY . .

# RUN rm -rf .git

RUN cd java && mvn package
RUN git config --global url."https://".insteadOf git://

# Install Node dependencies from the manifest + lockfile alone, in their own
# cached layer, so application source changes don't re-run yarn install.
# node_modules is excluded from the build context (.dockerignore), so this
# install is what populates it.
COPY package.json yarn.lock ./
RUN yarn install

# Application source and build. The yarn layer above stays cached across source
# edits, so only the copy and the Java build below re-run on a code change.
COPY . .
RUN cd java && mvn package

COPY docker/config.local.json config.initial.local.json
COPY docker/healthcheck.js healthcheck.js
COPY docker/entry.sh entry.sh
COPY docker/first_run.sh first_run.sh

EXPOSE 7777

HEALTHCHECK --start-period=60s CMD ["node", "healthcheck.js"]
HEALTHCHECK --start-period=60s CMD ["node", "healthcheck.js"]
ENTRYPOINT ["./entry.sh"]

2 changes: 1 addition & 1 deletion lib/actions/makePublic.js
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ module.exports = function (req, res) {
newRootCollectionDisplayId: collectionId + '_collection',
newRootCollectionVersion: version,
ownedByURI: config.get('databasePrefix') + 'user/' + req.params.userId,
creatorName: '',
creatorName: req.user.name,
citationPubmedIDs: citations,
overwrite_merge: overwriteMerge,
user: apiTokens.createToken(req.user)
Expand Down
9 changes: 8 additions & 1 deletion lib/fetch/local/fetch-sbol-object-recursive.js
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,14 @@ return [
'}'
]).join('\n') */

var from = 'FROM <' + config.get('databasePrefix') + 'public>' + ' FROM <' + graphUri + '>'
var from = 'FROM <' + config.get('databasePrefix') + 'public>'

// graphUri is null when resolving a purely public object. Only add the
// user-graph dataset clause when there is one; emitting `FROM <null>`
// produces an invalid (relative) IRI that a strict SPARQL parser rejects.
if (graphUri) {
from += ' FROM <' + graphUri + '>'
}

var query = [
isCount
Expand Down
3 changes: 2 additions & 1 deletion lib/views/admin/graphs.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ module.exports = function (req, res) {
const query = [
'SELECT DISTINCT ?graph WHERE {',
'GRAPH ?graph { ?s ?a ?t }',
'}'
'}',
'ORDER BY ?graph'
].join('\n')

sparql.queryJson(query, null).then((results) => {
Expand Down
2 changes: 1 addition & 1 deletion sparql/AttachUpload.sparql
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX sbh: <http://wiki.synbiohub.org/wiki/Terms/synbiohub#>
PREFIX sbol: <http://sbols.org/v2#>

INSERT {
INSERT DATA {
<$topLevel> sbol:attachment <$attachmentURI> .

<$collectionUri> sbol:member <$attachmentURI> .
Expand Down
2 changes: 1 addition & 1 deletion sparql/AttachUrl.sparql
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX sbh: <http://wiki.synbiohub.org/wiki/Terms/synbiohub#>
PREFIX sbol: <http://sbols.org/v2#>

INSERT {
INSERT DATA {
<$topLevel> sbol:attachment <$uri> .

<$collectionUri> sbol:member <$uri> .
Expand Down
5 changes: 3 additions & 2 deletions sparql/searchCount.sparql
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ PREFIX so: <http://identifiers.org/so/>
PREFIX bench: <http://wiki.synbiohub.org/wiki/Terms/benchling#>
PREFIX genbank: <http://www.ncbi.nlm.nih.gov/genbank#>

select (sum(?tempcount) as ?count) WHERE {
select (sum(?tempcount) as ?count)
$from
WHERE {
{
SELECT (count(distinct ?subject) as ?tempcount)
$from
WHERE {
$criteria

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,4 @@ try {
<a href="https://github.com/SynBioHub/synbiohub">View Source on Github</a>
|
<a href="https://github.com/synbiohub/synbiohub/issues">Report an Issue</a>
<div class="testignore" style="display:inline-block">| v1.6.1 (6d694887)</div></span></div></body><script src="/js/saveSvgAsPng.js"></script><script src="/js/jquery/jquery-2.1.3.min.js"></script><script src="/js/bootstrap/bootstrap-3.3.4.js"></script><script src="/js/typeahead.bundle.js"></script><script src="/js/typeahead.jquery.min.js"></script><script src="/datatables.min.js"></script><script src="/js/pathseg.js"></script><script src="/js/chosen.jquery.js"></script><script src="/js/dropzone.js"></script><script src="/js/BootstrapMenu.js"></script><script src="/bundle.js"></script></head></html>
<div class="testignore" style="display:inline-block">| v1.6.1 (aa5056eb)</div></span></div></body><script src="/js/saveSvgAsPng.js"></script><script src="/js/jquery/jquery-2.1.3.min.js"></script><script src="/js/bootstrap/bootstrap-3.3.4.js"></script><script src="/js/typeahead.bundle.js"></script><script src="/js/typeahead.jquery.min.js"></script><script src="/datatables.min.js"></script><script src="/js/pathseg.js"></script><script src="/js/chosen.jquery.js"></script><script src="/js/dropzone.js"></script><script src="/js/BootstrapMenu.js"></script><script src="/bundle.js"></script></head></html>
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,6 @@
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:type rdf:resource="http://www.biopax.org/release/biopax-level3.owl#DnaRegion"/>
<sbol:role rdf:resource="http://identifiers.org/so/SO:0000280"/>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/BBa_C0012/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/BBa_C0012"/>
<sbol:displayId>BBa_C0012</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_C0012/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/ECK120029600/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/ECK120029600"/>
Expand Down Expand Up @@ -131,6 +120,17 @@
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/BBa_C0012/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/BBa_C0012"/>
<sbol:displayId>BBa_C0012</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_C0012/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:sequenceAnnotation>
<sbol:SequenceAnnotation rdf:about="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/anno1/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKELeftCassette_1/anno1"/>
Expand Down Expand Up @@ -231,68 +231,68 @@
<sbol:type rdf:resource="http://www.biopax.org/release/biopax-level3.owl#DnaRegion"/>
<sbol:role rdf:resource="http://identifiers.org/so/SO:0000280"/>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61120/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61120"/>
<sbol:displayId>BBa_J61120</sbol:displayId>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/ECK120033736/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/ECK120033736"/>
<sbol:displayId>ECK120033736</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_J61120/1"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/ECK120033736/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_E0040/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_E0040"/>
<sbol:displayId>BBa_E0040</sbol:displayId>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_R0010/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_R0010"/>
<sbol:displayId>BBa_R0010</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_E0040/1"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_R0010/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_C0040/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_C0040"/>
<sbol:displayId>BBa_C0040</sbol:displayId>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61130/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61130"/>
<sbol:displayId>BBa_J61130</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_C0040/1"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_J61130/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/ECK120033736/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/ECK120033736"/>
<sbol:displayId>ECK120033736</sbol:displayId>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61120/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61120"/>
<sbol:displayId>BBa_J61120</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/ECK120033736/1"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_J61120/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_R0010/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_R0010"/>
<sbol:displayId>BBa_R0010</sbol:displayId>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_E0040/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_E0040"/>
<sbol:displayId>BBa_E0040</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_R0010/1"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_E0040/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
<sbol:component>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61130/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_J61130"/>
<sbol:displayId>BBa_J61130</sbol:displayId>
<sbol:Component rdf:about="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_C0040/1">
<sbol:persistentIdentity rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/BBa_C0040"/>
<sbol:displayId>BBa_C0040</sbol:displayId>
<sbol:version>1</sbol:version>
<sbh:topLevel rdf:resource="http://localhost:7777/public/testid1/part_pIKERightCassette_1/1"/>
<sbh:ownedBy rdf:resource="http://localhost:7777/user/testuser"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_J61130/1"/>
<sbol:definition rdf:resource="http://localhost:7777/public/testid1/BBa_C0040/1"/>
<sbol:access rdf:resource="http://sbols.org/v2#public"/>
</sbol:Component>
</sbol:component>
Expand Down
Loading