Skip to content

Commit

Permalink
Fixed incompatibility issues of the URL between the broker and app
Browse files Browse the repository at this point in the history
  • Loading branch information
jfederico committed Oct 30, 2019
1 parent c2b98f7 commit 614538e
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 55 deletions.
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ ADD . $APP_HOME
RUN bundle install --without development test doc --deployment --clean

# Precompile assets
# assets are precompiled in runtime because RELATIVE_URL_ROOT can be set up threough .env
# assets are precompiled in runtime because RELATIVE_URL_ROOT can be set up through .env

CMD /usr/src/app/scripts/start.sh
CMD ["scripts/start.sh"]
6 changes: 2 additions & 4 deletions app/controllers/apps_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@ def index

def app_url
app = lti_app(params[:app])
uri = URI.parse(app['redirect_uri'])
root = uri.path.sub("#{app['name']}/auth/bbbltibroker/callback", '')
root = root.gsub('/', '')
"#{root ? '/' + root : ''}/#{params[:app]}/launch?#{params.except(:app, :controller, :action).to_query}"
baseurl = URI.join(app['redirect_uri'], '/').to_s
"#{baseurl}launch?#{params.except(:app, :controller, :action).to_query}"
end

end
5 changes: 2 additions & 3 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,11 @@ def lti_icon(app_name)
unless app_name == 'default'
begin
app = lti_app(app_name)
uri = URI.parse(app['redirect_uri'])
path_base = uri.path.sub('auth/bbbltibroker/callback', app_name) + '/'
baseurl = URI.join(app['redirect_uri'], '/').to_s
rescue
end
end
"http://#{uri.host}#{path_base + 'assets/icon.svg'}"
"#{baseurl}assets/icon.svg"
end

def authorized_tools
Expand Down
26 changes: 0 additions & 26 deletions scripts/build_image.sh

This file was deleted.

90 changes: 90 additions & 0 deletions scripts/image_build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#!/bin/bash

################################################################################
# For this script to work properly it is required to define some environment variables
# in the CI/CD Env variable declaration, while others should be passed as parameters.
#
#------------------------------------------------------------------------------
# Defined as part of the CD/CI Env Variables:
#
# CD_DOCKER_USERNAME
# A DockerHub username to be used for uploading the build.
#
# CD_DOCKER_PASSWORD
# A DockerHub password to be used for uploading the build.
#
# CD_DOCKER_REPO
# A DockerHub repository. By default the CD_REF_SLUG is also used as the docker repo.
#
# CD_BUILD_ALL
# As the build is supposed to be done only for master (for a nightly deployments) and for releases
# (like 'release-2.0.5' for production deployments), it is additionally required to include this
# variable in order to build any other brnach, as it may be required for testing or reviewing work
# as part of the development process.
#

display_usage() {
echo "This script should be used as part of a CI strategy."
echo -e "Usage:\n build_image.sh [ARGUMENTS]"
echo -e "\nMandatory arguments \n"
echo -e " repo_slug The git repository (e.g. bigbluebutton/greenlight)"
echo -e "\nOptional arguments \n"
echo -e " branch | tag The branch (e.g. master | release-2.0.5)"
}

# if less than two arguments supplied, display usage
if [ $# -le 0 ]; then
display_usage
exit 1
fi

# check whether user had supplied -h or --help . If yes display usage
if [[ ($# == "--help") || $# == "-h" ]]; then
display_usage
exit 0
fi

export CD_REF_SLUG=$1
export CD_REF_NAME=$2
if [ -z $CD_REF_NAME ]; then
export CD_REF_NAME=$(git branch | grep \* | cut -d ' ' -f2)
fi

if [ "$CD_REF_NAME" != "master" ] && [[ "$CD_REF_NAME" != *"release"* ]] && ( [ -z "$CD_BUILD_ALL" ] || [ "$CD_BUILD_ALL" != "true" ] ); then
echo "#### Docker image for $CD_REF_SLUG:$CD_REF_NAME won't be built"
exit 0
fi

# Set the version tag when it is a release or the commit sha was included.
if [[ "$CD_REF_NAME" == *"release"* ]]; then
export CD_VERSION_CODE=${CD_REF_NAME:8}
else
export CD_VERSION_CODE="$CD_REF_NAME ($(expr substr $(git rev-parse HEAD) 1 7))"
fi

# Build the image
if [ -z $CD_DOCKER_REPO ]; then
export CD_DOCKER_REPO=$CD_REF_SLUG
fi
echo "#### Docker image $CD_DOCKER_REPO:$CD_REF_NAME is being built"
docker build --build-arg version_code="${CD_VERSION_CODE}" -t $CD_DOCKER_REPO:$CD_REF_NAME .

if [ -z "$CD_DOCKER_USERNAME" ] || [ -z "$CD_DOCKER_PASSWORD" ]; then
echo "#### Docker image for $CD_DOCKER_REPO can't be published because CD_DOCKER_USERNAME or CD_DOCKER_PASSWORD are missing (Ignore this warning if running outside a CD/CI environment)"
exit 0
fi

# Publish the image
docker login -u="$CD_DOCKER_USERNAME" -p="$CD_DOCKER_PASSWORD"
echo "#### Docker image $CD_DOCKER_REPO:$CD_REF_NAME is being published"
docker push $CD_DOCKER_REPO

# Publish image as latest and v2 if it is a release (excluding alpha and beta)
if [[ "$CD_REF_NAME" == *"release"* ]] && [[ "$CD_REF_NAME" != *"alpha"* ]] && [[ "$CD_REF_NAME" != *"beta"* ]]; then
docker_image_id=$(docker images | grep -E "^$CD_DOCKER_REPO.*$CD_REF_NAME" | awk -e '{print $3}')
docker tag $docker_image_id $CD_DOCKER_REPO:latest
docker push $CD_DOCKER_REPO:latest
docker tag $docker_image_id $CD_DOCKER_REPO:v2
docker push $CD_DOCKER_REPO:v2
fi
exit 0
41 changes: 21 additions & 20 deletions scripts/start.sh
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
#!/bin/bash

# Assets are precompiled on start because the root can change based on ENV["RELATIVE_URL_ROOT"]
echo "Precompile assets..."
bundle exec rake assets:precompile --trace
if [ "$RAILS_ENV" = "production" ] && [ "$DB_ADAPTER" = "postgresql" ]; then
while ! curl http://$DB_HOST:-localhost:${DB_PORT:-5432}/ 2>&1 | grep '52'
do
echo "Waiting for postgres to start up ..."
sleep 1
done
fi

if [ -z ${DB_ADAPTER+x} ]; then
echo "DB_ADAPTER not included, sqlite will be assumed"
elif [ ${DB_ADAPTER} == 'postgresql' ]; then
echo "DB_ADAPTER is ${DB_ADAPTER}, make sure the DB is up";
db_create=$(RAILS_ENV=$RAILS_ENV bundle exec rake db:create)
echo $db_create

echo "Database ${DB_HOST:-localhost} starting..."
while ! pg_isready -h ${DB_HOST:-localhost} -p ${DB_PORT:-5432} > /dev/null 2> /dev/null;
do
sleep 1
done
fi
echo "Database ${DB_HOST:-localhost} up and running..."
if ! bundle exec rake db:exists; then
echo "Create the database..."
bundle exec rake db:create
if [[ $db_create == *"ERROR"* ]]; then
echo ">>> Database migration"
bundle exec rake db:migrate
else
echo ">>> Database initialization"
bundle exec rake db:schema:load
bundle exec rake db:seed
fi
echo "Database migrations..."
bundle exec rake db:migrate db:seed

# Assets are precompiled on start because the root can change based on ENV["RELATIVE_URL_ROOT"]
echo "Precompile assets..."
bundle exec rake assets:precompile --trace

echo "Start app..."
bundle exec rails s -b 0.0.0.0 -p 3400
bundle exec rails s -b 0.0.0.0 -p 3400

0 comments on commit 614538e

Please sign in to comment.