Fetching single file from private repository (+ CI)
We had a situation in which we did need to write an API for an app, but decided to keep it in separate repository and deploy as separate app. This API would use original app’s database in read-only mode. The problem was how to prepare database structure for testing purpose. We’ve decided to use structure.sql
from original app, but we did want to keep it in sync somehow.
First thing was to get Github’s personal access token
Then, locally we’ve just altered bin/setup
to include following code
require 'dotenv/load'
#...
puts "\n== Importing database structure =="
Dotenv.load
system! %{curl -H 'Authorization: token #{ENV.fetch('DEVELOPER_ACCESS_TOKEN')}' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/OtherApp/other_app/contents/db/structure.sql}
system! 'mv structure.sql db/structure.sql'
puts "\n== Preparing database =="
system! 'RAILS_ENV=test bin/rails db:drop db:create db:structure:load'
while for CircleCi we did need to add following entry to .circleci/config.yml
- run:
name: setup-db
command: |
curl \
--header "Authorization: token ${DEVELOPER_ACCESS_TOKEN}" \
--header "Accept: application/vnd.github.v3.raw" \
--remote-name \
--location https://api.github.com/repos/OtherApp/other_app/contents/db/structure.sql
mv structure.sql db/structure.sql
bundle exec rake db:create db:structure:load --trace
Obviously do not forget to ensure correct value for DEVELOPER_ACCESS_TOKEN
in your .env
and on CircleCI.