dtc_rake
Rake tasks for building apps produced by DTC.DEV team.
Installation
Add this line to your application's Gemfile:
gem "dtc_rake", git: ""ssh://[email protected]:9422/dtc.rake.git
And then execute:
$ bundle
Or build it yourself from source as:
$ git clone ssh://[email protected]:9422/dtc.rake.git
$ cd dtc.rake/dtc_rake
$ rake install
Quick Start
For a quick start just add to your appbox project's Rakefile:
require "dtc_rake"
DtcRake.configure do |config|
config.appbox_uarchive = "<uarchive_path>"
config.appbox_territory_code = "<territory_code>"
config. = "<meta_artifact_code>"
config.appbox_location_code = "<folder_code>"
end
Note: The appbox project name should be <vendor>_<app>-appbox and it must contain a uuApp deployment descriptor with default name <vendor>_<app>-uuapp.json.
All shared tasks will be found and loaded automatically, you can verify it with rake -T command.
It is recommended to check whether the defaults fit your needs and change the configuration if needed.
Also set DTC_RAKE_PASSWD environment variable. It represents path to password file with authentication credentials (necessary for appbox creation and packs uploading). Its value can be either path relative to uu.home or an absolute path.
Example:
rake upload:cmd DTC_RAKE_PASSWD=12-345-6
# or
rake upload:cmd DTC_RAKE_PASSWD=/path/to/12-345-6
Tip: If you set DTC_RAKE_PASSWD globally (e.g. in your .bash_profile or .zshenv), you won't have to set it everytime you use Rake tasks from this gem.
Documentation
Configuration
The following example shows all configuration options:
require "dtc_rake"
DtcRake.configure do |config|
# Code of application. Guessed from root_dir name if not set.
config.app = "<app_code>"
# Code of appbox artifact. Guessed from vendor, app and version in uuApp
# deployment descriptor if not set.
config.appbox_artifact_code = "<artifact_code>"
# Code of appbox location (folder or organization unit). Required.
config.appbox_location_code = "<folder_code>"
# Code of appbox meta artifact. Default value: UU.OS/RUNTIME/APP_BOX.
config. = "<meta_artifact_code>"
# Code of territory where the appbox artifact is / should be. Required.
config.appbox_territory_code = "<territory_code>"
# Path to uarchive with contents of appbox artifact. Default value: nil.
# If not set, appbox is created with empty content.
# Relative path is relative to root_dir.
config.appbox_uarchive = "<uarchive_path>"
# Path to uuApp deployment descriptor. Guessed from vendor and app if not set.
config.app_descriptor_path = "<deployment_descriptor_path>"
# Print messages in colors. Default value: true.
config.colorize = true
# Name of folder with build products. Default value: target.
# Relative path is relative to root_dir.
config.output_dir = "target"
# Appbox project root folder. Default value: current working directory.
config.root_dir = Dir.pwd
# Upload uuApp deployment descriptor to appbox artifact. Default value: false.
config.upload_app_descriptor = true
# Code of vendor. Guessed from root_dir name if not set.
config.vendor = "<vendor_code>"
end
Explanation of Provided Tasks
appbox
Creates new appbox artifact.
build:all
Builds all available packs. Which packs get built depends on which projects exist for the app being built.
Example:
Only tasks for building command client and server would be available for app with the following structure.
cds.gb
+- cds_gb
+- cds_gb-appbox
+- Rakefile
+- cds_gb-cmd
build:cmd
Builds pack with command server. Available if project <vendor>_<app>-cmd exists.
build:dockerfiles
Builds pack with Dockerfiles. Available if project <vendor>_<app>-dockerfiles exists.
build:gem
Builds pack with command client Ruby gem. Available if project <vendor>_<app> exists.
build:vuc
Builds pack with visual use cases. Available if project <vendor>_<app>-vuc exists.
build:yardoc
Builds pach with command client yardoc. Available if project <vendor>_<app> exists.
upload:all
Uploads all available packs to appbox artifact. Which packs get uploaded depends on which projects exist for the app being built. See example for the build:all task.
upload:cmd
Uploads pack with command server to appbox artifact. Available if project <vendor>_<app>-cmd exists.
Requires DTC_RAKE_PASSWD to be set.
upload:descriptor
Uploads uuApp deployment descriptor to appbox artifact. Available if config.upload_app_descriptor is set to true.
Requires DTC_RAKE_PASSWD to be set.
upload:dockerfiles
Uploads pack with Dockerfiles to appbox artifact. Available if project <vendor>_<app>-dockerfiles exists.
Requires DTC_RAKE_PASSWD to be set.
upload:gem
Uploads pack with command client Ruby gem to appbox artifact. Available if project <vendor>_<app> exists.
Requires DTC_RAKE_PASSWD to be set.
upload:vuc
Uploads pack with visual use cases to appbox artifact. Available if project <vendor>_<app>-vuc exists.
Requires DTC_RAKE_PASSWD to be set.
upload:yardoc
Uploads pach with command client yardoc to appbox artifact. Available if project <vendor>_<app> exists.
Requires DTC_RAKE_PASSWD to be set.
How-to
How to Add Custom Task
When a project requires a specific Rake task then implement it and add it to a shared task as dependency:
namespace :build do
desc "Builds pack with widget"
task :widget do
...
end
end
task "build:all" => "widget"
How to Remove a Task
If there is a task that doesn't make sense for you then you can exclude it from loading.
For example, to exclude the upload:dockerfiles, replace the require
require "dtc_rake"
with
require "dtc_rake/tasks"
DtcRake::Tasks.load_tasks(exclude: ["upload_dockerfiles.rake"])
To remove check that is used also as dependency for e.g. upload:all, it is needed to remove it also from prerequisites of task. Example how to remove upload:dockerfiles and do not call it when building all packs.
require "dtc_rake/tasks"
DtcRake::Tasks.load_tasks(exclude: ["upload_dockerfiles.rake"])
Rake::Task["upload:all"].prerequisites.delete("dockerfiles")
Development
After checking out the repo, run bin/setup to install dependencies. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install.