Skip to content

Commit

Permalink
add ontoportal bash script to run test and development servers
Browse files Browse the repository at this point in the history
  • Loading branch information
syphax-bouazzouni committed Nov 22, 2023
1 parent 1d13691 commit f9b02e7
Show file tree
Hide file tree
Showing 5 changed files with 173 additions and 7 deletions.
1 change: 1 addition & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
API_URL=http://localhost:9393
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,5 @@ test/data/ontology_files/catalog-v001.xml
create_permissions.log

ontologies_api.iml

.env
166 changes: 166 additions & 0 deletions bin/ontoportal
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
#!/usr/bin/env bash

# Function to display script usage information
show_help() {
echo "Usage: $0 {dev|test|run|help} [--reset-cache] [--api-url API_URL] [--api-key API_KEY]"
echo " dev : Start the Ontoportal API development server."
echo " Example: $0 dev --api-url http://localhost:9393"
echo " Use --reset-cache to remove volumes: $0 dev --reset-cache"
echo " test : Run tests."
echo " run : Run a command in the Ontoportal API Docker container."
echo " help : Show this help message."
echo
echo "Description:"
echo " This script provides convenient commands for managing an Ontoportal API"
echo " application using Docker Compose. It includes options for starting the development server,"
echo " running tests, and executing commands within the Ontoportal API Docker container."
echo
echo "Goals:"
echo " - Simplify common tasks related to Ontoportal API development using Docker."
echo " - Provide a consistent and easy-to-use interface for common actions."
}
# Function to update or create the .env file with API_URL and API_KEY
update_env_file() {
local api_url="$1"

# Update the .env file with the provided values
file_content=$(<.env)

# Make changes to the variable
while IFS= read -r line; do
if [[ "$line" == "API_URL="* ]]; then
echo "API_URL=$api_url"
else
echo "$line"
fi
done <<< "$file_content" > .env
}

# Function to create configuration files if they don't exist
create_config_files() {
if [ ! -f ".env" ]; then
echo "Creating .env file from env.sample"
cp .env.sample .env
fi

if [ ! -f "config/environments/development.rb" ]; then
echo "Creating config/environments/development.rb file from config/environments/config.rb.sample"
cp config/bioportal_config_env.rb.sample config/bioportal_config_development.rb
fi
}

# Function to handle the "dev" option
dev() {
echo "Starting Ontoportal API development server..."

create_config_files
local reset_cache=false
local api_url=""


# Check for command line arguments
while [[ "$#" -gt 0 ]]; do
case $1 in
--reset-cache)
reset_cache=true
shift
;;
--api-url)
api_url="$2"
shift 2
;;
*)
echo "Unknown option: $1"
show_help
exit 1
;;
esac
done



# Check if arguments are provided
if [ -n "$api_url" ] ; then
# If arguments are provided, update the .env file
update_env_file "$api_url"
else
# If no arguments, fetch values from the .env file
source .env
api_url="$API_URL"
fi

if [ -z "$api_url" ] ; then
echo "Error: Missing required arguments. Please provide both --api-url or update them in your .env"
exit 1
fi

# Check if --reset-cache is present and execute docker compose down --volumes
if [ "$reset_cache" = true ]; then
echo "Resetting cache. Running: docker compose down --volumes"
docker compose down --volumes
fi

echo "Run: bundle exec api s -b 0.0.0.0 -p 3000"
docker compose run --rm -it --service-ports api bash -c "(bundle check || bundle install) && bundle exec rackup -o 0.0.0.0 --port 9393"
}

# Function to handle the "test" option
test() {


local api_url=""
local test_path=""
local test_options=""

# Check for command line arguments
while [ "$#" -gt 0 ]; do
case "$1" in
--api-url)
shift
api_url="$1"
;;
*)
if [ -z "$test_path" ]; then
test_path="$1"
else
test_options="$test_options $1"
fi
;;
esac
shift
done



script="API_URL=$api_url bundle exec rake test TEST=\"$test_path\" TESTOPTS=\"$test_options\""
echo "Running tests..."
echo "Run: $script"

docker compose run --rm -it api bash -c "(bundle check || bundle install) && $script"
}

# Function to handle the "run" option
run() {
echo "Run: $*"
docker compose run --rm -it api bash -c "$*"
}

# Main script logic
case "$1" in
"run")
run "${@:2}"
;;
"dev")
dev "${@:2}"
;;
"test")
test "${@:2}"
;;
"help")
show_help
;;
*)
show_help
exit 1
;;
esac
2 changes: 1 addition & 1 deletion config/environments/config.rb.sample
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ REDIS_PERSISTENT_HOST = ENV.include?("REDIS_PERSISTENT_HOST") ? ENV["REDIS_PERSI
REDIS_PORT = ENV.include?("REDIS_PORT") ? ENV["REDIS_PORT"] : 6379
REPORT_PATH = ENV.include?("REPORT_PATH") ? ENV["REPORT_PATH"] : "./test/ontologies_report.json"
REPOSITORY_FOLDER = ENV.include?("REPOSITORY_FOLDER") ? ENV["REPOSITORY_FOLDER"] : "./test/data/ontology_files/repo"
REST_URL_PREFIX = ENV.include?("REST_URL_PREFIX") ? ENV["REST_URL_PREFIX"] : "http://localhost:9393"
REST_URL_PREFIX = ENV.include?("REST_URL_PREFIX") ? ENV["REST_URL_PREFIX"] : ENV["API_URL"] || "http://localhost:9393"
SOLR_PROP_SEARCH_URL = ENV.include?("SOLR_PROP_SEARCH_URL") ? ENV["SOLR_PROP_SEARCH_URL"] : "http://localhost:8983/solr/prop_search_core1"
SOLR_TERM_SEARCH_URL = ENV.include?("SOLR_TERM_SEARCH_URL") ? ENV["SOLR_TERM_SEARCH_URL"] : "http://localhost:8983/solr/term_search_core1"

Expand Down
9 changes: 3 additions & 6 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
x-app: &app
build:
context: .
args:
RUBY_VERSION: '2.7'
# Increase the version number in the image tag every time Dockerfile or its arguments is changed
image: ontologies_api:0.0.1
image: agroportal/ontologies_api:development
environment: &env
BUNDLE_PATH: /srv/ontoportal/bundle
# default bundle config resolves to /usr/local/bundle/config inside of the container
Expand Down Expand Up @@ -39,6 +34,8 @@ x-app: &app
services:
api:
<<: *app
env_file:
.env
environment:
<<: *env
GOO_BACKEND_NAME: 4store
Expand Down

0 comments on commit f9b02e7

Please sign in to comment.