Skip to content

Commit

Permalink
ready to deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
emiliorighi committed Oct 1, 2024
1 parent b9a7eea commit 5e5b2fc
Show file tree
Hide file tree
Showing 32 changed files with 365 additions and 115 deletions.
38 changes: 38 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
variables:
APP_NAME_FRONT: rnaget-nginx
APP_NAME_BACK: rnaget-server
BASE_PATH: /rnaget-beacon

stages:
- build
- deploy

build_containers:
only:
- master

tags:
- docker
- monstre

stage: build
image: docker:latest

before_script:
- echo $CI_REGISTRY_PASSWORD | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin

script:
- docker build --build-arg BASE_PATH="$BASE_PATH" -t gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_FRONT ./nginx
- docker push gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_FRONT
- docker build -t gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_BACK ./server
- docker push gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_BACK

deploy_containers:
stage: deploy
tags:
- shell
- monstre
script:
- cat $ENV_FILE > .env
- docker-compose -f docker-compose.yml down -v
- docker-compose -f docker-compose.yml up -d
Binary file added dist/favicon-16x16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added dist/favicon-32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions dist/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
html {
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}

*,
*:before,
*:after {
box-sizing: inherit;
}

body {
margin: 0;
background: #fafafa;
}
79 changes: 79 additions & 0 deletions dist/oauth2-redirect.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<!doctype html>
<html lang="en-US">
<head>
<title>Swagger UI: OAuth2 Redirect</title>
</head>
<body>
<script>
'use strict';
function run () {
var oauth2 = window.opener.swaggerUIRedirectOauth2;
var sentState = oauth2.state;
var redirectUrl = oauth2.redirectUrl;
var isValid, qp, arr;

if (/code|token|error/.test(window.location.hash)) {
qp = window.location.hash.substring(1).replace('?', '&');
} else {
qp = location.search.substring(1);
}

arr = qp.split("&");
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';});
qp = qp ? JSON.parse('{' + arr.join() + '}',
function (key, value) {
return key === "" ? value : decodeURIComponent(value);
}
) : {};

isValid = qp.state === sentState;

if ((
oauth2.auth.schema.get("flow") === "accessCode" ||
oauth2.auth.schema.get("flow") === "authorizationCode" ||
oauth2.auth.schema.get("flow") === "authorization_code"
) && !oauth2.auth.code) {
if (!isValid) {
oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "warning",
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
});
}

if (qp.code) {
delete oauth2.state;
oauth2.auth.code = qp.code;
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
} else {
let oauthErrorMsg;
if (qp.error) {
oauthErrorMsg = "["+qp.error+"]: " +
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
(qp.error_uri ? "More info: "+qp.error_uri : "");
}

oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "error",
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
});
}
} else {
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
}
window.close();
}

if (document.readyState !== 'loading') {
run();
} else {
document.addEventListener('DOMContentLoaded', function () {
run();
});
}
</script>
</body>
</html>
20 changes: 20 additions & 0 deletions dist/swagger-initializer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
window.onload = function() {
//<editor-fold desc="Changeable Configuration Block">

// the following lines will be replaced by docker/configurator, when it runs in a docker-container
window.ui = SwaggerUIBundle({
url: "rnaget-beacon-schema.yaml",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
});

//</editor-fold>
};
3 changes: 3 additions & 0 deletions dist/swagger-ui-bundle.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/swagger-ui-bundle.js.map

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions dist/swagger-ui-es-bundle-core.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/swagger-ui-es-bundle-core.js.map

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions dist/swagger-ui-es-bundle.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/swagger-ui-es-bundle.js.map

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions dist/swagger-ui-standalone-preset.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/swagger-ui-standalone-preset.js.map

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions dist/swagger-ui.css

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/swagger-ui.css.map

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions dist/swagger-ui.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/swagger-ui.js.map

Large diffs are not rendered by default.

78 changes: 44 additions & 34 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,65 +1,75 @@
version: '3'

services:

nginx:
build:
context: ./nginx
dockerfile: Dockerfile
args:
- BASE_PATH=$BASE_PATH
container_name: ${NGINX_HOST}
restart: always
environment:
- API_PORT=${API_PORT}
- API_HOST=${API_HOST}
- BASE_PATH=${BASE_PATH}
ports:
- "94:${API_PORT}"

mongo:
rnaget-mongo:
image: mongo:6.0
container_name: "${DB_HOST}"
env_file:
- .env
restart: always
volumes:
- ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh
- mongodb-data:${MONGODB_DATA_DIR}
- /data/rnaget-data:/data/db
ports:
- "${DB_PORT}:27017"
networks:
- monstre

rnaget-nginx:
image: gitlab.linux.crg.es:5005/monstre/rnaget-implementation/rnaget-nginx
container_name: ${NGINX_HOST}
restart: always
environment:
- API_PORT=${API_PORT}
- API_HOST=${API_HOST}
- BASE_PATH=${BASE_PATH}
labels:
- "traefik.enable=true"
- "traefik.http.routers.rnaget-nginx.rule=(Host(`genome.crg.es`) || Host(`genome.crg.cat`) || Host(`genome.crg.eu`)) && PathPrefix(`/rnaget-beacon`)"
- "traefik.http.routers.rnaget-nginx.tls=true"
- "traefik.http.routers.rnaget-nginx.entrypoints=web_https"
- "traefik.http.services.rnaget-nginx.loadBalancer.server.port=80"
ports:
- "94:${API_PORT}"
networks:
- monstre

server:
build: ./server
rnaget-server:
image: gitlab.linux.crg.es:5005/monstre/rnaget-implementation/rnaget-server
container_name: ${API_HOST}
restart: always
volumes:
- ./server:/server
env_file:
- .env
depends_on:
- redis
ports:
- "5000:5000" # Expose
- rnaget-redis
networks:
- monstre

celery:
build: ./server
rnaget-celery:
image: gitlab.linux.crg.es:5005/monstre/rnaget-implementation/rnaget-server
command: celery --app app.celery_app worker --loglevel=info --autoscale=1,1 --max-tasks-per-child=1
restart: always
volumes:
- ./server:/server
env_file:
- .env
depends_on:
- server
- mongo
- redis
- rnaget-server
- rnaget-mongo
- rnaget-redis
networks:
- monstre

redis:
rnaget-redis:
image: "redis:alpine"

volumes:
app:
mongodb-data:
node_modules:
shared_files:
expose:
- "6378"
networks:
- monstre
networks:
monstre:
external:
name: monstre
19 changes: 19 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger UI</title>
<link rel="stylesheet" type="text/css" href="dist/swagger-ui.css" />
<link rel="stylesheet" type="text/css" href="index.css" />
<link rel="icon" type="image/png" href="dist/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="dist/favicon-16x16.png" sizes="16x16" />
</head>

<body>
<div id="swagger-ui"></div>
<script src="dist/swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="dist/swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
<script src="dist/swagger-initializer.js" charset="UTF-8"> </script>
</body>
</html>
61 changes: 59 additions & 2 deletions ranaget-beacon-schema.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
openapi: 3.0.0

info:
version: "2.0.0"
version: "1.0.0"
title: "RNAget Extension for BeaconV2 API"
contact:
email: "[email protected]"

servers:
- url: https://genome.crg.es/rnaget-beacon/api
description: Demo server containing some gene expression data to test rnaget-beaconV2 API implementation

tags:
- name: "matrices"
- name: "features"
Expand Down Expand Up @@ -348,12 +352,65 @@ paths:
data:
type: "array"
items:
$ref: "#/components/schemas/BioSample"
$ref: "#/components/schemas/ExpressionValue"
total:
type: "number"
"404":
description: "Matrix not found"

post:
tags:
- "matrices"
summary: "Endpoint to retrieve a paginated list of expression values from a matrix id"
parameters:
- in: "path"
name: "id"
required: true
schema:
type: "string"
requestBody:
required: true
content:
application/json:
schema:
type: "object"
properties:
skip:
type: "number"
default: 0
description: "Number of records to skip for pagination"
limit:
type: "number"
default: 10
description: "Maximum number of records to return"
featureIDList:
type: "string"
description: "Comma-separated list of feature IDs to filter the results"
biosampleIDList:
type: "string"
description: "Comma-separated list of biosample IDs to filter the results"
maxValue:
type: "number"
description: "Maximum expression count value to filter in the results"
minValue:
type: "number"
description: "Minimum expression count value to filter in the results"
responses:
"200":
description: "successful operation"
content:
application/json:
schema:
type: "object"
properties:
data:
type: "array"
items:
$ref: "#/components/schemas/ExpressionValue"
total:
type: "number"
"404":
description: "Matrix not found"

components:
schemas:
Expand Down
Loading

0 comments on commit 5e5b2fc

Please sign in to comment.