├── .codeclimate.yml ├── .gitignore ├── .rubocop.yml ├── .ruby-version ├── AUTHORS ├── Capfile ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── Procfile ├── README.md ├── Rakefile ├── SCALE ├── app ├── assets │ ├── config │ │ └── manifest.js │ ├── images │ │ ├── memcached.png │ │ ├── paste.png │ │ └── redis.svg │ ├── javascripts │ │ ├── devise │ │ │ └── application.js.coffee │ │ └── main │ │ │ ├── admin │ │ │ └── applications.js.coffee │ │ │ ├── application.js.coffee │ │ │ ├── applications.js.coffee │ │ │ ├── cable.js │ │ │ ├── cable │ │ │ └── subscriptions │ │ │ │ └── data.coffee │ │ │ ├── channels │ │ │ └── .keep │ │ │ ├── chartkick.js │ │ │ ├── credentials.js.coffee │ │ │ ├── membership.js.coffee │ │ │ ├── servers.js.coffee │ │ │ ├── ssh_keys_manager.js.coffee │ │ │ ├── users.js.coffee │ │ │ └── utils.js.coffee │ └── stylesheets │ │ ├── devise │ │ └── application.css │ │ └── main │ │ ├── application.css │ │ ├── applications.css │ │ ├── icons.css │ │ ├── layout.css │ │ ├── platforms.css │ │ ├── popover.css │ │ ├── roles.css │ │ ├── servers.scss │ │ └── ssh_keys.css ├── channels │ ├── application_cable │ │ ├── channel.rb │ │ └── connection.rb │ ├── console_channel.rb │ └── data_channel.rb ├── constraints │ └── ip_white_list.rb ├── controllers │ ├── admin │ │ ├── application_types_controller.rb │ │ ├── applications_controller.rb │ │ ├── buildpacks_controller.rb │ │ ├── dashboard_controller.rb │ │ ├── dci_controller.rb │ │ ├── default_controller.rb │ │ ├── docker_images_controller.rb │ │ ├── groups_controller.rb │ │ ├── locks_controller.rb │ │ ├── memberships_controller.rb │ │ ├── platforms_controller.rb │ │ ├── public_keys_controller.rb │ │ ├── reserved_names_controller.rb │ │ ├── roles_controller.rb │ │ ├── servers_controller.rb │ │ ├── settings_controller.rb │ │ ├── stages_controller.rb │ │ └── users_controller.rb │ ├── application_controller.rb │ ├── applications_config_controller.rb │ ├── applications_controller.rb │ ├── applications_manager_controller.rb │ ├── charts_controller.rb │ ├── concerns │ │ ├── base_controller │ │ │ ├── ajax.rb │ │ │ ├── authorizations.rb │ │ │ ├── devise.rb │ │ │ ├── errors.rb │ │ │ ├── helpers.rb │ │ │ ├── menus.rb │ │ │ └── user_settings.rb │ │ ├── belongs_to_platform.rb │ │ ├── crudify │ │ │ ├── base.rb │ │ │ ├── breadcrumb.rb │ │ │ ├── class_methods.rb │ │ │ ├── finder.rb │ │ │ └── params.rb │ │ ├── dci │ │ │ └── controllers │ │ │ │ ├── account.rb │ │ │ │ └── application.rb │ │ └── ssh_keys_manager.rb │ ├── container_events_controller.rb │ ├── containers_manager_controller.rb │ ├── credentials_controller.rb │ ├── dci_controller.rb │ ├── deploy_it_auth_controller.rb │ ├── deploy_it_ident_controller.rb │ ├── members_controller.rb │ ├── my_controller.rb │ ├── public_keys_controller.rb │ ├── registrations_controller.rb │ ├── sessions_controller.rb │ └── welcome_controller.rb ├── datatables │ └── container_event_datatable.rb ├── forms │ ├── admin_password_form.rb │ ├── application_creation_wizard_form.rb │ ├── credential_creation_form.rb │ └── user_creation_form.rb ├── helpers │ ├── admin │ │ ├── applications_helper.rb │ │ ├── roles_helper.rb │ │ ├── servers_helper.rb │ │ ├── settings_helper.rb │ │ └── users_helper.rb │ ├── application_helper.rb │ ├── applications_helper.rb │ ├── credentials_helper.rb │ ├── html_helpers │ │ ├── ajax_helper.rb │ │ ├── buttons_helper.rb │ │ ├── data_tables_helper.rb │ │ ├── dates_helper.rb │ │ ├── flashes_helper.rb │ │ ├── highcharts_helper.rb │ │ ├── icons_helper.rb │ │ ├── labels_helper.rb │ │ ├── links_helper.rb │ │ ├── misc_helper.rb │ │ ├── presenter_helper.rb │ │ ├── sidebar_helper.rb │ │ ├── tab_helper.rb │ │ └── zero_clipboard_helper.rb │ ├── navigation_helper.rb │ ├── repositories_helper.rb │ └── ssh_keys_manager_helper.rb ├── jobs │ ├── application_job.rb │ ├── base_job.rb │ ├── build_job.rb │ ├── container_job.rb │ └── repository_job.rb ├── mailers │ ├── .keep │ └── registration_mailer.rb ├── models │ ├── anonymous_user.rb │ ├── application.rb │ ├── application_addon.rb │ ├── application_credential.rb │ ├── application_database.rb │ ├── application_record.rb │ ├── application_repository.rb │ ├── application_type.rb │ ├── build.rb │ ├── buildpack.rb │ ├── concerns │ │ ├── acts_as │ │ │ ├── ansible_server.rb │ │ │ ├── docker_application.rb │ │ │ ├── docker_container.rb │ │ │ ├── docker_server.rb │ │ │ ├── log_server.rb │ │ │ ├── mysql_server.rb │ │ │ ├── postgres_server.rb │ │ │ ├── rolable_server.rb │ │ │ ├── rugged_repository.rb │ │ │ ├── ssh_credential.rb │ │ │ └── ssh_server.rb │ │ ├── authorizable.rb │ │ ├── docker_application.rb │ │ ├── docker_application │ │ │ ├── have_authorizations.rb │ │ │ ├── have_config_files.rb │ │ │ ├── have_default_params.rb │ │ │ ├── have_env_vars.rb │ │ │ ├── have_mount_points.rb │ │ │ └── have_multi_step_creation.rb │ │ ├── have_db_references.rb │ │ └── platform_server.rb │ ├── config.rb │ ├── container.rb │ ├── container_event.rb │ ├── container_repository.rb │ ├── docker_image.rb │ ├── domain_name.rb │ ├── env_var.rb │ ├── group.rb │ ├── jbox_role_module.rb │ ├── lock.rb │ ├── member.rb │ ├── member_role.rb │ ├── mount_point.rb │ ├── platform.rb │ ├── platform_credential.rb │ ├── push.rb │ ├── release.rb │ ├── repository.rb │ ├── repository_credential.rb │ ├── repository_credential │ │ ├── basic_auth.rb │ │ └── ssh_key.rb │ ├── reserved_name.rb │ ├── role.rb │ ├── server.rb │ ├── server_role.rb │ ├── settings.rb │ ├── ssh_public_key.rb │ ├── ssl_certificate.rb │ ├── stage.rb │ └── user.rb ├── presenters │ ├── application_toolbar_presenter.rb │ ├── container_presenter.rb │ ├── easy_app │ │ ├── data_column.rb │ │ ├── data_table_presenter.rb │ │ └── search_form_builder.rb │ ├── flash_message_presenter.rb │ ├── server_module_activation_presenter.rb │ ├── server_presenter.rb │ └── stage_presenter.rb ├── proxies │ ├── ansible_proxy.rb │ ├── docker_container_proxy.rb │ ├── docker_server_proxy.rb │ ├── rugged_proxy.rb │ └── ssh_proxy.rb ├── services │ ├── async_events │ │ ├── base.rb │ │ ├── notification.rb │ │ └── view_refresh.rb │ ├── authentifier.rb │ ├── authorizer.rb │ ├── build_manager.rb │ ├── dci │ │ ├── contexts │ │ │ ├── base.rb │ │ │ ├── console.rb │ │ │ └── controller.rb │ │ └── roles │ │ │ ├── account_manager.rb │ │ │ ├── application_common.rb │ │ │ ├── application_config_manager.rb │ │ │ ├── application_manager.rb │ │ │ ├── application_membership_manager.rb │ │ │ ├── base.rb │ │ │ ├── repository_credentials_manager.rb │ │ │ └── user_membership_manager.rb │ ├── deploy_it_task.rb │ ├── docker_plugin.rb │ └── refresh_view_event.rb ├── use_cases │ ├── applications │ │ ├── database │ │ │ ├── base.rb │ │ │ ├── create_physical_database.rb │ │ │ ├── destroy_physical_database.rb │ │ │ └── reset_physical_database.rb │ │ ├── docker │ │ │ ├── base.rb │ │ │ ├── build.rb │ │ │ ├── compile.rb │ │ │ ├── delete_containers.rb │ │ │ ├── pause.rb │ │ │ ├── publish.rb │ │ │ ├── release.rb │ │ │ ├── rename_containers.rb │ │ │ ├── restart.rb │ │ │ ├── scale.rb │ │ │ ├── start.rb │ │ │ ├── stop.rb │ │ │ └── unpause.rb │ │ ├── files │ │ │ ├── bootstrap.rb │ │ │ ├── destroy_forever.rb │ │ │ └── update_files.rb │ │ ├── params │ │ │ ├── create_relations.rb │ │ │ ├── restore_env_vars.rb │ │ │ └── restore_mount_points.rb │ │ └── router │ │ │ ├── base.rb │ │ │ ├── create_lb_route.rb │ │ │ └── destroy_lb_route.rb │ ├── builds │ │ └── perform_task.rb │ ├── containers │ │ ├── base.rb │ │ ├── deploy.rb │ │ ├── destroy_forever.rb │ │ ├── pause.rb │ │ ├── restart.rb │ │ ├── start.rb │ │ ├── stop.rb │ │ └── unpause.rb │ ├── helpers │ │ ├── ansible.rb │ │ └── docker.rb │ ├── repositories │ │ ├── clone.rb │ │ ├── create_archive.rb │ │ ├── destroy_forever.rb │ │ ├── init_bare.rb │ │ └── resync.rb │ └── servers │ │ ├── check_connection.rb │ │ └── recreate_inventory_file.rb └── views │ ├── admin │ ├── application_types │ │ ├── _applications.html.haml │ │ ├── _form.html.haml │ │ ├── edit.html.haml │ │ ├── index.html.haml │ │ └── new.html.haml │ ├── applications │ │ ├── _application.html.haml │ │ ├── _list.html.haml │ │ ├── ajax │ │ │ ├── manage.js.erb │ │ │ └── status.js.erb │ │ └── index.html.haml │ ├── buildpacks │ │ ├── _form.html.haml │ │ ├── edit.html.haml │ │ ├── index.html.haml │ │ └── new.html.haml │ ├── dashboard │ │ └── index.html.haml │ ├── docker_images │ │ ├── _form.html.haml │ │ ├── edit.html.haml │ │ ├── index.html.haml │ │ └── new.html.haml │ ├── groups │ │ ├── _form.html.haml │ │ ├── edit.html.haml │ │ ├── index.html.haml │ │ └── new.html.haml │ ├── locks │ │ └── index.html.haml │ ├── memberships │ │ ├── _form.html.haml │ │ ├── _index.html.haml │ │ ├── _listing.html.haml │ │ ├── _membership.html.haml │ │ ├── ajax │ │ │ ├── create.js.erb │ │ │ ├── destroy.js.erb │ │ │ └── update.js.erb │ │ ├── edit.js.erb │ │ └── index.js.erb │ ├── platforms │ │ ├── _credential.html.haml │ │ ├── _delete.html.haml │ │ ├── _form.html.haml │ │ ├── edit.html.haml │ │ ├── index.html.haml │ │ ├── new.html.haml │ │ ├── show.html.haml │ │ ├── stages.js.erb │ │ └── update.js.erb │ ├── public_keys │ │ ├── _index.html.haml │ │ ├── ajax │ │ │ ├── create.js.erb │ │ │ └── destroy.js.erb │ │ └── index.js.erb │ ├── reserved_names │ │ ├── _form.html.haml │ │ ├── edit.html.haml │ │ ├── index.html.haml │ │ └── new.html.haml │ ├── roles │ │ ├── _form.html.haml │ │ ├── edit.html.haml │ │ ├── index.html.haml │ │ ├── new.html.haml │ │ └── permissions.html.haml │ ├── servers │ │ ├── _index.html.haml │ │ ├── ajax │ │ │ ├── status.js.erb │ │ │ ├── toggle_role.js.erb │ │ │ ├── update.js.erb │ │ │ └── update_roles.js.erb │ │ ├── edit.html.haml │ │ ├── edit │ │ │ ├── _delete.html.haml │ │ │ ├── _modules.html.haml │ │ │ ├── _roles.html.haml │ │ │ └── _settings.html.haml │ │ └── new.html.haml │ ├── settings │ │ ├── _addons.html.haml │ │ ├── _settings.html.haml │ │ ├── _versions.html.haml │ │ └── index.html.haml │ ├── stages │ │ ├── _delete.html.haml │ │ ├── _form.html.haml │ │ ├── _index.html.haml │ │ ├── edit.html.haml │ │ └── new.html.haml │ └── users │ │ ├── _form.html.haml │ │ ├── _user.html.haml │ │ ├── change_password.html.haml │ │ ├── edit.html.haml │ │ ├── edit_tabs │ │ └── _settings.html.haml │ │ ├── index.html.haml │ │ └── new.html.haml │ ├── applications │ ├── _activities.html.haml │ ├── _containers.html.haml │ ├── _events.html.haml │ ├── _list.html.haml │ ├── _repositories.html.haml │ ├── _show.html.haml │ ├── activities.html.haml │ ├── ajax │ │ └── create.js.erb │ ├── containers.html.haml │ ├── creation_steps │ │ ├── _select_params.html.haml │ │ ├── _select_params2.html.haml │ │ └── _submit_form.html.haml │ ├── events.html.haml │ ├── index.html.haml │ ├── new.html.haml │ ├── repositories.html.haml │ ├── show.html.haml │ └── show │ │ ├── _addons.html.haml │ │ ├── _console.html.haml │ │ ├── _container_event.html.haml │ │ ├── _containers.html.haml │ │ ├── _credentials.html.haml │ │ ├── _distant_repo.html.haml │ │ ├── _domain_aliases.html.haml │ │ ├── _domain_redirects.html.haml │ │ ├── _env_vars.html.haml │ │ ├── _instructions.html.haml │ │ ├── _local_repo.html.haml │ │ ├── _members.html.haml │ │ ├── _mount_points.html.haml │ │ ├── _releases.html.haml │ │ ├── _repo_common.html.haml │ │ ├── _settings.html.haml │ │ ├── _settings_status.html.haml │ │ └── _status.html.haml │ ├── applications_config │ ├── add_addon.html.haml │ ├── addons.html.haml │ ├── ajax │ │ ├── add_addon.js.erb │ │ ├── addons.js.erb │ │ ├── credentials.js.erb │ │ ├── database.js.erb │ │ ├── domain_names.js.erb │ │ ├── env_vars.js.erb │ │ ├── mount_points.js.erb │ │ ├── repository.js.erb │ │ ├── reset_database.js.erb │ │ ├── settings.js.erb │ │ ├── ssl_certificate.js.erb │ │ ├── synchronize_repository.js.erb │ │ ├── toggle_credentials.js.erb │ │ └── toggle_ssl.js.erb │ ├── credentials.html.haml │ ├── database.html.haml │ ├── domain_names.html.haml │ ├── env_vars.html.haml │ ├── mount_points.html.haml │ ├── partials │ │ ├── _add_addon.html.haml │ │ ├── _addons.html.haml │ │ ├── _credential.html.haml │ │ ├── _credentials.html.haml │ │ ├── _database.html.haml │ │ ├── _domain_names.html.haml │ │ ├── _env_vars.html.haml │ │ ├── _mount_points.html.haml │ │ ├── _repository.html.haml │ │ ├── _settings.html.haml │ │ └── _ssl_certificate.html.haml │ ├── repository.html.haml │ ├── settings.html.haml │ └── ssl_certificate.html.haml │ ├── applications_manager │ └── ajax │ │ ├── build.js.erb │ │ ├── manage.js.erb │ │ ├── status.js.erb │ │ └── toolbar.js.erb │ ├── common │ ├── _application_partial.html.haml │ ├── _application_template.html.haml │ ├── ajax.js.erb │ └── error.html.haml │ ├── container_events │ └── ajax │ │ └── mark_event.js.erb │ ├── containers_manager │ ├── ajax │ │ ├── manage.js.erb │ │ ├── mark_events.js.erb │ │ └── top.js.erb │ ├── infos.html.haml │ └── top.html.haml │ ├── credentials │ ├── _edit_basic_auth.html.haml │ ├── _edit_ssh_key.html.haml │ ├── edit.html.haml │ └── new.html.haml │ ├── devise │ ├── confirmations │ │ └── new.html.haml │ ├── mailer │ │ ├── confirmation_instructions.html.haml │ │ ├── reset_password_instructions.html.haml │ │ └── unlock_instructions.html.haml │ ├── passwords │ │ ├── edit.html.haml │ │ └── new.html.haml │ ├── registrations │ │ ├── edit.html.haml │ │ └── new.html.haml │ ├── sessions │ │ └── new.html.haml │ ├── shared │ │ └── _links.haml │ └── unlocks │ │ └── new.html.haml │ ├── layouts │ ├── _page.html.haml │ ├── application.html.haml │ ├── common │ │ ├── _head.html.haml │ │ ├── _javascript.html.erb │ │ ├── _navigation.html.haml │ │ └── _topnavbar.html.haml │ ├── docker_app.html.haml │ ├── login.html.haml │ └── modal.html.haml │ ├── mailers │ ├── password_changed.html.erb │ ├── password_changed.text.erb │ ├── welcome.html.erb │ └── welcome.text.erb │ ├── members │ ├── _form.html.haml │ ├── _index.html.haml │ ├── _member.html.haml │ ├── _members.html.haml │ ├── _single_member.html.haml │ ├── ajax │ │ ├── create.js.erb │ │ ├── destroy.js.erb │ │ └── update.js.erb │ ├── edit.js.erb │ └── index.html.haml │ ├── my │ ├── account.html.haml │ └── ajax │ │ └── reset_api_key.js.erb │ ├── public_keys │ ├── _index.html.haml │ ├── ajax │ │ ├── create.js.erb │ │ └── destroy.js.erb │ └── index.html.haml │ ├── ssh_keys_manager │ ├── _form.html.haml │ ├── _index.html.haml │ └── _ssh_keys.html.haml │ └── welcome │ ├── help.html.haml │ └── index.html.haml ├── bin ├── bundle ├── cap ├── deploy-it-authentifier ├── deploy-it-builder ├── deploy-it-identifier ├── foreman ├── puma ├── pumactl ├── rails ├── rake ├── rspec ├── rubocop ├── setup ├── sidekiq ├── sidekiqmon ├── spring ├── squasher ├── update └── yarn ├── config.ru ├── config ├── application.rb ├── boot.rb ├── cable.yml ├── database.yml ├── deploy.rb ├── deploy │ ├── .keep │ └── templates │ │ └── shared │ │ ├── foreman │ │ ├── master.target.erb │ │ ├── process.service.erb │ │ └── process_master.target.erb │ │ ├── logrotate.conf.erb │ │ ├── nginx.conf.erb │ │ ├── sudoers.conf.erb │ │ ├── syslog-ng.conf.erb │ │ └── systemd.erb ├── environment.rb ├── environments │ ├── development.rb │ ├── production.rb │ └── test.rb ├── i18n-tasks.yml ├── initializers │ ├── 01-figaro.rb │ ├── 02-inflections.rb │ ├── 03-devise.rb │ ├── 04-deploy_it.rb │ ├── active_use_case.rb │ ├── application_controller_renderer.rb │ ├── assets.rb │ ├── backtrace_silencers.rb │ ├── bullet.rb │ ├── cookies_serializer.rb │ ├── crummy.rb │ ├── exception_notification.rb │ ├── filter_parameter_logging.rb │ ├── groupdate.rb │ ├── haml.rb │ ├── log_formatter.rb │ ├── mime_types.rb │ ├── new_framework_defaults_5_1.rb │ ├── notifications.rb │ ├── permissions.rb │ ├── session_store.rb │ ├── sidekiq.rb │ ├── simple_navigation.rb │ └── wrap_parameters.rb ├── locales │ ├── en │ │ └── base.yml │ └── fr │ │ ├── base.yml │ │ ├── datatables.yml │ │ ├── date.yml │ │ ├── devise.yml │ │ ├── errors.yml │ │ ├── forms │ │ ├── admin_password_form.yml │ │ ├── credential_creation_form.yml │ │ ├── credential_update_form.yml │ │ ├── public_key_creation_form.yml │ │ └── user_creation_form.yml │ │ ├── highcharts.yml │ │ ├── mailers │ │ └── registration_mailer.yml │ │ ├── models │ │ ├── application.yml │ │ ├── application_addon.yml │ │ ├── application_credential.yml │ │ ├── application_database.yml │ │ ├── application_type.yml │ │ ├── build.yml │ │ ├── buildpack.yml │ │ ├── container.yml │ │ ├── container_event.yml │ │ ├── docker_image.yml │ │ ├── domain_name.yml │ │ ├── env_var.yml │ │ ├── group.yml │ │ ├── lock.yml │ │ ├── member.yml │ │ ├── member_role.yml │ │ ├── mount_point.yml │ │ ├── platform.yml │ │ ├── platform_credential.yml │ │ ├── release.yml │ │ ├── repository.yml │ │ ├── repository_credential.yml │ │ ├── reserved_name.yml │ │ ├── role.yml │ │ ├── server.yml │ │ ├── server_role.yml │ │ ├── settings.yml │ │ ├── ssh_public_key.yml │ │ ├── ssl_certificate.yml │ │ ├── stage.yml │ │ └── user.yml │ │ ├── pagination.yml │ │ ├── permissions.yml │ │ ├── settings.yml │ │ ├── use_cases │ │ ├── application.yml │ │ ├── container.yml │ │ └── repository.yml │ │ └── views │ │ ├── admin │ │ ├── application_types.yml │ │ ├── applications.yml │ │ ├── buildpacks.yml │ │ ├── docker_images.yml │ │ ├── groups.yml │ │ ├── locks.yml │ │ ├── memberships.yml │ │ ├── platforms.yml │ │ ├── public_keys.yml │ │ ├── reserved_names.yml │ │ ├── roles.yml │ │ ├── servers.yml │ │ ├── settings.yml │ │ ├── stages.yml │ │ └── users.yml │ │ ├── applications.yml │ │ ├── applications_config.yml │ │ ├── applications_manager.yml │ │ ├── containers_manager.yml │ │ ├── credentials.yml │ │ ├── members.yml │ │ ├── my.yml │ │ ├── public_keys.yml │ │ ├── ssh_keys_manager.yml │ │ └── welcome.yml ├── navigation │ ├── admin_navigation.rb │ ├── my_navigation.rb │ ├── topbar_right_navigation.rb │ └── user_navigation.rb ├── puma.rb ├── routes.rb ├── secrets.yml ├── settings.yml ├── sidekiq.yml └── spring.rb ├── db ├── migrate │ ├── 20160105093916_init_schema.rb │ └── 20201219113803_squasher_clean.rb ├── schema.rb └── seeds.rb ├── lib ├── addons │ ├── memcached.yml │ └── redis.yml ├── ansible_tasks │ ├── database │ │ ├── mysql-database-creator.yml │ │ ├── mysql-database-destroyer.yml │ │ ├── postgres-database-creator.yml │ │ └── postgres-database-destroyer.yml │ └── router │ │ ├── route-creator.yml │ │ ├── route-destroyer.yml │ │ ├── ssl_cert.tmpl │ │ └── ssl_key.tmpl ├── capistrano │ └── tasks │ │ ├── config.rake │ │ ├── favicon.rake │ │ ├── foreman.rake │ │ └── maintenance.rake ├── core_ext │ ├── hash │ │ ├── append_merge.rb │ │ ├── map_keys.rb │ │ └── to_env.rb │ └── string │ │ └── quote.rb ├── deploy_it.rb ├── deploy_it │ ├── access_control.rb │ ├── addons.rb │ ├── core_ext │ │ └── bootstrap_form_patch.rb │ ├── error.rb │ ├── loggers │ │ ├── async_logs.rb │ │ ├── common_logger.rb │ │ ├── console_logs.rb │ │ └── file_logs.rb │ ├── theme.rb │ ├── utils.rb │ ├── utils │ │ ├── crypto.rb │ │ ├── exec.rb │ │ ├── files.rb │ │ ├── git.rb │ │ ├── http.rb │ │ ├── ssh.rb │ │ └── ssl.rb │ └── version.rb └── tasks │ ├── ci_tools.rake │ ├── deploy_it.rake │ └── setup.rake ├── log └── .keep ├── plugins └── database │ ├── command.rb │ └── files │ └── task-runner.sh ├── public ├── 404.html ├── 422.html ├── 500.html ├── favicon.ico ├── maintenance.html └── robots.txt ├── spec ├── factories │ ├── application.rb │ ├── application_type.rb │ ├── basic_auth.rb │ ├── build.rb │ ├── env_var.rb │ ├── group.rb │ ├── member.rb │ ├── member_role.rb │ ├── mount_point.rb │ ├── platform.rb │ ├── platform_credential.rb │ ├── push.rb │ ├── repository_credential.rb │ ├── role.rb │ ├── server.rb │ ├── ssh_key.rb │ ├── ssl_certificate.rb │ ├── stage.rb │ └── user.rb ├── models │ ├── anonymous_user_spec.rb │ ├── application_spec.rb │ ├── application_type_spec.rb │ ├── basic_auth_spec.rb │ ├── build_spec.rb │ ├── env_var_spec.rb │ ├── group_spec.rb │ ├── member_role_spec.rb │ ├── member_spec.rb │ ├── mount_point_spec.rb │ ├── platform_credential_spec.rb │ ├── platform_spec.rb │ ├── push_spec.rb │ ├── repository_credential_spec.rb │ ├── role_spec.rb │ ├── server_spec.rb │ ├── ssh_key_spec.rb │ ├── ssl_certificate_spec.rb │ ├── stage_spec.rb │ └── user_spec.rb ├── rails_helper.rb ├── spec_helper.rb └── support │ └── global_helpers.rb ├── tmp └── .keep ├── vendor └── assets │ ├── javascripts │ ├── action_form.js │ ├── datatables │ │ ├── datatables.min.js │ │ ├── factory.js.coffee │ │ ├── jquery.dataTables.yadcf.js │ │ ├── loader.js.coffee │ │ └── pdfmake.min.js.map │ ├── jquery_nested_form.js │ └── sb-admin │ │ ├── bootstrap_helper.js.coffee │ │ ├── metisMenu.js │ │ └── sb-admin-2.js.coffee │ └── stylesheets │ ├── datatables │ ├── context_menu.scss │ ├── datatables.font-awesome.css │ ├── datatables.min.css │ └── jquery.dataTables.yadcf.css │ └── sb-admin │ ├── bootstrap-custom.scss │ ├── custom │ ├── bootstrap.css │ ├── datatables.css │ ├── datepicker.css │ ├── icons.css │ └── select2.css │ ├── font_awesome.scss │ ├── metisMenu.css │ └── sb-admin-2.css └── wrappers ├── deploy-it-authentifier ├── deploy-it-builder └── ssh-git.sh /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | languages: 2 | Ruby: true 3 | JavaScript: true 4 | PHP: false 5 | Python: false 6 | exclude_paths: 7 | - "vendor/assets/" 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore bundler config. 2 | /.bundle 3 | 4 | # Ignore .rspec 5 | /.rspec 6 | 7 | # Ignore the default SQLite database. 8 | /db/*.sqlite3 9 | /db/*.sqlite3-journal 10 | 11 | # Ignore all logfiles and tempfiles. 12 | /log/* 13 | /tmp/* 14 | !/log/.keep 15 | !/tmp/.keep 16 | 17 | # Ignore Byebug command history file. 18 | .byebug_history 19 | 20 | # Ignore test files 21 | /coverage 22 | 23 | # Ignore Dotenv files 24 | /.env 25 | /.env.* 26 | 27 | # Ignore generated assets 28 | /public/assets 29 | 30 | # Gems in development 31 | /vendor/gems 32 | 33 | # Ignore Deploy file 34 | /deploy/application.conf 35 | /config/deploy/production.rb 36 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | AllCops: 2 | TargetRubyVersion: 2.5 3 | Exclude: 4 | - bin/* 5 | - spec/**/* 6 | - db/migrate/*.rb 7 | - db/schema.rb 8 | - lib/**/*.rake 9 | 10 | Layout/EmptyLinesAroundAttributeAccessor: 11 | Enabled: false 12 | 13 | Layout/SpaceAroundMethodCallOperator: 14 | Enabled: false 15 | 16 | Lint/DeprecatedOpenSSLConstant: 17 | Enabled: false 18 | 19 | Lint/MixedRegexpCaptureTypes: 20 | Enabled: false 21 | 22 | Lint/RaiseException: 23 | Enabled: false 24 | 25 | Lint/StructNewOverride: 26 | Enabled: false 27 | 28 | Style/ExponentialNotation: 29 | Enabled: false 30 | 31 | Style/HashEachMethods: 32 | Enabled: false 33 | 34 | Style/HashTransformKeys: 35 | Enabled: false 36 | 37 | Style/HashTransformValues: 38 | Enabled: false 39 | 40 | Style/RedundantRegexpCharacterClass: 41 | Enabled: false 42 | 43 | Style/RedundantRegexpEscape: 44 | Enabled: false 45 | 46 | Style/SlicingWithRange: 47 | Enabled: false 48 | 49 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.7.2 2 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Nicolas Rodriguez 2 | -------------------------------------------------------------------------------- /Capfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # Load DSL and set up stages 3 | require 'capistrano/setup' 4 | 5 | # Include default deployment tasks 6 | require 'capistrano/deploy' 7 | 8 | # Include tasks from other gems included in your Gemfile 9 | # 10 | # For documentation on these, see for example: 11 | # 12 | # https://github.com/capistrano/rvm 13 | # https://github.com/capistrano/rbenv 14 | # https://github.com/capistrano/chruby 15 | # https://github.com/capistrano/bundler 16 | # https://github.com/capistrano/rails 17 | # https://github.com/capistrano/passenger 18 | # 19 | require 'capistrano/rbenv' 20 | require 'capistrano/rails' 21 | require 'capistrano/foreman' 22 | require 'capistrano/capistrano_plugin_template' 23 | 24 | # Load SCM plugin 25 | require 'capistrano/scm/git' 26 | install_plugin Capistrano::SCM::Git 27 | 28 | # Load custom tasks from `lib/capistrano/tasks` if you have any defined 29 | Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r } 30 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: bin/puma -C config/puma.rb 2 | worker: bin/sidekiq -C config/sidekiq.yml 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Deploy'It 2 | 3 | [![GitHub license](https://img.shields.io/github/license/jbox-web/deploy-it.svg)](https://github.com/jbox-web/deploy-it/blob/master/LICENSE) 4 | [![GitHub release](https://img.shields.io/github/release/jbox-web/deploy-it.svg)](https://github.com/jbox-web/deploy-it/releases/latest) 5 | [![Code Climate](https://codeclimate.com/github/jbox-web/deploy-it.png)](https://codeclimate.com/github/jbox-web/deploy-it) 6 | 7 | Host your own private Heroku, easy ;) 8 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # Add your own tasks in files placed in lib/tasks ending in .rake, 3 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 4 | 5 | require File.expand_path('../config/application', __FILE__) 6 | 7 | Rails.application.load_tasks 8 | -------------------------------------------------------------------------------- /SCALE: -------------------------------------------------------------------------------- 1 | web=1 2 | worker=1 3 | -------------------------------------------------------------------------------- /app/assets/config/manifest.js: -------------------------------------------------------------------------------- 1 | //= link devise/application.css 2 | //= link devise/application.js 3 | //= link main/application.css 4 | //= link main/application.js 5 | //= link paste.png 6 | //= link redis.svg 7 | //= link memcached.png 8 | -------------------------------------------------------------------------------- /app/assets/images/memcached.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/app/assets/images/memcached.png -------------------------------------------------------------------------------- /app/assets/images/paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/app/assets/images/paste.png -------------------------------------------------------------------------------- /app/assets/javascripts/main/admin/applications.js.coffee: -------------------------------------------------------------------------------- 1 | root = exports ? this 2 | 3 | root.getApplicationsStatus = -> 4 | $('.application-status').each -> 5 | getData(this) 6 | -------------------------------------------------------------------------------- /app/assets/javascripts/main/cable.js: -------------------------------------------------------------------------------- 1 | //= require action_cable 2 | //= require_self 3 | //= require_tree ./channels 4 | 5 | (function() { 6 | this.App || (this.App = {}); 7 | 8 | App.cable = ActionCable.createConsumer('/cable'); 9 | }).call(this); 10 | -------------------------------------------------------------------------------- /app/assets/javascripts/main/channels/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/app/assets/javascripts/main/channels/.keep -------------------------------------------------------------------------------- /app/assets/javascripts/main/membership.js.coffee: -------------------------------------------------------------------------------- 1 | root = exports ? this 2 | 3 | root.setHideOnLoad = -> 4 | $('.hol').hide() 5 | -------------------------------------------------------------------------------- /app/assets/javascripts/main/servers.js.coffee: -------------------------------------------------------------------------------- 1 | root = exports ? this 2 | 3 | root.getServerStatus = -> 4 | $('.connexion-status').each -> 5 | getData(this) 6 | -------------------------------------------------------------------------------- /app/assets/javascripts/main/ssh_keys_manager.js.coffee: -------------------------------------------------------------------------------- 1 | root = exports ? this 2 | 3 | root.resetForm = (form) -> 4 | $(form).trigger('reset') 5 | $(form).find('input[type=text], textarea').val('') 6 | $(form).find('span.help-block').remove() 7 | $(form).find('div.form-group').removeClass('has-error') 8 | -------------------------------------------------------------------------------- /app/assets/javascripts/main/users.js.coffee: -------------------------------------------------------------------------------- 1 | root = exports ? this 2 | 3 | root.setCreateUserForm = -> 4 | selectPasswordCreationMode() 5 | 6 | 7 | selectPasswordCreationMode = -> 8 | $(document).on 'change', '#select-password-creation-mode input:radio', -> 9 | value = $("#select-password-creation-mode input[type='radio']:checked").val() 10 | if (value == 'manual') 11 | $('#password-manual-creation').show() 12 | else 13 | $('#password-manual-creation').hide() 14 | -------------------------------------------------------------------------------- /app/assets/javascripts/main/utils.js.coffee: -------------------------------------------------------------------------------- 1 | root = exports ? this 2 | 3 | root.currentController = -> 4 | $('body').data('controller') 5 | 6 | 7 | root.currentAction = -> 8 | $('body').data('action') 9 | 10 | 11 | root.getData = (element) -> 12 | url = $(element).data("refresh-url") 13 | icons = $(element).children('span').children('i') 14 | icons.each -> 15 | $(this).removeClass() 16 | $(this).addClass('fa fa-spinner fa-spin fa-align') 17 | $.ajax url: url, dataType: 'script' 18 | 19 | 20 | root.toggleCheckboxesBySelector = (selector) -> 21 | all_checked = true 22 | $(selector).each -> all_checked = false if !($(this).is(':checked')) 23 | $(selector).each -> $(this).prop('checked', !all_checked) 24 | 25 | 26 | root.highlight = (element) -> 27 | $(element).effect("highlight", {color: '#B0D6D6'}, 1500) 28 | -------------------------------------------------------------------------------- /app/assets/stylesheets/main/icons.css: -------------------------------------------------------------------------------- 1 | .fa-align { 2 | padding-right: 5px; 3 | } 4 | 5 | .fa-success { 6 | color: #5cb85c; 7 | } 8 | -------------------------------------------------------------------------------- /app/assets/stylesheets/main/platforms.css: -------------------------------------------------------------------------------- 1 | #stages .panel-heading, 2 | #servers .panel-heading { 3 | font-size: 20px; 4 | } 5 | -------------------------------------------------------------------------------- /app/assets/stylesheets/main/popover.css: -------------------------------------------------------------------------------- 1 | .popover { 2 | color: #000; 3 | width: 250px; 4 | } 5 | 6 | .popover-content { 7 | font-size: 12px; 8 | } 9 | 10 | .popover-content > ul { 11 | margin-bottom: 0px; 12 | } 13 | 14 | .popover-content > ul > li { 15 | line-height: 1.6em; 16 | } 17 | -------------------------------------------------------------------------------- /app/assets/stylesheets/main/roles.css: -------------------------------------------------------------------------------- 1 | #roles .handle { 2 | font-size: 12px; 3 | color: #777; 4 | cursor: move; 5 | } 6 | 7 | #roles .ui-state-disabled { 8 | opacity: 1; 9 | } 10 | 11 | /*PERMISSIONS IN ADMIN VIEW*/ 12 | .box { 13 | background: none repeat scroll 0 0 #fafafa; 14 | border: 1px solid #e0e2e3; 15 | border-radius: 3px; 16 | padding: 15px; 17 | } 18 | 19 | .tabular label.floating { 20 | font-weight: normal; 21 | padding: 5px; 22 | margin-left: 0; 23 | text-align: left; 24 | width: 270px; 25 | } 26 | 27 | .tabular label { 28 | float: left; 29 | font-weight: bold; 30 | margin-left: -180px; 31 | text-align: right; 32 | width: 175px; 33 | } 34 | 35 | .tabular fieldset { 36 | padding-bottom: 10px; 37 | } 38 | 39 | .tabular legend { 40 | font-size: 14px; 41 | font-weight: bold; 42 | } 43 | 44 | .toggle-checkbox { 45 | margin: 5px; 46 | } 47 | -------------------------------------------------------------------------------- /app/assets/stylesheets/main/servers.scss: -------------------------------------------------------------------------------- 1 | li.connexion-status { 2 | margin: 5px; 3 | span { 4 | margin: 5px; 5 | } 6 | } 7 | 8 | #server-roles { 9 | li.server-module.disabled { 10 | opacity: 0.5; 11 | &:hover { 12 | opacity: 1; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/assets/stylesheets/main/ssh_keys.css: -------------------------------------------------------------------------------- 1 | li.ssh-key { 2 | line-height: 18px; 3 | padding: 15px; 4 | position: relative; 5 | } 6 | 7 | .ssh-key-details { 8 | margin-right: 150px; 9 | position: relative; 10 | } 11 | 12 | li.ssh-key .ssh-key-icon { 13 | float: left; 14 | margin-left: 15px; 15 | margin-right: 15px; 16 | margin-top: 1px; 17 | text-align: center; 18 | width: 32px; 19 | } 20 | 21 | .ssh-key-title { 22 | display: block; 23 | } 24 | 25 | .ssh-key-fingerprint { 26 | color: #999; 27 | font-weight: normal; 28 | } 29 | 30 | #ssh_key_public_key { 31 | height: 100px; 32 | font-family: monospace; 33 | } 34 | 35 | #ssh_key_private_key { 36 | height: 300px; 37 | font-family: monospace; 38 | } 39 | 40 | .minibutton { 41 | line-height: 24px; 42 | padding: 0 10px; 43 | } 44 | 45 | .public_key { 46 | -webkit-box-sizing: border-box; 47 | -moz-box-sizing: border-box; 48 | box-sizing: border-box; 49 | 50 | width: 100%; 51 | } 52 | -------------------------------------------------------------------------------- /app/channels/application_cable/channel.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | module ApplicationCable 3 | class Channel < ActionCable::Channel::Base 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/channels/application_cable/connection.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | module ApplicationCable 3 | class Connection < ActionCable::Connection::Base 4 | identified_by :current_user 5 | 6 | def connect 7 | self.current_user = find_verified_user 8 | end 9 | 10 | private 11 | 12 | def find_verified_user 13 | (current_user = env['warden'].user) ? current_user : reject_unauthorized_connection 14 | end 15 | 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /app/channels/console_channel.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | class ConsoleChannel < ApplicationCable::Channel 3 | def subscribed 4 | stream_for "/console-streamer/#{params[:request_id]}" 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/channels/data_channel.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | class DataChannel < ApplicationCable::Channel 3 | def subscribed 4 | stream_for current_user.private_channel 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/controllers/admin/dashboard_controller.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class Admin::DashboardController < Admin::DefaultController 18 | 19 | def index 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /app/controllers/admin/dci_controller.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class Admin::DCIController < Admin::DefaultController 18 | include DCI::Contexts::Controller 19 | end 20 | -------------------------------------------------------------------------------- /app/controllers/admin/default_controller.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class Admin::DefaultController < ApplicationController 18 | before_action :require_admin 19 | set_sidebar_menu :admin 20 | end 21 | -------------------------------------------------------------------------------- /app/controllers/admin/settings_controller.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | require 'docker' 18 | 19 | class Admin::SettingsController < Admin::DefaultController 20 | 21 | def index 22 | 23 | end 24 | 25 | end 26 | -------------------------------------------------------------------------------- /app/controllers/dci_controller.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class DCIController < ApplicationController 18 | include DCI::Contexts::Controller 19 | end 20 | -------------------------------------------------------------------------------- /app/controllers/sessions_controller.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class SessionsController < Devise::SessionsController 18 | layout 'login' 19 | end 20 | -------------------------------------------------------------------------------- /app/controllers/welcome_controller.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class WelcomeController < ApplicationController 18 | 19 | 20 | def index 21 | end 22 | 23 | 24 | def help 25 | end 26 | 27 | end 28 | -------------------------------------------------------------------------------- /app/helpers/html_helpers/dates_helper.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | module HtmlHelpers 18 | module DatesHelper 19 | 20 | def render_date(date) 21 | date != '' ? l(date) : '' 22 | end 23 | 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /app/jobs/application_job.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class ApplicationJob < BaseJob 18 | 19 | queue_as :deploy_it_applications 20 | 21 | end 22 | -------------------------------------------------------------------------------- /app/jobs/base_job.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class BaseJob < ActiveJob::Base 18 | 19 | def perform(object, method, opts = {}) 20 | DeployItTask.perform(object, method, opts) 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /app/jobs/container_job.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class ContainerJob < BaseJob 18 | 19 | queue_as :deploy_it_containers 20 | 21 | end 22 | -------------------------------------------------------------------------------- /app/jobs/repository_job.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class RepositoryJob < BaseJob 18 | 19 | queue_as :deploy_it_repositories 20 | 21 | end 22 | -------------------------------------------------------------------------------- /app/mailers/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/app/mailers/.keep -------------------------------------------------------------------------------- /app/mailers/registration_mailer.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | class RegistrationMailer < ActionMailer::Base 3 | 4 | default from: Settings.mail_from 5 | 6 | def welcome(user, password) 7 | render_template('welcome', user, password) 8 | end 9 | 10 | 11 | def password_changed(user, password) 12 | render_template('password_changed', user, password) 13 | end 14 | 15 | 16 | private 17 | 18 | 19 | def render_template(template, user, password) 20 | @user = user 21 | @password = password 22 | @url = "#{Settings.access_url}/users/login" 23 | mail(to: @user.email, 24 | subject: t('.title'), 25 | template_path: 'mailers', 26 | template_name: template) 27 | end 28 | 29 | end 30 | -------------------------------------------------------------------------------- /app/presenters/easy_app/data_column.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | module EasyAPP 3 | class DataColumn 4 | 5 | def initialize(view, name, opts = {}) 6 | @view = view 7 | @name = name 8 | @opts = opts 9 | end 10 | 11 | 12 | def to_s 13 | @view.content_tag(:th, label, class: css_class) 14 | end 15 | 16 | 17 | def to_hash 18 | { className: css_class, visible: visible?, orderable: sortable?, searchable: searchable?, width: width, data: @name } 19 | end 20 | 21 | 22 | def label 23 | @opts.fetch(:label, '') 24 | end 25 | 26 | 27 | def sortable? 28 | @opts.fetch(:sortable, true) 29 | end 30 | 31 | 32 | def searchable? 33 | @opts.fetch(:searchable, true) 34 | end 35 | 36 | 37 | def visible? 38 | @opts.fetch(:visible, true) 39 | end 40 | 41 | 42 | def css_class 43 | @opts.fetch(:class, @name) 44 | end 45 | 46 | 47 | def width 48 | @opts.fetch(:width, '') 49 | end 50 | 51 | end 52 | end 53 | -------------------------------------------------------------------------------- /app/views/admin/application_types/_applications.html.haml: -------------------------------------------------------------------------------- 1 | .panel{ class: 'panel-default' } 2 | .panel-heading= label_with_icon(language, 'fa-language') 3 | .panel-body 4 | %table{ class: 'table table-hover' } 5 | %thead 6 | %tr 7 | %th= ApplicationType.human_attribute_name('name') 8 | %th= ApplicationType.human_attribute_name('version') 9 | %th= ApplicationType.human_attribute_name('json_attributes') 10 | 11 | %th{ colspan: '2' } 12 | 13 | %tbody 14 | - applications.each do |application_type| 15 | %tr 16 | %td= link_to application_type.name, edit_admin_application_type_path(application_type) 17 | %td= application_type.version 18 | %td= bool_to_icon application_type.has_extra_attributes? 19 | 20 | %td= button_clone clone_admin_application_type_path(application_type), class: 'btn-sm' 21 | %td= button_delete admin_application_type_path(application_type), class: 'btn-sm' 22 | -------------------------------------------------------------------------------- /app/views/admin/application_types/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | = f.text_field :version, required: true 3 | = f.select :language, DeployIt::AVAILABLE_LANGUAGES.collect {|p| [ p.capitalize, p ] }, prompt: true 4 | = f.text_area :json_attributes, control_col: "col-sm-8 col-md-8", class: 'code-mirror', data: { code_type: 'application/json' } 5 | 6 | = f.form_group do 7 | = f.success 8 | = f.cancel admin_application_types_path 9 | 10 | :javascript 11 | setCodeMirror() 12 | -------------------------------------------------------------------------------- /app/views/admin/application_types/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @application_type, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_application_type_path(@application_type), 11 | html: { method: :patch } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/application_types/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | = button_add new_admin_application_type_path 10 | 11 | = render 'admin/application_types/applications', applications: @application_types.php, language: 'Php' 12 | = render 'admin/application_types/applications', applications: @application_types.ruby, language: 'Ruby' 13 | = render 'admin/application_types/applications', applications: @application_types.python, language: 'Python' 14 | -------------------------------------------------------------------------------- /app/views/admin/application_types/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @application_type, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_application_types_path, 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/applications/_application.html.haml: -------------------------------------------------------------------------------- 1 | - cache application do 2 | = content_tag_for(:tr, application, class: 'application-status', data: { refresh_url: admin_application_status_path(application) }) do 3 | %td= link_to application.fullname, application_path(application), target: '_blank' 4 | %td= link_to_external application.domain_name 5 | %td= application.type 6 | %td= application.image_type 7 | %td= shorten_url application.buildpack 8 | %td 9 | %span{ class: 'action-status' }= label_with_default_tag :undefined 10 | %span{ class: 'action-result', style: 'display: none;' } 11 | %td= check_box_tag "application_ids[]", application.id, false, class: 'app-checkbox' unless application.state == :undeployed 12 | %td= link_to_icon 'fa-refresh', admin_application_status_path(application), remote: true 13 | -------------------------------------------------------------------------------- /app/views/admin/applications/_list.html.haml: -------------------------------------------------------------------------------- 1 | = bootstrap_form_tag url: manage_admin_applications_path, method: :post, remote: true do |f| 2 | %table{ class: 'table table-hover' } 3 | %thead 4 | %tr 5 | %th= Application.human_attribute_name('name') 6 | %th= Application.human_attribute_name('domain_name') 7 | %th= Application.human_attribute_name('version') 8 | %th= Application.human_attribute_name('image_type') 9 | %th= Application.human_attribute_name('buildpack') 10 | %th= Application.human_attribute_name('state') 11 | %th= button_select_all "toggleCheckboxesBySelector('input.app-checkbox'); return false;" 12 | %th 13 | 14 | %tbody 15 | - applications.each do |application| 16 | = render 'application', application: application 17 | 18 | = f.select "deploy_action", options_for_select(options_for_manage_application), prompt: t('.select.action'), skip_label: true 19 | = button_submit t('.button.execute') 20 | -------------------------------------------------------------------------------- /app/views/admin/applications/ajax/manage.js.erb: -------------------------------------------------------------------------------- 1 | <%= render_flash_messages_as_js %> 2 | <%= js_render_partial('#manage_applications', 'admin/applications/list', locals: { applications: applications }) %> 3 | -------------------------------------------------------------------------------- /app/views/admin/applications/ajax/status.js.erb: -------------------------------------------------------------------------------- 1 | $("#application_<%= application.id %> span.action-status") 2 | .html('<%= render_application_state(application.state) %>') 3 | .show(); 4 | <% if @after_action %> 5 | $("#application_<%= application.id %> span.action-result") 6 | .html('Done !') 7 | .show(); 8 | <% end %> 9 | -------------------------------------------------------------------------------- /app/views/admin/applications/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title get_model_name_for('Application') 2 | 3 | .row 4 | %div{ class: 'col-md-12' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | %span= @applications.size 10 | %small 11 | = surround '(', ')' do 12 | = button_refresh('getApplicationsStatus(); return false;') 13 | 14 | #manage_applications= render 'list', applications: @applications 15 | -------------------------------------------------------------------------------- /app/views/admin/buildpacks/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | = f.text_field :url, required: true, control_col: "col-sm-4 col-md-8" 3 | = f.text_area :description 4 | 5 | = f.form_group do 6 | = f.success 7 | = f.cancel admin_buildpacks_path 8 | -------------------------------------------------------------------------------- /app/views/admin/buildpacks/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @buildpack, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_buildpack_path(@buildpack), 11 | html: { method: :patch } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/buildpacks/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | = button_add new_admin_buildpack_path 10 | 11 | %table{ class: 'table table-hover' } 12 | %thead 13 | %tr 14 | %th= Buildpack.human_attribute_name('name') 15 | %th= Buildpack.human_attribute_name('url') 16 | %th= Buildpack.human_attribute_name('description') 17 | %th 18 | 19 | %tbody 20 | - @buildpacks.each do |buildpack| 21 | %tr 22 | %td= link_to buildpack.name, edit_admin_buildpack_path(buildpack) 23 | %td= buildpack.url 24 | %td= buildpack.description 25 | %td{ class: 'text-right' }= button_delete admin_buildpack_path(buildpack), class: 'btn-sm' 26 | -------------------------------------------------------------------------------- /app/views/admin/buildpacks/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @buildpack, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_buildpacks_path, 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/dashboard/index.html.haml: -------------------------------------------------------------------------------- 1 | %h2{ class: 'page-header' } Dashboard for admin ! 2 | -------------------------------------------------------------------------------- /app/views/admin/docker_images/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | = f.text_field :start_cmd, required: true 3 | = f.text_area :description 4 | 5 | = f.form_group do 6 | = f.success 7 | = f.cancel admin_docker_images_path 8 | -------------------------------------------------------------------------------- /app/views/admin/docker_images/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @docker_image, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_docker_image_path(@docker_image), 11 | html: { method: :patch } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/docker_images/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | = button_add new_admin_docker_image_path 10 | 11 | %table{ class: 'table table-hover' } 12 | %thead 13 | %tr 14 | %th= DockerImage.human_attribute_name('name') 15 | %th= DockerImage.human_attribute_name('start_cmd') 16 | %th= DockerImage.human_attribute_name('description') 17 | %th 18 | 19 | %tbody 20 | - @docker_images.each do |docker_image| 21 | %tr 22 | %td= link_to docker_image.name, edit_admin_docker_image_path(docker_image) 23 | %td= docker_image.start_cmd 24 | %td= docker_image.description 25 | %td{ class: 'text-right' }= button_delete admin_docker_image_path(docker_image), class: 'btn-sm' 26 | -------------------------------------------------------------------------------- /app/views/admin/docker_images/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @docker_image, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_docker_images_path, 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/groups/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | 3 | = f.collection_check_boxes(:user_ids, User.all, :id, :to_s) do |b| 4 | = content_tag :div, class: 'checkbox' do 5 | = b.label(:"data-value" => b.value) { b.check_box + b.text } 6 | 7 | = f.form_group do 8 | = f.success 9 | = f.cancel admin_groups_path 10 | -------------------------------------------------------------------------------- /app/views/admin/groups/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @group, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_group_path(@group), 11 | html: { method: :patch } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/groups/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | = button_add new_admin_group_path 10 | 11 | %table{ class: 'table table-hover' } 12 | %thead 13 | %tr 14 | %th= Group.human_attribute_name('name') 15 | %th= Group.human_attribute_name('members') 16 | %th 17 | 18 | %tbody 19 | - @groups.each do |group| 20 | %tr 21 | %td= link_to group.name, edit_admin_group_path(group) 22 | %td 23 | %ul{ class: 'list-unstyled' } 24 | - group.members.each do |member| 25 | %li 26 | = member.full_name 27 | = mail_to member.email, "(#{member.email})" 28 | 29 | %td{ class: 'text-right' }= button_delete admin_group_path(group), class: 'btn-sm' 30 | -------------------------------------------------------------------------------- /app/views/admin/groups/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @group, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_groups_path, 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/locks/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | 9 | %table{ class: 'table table-hover' } 10 | %thead 11 | %tr 12 | %th= Lock.human_attribute_name('token') 13 | %th 14 | 15 | %tbody 16 | - @locks.each do |lock| 17 | %tr 18 | %td= lock 19 | %td{ class: 'text-right' }= button_delete admin_lock_path(lock), class: 'btn-sm' 20 | -------------------------------------------------------------------------------- /app/views/admin/memberships/_form.html.haml: -------------------------------------------------------------------------------- 1 | %td{ colspan: 3 } 2 | = bootstrap_form_for object, 3 | layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-10', 4 | url: admin_user_membership_path(object.enrolable, object), 5 | html: { method: :patch, remote: true } do |f| 6 | 7 | %p 8 | - Role.givable.all.each do |role| 9 | %label 10 | = check_box_tag 'membership[role_ids][]', role.id, object.roles.include?(role), id: nil, disabled: object.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } 11 | = role 12 | %br 13 | 14 | = hidden_field_tag "membership[role_ids][]", '' 15 | 16 | = f.success 17 | %button.btn.btn-default.cancel= t('button.cancel') 18 | -------------------------------------------------------------------------------- /app/views/admin/memberships/_index.html.haml: -------------------------------------------------------------------------------- 1 | .row 2 | .col-md-6 3 | = smart_listing_render(:memberships) 4 | 5 | .col-md-6 6 | - applications = Application.all 7 | - if applications.any? 8 | = bootstrap_form_for Member.new, 9 | as: :membership, 10 | layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-10', 11 | url: admin_user_memberships_path(user), 12 | html: { method: :post, remote: true } do |f| 13 | 14 | = f.select :application_id, options_for_membership_application_select(user, applications) 15 | 16 | = f.collection_check_boxes(:role_ids, Role.givable.all, :id, :name) do |b| 17 | = content_tag :div, class: 'checkbox' do 18 | = b.label(:"data-value" => b.value) { b.check_box + b.text } 19 | 20 | = f.form_group do 21 | = f.success nil, icon: 'fa-plus', class: 'btn-sm' 22 | -------------------------------------------------------------------------------- /app/views/admin/memberships/_listing.html.haml: -------------------------------------------------------------------------------- 1 | - unless smart_listing.empty? 2 | 3 | %table{ class: 'table table-hover' } 4 | %thead 5 | %tr 6 | %th= Application.model_name.human(count: 2) 7 | %th= Role.model_name.human(count: 2) 8 | %th 9 | %tbody 10 | - smart_listing.collection.each do |membership| 11 | %tr.editable{ id: "member-#{membership.id}", data: { id: membership.id } } 12 | = smart_listing.render partial: 'admin/memberships/membership', locals: { object: membership } 13 | 14 | = smart_listing.paginate 15 | = smart_listing.pagination_per_page_links 16 | 17 | - else 18 | = render_no_data(type: :warning) 19 | -------------------------------------------------------------------------------- /app/views/admin/memberships/_membership.html.haml: -------------------------------------------------------------------------------- 1 | %td= link_to object.application, application_path(object.application) 2 | %td= object.roles.uniq.sort.collect(&:to_s).join(', ') 3 | %td.actions 4 | = smart_listing_item_actions [ { name: :edit, url: edit_admin_user_membership_path(object.enrolable, object), icon: 'fa fa-lg fa-fw fa-pencil' }, 5 | { name: :destroy, url: admin_user_membership_path(object.enrolable, object), if: object.deletable?, icon: 'fa fa-lg fa-fw fa-trash-o', confirmation: t('text.are_you_sure') } ] 6 | -------------------------------------------------------------------------------- /app/views/admin/memberships/ajax/create.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#user-applications', 'admin/memberships/index', locals: { user: user }) %> 2 | <% if !member.nil? %> 3 | highlight("#member-<%= member.id %>"); 4 | <% end %> 5 | reloadSmartListing(); 6 | -------------------------------------------------------------------------------- /app/views/admin/memberships/ajax/destroy.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#user-applications', 'admin/memberships/index', locals: { user: user }) %> 2 | highlight("#memberships table > tbody"); 3 | reloadSmartListing(); 4 | -------------------------------------------------------------------------------- /app/views/admin/memberships/ajax/update.js.erb: -------------------------------------------------------------------------------- 1 | <%= smart_listing_item :memberships, :update, @member, 2 | @member.valid? ? 'admin/memberships/membership' : 'admin/memberships/form' %> 3 | highlight("#member-<%= member.id %>"); 4 | -------------------------------------------------------------------------------- /app/views/admin/memberships/edit.js.erb: -------------------------------------------------------------------------------- 1 | <%= smart_listing_item :memberships, :edit, @member, 'admin/memberships/form' %> 2 | -------------------------------------------------------------------------------- /app/views/admin/memberships/index.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#user-applications', 'admin/memberships/index', locals: { user: @user }) %> 2 | reloadSmartListing(); 3 | -------------------------------------------------------------------------------- /app/views/admin/platforms/_credential.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' }= get_model_name_for('PlatformCredential', pluralize: false) 2 | 3 | .row 4 | 5 | - if !credential.nil? 6 | %div{ class: 'col-sm-offset-1 col-md-offset-1 col-sm-10 col-md-10', style: 'margin-bottom: 10px;' } 7 | = zero_clipboard_button_for('public_key') 8 | %span{ style: 'margin-left: 10px;' }= t('.desc') + ' :' 9 | 10 | %div{ class: 'col-sm-offset-1 col-md-offset-1 col-sm-10 col-md-10' }= text_area_tag :public_key, credential.public_key, disabled: true, rows: '5', class: 'public_key' 11 | 12 | - else 13 | 14 | %div{ class: 'col-sm-12' } 15 | = render_no_data(type: :warning) 16 | -------------------------------------------------------------------------------- /app/views/admin/platforms/_delete.html.haml: -------------------------------------------------------------------------------- 1 | %fieldset.padded 2 | %legend= label_with_icon t('.destroy'), 'fa-warning', bigger: false 3 | = button_delete admin_platform_path(platform), label: t('button.delete') 4 | -------------------------------------------------------------------------------- /app/views/admin/platforms/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | = f.text_field :identifier, required: true, disabled: !f.object.new_record? 3 | = f.text_area :description 4 | 5 | = f.form_group do 6 | = f.success 7 | = f.cancel admin_platforms_path 8 | -------------------------------------------------------------------------------- /app/views/admin/platforms/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | %fieldset.padded 9 | %legend= label_with_icon get_model_name_for('Settings'), 'fa-sliders', bigger: false 10 | 11 | = bootstrap_form_for @platform, 12 | layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-4 col-md-4', 13 | url: admin_platform_path(@platform), 14 | html: { method: :patch } do |f| 15 | 16 | = render 'form', f: f 17 | 18 | .row 19 | %div{ class: 'col-md-offset-1 col-md-10' } 20 | = render 'delete', platform: @platform 21 | -------------------------------------------------------------------------------- /app/views/admin/platforms/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | = button_add new_admin_platform_path 10 | 11 | %ul{ class: 'nav nav-tabs', role: 'tablist' } 12 | - @platforms.each do |platform| 13 | = navigation_tab label_with_icon(platform.name, 'fa-sitemap'), "##{platform.to_id}", "##{platform.to_id}", active: @platforms.first == platform 14 | 15 | %div{ class: 'tab-content' } 16 | - @platforms.each do |platform| 17 | %div{ class: "tab-pane #{@platforms.first == platform ? 'active' : ''}", id: platform.to_id } 18 | = render template: 'admin/platforms/show', locals: { platform: platform } 19 | -------------------------------------------------------------------------------- /app/views/admin/platforms/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @platform, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_platforms_path, 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/platforms/show.html.haml: -------------------------------------------------------------------------------- 1 | = link_to label_with_icon(t('button.edit'), 'fa-edit'), 2 | edit_admin_platform_path(platform) 3 | 4 | %div{ id: "platform-#{platform.to_id}-key" }= render 'admin/platforms/credential', { credential: platform.credential } 5 | 6 | %hr 7 | 8 | %div{ id: "platform-#{platform.to_id}-servers" }= render 'admin/servers/index', { platform: platform, servers: platform.servers } 9 | 10 | %hr 11 | 12 | %div{ id: "platform-#{platform.to_id}-stages" }= render 'admin/stages/index', { platform: platform, stages: platform.stages } 13 | -------------------------------------------------------------------------------- /app/views/admin/platforms/stages.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render('#container_stage_id', options_from_collection_for_select(@stages, "id", "name")) %> 2 | -------------------------------------------------------------------------------- /app/views/admin/platforms/update.js.erb: -------------------------------------------------------------------------------- 1 | <%= render_flash_messages_as_js %> 2 | -------------------------------------------------------------------------------- /app/views/admin/public_keys/_index.html.haml: -------------------------------------------------------------------------------- 1 | = render 'ssh_keys_manager/index', ssh_keys: user.ssh_public_keys, ssh_key: (ssh_key || SshPublicKey.new), user: user, admin: true 2 | -------------------------------------------------------------------------------- /app/views/admin/public_keys/ajax/create.js.erb: -------------------------------------------------------------------------------- 1 | <% locals = saved ? { user: user, ssh_key: nil } : { user: user, ssh_key: ssh_key } %> 2 | <%= js_render_partial('#user-ssh-keys', 'admin/public_keys/index', locals: locals) %> 3 | <%= render_flash_messages_as_js('#user-ssh-keys .flash-messages') %> 4 | -------------------------------------------------------------------------------- /app/views/admin/public_keys/ajax/destroy.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#user-ssh-keys', 'admin/public_keys/index', locals: { user: user, ssh_key: nil }) %> 2 | <%= render_flash_messages_as_js('#user-ssh-keys .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/admin/public_keys/index.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#user-ssh-keys', 'admin/public_keys/index', locals: { user: @user, ssh_key: nil }) %> 2 | -------------------------------------------------------------------------------- /app/views/admin/reserved_names/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | 3 | = f.form_group do 4 | = f.success 5 | = f.cancel admin_reserved_names_path 6 | -------------------------------------------------------------------------------- /app/views/admin/reserved_names/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @reserved_name, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_reserved_name_path(@reserved_name), 11 | html: { method: :patch } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/reserved_names/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | = button_add new_admin_reserved_name_path 10 | 11 | %table{ class: 'table table-hover' } 12 | %thead 13 | %tr 14 | %th= ReservedName.human_attribute_name('name') 15 | %th 16 | 17 | %tbody 18 | - @reserved_names.each do |reserved_name| 19 | %tr 20 | %td= link_to reserved_name.name, edit_admin_reserved_name_path(reserved_name) 21 | %td{ class: 'text-right' }= button_delete admin_reserved_name_path(reserved_name), class: 'btn-sm' 22 | -------------------------------------------------------------------------------- /app/views/admin/reserved_names/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @reserved_name, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_reserved_names_path, 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/roles/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | 3 | .form-group 4 | %label{ class: 'control-label col-sm-2' }= t('.permissions') 5 | %div{ class: 'col-sm-10' } 6 | %div{ class: 'box tabular' } 7 | - perms_by_module = @role.setable_permissions.group_by { |p| p.project_module.to_s } 8 | - perms_by_module.keys.sort.each do |mod| 9 | %fieldset 10 | %legend 11 | = mod.blank? ? get_model_name_for('Application') : l_or_humanize(mod, prefix: 'application.module.') 12 | 13 | - perms_by_module[mod].each do |permission| 14 | %label{ class: 'floating' } 15 | = check_box_tag 'role[permissions][]', permission.name, (@role.permissions.include? permission.name), id: nil 16 | = l_or_humanize(permission.name, prefix: 'permission.') 17 | 18 | = hidden_field_tag 'role[permissions][]', '' 19 | 20 | = f.form_group do 21 | = f.success 22 | = f.cancel admin_roles_path 23 | -------------------------------------------------------------------------------- /app/views/admin/roles/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @role, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_role_path(@role), 11 | html: { method: :patch } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/roles/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @page_title 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @role, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-4 col-md-4", 10 | url: admin_roles_path, 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/servers/_index.html.haml: -------------------------------------------------------------------------------- 1 | #servers{ class: 'row' } 2 | %div{ class: 'col-md-12' } 3 | 4 | %h4{ class: 'page-header' } 5 | = label_with_icon(get_model_name_for('Server'), 'fa-server', fixed: true) 6 | = button_add new_admin_platform_server_path(platform) 7 | %small{ class: 'pull-right' } 8 | = surround '(', ')' do 9 | = button_refresh 'getServerStatus(); return false;' 10 | 11 | - servers.by_hostname.in_groups_of(3, false).each do |row_server| 12 | 13 | .row 14 | 15 | - row_server.each do |server| 16 | 17 | %div{ class: 'col-md-4', id: "server-#{server.id}" } 18 | - present server do |presenter| 19 | %h4{ class: 'page-header' }= presenter.edit_link 20 | = presenter.server_roles 21 | 22 | .flash-messages 23 | -------------------------------------------------------------------------------- /app/views/admin/servers/ajax/status.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render("#server-#{server.id}-#{server_role.name}", service_status(server_role, has_errors: errors)) %> 2 | <%= render_flash_messages_as_js("#server-#{server.id} .flash-messages", method: :append) %> 3 | -------------------------------------------------------------------------------- /app/views/admin/servers/ajax/toggle_role.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#server-roles', 'admin/servers/edit/roles', locals: { server: server }) %> 2 | <%= js_render_partial('#server-modules', 'admin/servers/edit/modules', locals: { server: server }) %> 3 | <%= render_flash_messages_as_js('#server-roles .flash-messages') %> 4 | setBootstrapSwitch('#server-modules'); 5 | -------------------------------------------------------------------------------- /app/views/admin/servers/ajax/update.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#server-settings', 'admin/servers/edit/settings', locals: { server: server }) %> 2 | <%= render_flash_messages_as_js %> 3 | -------------------------------------------------------------------------------- /app/views/admin/servers/ajax/update_roles.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#server-roles', 'admin/servers/edit/roles', locals: { server: server }) %> 2 | <%= js_render_partial('#server-modules', 'admin/servers/edit/modules', locals: { server: server }) %> 3 | <%= render_flash_messages_as_js('#server-modules .flash-messages') %> 4 | setBootstrapSwitch('#server-modules'); 5 | -------------------------------------------------------------------------------- /app/views/admin/servers/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.title'), @server 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | .row 9 | %div{ class: 'col-md-6' } 10 | #server-settings= render 'admin/servers/edit/settings', server: @server 11 | 12 | %div{ class: 'col-md-6' } 13 | #server-roles= render 'admin/servers/edit/roles', server: @server 14 | 15 | .row 16 | %div{ class: 'col-md-12' } 17 | #server-modules= render 'admin/servers/edit/modules', server: @server 18 | 19 | .row 20 | %div{ class: 'col-md-12' } 21 | #server-delete= render 'admin/servers/edit/delete', server: @server 22 | 23 | = javascript_tag do 24 | setBootstrapSwitch('#server-modules'); 25 | -------------------------------------------------------------------------------- /app/views/admin/servers/edit/_delete.html.haml: -------------------------------------------------------------------------------- 1 | %fieldset.padded 2 | %legend= label_with_icon t('.destroy'), 'fa-warning', bigger: false 3 | = button_delete admin_platform_server_path(server.platform, server), label: t('button.delete') 4 | -------------------------------------------------------------------------------- /app/views/admin/servers/edit/_roles.html.haml: -------------------------------------------------------------------------------- 1 | %fieldset.padded 2 | %legend= label_with_icon t('.title'), 'fa-gears', bigger: false 3 | %ul{ class: 'list-unstyled list-inline' } 4 | - ServerRole.jbox_role_modules.each do |role| 5 | - present server, ServerModuleActivationPresenter, role do |presenter| 6 | %li{ class: presenter.module_css } 7 | %p{ class: 'text-center' }= presenter.module_link 8 | %p{ class: 'text-center' }= presenter.module_status 9 | .flash-messages 10 | -------------------------------------------------------------------------------- /app/views/admin/servers/edit/_settings.html.haml: -------------------------------------------------------------------------------- 1 | %fieldset.padded 2 | %legend= label_with_icon get_model_name_for('Settings'), 'fa-sliders', bigger: false 3 | 4 | = bootstrap_form_for @server, 5 | layout: :horizontal, label_col: 'col-sm-4 col-md-4', control_col: 'col-sm-4 col-md-6', 6 | url: admin_platform_server_path(@platform, @server), 7 | html: { method: :patch, remote: true } do |f| 8 | 9 | = f.text_field :host_name, required: true 10 | = f.text_field :ip_address, required: true 11 | = f.text_field :ssh_user, required: true 12 | = f.text_field :ssh_port, required: true 13 | 14 | = f.form_group do 15 | = f.success 16 | -------------------------------------------------------------------------------- /app/views/admin/servers/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.title') 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @server, 9 | layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-4 col-md-4', 10 | url: admin_platform_servers_path(@platform), 11 | html: { method: :post } do |f| 12 | 13 | = f.text_field :host_name, required: true 14 | = f.text_field :ip_address, required: true 15 | = f.text_field :ssh_user, required: true 16 | = f.text_field :ssh_port, required: true 17 | 18 | = f.form_group do 19 | = f.success 20 | = f.cancel admin_platforms_path 21 | -------------------------------------------------------------------------------- /app/views/admin/settings/_addons.html.haml: -------------------------------------------------------------------------------- 1 | %h3{ class: 'page-header' } 2 | = label_with_icon(t('.title'), 'fa-info-circle', bigger: false) 3 | 4 | %table{ class: 'table table-striped' } 5 | %tbody 6 | - DeployIt.addons.each do |name, addon| 7 | %tr 8 | %td= render_addon_link(addon) 9 | %td 10 | %code= YAML::dump(addon).gsub("\n", "
\n").html_safe 11 | -------------------------------------------------------------------------------- /app/views/admin/settings/_settings.html.haml: -------------------------------------------------------------------------------- 1 | %h3{ class: 'page-header' } 2 | = label_with_icon(t('.title'), 'fa-info-circle', bigger: false) 3 | 4 | - Settings.grouped(2).each do |row| 5 | .row 6 | - row.each do |group_name, values| 7 | .col-lg-6.col-md-6 8 | .panel.panel-default 9 | .panel-heading 10 | %h4.panel-title 11 | = link_to label_with_icon(t("settings.#{group_name}"), settings_icon_for(group_name), bigger: false), "##{group_name}", data: { toggle: 'collapse' } 12 | .panel-collapse.collapse.in{ id: group_name } 13 | %table.table.table-bordered 14 | %tbody 15 | - values.each do |key, value| 16 | %tr 17 | %td= key 18 | %td 19 | %code= truncate value, length: 50 20 | -------------------------------------------------------------------------------- /app/views/admin/settings/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.title') 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | = render 'settings' 6 | = render 'versions' 7 | = render 'addons' 8 | -------------------------------------------------------------------------------- /app/views/admin/stages/_delete.html.haml: -------------------------------------------------------------------------------- 1 | %fieldset.padded 2 | %legend= label_with_icon t('.destroy'), 'fa-warning', bigger: false 3 | = button_delete admin_platform_stage_path(stage.platform, stage), label: t('button.delete') 4 | -------------------------------------------------------------------------------- /app/views/admin/stages/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: true 2 | = f.text_field :identifier, required: true, disabled: !f.object.new_record? 3 | = f.text_field :database_name_prefix 4 | = f.text_field :domain_name_suffix 5 | = f.text_field :portal_url 6 | = f.text_area :description 7 | 8 | = f.form_group do 9 | = f.success 10 | = f.cancel admin_platforms_path 11 | -------------------------------------------------------------------------------- /app/views/admin/stages/_index.html.haml: -------------------------------------------------------------------------------- 1 | #stages{ class: 'row' } 2 | %div{ class: 'col-md-12' } 3 | 4 | %h4{ class: 'page-header' } 5 | = label_with_icon(get_model_name_for('Stage'), 'fa-puzzle-piece', fixed: true) 6 | = button_add new_admin_platform_stage_path(platform) 7 | 8 | - stages.by_name.in_groups_of(3, false).each do |row_stage| 9 | 10 | .row 11 | 12 | - row_stage.each do |stage| 13 | 14 | %div{ class: 'col-md-4' } 15 | - present stage do |presenter| 16 | %h4{ class: 'page-header' }= presenter.edit_link 17 | = presenter.stage_infos 18 | -------------------------------------------------------------------------------- /app/views/admin/stages/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.title'), @stage 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | %fieldset.padded 9 | %legend= label_with_icon get_model_name_for('Settings'), 'fa-sliders', bigger: false 10 | 11 | = bootstrap_form_for @stage, 12 | layout: :horizontal, label_col: 'col-sm-3', control_col: 'col-sm-4 col-md-4', 13 | url: admin_platform_stage_path(@stage.platform, @stage), 14 | html: { method: :patch } do |f| 15 | 16 | = render 'form', f: f 17 | 18 | .row 19 | %div{ class: 'col-md-offset-1 col-md-10' } 20 | = render 'delete', stage: @stage 21 | -------------------------------------------------------------------------------- /app/views/admin/stages/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.title') 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @stage, 9 | layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-3', 10 | url: admin_platform_stages_path(@platform), 11 | html: { method: :post } do |f| 12 | 13 | = render 'form', f: f 14 | -------------------------------------------------------------------------------- /app/views/admin/users/_form.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :firstname, required: true 2 | = f.text_field :lastname, required: true 3 | 4 | = f.email_field :email, required: true 5 | 6 | = f.select :language, available_locales 7 | 8 | = f.time_zone_select :time_zone, nil, { default: 'Paris' } 9 | 10 | - unless object.first_admin? 11 | 12 | = f.form_group :admin, label: { text: User.human_attribute_name('admin') }, class: 'shifted' do 13 | = f.check_box :admin, class: 'bootstrap-switch', data: { size: 'small' }, label: '' 14 | 15 | = f.form_group :enabled, label: { text: User.human_attribute_name('enabled') }, class: 'shifted' do 16 | = f.check_box :enabled, class: 'bootstrap-switch', data: { size: 'small' }, label: '' 17 | -------------------------------------------------------------------------------- /app/views/admin/users/_user.html.haml: -------------------------------------------------------------------------------- 1 | .panel{ class: 'panel-default' } 2 | .panel-heading= label 3 | .panel-body 4 | %table{ class: 'table table-hover' } 5 | %thead 6 | %tr 7 | %th= User.human_attribute_name('identifier') 8 | %th= User.human_attribute_name('email') 9 | %th= get_model_name_for('SshPublicKey') 10 | %th= User.human_attribute_name('last_connection') 11 | %th 12 | 13 | %tbody 14 | - users.each do |user| 15 | %tr 16 | %td= link_to user.full_name, edit_admin_user_path(user) 17 | %td= mail_to user.email 18 | %td= user.ssh_public_keys.count 19 | %td= user.last_connection 20 | %td= button_delete admin_user_path(user), class: 'btn-sm' unless user.first_admin? 21 | -------------------------------------------------------------------------------- /app/views/admin/users/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.title'), @user 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | %ul{ class: 'nav nav-tabs', role: 'tablist' } 9 | = navigation_tab label_with_icon(t('.settings'), 'fa-gear'), '#user-settings', '#user-settings', active: true 10 | = navigation_tab label_with_icon(get_model_name_for('Application'), 'fa-desktop'), admin_user_memberships_path(@user), '#user-applications', remote: true 11 | = navigation_tab label_with_icon(get_model_name_for('SshPublicKey'), 'fa-key'), admin_user_public_keys_path(@user), '#user-ssh-keys', remote: true 12 | 13 | %div{ class: 'tab-content' } 14 | #user-settings{ class: 'tab-pane active' }= render 'admin/users/edit_tabs/settings', user: @user 15 | #user-applications{ class: 'tab-pane' } 16 | #user-ssh-keys{ class: 'tab-pane' } 17 | 18 | = javascript_tag do 19 | setBootstrapSwitch('#user-settings'); 20 | -------------------------------------------------------------------------------- /app/views/admin/users/edit_tabs/_settings.html.haml: -------------------------------------------------------------------------------- 1 | = link_to label_with_icon(t('.change_password'), 'fa-lock', fixed: true), change_password_admin_user_path 2 | 3 | = bootstrap_form_for user, 4 | layout: :horizontal, label_col: 'col-sm-3', control_col: 'col-sm-5 col-md-4 col-lg-3', 5 | url: admin_user_path(user), 6 | html: { method: :patch } do |f| 7 | 8 | = render 'form', f: f, object: user 9 | 10 | = f.form_group do 11 | = f.success 12 | = f.cancel admin_users_path 13 | -------------------------------------------------------------------------------- /app/views/admin/users/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title get_model_name_for('User') 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' } 7 | = render_crumbs 8 | .contextual.contextual-header 9 | = button_add new_admin_user_path 10 | 11 | = render 'admin/users/user', users: @users.active.admin, label: label_with_icon(t('.admins'), 'fa-star') 12 | = render 'admin/users/user', users: @users.active.non_admin, label: label_with_icon(t('.non_admins'), 'fa-user') 13 | = render 'admin/users/user', users: @users.locked, label: label_with_icon(t('.disabled'), 'fa-lock') 14 | -------------------------------------------------------------------------------- /app/views/applications/_containers.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_partial' 2 | 3 | .row 4 | %div{ class: 'col-sm-12 col-md-10 col-md-offset-1' } 5 | .row 6 | = render 'applications/show/containers', application: application 7 | 8 | %div{ class: 'col-sm-12 col-md-10 col-md-offset-1' } 9 | .row 10 | = render 'applications/show/console', application: application 11 | -------------------------------------------------------------------------------- /app/views/applications/_events.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_partial' 2 | 3 | - application.containers.in_groups_of(2, false).each do |row_container| 4 | .row 5 | - row_container.each do |container| 6 | .col-md-6= render 'applications/show/container_event', container: container 7 | -------------------------------------------------------------------------------- /app/views/applications/_list.html.haml: -------------------------------------------------------------------------------- 1 | .panel.panel-default 2 | %table{ class: 'table table-hover' } 3 | %thead 4 | %tr 5 | %th= Application.human_attribute_name('name') 6 | %th= Application.human_attribute_name('domain_name') 7 | %th= Application.human_attribute_name('status') 8 | %th= Application.human_attribute_name('created_at') 9 | %tbody 10 | - applications.each do |application| 11 | %tr 12 | %td= link_to application.fullname, infos_application_path(application) 13 | %td= link_to_external application.domain_name 14 | %td= render 'applications/show/settings_status', application: application 15 | %td= l application.created_at 16 | -------------------------------------------------------------------------------- /app/views/applications/_repositories.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_partial' 2 | 3 | - if can?(:build_application, application) 4 | .row.padded 5 | %div{ class: 'col-md-12' }= render 'applications/show/instructions', application: application, repository: application.local_repo 6 | 7 | .row.padded 8 | %div{ class: 'col-md-6' }= render 'applications/show/distant_repo', repository: application.distant_repo 9 | %div{ class: 'col-md-6' }= render 'applications/show/local_repo', repository: application.local_repo 10 | 11 | .row.padded 12 | %div{ class: 'col-md-12' }= smart_listing_render(:releases) 13 | -------------------------------------------------------------------------------- /app/views/applications/_show.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_partial' 2 | 3 | .row.padded 4 | %div{ class: 'col-md-6' }= render 'applications/show/settings', application: application 5 | %div{ class: 'col-md-6' }= render 'applications/show/members', application: application 6 | 7 | .row.padded 8 | %div{ class: 'col-md-6' }= render 'applications/show/domain_aliases', application: application 9 | %div{ class: 'col-md-6' }= render 'applications/show/domain_redirects', application: application 10 | 11 | .row.padded 12 | %div{ class: 'col-md-6' }= render 'applications/show/env_vars', application: application 13 | %div{ class: 'col-md-6' }= render 'applications/show/credentials', application: application 14 | 15 | 16 | .row.padded 17 | %div{ class: 'col-md-6' }= render 'applications/show/mount_points', application: application 18 | %div{ class: 'col-md-6' }= render 'applications/show/addons', application: application 19 | -------------------------------------------------------------------------------- /app/views/applications/activities.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications/activities', application: @application 3 | -------------------------------------------------------------------------------- /app/views/applications/ajax/create.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_template('#new-application', 'applications/new', method: :replace, locals: { application: application }) %> 2 | -------------------------------------------------------------------------------- /app/views/applications/containers.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications/containers', application: @application 3 | -------------------------------------------------------------------------------- /app/views/applications/creation_steps/_select_params.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :name, required: false 2 | 3 | = f.text_field :identifier, required: false 4 | 5 | = f.collection_select :application_type_id, ApplicationType.all, :id, :to_s, prompt: true 6 | 7 | .form-group 8 | %label{ class: 'control-label col-sm-3 col-md-4 col-lg-3', for: 'platform' }= get_model_name_for('Platform', pluralize: false) 9 | %div{ class: 'col-sm-7 col-md-7 col-lg-6' } 10 | = select_tag "platform", options_from_collection_for_select(Platform.all, :id, :name), 11 | prompt: t('helpers.select.prompt'), 12 | class: 'form-control', 13 | onchange: "getValuesForSelect(this); return false;", 14 | data: { 'update-url' => stages_admin_platforms_path } 15 | 16 | = f.collection_select :stage_id, Stage.by_name, :id, :name, prompt: true 17 | -------------------------------------------------------------------------------- /app/views/applications/creation_steps/_select_params2.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :domain_name 2 | = f.select :temp_db_type, available_database_types, prompt: true 3 | = f.select :image_type, available_docker_images, prompt: true 4 | = f.select :buildpack, available_buildpacks, prompt: true, control_col: 'col-sm-7 col-md-7 col-lg-6' 5 | 6 | = f.text_field :repository_url, control_col: 'col-sm-8 col-md-8' 7 | = f.text_field :repository_branch, control_col: 'col-sm-4 col-md-4 col-lg-3' 8 | -------------------------------------------------------------------------------- /app/views/applications/events.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications/events', application: @application 3 | -------------------------------------------------------------------------------- /app/views/applications/index.html.haml: -------------------------------------------------------------------------------- 1 | .row 2 | %div{ class: 'col-md-12' } 3 | 4 | %h3{ class: 'page-header' } 5 | = render_crumbs 6 | .contextual.contextual-header 7 | = button_add new_application_path 8 | 9 | = render 'list', applications: @applications 10 | -------------------------------------------------------------------------------- /app/views/applications/repositories.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications/repositories', application: @application 3 | -------------------------------------------------------------------------------- /app/views/applications/show.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications/show', application: @application 3 | -------------------------------------------------------------------------------- /app/views/applications/show/_addons.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' } 2 | = link_to_if can?(:edit_application, application), label_with_icon(get_model_name_for('ApplicationAddon'), 'fa-cube', fixed: true), addons_application_path(application) 3 | 4 | - if application.addons.any? 5 | %ul{ class: 'list-group' } 6 | - application.addons.each do |addon| 7 | %li{ class: 'list-group-item' } 8 | %span{ class: 'mount-point' }= render_addon_link(addon) 9 | 10 | - else 11 | = render_no_data 12 | -------------------------------------------------------------------------------- /app/views/applications/show/_console.html.haml: -------------------------------------------------------------------------------- 1 | %div{ class: 'col-md-12' } 2 | 3 | %h4{ class: 'page-header' }= t('.title') 4 | 5 | .row 6 | %div{ class: 'col-md-10 col-md-offset-1' } 7 | %ul{ id: 'console-output', class: 'list-unstyled shell-body' } 8 | -------------------------------------------------------------------------------- /app/views/applications/show/_containers.html.haml: -------------------------------------------------------------------------------- 1 | #containers-toolbar 2 | 3 | %div{ class: 'col-md-12' } 4 | 5 | - present application, ApplicationToolbarPresenter do |presenter| 6 | = presenter.toolbar if can?(:manage_application, application) 7 | 8 | %div{ class: 'col-md-12' } 9 | 10 | - application.containers.includes(:release).in_groups_of(2, false).each do |row_container| 11 | 12 | .row 13 | 14 | - row_container.each do |container| 15 | 16 | %div{ class: 'col-md-6', id: "container-#{container.id}" } 17 | - present container do |presenter| 18 | %h4{ class: 'page-header' } 19 | = presenter.docker_name 20 | = presenter.container_actions if can?(:manage_application, application) 21 | = presenter.container_infos 22 | -------------------------------------------------------------------------------- /app/views/applications/show/_credentials.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' } 2 | = link_to_if can?(:edit_application, application), label_with_icon(get_model_name_for('ApplicationCredential'), 'fa-eye', fixed: true), credentials_application_path(application) 3 | 4 | - if application.credentials.any? 5 | %ul{ class: 'list-group' } 6 | - application.credentials.each do |cred| 7 | %li{ class: 'list-group-item' } 8 | %span{ class: 'mount-point' }= render_credential(cred) 9 | 10 | - else 11 | = render_no_data 12 | -------------------------------------------------------------------------------- /app/views/applications/show/_distant_repo.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' } 2 | = label_with_icon(t('.title'), 'fa-cloud-download', fixed: true) 3 | 4 | %small.pull-right 5 | - if repository.rugged_proxy.syncable? 6 | - if repository.rugged_proxy.synced? 7 | %span{ class: 'label label-success' }= label_with_icon(t('.synced'), 'fa-check') 8 | - else 9 | %span{ class: 'label label-warning' } 10 | = link_to label_with_icon(t('.syncable'), 'fa-refresh'), 11 | synchronize_repository_application_path(repository.application), 12 | remote: true, 13 | title: render_commit_distance(repository.rugged_proxy.commit_distance) 14 | - else 15 | %span{ class: 'label label-danger' }= label_with_icon(t('.not_syncable'), 'fa-exclamation-triangle') 16 | %em= repository.rugged_proxy.errors.join(' ') 17 | 18 | = render 'applications/show/repo_common', repository: repository, url: link_to_repository(repository.url) 19 | -------------------------------------------------------------------------------- /app/views/applications/show/_domain_aliases.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' } 2 | = link_to_if can?(:edit_application, application), label_with_icon(t('.title'), 'fa-random', fixed: true), domain_names_application_path(application) 3 | 4 | - if application.domain_aliases.any? 5 | %ul{ class: 'list-group' } 6 | - application.domain_aliases.each do |domain_alias| 7 | %li{ class: 'list-group-item' } 8 | %span{ class: 'mount-point' }= link_to_external domain_alias.domain_name 9 | 10 | - else 11 | = render_no_data 12 | -------------------------------------------------------------------------------- /app/views/applications/show/_domain_redirects.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' } 2 | = link_to_if can?(:edit_application, application), label_with_icon(t('.title'), 'fa-random', fixed: true), domain_names_application_path(application) 3 | 4 | - if application.domain_redirects.any? 5 | %ul{ class: 'list-group' } 6 | - application.domain_redirects.each do |domain_redirect| 7 | %li{ class: 'list-group-item' } 8 | %span{ class: 'mount-point' }= link_to_external domain_redirect.domain_name 9 | 10 | - else 11 | = render_no_data 12 | -------------------------------------------------------------------------------- /app/views/applications/show/_env_vars.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' } 2 | = link_to_if can?(:edit_application, application), label_with_icon(get_model_name_for('EnvVar'), 'fa-list-ul', fixed: true), env_vars_application_path(application) 3 | 4 | - if application.env_vars.any? 5 | %ul{ class: 'list-group' } 6 | - application.env_vars.each do |env_var| 7 | %li{ class: 'list-group-item' } 8 | %span{ class: 'mount-point' }= render_env_var(env_var) 9 | 10 | - else 11 | = render_no_data 12 | 13 | = link_to "(#{t('.final')})", 'javascript:void(0);', onclick: "$('#final-env-vars').toggle(); return false;" 14 | %span{ id: 'final-env-vars', style: 'display: none;' } 15 | %ul{ class: 'list-group' } 16 | - application.active_env_vars.to_env.each do |env| 17 | %li{ class: 'list-group-item' } 18 | %span{ class: 'mount-point' } 19 | %code= env 20 | -------------------------------------------------------------------------------- /app/views/applications/show/_instructions.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' }= label_with_icon(t('.text'), 'fa-info', fixed: true) 2 | 3 | %pre 4 | = "user@desktop:~$ git remote add #{application.stage_identifier} #{application.push_url}" 5 | 6 | = "user@desktop:~$ git push #{application.stage_identifier} master" 7 | -------------------------------------------------------------------------------- /app/views/applications/show/_local_repo.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' }= label_with_icon(t('.title'), 'fa-cloud-upload', fixed: true) 2 | 3 | = render 'applications/show/repo_common', repository: repository, url: repository.git_url 4 | -------------------------------------------------------------------------------- /app/views/applications/show/_members.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' } 2 | = link_to_if can?(:manage_members, application), label_with_icon(get_model_name_for('Member'), 'fa-users', fixed: true), application_members_path(application) 3 | 4 | - if application.users_by_role.any? 5 | %dl{ class: 'dl-horizontal' } 6 | - application.users_by_role.keys.sort.each do |role| 7 | %dt= role.to_s + ' :' 8 | %dd= application.users_by_role[role].uniq.sort.join(", ") 9 | - else 10 | = render_no_data(type: :warning) 11 | -------------------------------------------------------------------------------- /app/views/applications/show/_releases.html.haml: -------------------------------------------------------------------------------- 1 | %h4{ class: 'page-header' }= label_with_icon(get_model_name_for('Release'), 'fa-history', fixed: true) 2 | 3 | - unless smart_listing.empty? 4 | 5 | %ul{ class: 'list-unstyled list-group' } 6 | - smart_listing.collection.each do |release| 7 | %li{ class: 'list-group-item' } 8 | %span{ class: 'release_date' }= l(release.created_at) 9 | %span= t('.from') 10 | %span{ class: 'release_version' }= release.old_revision[0..6] 11 | %span= t('.to') 12 | %span{ class: 'release_version' }= release.new_revision[0..6] 13 | 14 | = smart_listing.paginate 15 | = smart_listing.pagination_per_page_links 16 | 17 | - else 18 | 19 | = render_no_data 20 | -------------------------------------------------------------------------------- /app/views/applications/show/_repo_common.html.haml: -------------------------------------------------------------------------------- 1 | %dl{ class: 'dl-horizontal' } 2 | 3 | %dt= Repository.human_attribute_name('url') + ' :' 4 | %dd= url 5 | 6 | %dt= t('.last_commit') + ' :' 7 | %dd 8 | - if repository.rugged_proxy.empty? 9 | = t('.empty') 10 | - else 11 | = t('.commit_id') + ' : ' 12 | = repository.rugged_proxy.last_commit_id[0..12] 13 | %br 14 | = t('.commit_date') + ' : ' 15 | = l(repository.rugged_proxy.last_commit_info(:time)) rescue '' 16 | %br 17 | = t('.commit_author') + ' : ' 18 | = mail_to repository.rugged_proxy.last_commit_info(:email), repository.rugged_proxy.last_commit_info(:name) 19 | %br 20 | = t('.commit_message') + ' : ' 21 | = repository.rugged_proxy.last_commit_info(:message) 22 | -------------------------------------------------------------------------------- /app/views/applications/show/_status.html.haml: -------------------------------------------------------------------------------- 1 | - cache application do 2 | %ul{ id: 'status', class: 'list-unstyled list-inline' } 3 | %li= label_with_success_tag label_with_icon("#{t('.running_containers')} : #{application.running_containers}", 'fa-rocket') 4 | %li= label_with_warning_tag label_with_icon("#{t('.paused_containers')} : #{application.paused_containers}", 'fa-rocket') 5 | %li= label_with_danger_tag label_with_icon("#{t('.stopped_containers')} : #{application.stopped_containers}", 'fa-rocket') 6 | -------------------------------------------------------------------------------- /app/views/applications_config/add_addon.html.haml: -------------------------------------------------------------------------------- 1 | = render 'applications_config/partials/add_addon', application: application, addon: addon 2 | -------------------------------------------------------------------------------- /app/views/applications_config/addons.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/addons', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/add_addon.js.erb: -------------------------------------------------------------------------------- 1 | <% if saved %> 2 | $('#mainModal').modal('hide'); 3 | <%= js_render_partial('#application-content', 'applications_config/partials/addons', locals: { application: application }) %> 4 | <%= render_flash_messages_as_js('#addons .flash-messages') %> 5 | highlight('#addons fieldset > legend'); 6 | <% else %> 7 | <%= js_render_partial('#new_application_addon', 'applications_config/partials/add_addon', method: :replace, locals: { application: application, addon: addon }) %> 8 | <%= render_flash_messages_as_js('#new_application_addon .flash-messages') %> 9 | <% end %> 10 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/addons.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/addons', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#addons .flash-messages') %> 3 | <% if saved %> 4 | highlight('#addons fieldset > legend'); 5 | <% end %> 6 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/credentials.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/credentials', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#credentials .flash-messages') %> 3 | <% if saved %> 4 | highlight('#credentials table > tbody'); 5 | <% end %> 6 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/database.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/database', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#database .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/domain_names.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/domain_names', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#domain-names .flash-messages') %> 3 | <% if saved %> 4 | highlight('#domain-names table > tbody'); 5 | <% end %> 6 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/env_vars.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/env_vars', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#env-vars .flash-messages') %> 3 | <% if saved %> 4 | highlight('#env-vars table > tbody'); 5 | <% end %> 6 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/mount_points.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/mount_points', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#mount-points .flash-messages') %> 3 | <% if saved %> 4 | highlight('#mount-points table > tbody'); 5 | <% end %> 6 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/repository.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/repository', locals: { application: application, repository: application.distant_repo }) %> 2 | <%= render_flash_messages_as_js('#repository .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/reset_database.js.erb: -------------------------------------------------------------------------------- 1 | <%= render_flash_messages_as_js('#database .flash-messages') %> 2 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/settings.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/settings', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#settings .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/ssl_certificate.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/ssl_certificate', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#ssl-certificate .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/synchronize_repository.js.erb: -------------------------------------------------------------------------------- 1 | <%= render_flash_messages_as_js('#repositories .flash-messages') %> 2 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/toggle_credentials.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/credentials', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#credentials .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/applications_config/ajax/toggle_ssl.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'applications_config/partials/ssl_certificate', locals: { application: application }) %> 2 | <%= render_flash_messages_as_js('#ssl-certificate .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/applications_config/credentials.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/credentials', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/database.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/database', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/domain_names.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/domain_names', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/env_vars.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/env_vars', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/mount_points.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/mount_points', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/partials/_add_addon.html.haml: -------------------------------------------------------------------------------- 1 | = content_for :title, label_with_icon(t('.title'), 'fa-cube') 2 | 3 | = bootstrap_form_for addon, 4 | url: add_addon_application_path(application), 5 | html: { method: :post, remote: true } do |f| 6 | 7 | .flash-messages 8 | 9 | = f.select :type, addons_available, prompt: true 10 | 11 | = f.success 12 | -------------------------------------------------------------------------------- /app/views/applications_config/partials/_addons.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_partial' 2 | 3 | #addons{ class: 'settings' } 4 | 5 | %span{ class: 'pull-right'} 6 | = link_to label_with_icon(t('.add'), 'fa-plus', fixed: true), add_addon_application_path(application), 7 | remote: true, data: { toggle: 'ajax-modal', draggable: true } 8 | 9 | %br 10 | %br 11 | 12 | .flash-messages 13 | 14 | = bootstrap_nested_form_for application, layout: :horizontal, 15 | url: addons_application_path(application), 16 | html: { method: :patch, remote: true } do |f| 17 | 18 | = f.fields_for :addons do |ff| 19 | 20 | %fieldset 21 | %legend 22 | = render_addon_link(ff.object) 23 | %small.pull-right= ff.link_to_remove icon('fa-trash-o', bigger: false) 24 | 25 | = ff.text_field :params 26 | 27 | - if application.addons.any? 28 | = f.success t('button.save'), data: { disable_with: t('text.save_in_progress') } 29 | -------------------------------------------------------------------------------- /app/views/applications_config/partials/_credential.html.haml: -------------------------------------------------------------------------------- 1 | %fieldset.padded 2 | %legend= label_with_icon get_model_name_for('RepositoryCredential', pluralize: false), 'fa fa-key', bigger: false 3 | 4 | %div{ class: 'col-sm-offset-1 col-md-offset-1 col-sm-10 col-md-10', style: 'margin-bottom: 10px;' } 5 | = zero_clipboard_button_for('public_key') 6 | %span{ style: 'margin-left: 10px;' }= t('.desc') + ' :' 7 | 8 | %div{ class: 'col-sm-offset-1 col-md-offset-1 col-sm-10 col-md-10' }= text_area_tag :public_key, credential.public_key, disabled: true, rows: '5', class: 'public_key code' 9 | -------------------------------------------------------------------------------- /app/views/applications_config/repository.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/repository', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/settings.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/settings', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_config/ssl_certificate.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'applications_config/partials/ssl_certificate', application: application 3 | -------------------------------------------------------------------------------- /app/views/applications_manager/ajax/build.js.erb: -------------------------------------------------------------------------------- 1 | <%= render_flash_messages_as_js %> 2 | 3 | <% if request_id %> 4 | $("#console-output").empty(); 5 | loadConsoleStreamer('<%= request_id %>'); 6 | <% end %> 7 | -------------------------------------------------------------------------------- /app/views/applications_manager/ajax/manage.js.erb: -------------------------------------------------------------------------------- 1 | <%= render_flash_messages_as_js %> 2 | -------------------------------------------------------------------------------- /app/views/applications_manager/ajax/status.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#status', 'applications/show/status', locals: { application: application }) %> 2 | -------------------------------------------------------------------------------- /app/views/applications_manager/ajax/toolbar.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#containers-toolbar', 'applications/show/containers', method: :replace, locals: { application: application }) %> 2 | -------------------------------------------------------------------------------- /app/views/common/_application_partial.html.haml: -------------------------------------------------------------------------------- 1 | #application-status{ class: 'contextual contextual-h3', data: { 'refresh-url' => status_application_path(@application) } } 2 | = render 'applications/show/status', application: @application 3 | 4 | %h3{ class: 'page-header' }= render_crumbs 5 | -------------------------------------------------------------------------------- /app/views/common/_application_template.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @application 2 | 3 | - locals_for :menus do 4 | - { application: @application } 5 | -------------------------------------------------------------------------------- /app/views/common/ajax.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', partial, locals: locals) %> 2 | $('#left-menu-applications ul.nav.navmenu-nav li').removeClass('active'); 3 | $("#app_<%= partial.split('/').last %>").addClass('active'); 4 | -------------------------------------------------------------------------------- /app/views/common/error.html.haml: -------------------------------------------------------------------------------- 1 | - html_title @status 2 | 3 | %h2= h @status 4 | 5 | - if @message.present? 6 | %p{ id: 'errorExplanation'}= h @message 7 | 8 | %p 9 | %a{ href: 'javascript:history.back()' }= t('button.back') 10 | -------------------------------------------------------------------------------- /app/views/container_events/ajax/mark_event.js.erb: -------------------------------------------------------------------------------- 1 | $("#container_<%= @event.container.id %>_events-table").DataTable().ajax.reload(); 2 | -------------------------------------------------------------------------------- /app/views/containers_manager/ajax/manage.js.erb: -------------------------------------------------------------------------------- 1 | <%= render_flash_messages_as_js %> 2 | -------------------------------------------------------------------------------- /app/views/containers_manager/ajax/mark_events.js.erb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/app/views/containers_manager/ajax/mark_events.js.erb -------------------------------------------------------------------------------- /app/views/containers_manager/ajax/top.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_template('#container-top', 'containers_manager/top', locals: { container: container }) %> 2 | -------------------------------------------------------------------------------- /app/views/containers_manager/infos.html.haml: -------------------------------------------------------------------------------- 1 | = content_for :title, label_with_icon(t('.title'), 'fa-info-circle', bigger: false) 2 | %pre= YAML::dump(container.docker_proxy.info) 3 | -------------------------------------------------------------------------------- /app/views/containers_manager/top.html.haml: -------------------------------------------------------------------------------- 1 | = content_for :title, label_with_icon(t('.title'), 'fa-gears', bigger: false) 2 | 3 | #container-top 4 | %pre= render_console_table(data: container.docker_proxy.top(format: :hash, ps_args: 'faux'), headers: 'Titles', body: 'Processes') 5 | 6 | = link_to label_with_icon(t('button.refresh'), 'fa-refresh', bigger: false), top_application_container_path(container.application, container), 7 | remote: true, 8 | class: 'btn btn-default btn-success' 9 | -------------------------------------------------------------------------------- /app/views/credentials/_edit_basic_auth.html.haml: -------------------------------------------------------------------------------- 1 | = f.text_field :login, required: false 2 | = f.password_field :password, required: false 3 | -------------------------------------------------------------------------------- /app/views/credentials/_edit_ssh_key.html.haml: -------------------------------------------------------------------------------- 1 | = f.password_field :password, required: false unless f.object.generated? 2 | 3 | .form-group 4 | %div{ class: 'col-sm-offset-2 col-sm-10', style: 'margin-bottom: 10px;' } 5 | = zero_clipboard_button_for('repository_credential_ssh_key_public_key') 6 | %span{ style: 'margin-left: 10px;' }= t('.desc') + ' :' 7 | 8 | = f.text_area :public_key, required: false, disabled: true, control_col: 'col-sm-10', rows: '6', class: 'public_key' 9 | -------------------------------------------------------------------------------- /app/views/credentials/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title get_model_name_for('RepositoryCredential'), @credential 2 | 3 | .row 4 | %div{ class: 'col-md-12' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for @credential, 9 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-3", 10 | url: sti_credential_path(@credential.type, @credential), 11 | html: { method: :patch } do |f| 12 | 13 | = f.text_field :name, required: true 14 | 15 | = render "edit_#{@credential.type.demodulize.underscore}", f: f 16 | 17 | = f.form_group do 18 | = f.success 19 | = button_delete sti_credential_path(@credential.type, @credential), label: t('button.delete') if can?(:delete_credential, nil, global: true) && @credential.deletable? 20 | = f.cancel applications_path 21 | -------------------------------------------------------------------------------- /app/views/devise/confirmations/new.html.haml: -------------------------------------------------------------------------------- 1 | %h2 Resend confirmation instructions 2 | 3 | = form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| 4 | = devise_error_messages! 5 | 6 | %div 7 | = f.label :email 8 | %br 9 | = f.email_field :email, autofocus: true 10 | 11 | %div 12 | = f.submit "Resend confirmation instructions" 13 | 14 | = render "devise/shared/links" 15 | -------------------------------------------------------------------------------- /app/views/devise/mailer/confirmation_instructions.html.haml: -------------------------------------------------------------------------------- 1 | %p 2 | Welcome 3 | = @email 4 | ! 5 | 6 | %p You can confirm your account email through the link below : 7 | 8 | %p= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) 9 | -------------------------------------------------------------------------------- /app/views/devise/mailer/reset_password_instructions.html.haml: -------------------------------------------------------------------------------- 1 | %p 2 | Hello 3 | = @resource.email 4 | ! 5 | 6 | %p Someone has requested a link to change your password. You can do this through the link below. 7 | 8 | %p= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) 9 | 10 | %p If you didn't request this, please ignore this email. 11 | %p Your password won't change until you access the link above and create a new one. 12 | -------------------------------------------------------------------------------- /app/views/devise/mailer/unlock_instructions.html.haml: -------------------------------------------------------------------------------- 1 | %p 2 | Hello 3 | = @resource.email 4 | ! 5 | 6 | %p Your account has been locked due to an excessive number of unsuccessful sign in attempts. 7 | 8 | %p Click the link below to unlock your account : 9 | 10 | %p= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) 11 | -------------------------------------------------------------------------------- /app/views/devise/passwords/edit.html.haml: -------------------------------------------------------------------------------- 1 | %h2 Change your password 2 | 3 | = form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| 4 | = devise_error_messages! 5 | = f.hidden_field :reset_password_token 6 | 7 | %div 8 | = f.label :password, "New password" 9 | %br 10 | = f.password_field :password, autofocus: true, autocomplete: "off" 11 | 12 | %div 13 | = f.label :password_confirmation, "Confirm new password" 14 | %br 15 | = f.password_field :password_confirmation, autocomplete: "off" 16 | 17 | %div 18 | = f.submit "Change my password" 19 | 20 | = render "devise/shared/links" 21 | -------------------------------------------------------------------------------- /app/views/devise/passwords/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.forgot_password') 2 | 3 | .container-fluid 4 | .row-fluid 5 | %div{ class: 'col-sm-5 col-sm-offset-4 col-md-4 col-md-offset-4' } 6 | 7 | %h3{ class: 'page-header' }= label_with_icon(t('.forgot_password'), 'fa-mail', fixed: true) 8 | 9 | = bootstrap_form_for resource, 10 | as: resource_name, 11 | url: password_path(resource_name), 12 | html: { method: :post } do |f| 13 | 14 | = f.email_field :email, autofocus: true 15 | = f.submit t('.reset_password_instructions'), class: 'btn btn-primary' 16 | -------------------------------------------------------------------------------- /app/views/devise/registrations/edit.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.change_password') 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | = bootstrap_form_for resource, 9 | layout: :horizontal, label_col: 'col-sm-4 col-md-3', control_col: 'col-sm-4 col-md-3', 10 | url: user_registration_path, 11 | html: { method: :patch } do |f| 12 | 13 | = f.password_field :current_password, autocomplete: 'off' 14 | = f.password_field :password, autocomplete: 'off' 15 | = f.password_field :password_confirmation, autocomplete: 'off' 16 | 17 | = f.form_group do 18 | = f.success 19 | -------------------------------------------------------------------------------- /app/views/devise/registrations/new.html.haml: -------------------------------------------------------------------------------- 1 | <% html_title t('label.signup') %> 2 | 3 | %h3{ class: 'page-header' }= label_with_icon(t('label.signup'), 'fa-edit', fixed: true) 4 | 5 | = bootstrap_form_for resource, 6 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-3", 7 | url: user_registration_path, 8 | html: { method: :post } do |f| 9 | 10 | = f.email_field :email, autofocus: true 11 | = f.password_field :password, autocomplete: "off" 12 | 13 | - if @validatable 14 | = @minimum_password_length + ' characters minimum' 15 | 16 | %br 17 | 18 | = f.password_field :password_confirmation, autocomplete: "off" 19 | 20 | .form-group 21 | %div{ class: 'col-sm-offset-2 col-sm-3' } 22 | = f.submit t('button.signup'), class: 'btn btn-success' 23 | -------------------------------------------------------------------------------- /app/views/devise/sessions/new.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.login') 2 | 3 | = bootstrap_form_for resource, 4 | as: resource_name, 5 | url: session_path(resource_name) do |f| 6 | 7 | = f.text_field :email, autofocus: true 8 | = f.password_field :password, autocomplete: "off" 9 | 10 | - if devise_mapping.rememberable? 11 | = f.check_box :remember_me 12 | 13 | = f.submit t('.login'), class: 'btn btn-primary' 14 | 15 | = link_to new_password_path(resource_name) do 16 | %small= t('.forgot_password') 17 | -------------------------------------------------------------------------------- /app/views/devise/unlocks/new.html.haml: -------------------------------------------------------------------------------- 1 | %h2 Resend unlock instructions 2 | 3 | = form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| 4 | = devise_error_messages! 5 | 6 | %div 7 | = f.label :email 8 | %br 9 | = f.email_field :email, autofocus: true 10 | 11 | %div 12 | = f.submit "Resend unlock instructions" 13 | 14 | = render "devise/shared/links" 15 | -------------------------------------------------------------------------------- /app/views/layouts/_page.html.haml: -------------------------------------------------------------------------------- 1 | .container-fluid 2 | #flash-messages= render_flash_messages 3 | = yield 4 | -------------------------------------------------------------------------------- /app/views/layouts/application.html.haml: -------------------------------------------------------------------------------- 1 | !!! 5 2 | %html{ lang: current_site_user.language } 3 | %head= render 'layouts/common/head', assets_for_layout: 'main/application' 4 | 5 | %body{ data: { controller: controller.controller_path, action: controller.action_name } } 6 | 7 | #wrapper 8 | 9 | = render 'layouts/common/topnavbar' 10 | 11 | #page-wrapper 12 | 13 | .row 14 | .col-lg-12 15 | 16 | #flash-messages.flash-messages= render_flash_messages 17 | 18 | = yield 19 | 20 | #modal-holder 21 | 22 | #context-menu{ style: 'display: none;' } 23 | 24 | = render 'layouts/common/javascript' 25 | -------------------------------------------------------------------------------- /app/views/layouts/common/_head.html.haml: -------------------------------------------------------------------------------- 1 | %meta{ charset: 'utf-8' } 2 | %meta{ name: 'viewport', content: 'width=device-width, initial-scale=1.0' } 3 | %meta{ name: 'turbolinks-cache-control', content: 'no-cache' } 4 | 5 | %title= yield :title 6 | = csrf_meta_tags 7 | 8 | = stylesheet_link_tag assets_for_layout, media: 'all', 'data-turbolinks-track' => true 9 | 10 | = yield :stylesheet 11 | 12 | = javascript_include_tag assets_for_layout, 'data-turbolinks-track' => true 13 | 14 | = yield :header_tags 15 | -------------------------------------------------------------------------------- /app/views/layouts/common/_javascript.html.erb: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /app/views/layouts/common/_navigation.html.haml: -------------------------------------------------------------------------------- 1 | .navbar-default.sidebar{ role: 'navigation' } 2 | .sidebar-nav.navbar-collapse 3 | = render_navigation_menu(sidebar_menu) 4 | -------------------------------------------------------------------------------- /app/views/layouts/common/_topnavbar.html.haml: -------------------------------------------------------------------------------- 1 | = navbar container: false, static: :top, style: 'margin-bottom: 0;' do 2 | = navbar_header brand: t('the_jbox_deployer'), brand_link: root_path 3 | = render_navigation_menu(:topbar_right) 4 | = render 'layouts/common/navigation' 5 | -------------------------------------------------------------------------------- /app/views/layouts/docker_app.html.haml: -------------------------------------------------------------------------------- 1 | !!! 5 2 | %html{ lang: current_site_user.language } 3 | %head= render 'layouts/common/head', assets_for_layout: 'main/application' 4 | 5 | %body{ data: { controller: controller.controller_path, action: controller.action_name, app_id: @application.id } } 6 | 7 | #wrapper 8 | 9 | = render 'layouts/common/topnavbar' 10 | 11 | #page-wrapper 12 | 13 | .row 14 | .col-lg-12 15 | 16 | #flash-messages.flash-messages= render_flash_messages 17 | 18 | #application-content{ class: @application.marked_for_deletion? ? 'disabled marked-for-deletion' : '' } 19 | = yield 20 | 21 | #modal-holder 22 | 23 | #context-menu{ style: 'display: none;' } 24 | 25 | = render 'layouts/common/javascript' 26 | -------------------------------------------------------------------------------- /app/views/layouts/login.html.haml: -------------------------------------------------------------------------------- 1 | !!! 5 2 | %html{ lang: I18n.default_locale } 3 | %head= render 'layouts/common/head', assets_for_layout: 'devise/application' 4 | 5 | %body 6 | .container 7 | .row 8 | .col-md-4.col-md-offset-4 9 | .login-panel.panel.panel-default 10 | .panel-heading 11 | %h3.panel-title Login 12 | .panel-body 13 | #flash-messages.flash-messages= render_flash_messages 14 | = yield 15 | -------------------------------------------------------------------------------- /app/views/layouts/modal.html.haml: -------------------------------------------------------------------------------- 1 | %div{ id: 'mainModal', class: 'modal fade', 'aria-hidden' => 'true', 'aria-labelledby' => 'mainModalLabel', role: 'dialog' } 2 | %div{ class: 'modal-dialog' } 3 | %div{ class: 'modal-content' } 4 | %div{ class: 'modal-header' } 5 | %button{ type: 'button', class: 'close', 'data-dismiss' => 'modal' } 6 | %span{ 'aria-hidden' => 'true' } × 7 | %span{ class: 'sr-only' } Close 8 | 9 | %h4{ id: 'mainModalLabel', class: 'modal-title' } 10 | = yield :title if content_for? :title 11 |   12 | 13 | %div{ class: 'modal-body' } 14 | = yield 15 | -------------------------------------------------------------------------------- /app/views/mailers/password_changed.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

Hi <%= @user.full_name %> !

8 |

Your password has changed, here is the new one : <%= @password %>

9 |

To login to the site, just follow this link : <%= link_to @url, @url %>.

10 |

For your information your username is : <%= @user.email %>

11 |

Have a nice day!

12 |

The JBox Team @JBoxWeb.

13 | 14 | 15 | -------------------------------------------------------------------------------- /app/views/mailers/password_changed.text.erb: -------------------------------------------------------------------------------- 1 | Hi <%= @user.full_name %> ! 2 | =============================================== 3 | 4 | Your password has changed, here is the new one : <%= @password %> 5 | 6 | To login to the site, just follow this link : <%= @url %>. 7 | 8 | For your information your username is : <%= @user.email %> 9 | 10 | Have a nice day! 11 | 12 | The JBox Team @JBoxWeb. 13 | -------------------------------------------------------------------------------- /app/views/mailers/welcome.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

Welcome to Deploy'It, <%= @user.full_name %>

8 |

You have successfully signed up to Deploy'It !

9 |

Your username is : <%= @user.email %>

10 |

Your password is : <%= @password %>

11 |

To login to the site, just follow this link : <%= link_to @url, @url %>.

12 |

Thanks for joining and have a nice day!

13 |

The JBox Team @JBoxWeb.

14 | 15 | 16 | -------------------------------------------------------------------------------- /app/views/mailers/welcome.text.erb: -------------------------------------------------------------------------------- 1 | Welcome to Deploy'It, <%= @user.full_name %> 2 | =============================================== 3 | 4 | You have successfully signed up to Deploy'It ! 5 | 6 | Your username is : <%= @user.email %> 7 | Your password is : <%= @password %> 8 | 9 | To login to the site, just follow this link : <%= @url %>. 10 | 11 | Thanks for joining and have a nice day! 12 | 13 | The JBox Team @JBoxWeb. 14 | -------------------------------------------------------------------------------- /app/views/members/_form.html.haml: -------------------------------------------------------------------------------- 1 | %td{ colspan: 3 } 2 | = bootstrap_form_for object, 3 | layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-10', 4 | url: application_member_path(object.application, object), 5 | html: { method: :patch, remote: true } do |f| 6 | 7 | %p 8 | - Role.givable.each do |role| 9 | %label 10 | = check_box_tag 'member[role_ids][]', role.id, object.roles.include?(role), id: nil, disabled: object.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } 11 | = role 12 | %br 13 | 14 | = hidden_field_tag "member[role_ids][]", '' 15 | 16 | = f.success 17 | %button.btn.btn-default.cancel= t('button.cancel') 18 | -------------------------------------------------------------------------------- /app/views/members/_member.html.haml: -------------------------------------------------------------------------------- 1 | %tr.editable{ id: "member-#{member.id}", data: { id: member.id } } 2 | = smart_listing.render partial: 'members/single_member', locals: { member: member } 3 | -------------------------------------------------------------------------------- /app/views/members/_members.html.haml: -------------------------------------------------------------------------------- 1 | - unless smart_listing.empty? 2 | 3 | %table{ class: 'table table-hover' } 4 | %thead 5 | %tr 6 | %th= Member.human_attribute_name('user_ids') 7 | %th= Member.human_attribute_name('role_ids') 8 | %th 9 | 10 | %tbody 11 | - sorted = smart_listing.collection.group_by(&:enrolable_type) 12 | = render partial: 'members/member', collection: sorted['Group'], locals: { smart_listing: smart_listing } 13 | = render partial: 'members/member', collection: sorted['User'], locals: { smart_listing: smart_listing } 14 | 15 | - else 16 | = render_no_data(type: :warning) 17 | -------------------------------------------------------------------------------- /app/views/members/_single_member.html.haml: -------------------------------------------------------------------------------- 1 | %td= render_enroblable(member) 2 | %td= member.roles.uniq.sort.collect(&:to_s).join(', ') 3 | %td.actions 4 | = smart_listing_item_actions [ { name: :edit, url: edit_application_member_path(member.application, member), icon: 'fa fa-lg fa-fw fa-pencil' }, 5 | { name: :destroy, url: application_member_path(member.application, member), if: member.deletable?, icon: 'fa fa-lg fa-fw fa-trash-o', confirmation: t('text.are_you_sure') } ] 6 | -------------------------------------------------------------------------------- /app/views/members/ajax/create.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'members/index', locals: { application: application }) %> 2 | <% member_ids.each do |id| %> 3 | highlight("#member-<%= id %>"); 4 | <% end %> 5 | reloadSmartListing(); 6 | -------------------------------------------------------------------------------- /app/views/members/ajax/destroy.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'members/index', locals: { application: application }) %> 2 | highlight("#members table > tbody"); 3 | reloadSmartListing(); 4 | -------------------------------------------------------------------------------- /app/views/members/ajax/update.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#application-content', 'members/index', locals: { application: application }) %> 2 | highlight("#member-<%= member.id %>"); 3 | reloadSmartListing(); 4 | -------------------------------------------------------------------------------- /app/views/members/edit.js.erb: -------------------------------------------------------------------------------- 1 | <%= smart_listing_item :members, :edit, @member, 'members/form' %> 2 | -------------------------------------------------------------------------------- /app/views/members/index.html.haml: -------------------------------------------------------------------------------- 1 | = render 'common/application_template' 2 | = render 'members/index', application: @application 3 | -------------------------------------------------------------------------------- /app/views/my/ajax/reset_api_key.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render('#authentication-token', user.api_token) %> 2 | <%= render_flash_messages_as_js %> 3 | -------------------------------------------------------------------------------- /app/views/public_keys/_index.html.haml: -------------------------------------------------------------------------------- 1 | = render 'ssh_keys_manager/index', ssh_keys: user.ssh_public_keys, ssh_key: (ssh_key || SshPublicKey.new), user: user, admin: false 2 | -------------------------------------------------------------------------------- /app/views/public_keys/ajax/create.js.erb: -------------------------------------------------------------------------------- 1 | <% locals = saved ? { user: user, ssh_key: nil } : { user: user, ssh_key: ssh_key } %> 2 | <%= js_render_partial('#ssh-public-keys', 'public_keys/index', locals: locals) %> 3 | <%= render_flash_messages_as_js('#ssh-public-keys .flash-messages') %> 4 | -------------------------------------------------------------------------------- /app/views/public_keys/ajax/destroy.js.erb: -------------------------------------------------------------------------------- 1 | <%= js_render_partial('#ssh-public-keys', 'public_keys/index', locals: { user: user, ssh_key: nil }) %> 2 | <%= render_flash_messages_as_js('#ssh-public-keys .flash-messages') %> 3 | -------------------------------------------------------------------------------- /app/views/public_keys/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title get_model_name_for('SshPublicKey') 2 | 3 | .row 4 | %div{ class: 'col-md-offset-1 col-md-10' } 5 | 6 | %h3{ class: 'page-header' }= render_crumbs 7 | 8 | .alert{ class: 'alert-info dont-dismiss' } 9 | %span= label_with_icon(t('.help'), 'fa-info-circle') 10 | \: 11 | %span= t('.explanation') 12 | 13 | #ssh-public-keys= render 'index', ssh_keys: @user.ssh_public_keys, ssh_key: @ssh_key, user: @user 14 | -------------------------------------------------------------------------------- /app/views/ssh_keys_manager/_form.html.haml: -------------------------------------------------------------------------------- 1 | #form-add-key{ class: 'panel panel-default', style: display_on_condition(ssh_key.errors.any?, true) } 2 | .panel-heading 3 | %h3= t('.new') 4 | 5 | .panel-body 6 | = bootstrap_form_for ssh_key, 7 | layout: :horizontal, label_col: "col-sm-2", control_col: "col-sm-10", 8 | url: ssh_key_create_path(admin: admin, user: user), 9 | html: { method: :post, remote: true } do |f| 10 | 11 | = f.text_field :title, required: true, control_col: 'col-sm-4' 12 | = f.text_area :key, required: true 13 | 14 | = f.form_group do 15 | = f.success 16 | = button_tag t('button.cancel'), type: 'button', onclick: "resetForm('#new_ssh_public_key'); $('#form-add-key').hide(); return false;", class: 'btn btn-default' 17 | -------------------------------------------------------------------------------- /app/views/ssh_keys_manager/_index.html.haml: -------------------------------------------------------------------------------- 1 | .flash-messages 2 | 3 | .row 4 | .col-md-12 5 | 6 | .panel{ class: 'panel-default' } 7 | .panel-heading 8 | = link_to t('.new'), 'javascript:void(0)', id: 'btn-add-key', 9 | class: 'btn btn-default btn-sm minibutton pull-right', 10 | onclick: "$('#form-add-key').toggle(); return false;" 11 | %h3= get_model_name_for('SshPublicKey') 12 | 13 | = render 'ssh_keys_manager/ssh_keys', ssh_keys: ssh_keys, admin: admin 14 | = render 'ssh_keys_manager/form', ssh_key: ssh_key, user: user, admin: admin 15 | -------------------------------------------------------------------------------- /app/views/ssh_keys_manager/_ssh_keys.html.haml: -------------------------------------------------------------------------------- 1 | %ul{ class: 'list-group' } 2 | - ssh_keys.each do |ssh_key| 3 | %li{ class: 'list-group-item ssh-key' } 4 | %span{ class: 'ssh-key-icon' } 5 | %span{ class: 'fa fa-key fa-2x' } 6 | 7 | %div{ class: 'ssh-key-details' } 8 | = button_delete ssh_key_destroy_path(ssh_key: ssh_key, admin: admin), class: 'btn-sm pull-right', label: t('.delete'), remote: true 9 | %strong{ class: 'ssh-key-title' }= ssh_key.title 10 | %code{ class: 'ssh-key-fingerprint' }= ssh_key.fingerprint 11 | -------------------------------------------------------------------------------- /app/views/welcome/help.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('.title') 2 | -------------------------------------------------------------------------------- /app/views/welcome/index.html.haml: -------------------------------------------------------------------------------- 1 | - html_title t('the_jbox_deployer') 2 | -------------------------------------------------------------------------------- /bin/cap: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'cap' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require "pathname" 12 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", 13 | Pathname.new(__FILE__).realpath) 14 | 15 | bundle_binstub = File.expand_path("../bundle", __FILE__) 16 | 17 | if File.file?(bundle_binstub) 18 | if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ 19 | load(bundle_binstub) 20 | else 21 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 22 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 23 | end 24 | end 25 | 26 | require "rubygems" 27 | require "bundler/setup" 28 | 29 | load Gem.bin_path("capistrano", "cap") 30 | -------------------------------------------------------------------------------- /bin/deploy-it-identifier: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Make the user configurable 4 | DEPLOY_IT_USER='deploy-it' 5 | 6 | # Exit if not matching 7 | [[ $1 != $DEPLOY_IT_USER ]] && exit 0 8 | 9 | DEPLOY_IT_HOME=$(getent passwd "$DEPLOY_IT_USER" | cut -d: -f6) 10 | DEPLOY_IT_PATH=$(cat "$DEPLOY_IT_HOME/.deploy-dir") 11 | DEPLOY_IT_CONF="$DEPLOY_IT_PATH/.env" 12 | DEPLOY_IT_AUTH_PATH='deploy_it/ident' 13 | 14 | source $DEPLOY_IT_CONF 15 | DEPLOY_IT_AUTH_URL="$AUTHENTICATION_SERVER/$DEPLOY_IT_AUTH_PATH" 16 | 17 | curl --data "auth_token=$AUTHENTICATION_TOKEN" $DEPLOY_IT_AUTH_URL 18 | -------------------------------------------------------------------------------- /bin/foreman: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'foreman' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require "pathname" 12 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", 13 | Pathname.new(__FILE__).realpath) 14 | 15 | bundle_binstub = File.expand_path("../bundle", __FILE__) 16 | 17 | if File.file?(bundle_binstub) 18 | if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ 19 | load(bundle_binstub) 20 | else 21 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 22 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 23 | end 24 | end 25 | 26 | require "rubygems" 27 | require "bundler/setup" 28 | 29 | load Gem.bin_path("foreman", "foreman") 30 | -------------------------------------------------------------------------------- /bin/puma: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'puma' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require "pathname" 12 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", 13 | Pathname.new(__FILE__).realpath) 14 | 15 | bundle_binstub = File.expand_path("../bundle", __FILE__) 16 | 17 | if File.file?(bundle_binstub) 18 | if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ 19 | load(bundle_binstub) 20 | else 21 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 22 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 23 | end 24 | end 25 | 26 | require "rubygems" 27 | require "bundler/setup" 28 | 29 | # Be sure to load env vars from *.env* file 30 | # before calling command 31 | require "dotenv" 32 | Dotenv.load 33 | 34 | load Gem.bin_path("puma", "puma") 35 | -------------------------------------------------------------------------------- /bin/pumactl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'pumactl' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require "pathname" 12 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", 13 | Pathname.new(__FILE__).realpath) 14 | 15 | bundle_binstub = File.expand_path("../bundle", __FILE__) 16 | 17 | if File.file?(bundle_binstub) 18 | if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ 19 | load(bundle_binstub) 20 | else 21 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 22 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 23 | end 24 | end 25 | 26 | require "rubygems" 27 | require "bundler/setup" 28 | 29 | # Be sure to load env vars from *.env* file 30 | # before calling command 31 | require "dotenv" 32 | Dotenv.load 33 | 34 | load Gem.bin_path("puma", "pumactl") 35 | -------------------------------------------------------------------------------- /bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | APP_PATH = File.expand_path('../config/application', __dir__) 3 | require_relative '../config/boot' 4 | require 'rails/commands' 5 | -------------------------------------------------------------------------------- /bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../config/boot' 3 | require 'rake' 4 | Rake.application.run 5 | -------------------------------------------------------------------------------- /bin/rspec: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | begin 3 | load File.expand_path("../spring", __FILE__) 4 | rescue LoadError 5 | end 6 | require 'bundler/setup' 7 | load Gem.bin_path('rspec-core', 'rspec') 8 | -------------------------------------------------------------------------------- /bin/rubocop: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | # 5 | # This file was generated by Bundler. 6 | # 7 | # The application 'rubocop' is installed as part of a gem, and 8 | # this file is here to facilitate running it. 9 | # 10 | 11 | require "pathname" 12 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", 13 | Pathname.new(__FILE__).realpath) 14 | 15 | bundle_binstub = File.expand_path("../bundle", __FILE__) 16 | 17 | if File.file?(bundle_binstub) 18 | if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/ 19 | load(bundle_binstub) 20 | else 21 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. 22 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") 23 | end 24 | end 25 | 26 | require "rubygems" 27 | require "bundler/setup" 28 | 29 | load Gem.bin_path("rubocop", "rubocop") 30 | -------------------------------------------------------------------------------- /bin/spring: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # This file loads spring without using Bundler, in order to be fast. 4 | # It gets overwritten when you run the `spring binstub` command. 5 | 6 | unless defined?(Spring) 7 | require "rubygems" 8 | require "bundler" 9 | 10 | if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ (?: )*spring \((.*?)\)$.*?^$/m) 11 | Gem.paths = { 'GEM_PATH' => [Bundler.bundle_path.to_s, *Gem.path].uniq.join(File::PATH_SEPARATOR) } 12 | gem "spring", match[1] 13 | require "spring/binstub" 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /bin/update: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'pathname' 3 | require 'fileutils' 4 | include FileUtils 5 | 6 | # path to your application root. 7 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) 8 | 9 | def system!(*args) 10 | system(*args) || abort("\n== Command #{args} failed ==") 11 | end 12 | 13 | chdir APP_ROOT do 14 | # This script is a way to update your development environment automatically. 15 | # Add necessary update steps to this file. 16 | 17 | puts '== Installing dependencies ==' 18 | system! 'gem install bundler --conservative' 19 | system('bundle check') || system!('bundle install') 20 | 21 | puts "\n== Updating database ==" 22 | system! 'bin/rails db:migrate' 23 | 24 | puts "\n== Removing old logs and tempfiles ==" 25 | system! 'bin/rails log:clear tmp:clear' 26 | 27 | puts "\n== Restarting application server ==" 28 | system! 'bin/rails restart' 29 | end 30 | -------------------------------------------------------------------------------- /bin/yarn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | VENDOR_PATH = File.expand_path('..', __dir__) 3 | Dir.chdir(VENDOR_PATH) do 4 | begin 5 | exec "yarnpkg #{ARGV.join(" ")}" 6 | rescue Errno::ENOENT 7 | $stderr.puts "Yarn executable was not detected in the system." 8 | $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" 9 | exit 1 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # This file is used by Rack-based servers to start the application. 3 | 4 | require ::File.expand_path('../config/environment', __FILE__) 5 | run Rails.application 6 | -------------------------------------------------------------------------------- /config/cable.yml: -------------------------------------------------------------------------------- 1 | cable_config: &cable_config 2 | adapter: redis 3 | host: <%= ENV['REDIS_HOST'] %> 4 | port: <%= ENV['REDIS_PORT'] %> 5 | database: <%= ENV['REDIS_DB'] %> 6 | namespace: 'action-cable' 7 | 8 | production: 9 | <<: *cable_config 10 | 11 | development: 12 | <<: *cable_config 13 | 14 | staging: 15 | <<: *cable_config 16 | 17 | test: 18 | adapter: async 19 | -------------------------------------------------------------------------------- /config/database.yml: -------------------------------------------------------------------------------- 1 | production: 2 | adapter: postgresql 3 | host: <%= ENV['DB_HOST'] %> 4 | port: <%= ENV['DB_PORT'] %> 5 | database: <%= ENV['DB_NAME'] %> 6 | username: <%= ENV['DB_USER'] %> 7 | password: <%= ENV['DB_PASS'] %> 8 | encoding: utf8 9 | pool: 25 10 | 11 | development: 12 | adapter: postgresql 13 | host: <%= ENV['DB_HOST'] %> 14 | port: <%= ENV['DB_PORT'] %> 15 | database: <%= ENV['DB_NAME'] %> 16 | username: <%= ENV['DB_USER'] %> 17 | password: <%= ENV['DB_PASS'] %> 18 | encoding: utf8 19 | 20 | test: 21 | adapter: postgresql 22 | host: <%= ENV['DB_HOST'] %> 23 | port: <%= ENV['DB_PORT'] %> 24 | database: <%= ENV['DB_NAME'] %> 25 | username: <%= ENV['DB_USER'] %> 26 | password: <%= ENV['DB_PASS'] %> 27 | encoding: utf8 28 | -------------------------------------------------------------------------------- /config/deploy/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/config/deploy/.keep -------------------------------------------------------------------------------- /config/deploy/templates/shared/foreman/master.target.erb: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Wants=<%= process_master_names.join(' ') %> 3 | 4 | [Install] 5 | WantedBy=multi-user.target 6 | -------------------------------------------------------------------------------- /config/deploy/templates/shared/foreman/process.service.erb: -------------------------------------------------------------------------------- 1 | [Unit] 2 | PartOf=<%= app %>-<%= name %>.target 3 | 4 | [Service] 5 | # Foreground process (do not use --daemon in ExecStart or config.rb) 6 | Type=simple 7 | WorkingDirectory=<%= engine.root %> 8 | ExecStart=/bin/bash -l -c '<%= process.command %>' 9 | Restart=no 10 | TimeoutStopSec=<%= engine.options[:timeout] %> 11 | SyslogIdentifier=deploy-it.<%= name %> 12 | -------------------------------------------------------------------------------- /config/deploy/templates/shared/foreman/process_master.target.erb: -------------------------------------------------------------------------------- 1 | [Unit] 2 | PartOf=<%= app %>.target 3 | -------------------------------------------------------------------------------- /config/deploy/templates/shared/logrotate.conf.erb: -------------------------------------------------------------------------------- 1 | <%- fetch(:config_syslog, []).each do |log| -%> 2 | <%= remote_path_for(shared_path) %>/log/<%= log %>.log 3 | <%- end -%> 4 | { 5 | daily 6 | rotate 365 7 | compress 8 | dateext 9 | missingok 10 | notifempty 11 | create 0640 <%= host.user %> <%= host.user %> 12 | olddir <%= remote_path_for(shared_path) %>/log/archives/<%= fetch(:application) %> 13 | postrotate 14 | invoke-rc.d syslog-ng reload > /dev/null 15 | endscript 16 | } 17 | 18 | <%= remote_path_for(shared_path) %>/log/nginx.*.log 19 | { 20 | daily 21 | rotate 365 22 | compress 23 | dateext 24 | missingok 25 | notifempty 26 | create 0640 www-data <%= host.user %> 27 | olddir <%= remote_path_for(shared_path) %>/log/archives/nginx 28 | postrotate 29 | invoke-rc.d nginx rotate >/dev/null 2>&1 30 | endscript 31 | } 32 | -------------------------------------------------------------------------------- /config/deploy/templates/shared/sudoers.conf.erb: -------------------------------------------------------------------------------- 1 | <%= host.user %> ALL=(root) NOPASSWD: /bin/cp <%= remote_path_for(shared_path) %>/config/nginx.conf /etc/nginx/sites-enabled/<%= fetch(:application) %>.conf 2 | <%= host.user %> ALL=(root) NOPASSWD: /bin/cp <%= remote_path_for(shared_path) %>/config/logrotate.conf /etc/logrotate.d/<%= fetch(:application) %> 3 | <%= host.user %> ALL=(root) NOPASSWD: /bin/cp <%= remote_path_for(shared_path) %>/config/syslog-ng.conf /etc/syslog-ng/conf.d/<%= fetch(:application) %>.conf 4 | -------------------------------------------------------------------------------- /config/deploy/templates/shared/syslog-ng.conf.erb: -------------------------------------------------------------------------------- 1 | <% fetch(:config_syslog, []).each do |log| %> 2 | destination d_rails_<%= log %> { file("<%= remote_path_for(shared_path) %>/log/<%= log %>.log" owner("<%= host.user %>") group("<%= host.user %>") perm(0640)); }; 3 | filter f_rails_<%= log %> { program("<%= fetch(:application) %>.<%= log %>"); }; 4 | log { source(s_src); filter(f_rails_<%= log %>); destination(d_rails_<%= log %>); }; 5 | <% end %> 6 | -------------------------------------------------------------------------------- /config/deploy/templates/shared/systemd.erb: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function call_systemd() { 4 | <%- services.each_with_index do |service, index| -%> 5 | systemctl --user $1 <%= fetch(:application) %>-<%= service %>@5<%= index %>00.service 6 | <%- end -%> 7 | } 8 | 9 | case "$1" in 10 | start) 11 | call_systemd "start" 12 | ;; 13 | 14 | stop) 15 | call_systemd "stop" 16 | ;; 17 | 18 | restart) 19 | call_systemd "restart" 20 | ;; 21 | 22 | status) 23 | call_systemd "status" 24 | ;; 25 | 26 | *) 27 | echo "Usage: <%= fetch(:application) %> {start|stop|restart|status}" 28 | exit 1 29 | ;; 30 | esac 31 | 32 | exit 0 33 | -------------------------------------------------------------------------------- /config/environment.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | # Load the Rails application. 18 | require_relative 'application' 19 | 20 | # Initialize the Rails application. 21 | Rails.application.initialize! 22 | -------------------------------------------------------------------------------- /config/i18n-tasks.yml: -------------------------------------------------------------------------------- 1 | base_locale: fr 2 | data: 3 | read: 4 | # read from namespaced files, e.g. simple_form.en.yml 5 | - 'config/locales/**/*.yml' 6 | -------------------------------------------------------------------------------- /config/initializers/04-deploy_it.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | # Boot! 18 | require 'yaml' 19 | require 'deploy_it' 20 | -------------------------------------------------------------------------------- /config/initializers/active_use_case.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | require 'active_use_case' 18 | 19 | ActiveUseCase.logger = DeployIt.file_logger 20 | -------------------------------------------------------------------------------- /config/initializers/application_controller_renderer.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # Be sure to restart your server when you modify this file. 3 | 4 | # ApplicationController.renderer.defaults.merge!( 5 | # http_host: 'example.org', 6 | # https: false 7 | # ) 8 | -------------------------------------------------------------------------------- /config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # Be sure to restart your server when you modify this file. 3 | 4 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 5 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 6 | 7 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 8 | # Rails.backtrace_cleaner.remove_silencers! 9 | -------------------------------------------------------------------------------- /config/initializers/bullet.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | if defined? Bullet 18 | Bullet.enable = true 19 | Bullet.alert = true 20 | Bullet.bullet_logger = true 21 | end 22 | -------------------------------------------------------------------------------- /config/initializers/cookies_serializer.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | Rails.application.config.action_dispatch.cookies_serializer = :json 18 | -------------------------------------------------------------------------------- /config/initializers/crummy.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | Crummy.configure do |config| 18 | config.format = :html_list 19 | config.ul_class = 'breadcrumb' 20 | config.last_crumb_linked = false 21 | end 22 | -------------------------------------------------------------------------------- /config/initializers/groupdate.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | Groupdate.week_start = :mon 18 | -------------------------------------------------------------------------------- /config/initializers/haml.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | Haml::Template.options[:attr_wrapper] = '"' 18 | -------------------------------------------------------------------------------- /config/initializers/log_formatter.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class ::Logger::Formatter 18 | def call(severity, time, progname, msg) 19 | "#{time} [#{severity}] #{msg}\n" 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # Be sure to restart your server when you modify this file. 3 | 4 | # Add new mime types for use in respond_to blocks: 5 | # Mime::Type.register "text/richtext", :rtf 6 | -------------------------------------------------------------------------------- /config/initializers/new_framework_defaults_5_1.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # Be sure to restart your server when you modify this file. 3 | # 4 | # This file contains migration options to ease your Rails 5.1 upgrade. 5 | # 6 | # Once upgraded flip defaults one by one to migrate to the new default. 7 | # 8 | # Read the Guide for Upgrading Ruby on Rails for more info on each option. 9 | 10 | # Make `form_with` generate non-remote forms. 11 | Rails.application.config.action_view.form_with_generates_remote_forms = false 12 | 13 | # Unknown asset fallback will return the path passed in when the given 14 | # asset is not present in the asset pipeline. 15 | # Rails.application.config.assets.unknown_asset_fallback = false 16 | -------------------------------------------------------------------------------- /config/locales/en/base.yml: -------------------------------------------------------------------------------- 1 | en: 2 | -------------------------------------------------------------------------------- /config/locales/fr/forms/admin_password_form.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activemodel: 4 | attributes: 5 | admin_password_form: 6 | send_by_mail: Envoyer les informations à l'utilisateur par mail 7 | 8 | errors: 9 | models: 10 | admin_password_form: 11 | attributes: 12 | create_options: 13 | blank: ne peut être nul 14 | inclusion: vous devez choisir 15 | new_password: 16 | blank: ne peut être nul 17 | too_short: trop court 18 | new_password_confirmation: 19 | confirmation: ne correspond pas 20 | -------------------------------------------------------------------------------- /config/locales/fr/forms/credential_creation_form.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activemodel: 4 | attributes: 5 | credential_creation_form: 6 | type: Type de clé 7 | name: Nom 8 | create_options: Options de création 9 | login: Login 10 | password: Mot de passe 11 | public_key: Clé publique 12 | private_key: Clé privée 13 | 14 | errors: 15 | models: 16 | credential_creation_form: 17 | attributes: 18 | create_options: 19 | blank: ne peut être vide 20 | inclusion: vous devez choisir 21 | -------------------------------------------------------------------------------- /config/locales/fr/forms/credential_update_form.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activemodel: 4 | attributes: 5 | credential_update_form: 6 | name: Nom 7 | login: Login 8 | password: Mot de passe 9 | public_key: Clé publique 10 | private_key: Clé privée 11 | 12 | errors: 13 | models: 14 | credential_update_form: 15 | attributes: 16 | name: 17 | blank: ne peut être vide 18 | login: 19 | blank: ne peut être vide 20 | password: 21 | blank: ne peut être vide 22 | -------------------------------------------------------------------------------- /config/locales/fr/forms/public_key_creation_form.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activemodel: 4 | attributes: 5 | public_key_creation_form: 6 | title: Titre 7 | key: Clé publique 8 | -------------------------------------------------------------------------------- /config/locales/fr/forms/user_creation_form.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activemodel: 4 | attributes: 5 | user_creation_form: 6 | login: Login 7 | firstname: Prénom 8 | lastname: Nom 9 | email: Email 10 | language: Langue 11 | time_zone: Fuseau horaire 12 | create_options: Options du mot de passe 13 | send_by_mail: Envoyer les informations à l'utilisateur par mail 14 | password: Mot de passe 15 | password_confirmation: Confirmation du mot de passe 16 | 17 | errors: 18 | models: 19 | user_creation_form: 20 | attributes: 21 | create_options: 22 | blank: ne peut être vide 23 | inclusion: vous devez choisir 24 | -------------------------------------------------------------------------------- /config/locales/fr/highcharts.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | highcharts: 4 | print: Imprimer 5 | menu: Menu 6 | download: 7 | jpeg: Télécharger au format JPG 8 | pdf: Télécharger au format PDF 9 | png: Télécharger au format PNG 10 | svg: Télécharger au format SVG 11 | -------------------------------------------------------------------------------- /config/locales/fr/mailers/registration_mailer.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | registration_mailer: 3 | welcome: 4 | title: "Welcome to Deploy'It" 5 | password_changed: 6 | title: "Your Deploy'It password has changed" 7 | -------------------------------------------------------------------------------- /config/locales/fr/models/application_addon.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | application_addon: 6 | one: Addon 7 | other: Addons 8 | 9 | attributes: 10 | application_addon: 11 | addon: Addon 12 | params: Paramètres 13 | 14 | errors: 15 | models: 16 | application_addon: 17 | attributes: 18 | type: 19 | blank: ne peut être nul 20 | taken: déjà utilisé 21 | inclusion: vous devez choisir 22 | -------------------------------------------------------------------------------- /config/locales/fr/models/application_credential.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | application_credential: 6 | one: Mot de passe 7 | other: Mots de passe 8 | 9 | attributes: 10 | application_credential: 11 | login: Login 12 | password: Mot de passe 13 | 14 | errors: 15 | models: 16 | application_credential: 17 | attributes: 18 | login: 19 | blank: ne peut être nul 20 | taken: déjà pris 21 | password: 22 | blank: ne peut être nul 23 | -------------------------------------------------------------------------------- /config/locales/fr/models/application_database.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | application_database: 6 | one: Base de données 7 | other: Bases de données 8 | 9 | attributes: 10 | application_database: 11 | db_type: Type de base de données 12 | db_name: Nom de la base de données 13 | db_user: Utilisateur de la base de données 14 | db_pass: Mot de passe de la base de données 15 | db_created: Base de données créée? 16 | server_id: Serveur 17 | -------------------------------------------------------------------------------- /config/locales/fr/models/build.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | build: déploiement 6 | 7 | attributes: 8 | build: 9 | state: Etat 10 | release_id: Version 11 | 12 | errors: 13 | models: 14 | build: 15 | attributes: 16 | base: 17 | cannot_get_lock: "Déploiement annulé : impossible d'obtenir le verrou!" 18 | invalid: "Déploiement invalide : %{error}" 19 | release_id: 20 | blank: ne peut être nul 21 | -------------------------------------------------------------------------------- /config/locales/fr/models/buildpack.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | icons: 5 | buildpack: fa-rocket 6 | 7 | models: 8 | buildpack: 9 | one: Buildpack 10 | other: Buildpacks 11 | 12 | attributes: 13 | buildpack: 14 | name: Nom 15 | url: URL 16 | 17 | errors: 18 | models: 19 | buildpack: 20 | attributes: 21 | name: 22 | blank: ne peut être nul 23 | taken: déjà pris 24 | url: 25 | blank: ne peut être nulle 26 | -------------------------------------------------------------------------------- /config/locales/fr/models/container.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | container: 6 | one: Contenaire 7 | other: Contenaires 8 | 9 | errors: 10 | models: 11 | container: 12 | attributes: 13 | application_id: 14 | blank: ne peut être nul 15 | server_id: 16 | blank: ne peut être nul 17 | release_id: 18 | blank: ne peut être nul 19 | type: 20 | blank: ne peut être nul 21 | inclusion: vous devez choisir 22 | -------------------------------------------------------------------------------- /config/locales/fr/models/container_event.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | container_event: 6 | one: Evènement 7 | other: Evènements 8 | 9 | attributes: 10 | container_event: 11 | type: Type 12 | message: Message 13 | created_at: Créé le 14 | 15 | errors: 16 | models: 17 | container_event: 18 | attributes: 19 | container_id: 20 | blank: ne peut être nul 21 | type: 22 | blank: ne peut être nul 23 | message: 24 | blank: ne peut être nul 25 | -------------------------------------------------------------------------------- /config/locales/fr/models/docker_image.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | icons: 5 | docker_image: fa-cubes 6 | 7 | models: 8 | docker_image: 9 | one: Image Docker 10 | other: Images Docker 11 | 12 | attributes: 13 | docker_image: 14 | name: Nom 15 | start_cmd: Commande de démarrage 16 | description: Description 17 | 18 | errors: 19 | models: 20 | docker_image: 21 | attributes: 22 | name: 23 | blank: ne peut être nul 24 | taken: déjà pris 25 | start_cmd: 26 | blank: ne peut être nul 27 | -------------------------------------------------------------------------------- /config/locales/fr/models/domain_name.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | domain_name: 6 | one: Nom de domaine 7 | other: Alias et Redirections 8 | 9 | attributes: 10 | domain_name: 11 | domain_name: Nom de domaine 12 | mode: Mode 13 | 14 | errors: 15 | models: 16 | domain_name: 17 | attributes: 18 | domain_name: 19 | blank: ne peut être nul 20 | taken: déjà utilisé 21 | mode: 22 | blank: ne peut être nul 23 | inclusion: vous devez choisir 24 | -------------------------------------------------------------------------------- /config/locales/fr/models/env_var.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | env_var: 6 | one: Variable d'environnement 7 | other: Variables d'environnement 8 | 9 | attributes: 10 | env_var: 11 | key: Clé 12 | value: Valeur 13 | masked: Masquée 14 | 15 | errors: 16 | models: 17 | env_var: 18 | attributes: 19 | key: 20 | blank: ne peut être nulle 21 | taken: déjà pris 22 | value: 23 | blank: ne peut être nulle 24 | -------------------------------------------------------------------------------- /config/locales/fr/models/group.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | icons: 5 | group: fa-users 6 | 7 | models: 8 | group: 9 | one: Groupe 10 | other: Groupes 11 | 12 | attributes: 13 | group: 14 | name: Nom 15 | user_ids: Membres 16 | members: Membres 17 | 18 | errors: 19 | models: 20 | group: 21 | attributes: 22 | name: 23 | blank: ne peut être nul 24 | taken: déjà utilisé 25 | -------------------------------------------------------------------------------- /config/locales/fr/models/lock.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | icons: 5 | lock: fa-lock 6 | 7 | models: 8 | lock: 9 | one: Verrou 10 | other: Verrous 11 | 12 | attributes: 13 | lock: 14 | token: Jeton 15 | 16 | errors: 17 | models: 18 | lock: 19 | attributes: 20 | token: 21 | blank: ne peut être nul 22 | -------------------------------------------------------------------------------- /config/locales/fr/models/member.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | member: 6 | one: Membre 7 | other: Membres 8 | 9 | attributes: 10 | member: 11 | user_ids: Utilisateurs 12 | role_ids: Rôles 13 | -------------------------------------------------------------------------------- /config/locales/fr/models/member_role.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | errors: 5 | models: 6 | member_role: 7 | attributes: 8 | role: 9 | blank: ne peut être nul 10 | -------------------------------------------------------------------------------- /config/locales/fr/models/mount_point.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | mount_point: 6 | one: Point de montage 7 | other: Points de montage 8 | 9 | attributes: 10 | mount_point: 11 | source: Source 12 | target: Cible 13 | step: Etape 14 | active: Activé 15 | 16 | errors: 17 | models: 18 | mount_point: 19 | attributes: 20 | source: 21 | blank: ne peut être nulle 22 | target: 23 | blank: ne peut être nulle 24 | step: 25 | blank: ne peut être nulle 26 | inclusion: vous devez choisir 27 | -------------------------------------------------------------------------------- /config/locales/fr/models/platform.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | icons: 5 | platform: fa-sitemap 6 | 7 | models: 8 | platform: 9 | one: Plateforme 10 | other: Plateformes 11 | 12 | attributes: 13 | platform: 14 | name: Nom 15 | identifier: Identifiant 16 | description: Description 17 | 18 | errors: 19 | models: 20 | platform: 21 | attributes: 22 | base: 23 | undeletable: "Cette plateforme est utilisée par les %{object_name} : %{list}" 24 | name: 25 | blank: ne peut être nul 26 | taken: déjà utilisé 27 | identifier: 28 | blank: ne peut être nul 29 | taken: déjà utilisé 30 | -------------------------------------------------------------------------------- /config/locales/fr/models/platform_credential.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | attributes: 5 | platform_credential: 6 | public_key: Clé publique 7 | private_key: Clé privée 8 | fingerprint: Empreinte 9 | 10 | models: 11 | platform_credential: 12 | one: "Clé d'accès" 13 | other: "Clés d'accès" 14 | 15 | errors: 16 | models: 17 | platform_credential: 18 | attributes: 19 | public_key: 20 | blank: ne peut être vide 21 | private_key: 22 | blank: ne peut être vide 23 | fingerprint: 24 | blank: ne peut être vide 25 | -------------------------------------------------------------------------------- /config/locales/fr/models/release.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | release: 6 | one: Version 7 | other: Versions 8 | 9 | attributes: 10 | release: 11 | application_id: Application 12 | author_id: Auteur 13 | build_id: Build 14 | config_id: Config 15 | version: Version 16 | -------------------------------------------------------------------------------- /config/locales/fr/models/repository.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | repository: 6 | one: Dépôt 7 | other: Dépôts 8 | 9 | attributes: 10 | repository: 11 | url: URL du dépôt 12 | branch: Branche 13 | credential_id: Clé d'accès 14 | have_credentials: Utilise une clé d'accès 15 | 16 | errors: 17 | models: 18 | repository: 19 | attributes: 20 | path: 21 | taken: déjà pris 22 | url: 23 | blank: ne peut être vide 24 | credential_id: 25 | blank: vous devez choisir une clé d'accès 26 | -------------------------------------------------------------------------------- /config/locales/fr/models/reserved_name.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | icons: 5 | reserved_name: fa-shield 6 | 7 | models: 8 | reserved_name: 9 | one: Nom réservé 10 | other: Noms réservés 11 | 12 | attributes: 13 | reserved_name: 14 | name: Nom 15 | 16 | errors: 17 | models: 18 | reserved_name: 19 | attributes: 20 | name: 21 | blank: ne peut être nul 22 | taken: déjà pris 23 | -------------------------------------------------------------------------------- /config/locales/fr/models/role.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | icons: 5 | role: fa-database 6 | 7 | models: 8 | role: 9 | one: Rôle 10 | other: Rôles 11 | 12 | attributes: 13 | role: 14 | name: Nom 15 | 16 | errors: 17 | models: 18 | role: 19 | attributes: 20 | base: 21 | undeletable: "Cette rôle est utilisé par les %{object_name}(s): %{list}" 22 | name: 23 | blank: ne peut être nul 24 | taken: déjà utilisé 25 | -------------------------------------------------------------------------------- /config/locales/fr/models/settings.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activemodel: 4 | models: 5 | settings: 6 | one: Paramètre 7 | other: Paramètres 8 | -------------------------------------------------------------------------------- /config/locales/fr/models/ssh_public_key.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | ssh_public_key: 6 | one: Clé publique 7 | other: Clés publiques 8 | 9 | attributes: 10 | ssh_public_key: 11 | title: Titre 12 | key: Clé 13 | 14 | errors: 15 | models: 16 | ssh_public_key: 17 | attributes: 18 | title: 19 | blank: ne peut être nul 20 | key: 21 | blank: ne peut être nulle 22 | corrupted: Clé SSH corrompue 23 | in_use_by_you: "Cette clé est déjà utilisée par vous : %{name}" 24 | in_use_by_other: "Cette clé (%{name}) est déjà utilisée par %{login}" 25 | in_use_by_someone: Cette clé est déjà utilisée par quelqu'un 26 | -------------------------------------------------------------------------------- /config/locales/fr/models/ssl_certificate.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | ssl_certificate: 6 | one: Certificat SSL 7 | other: Certificats SSL 8 | 9 | attributes: 10 | ssl_certificate: 11 | ssl_crt: Fichier .crt 12 | ssl_key: Fichier .key 13 | 14 | errors: 15 | models: 16 | ssl_certificate: 17 | attributes: 18 | base: 19 | key_match_cert: La clé SSL ne correspond pas au certificat 20 | ssl_crt: 21 | blank: ne peut être nul 22 | corrupted: Certificat SSL corrompu 23 | ssl_key: 24 | blank: ne peut être nul 25 | corrupted: Clé SSL corrompue 26 | -------------------------------------------------------------------------------- /config/locales/fr/models/stage.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | activerecord: 4 | models: 5 | stage: 6 | one: Stage 7 | other: Stages 8 | 9 | attributes: 10 | stage: 11 | name: Nom 12 | identifier: Identifiant 13 | platform_id: Plateforme 14 | portal_url: URL du portail 15 | database_name_prefix: Préfixe du nom de la base de données 16 | domain_name_suffix: Suffixe du nom de domaine 17 | 18 | errors: 19 | models: 20 | stage: 21 | attributes: 22 | base: 23 | undeletable: "Ce stage est utilisé par les %{object_name} : %{list}" 24 | name: 25 | blank: ne peut être nul 26 | identifier: 27 | blank: ne peut être nul 28 | taken: déjà pris 29 | platform_id: 30 | blank: ne peut être nulle 31 | -------------------------------------------------------------------------------- /config/locales/fr/pagination.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | views: 3 | pagination: 4 | first: '«' 5 | previous: '‹' 6 | next: '›' 7 | last: '»' 8 | truncate: '…' 9 | total: Total 10 | per_page: Par page 11 | 12 | smart_listing: 13 | actions: 14 | edit: Modifier 15 | destroy: Supprimer 16 | -------------------------------------------------------------------------------- /config/locales/fr/permissions.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | permission: 4 | view_application: Voir les applications 5 | create_application: Créer une nouvelle application 6 | edit_application: Editer une application 7 | delete_application: Supprimer une application 8 | build_application: Construire une application 9 | 10 | manage_application: Gérer l'application 11 | manage_members: Gérer les membres 12 | 13 | create_credential: Créer une clé d'accès 14 | edit_credential: Modifier une clé d'accès 15 | delete_credential: Supprimer une clé d'accès 16 | -------------------------------------------------------------------------------- /config/locales/fr/settings.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | settings: 4 | rails_config: Configuration Rails 5 | db_config: Configuration de la base de données 6 | redis_config: Configuration Redis 7 | app_config: Configuration de l'application 8 | devise_config: Configuration Devise 9 | smtp_config: Configuration SMTP 10 | monitoring_config: Configuration du monitoring 11 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/application_types.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | application_types: 5 | new: 6 | title: Nouveau type d'application 7 | clone: 8 | title: Nouveau type d'application 9 | create: 10 | title: Nouveau type d'application 11 | notice: Type d'application créé avec succès 12 | edit: 13 | title: Modifier le type d'application 14 | update: 15 | title: Modifier le type d'application 16 | notice: Type d'application modifié avec succès 17 | destroy: 18 | notice: Type d'application supprimé avec succès 19 | failed: Impossible de supprimer le type d'application 20 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/applications.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | applications: 5 | list: 6 | button: 7 | execute: Exécuter 8 | select: 9 | action: Séléctionnez une action 10 | options: 11 | start: Démarrer 12 | stop: Arrêter 13 | restart: Redémarrer 14 | update_route: Mettre à jour la route 15 | 16 | manage: 17 | success: 18 | action: 19 | enqueue: Action mise en file d'attente 20 | error: 21 | action: 22 | empty: Vous devez spécifier l'action à exécuter 23 | invalid: Action invalide 24 | application_ids: 25 | empty: Vous devez séléctionner une ou plusieurs applications 26 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/buildpacks.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | buildpacks: 5 | new: 6 | title: Nouveau buildpack 7 | create: 8 | title: Nouveau buildpack 9 | notice: Buildpack créée avec succès 10 | edit: 11 | title: Modifier le buildpack 12 | update: 13 | title: Modifier le buildpack 14 | notice: Buildpack modifié avec succès 15 | destroy: 16 | notice: Buildpack supprimé avec succès 17 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/docker_images.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | docker_images: 5 | new: 6 | title: Nouvelle image Docker 7 | create: 8 | title: Nouvelle image Docker 9 | notice: Image Docker créée avec succès 10 | edit: 11 | title: Modifier l'image Docker 12 | update: 13 | title: Modifier l'image Docker 14 | notice: Image Docker modifiée avec succès 15 | destroy: 16 | notice: Image Docker supprimée avec succès 17 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/groups.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | groups: 5 | new: 6 | title: Nouveau groupe 7 | create: 8 | title: Nouveau groupe 9 | notice: Groupe créé avec succès 10 | edit: 11 | title: Modifier le groupe 12 | update: 13 | title: Modifier le groupe 14 | notice: Groupe modifié avec succès 15 | destroy: 16 | notice: Groupe supprimé avec succès 17 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/locks.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | locks: 5 | destroy: 6 | notice: Verrou supprimé avec succès 7 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/memberships.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | memberships: 5 | listing: 6 | none_defined: Aucune application associée 7 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/platforms.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | platforms: 5 | credential: 6 | desc: "Les serveurs doivent donner accès à la clé publique suivante" 7 | none_defined: Aucune clé d'accès définie 8 | new: 9 | title: Nouvelle plateforme 10 | create: 11 | title: Nouvelle plateforme 12 | notice: Plateforme créée avec succès 13 | edit: 14 | title: Modifier la plateforme 15 | update: 16 | title: Modifier la plateforme 17 | notice: Plateforme modifiée avec succès 18 | destroy: 19 | notice: Plateforme supprimée avec succès 20 | failed: Impossible de supprimer la plateforme 21 | delete: 22 | destroy: Supprimer la plateforme 23 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/public_keys.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | admin: 3 | public_keys: 4 | create: 5 | notice: Clé publique créée avec succès 6 | error: Erreurs lors de l'enregistrement de la clé publique 7 | destroy: 8 | notice: Clé publique supprimée avec succès 9 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/reserved_names.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | reserved_names: 5 | new: 6 | title: Nouveau nom réservé 7 | create: 8 | title: Nouveau nom réservé 9 | notice: Nom réservé créé avec succès 10 | edit: 11 | title: Modifier le nom réservé 12 | update: 13 | title: Modifier le nom réservé 14 | notice: Nom réservé modifié avec succès 15 | destroy: 16 | notice: Nom réservé supprimé avec succès 17 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/roles.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | roles: 5 | index: 6 | permissions_report: Synthèse des permissions 7 | sort: Trier 8 | new: 9 | title: Nouveau rôle 10 | create: 11 | title: Nouveau rôle 12 | notice: Rôle créé avec succès 13 | edit: 14 | title: Modifier le rôle 15 | update: 16 | title: Modifier le rôle 17 | notice: Rôle modifié avec succès 18 | destroy: 19 | notice: Rôle supprimé avec succès 20 | permissions: 21 | title: Synthèse des permissions 22 | permissions_report: Synthèse des permissions 23 | notice: Rôles modifiés avec succès 24 | form: 25 | permissions: Permissions 26 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/settings.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | admin: 3 | settings: 4 | settings: 5 | title: Paramètres 6 | addons: 7 | title: Addons 8 | versions: 9 | title: Versions 10 | more_infos: Afficher plus d'informations 11 | version_of: 12 | deploy_it: Version de DeployIt 13 | ruby: Version de Ruby 14 | rails: Version de Rails 15 | docker: Version de Docker 16 | rugged: Version de Rugged 17 | libgit2: Version de libgit2 18 | index: 19 | title: Paramètres 20 | -------------------------------------------------------------------------------- /config/locales/fr/views/admin/stages.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | admin: 4 | stages: 5 | new: 6 | title: Nouveau stage 7 | create: 8 | title: Nouveau stage 9 | notice: Stage créé avec succès 10 | edit: 11 | title: Modifier le stage 12 | update: 13 | title: Modifier le stage 14 | notice: Stage modifié avec succès 15 | destroy: 16 | notice: Stage supprimé avec succès 17 | delete: 18 | destroy: Supprimer le stage 19 | -------------------------------------------------------------------------------- /config/locales/fr/views/applications_manager.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | applications_manager: 3 | manage: 4 | notice: Demande mise en file d'attente 5 | build: 6 | notice: Reconstruction mise en file d'attente 7 | -------------------------------------------------------------------------------- /config/locales/fr/views/containers_manager.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | containers_manager: 3 | manage: 4 | notice: Demande mise en file d'attente 5 | infos: 6 | title: Informations Docker 7 | top: 8 | title: Processus en cours 9 | -------------------------------------------------------------------------------- /config/locales/fr/views/credentials.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | credentials: 3 | new: 4 | title: Nouvelle clé d'accès 5 | create: 6 | title: Nouvelle clé d'accès 7 | notice: Clés d'accès créée avec succès 8 | error: Erreurs lors de la création de la clé d'accès 9 | update: 10 | notice: Clés d'accès modifiée avec succès 11 | error: Erreurs lors de l'enregistrement de la clé d'accès 12 | destroy: 13 | notice: Clés d'accès supprimée avec succès 14 | edit_ssh_key: 15 | desc: "Le dépôt doit donner les droits de lecture à la clé publique suivante" 16 | -------------------------------------------------------------------------------- /config/locales/fr/views/members.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | members: 3 | members: 4 | none_defined: Aucun membre 5 | -------------------------------------------------------------------------------- /config/locales/fr/views/my.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | my: 3 | account: 4 | title: Mon compte 5 | api_key: Clé d'accès API 6 | notice: Informations mises à jour avec succès 7 | 8 | reset_api_key: 9 | notice: Clé d'accès API réinitialisée avec succès 10 | -------------------------------------------------------------------------------- /config/locales/fr/views/public_keys.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | 3 | public_keys: 4 | create: 5 | notice: Clé publique créée avec succès 6 | error: Erreurs lors de l'enregistrement de la clé publique 7 | destroy: 8 | notice: Clé publique supprimée avec succès 9 | index: 10 | help: Aide 11 | explanation: déclarez vos clés SSH pour pouvoir pousser vos données dans les contenaires. 12 | -------------------------------------------------------------------------------- /config/locales/fr/views/ssh_keys_manager.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | ssh_keys_manager: 3 | index: 4 | new: Nouvelle clé SSH 5 | form: 6 | new: Nouvelle clé SSH 7 | ssh_keys: 8 | help: Aide 9 | new: Nouvelle clé SSH 10 | explanation: déclarez vos clés SSH pour pouvoir pousser vos données dans les contenaires. 11 | delete: Supprimer 12 | -------------------------------------------------------------------------------- /config/locales/fr/views/welcome.yml: -------------------------------------------------------------------------------- 1 | fr: 2 | welcome: 3 | help: 4 | title: Aide 5 | -------------------------------------------------------------------------------- /config/secrets.yml: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key is used for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | 6 | # Make sure the secret is at least 30 characters and all random, 7 | # no regular words or you'll be exposed to dictionary attacks. 8 | # You can use `rake secret` to generate a secure secret key. 9 | 10 | # Make sure the secrets in this file are kept private 11 | # if you're sharing your code publicly. 12 | 13 | development: 14 | secret_key_base: <%= ENV['SECRET_KEY_BASE'] %> 15 | 16 | test: 17 | secret_key_base: <%= ENV['SECRET_KEY_BASE'] %> 18 | 19 | # Do not keep production secrets in the repository, 20 | # instead read values from the environment. 21 | production: 22 | secret_key_base: <%= ENV['SECRET_KEY_BASE'] %> 23 | -------------------------------------------------------------------------------- /config/sidekiq.yml: -------------------------------------------------------------------------------- 1 | --- 2 | :concurrency: 10 3 | :timeout: 15 4 | :queues: 5 | - deploy_it_repositories 6 | - deploy_it_applications 7 | - deploy_it_containers 8 | -------------------------------------------------------------------------------- /config/spring.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | %w( 3 | .ruby-version 4 | .rbenv-vars 5 | tmp/restart.txt 6 | tmp/caching-dev.txt 7 | ).each { |path| Spring.watch(path) } 8 | -------------------------------------------------------------------------------- /db/migrate/20201219113803_squasher_clean.rb: -------------------------------------------------------------------------------- 1 | class SquasherClean < ActiveRecord::Migration[5.2] 2 | class SchemaMigration < ActiveRecord::Base 3 | end 4 | 5 | def up 6 | migrations = Dir.glob(File.join(File.dirname(__FILE__), '*.rb')) 7 | versions = migrations.map { |file| File.basename(file)[/\A\d+/] } 8 | SchemaMigration.where("version NOT IN (?)", versions).delete_all 9 | end 10 | 11 | def down 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /db/seeds.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | -------------------------------------------------------------------------------- /lib/addons/memcached.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Memcached 3 | port: 11211 4 | image: 'memcached' 5 | url: 'https://hub.docker.com/_/memcached/' 6 | icon: 'memcached.png' 7 | start_command: 8 | - 'memcached' 9 | -------------------------------------------------------------------------------- /lib/addons/redis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Redis 3 | port: 6379 4 | image: 'redis' 5 | url: 'https://hub.docker.com/_/redis/' 6 | icon: 'redis.svg' 7 | start_command: 8 | - 'redis-server' 9 | -------------------------------------------------------------------------------- /lib/ansible_tasks/database/mysql-database-creator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: "{{ HOST }}" 3 | remote_user: "{{ USER }}" 4 | gather_facts: no 5 | 6 | vars_files: 7 | - "{{ CONTAINER_VARS }}" 8 | 9 | tasks: 10 | - name: "Create MySQL database : {{ DB_NAME }}" 11 | mysql_db: login_host=localhost name={{ DB_NAME }} state=present 12 | 13 | - name: "Create MySQL database user : {{ DB_USER }}" 14 | mysql_user: login_host=localhost host=% name={{ DB_USER }} password={{ DB_PASS }} priv={{ DB_NAME }}.*:ALL state=present 15 | -------------------------------------------------------------------------------- /lib/ansible_tasks/database/mysql-database-destroyer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: "{{ HOST }}" 3 | remote_user: "{{ USER }}" 4 | gather_facts: no 5 | 6 | vars_files: 7 | - "{{ CONTAINER_VARS }}" 8 | 9 | tasks: 10 | - name: "Destroy MySQL database : {{ DB_NAME }}" 11 | mysql_db: login_host=localhost name={{ DB_NAME }} state=absent 12 | ignore_errors: True 13 | 14 | - name: "Destroy MySQL database user : {{ DB_USER }}" 15 | mysql_user: login_host=localhost host=% name={{ DB_USER }} state=absent 16 | ignore_errors: True 17 | -------------------------------------------------------------------------------- /lib/ansible_tasks/database/postgres-database-creator.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: "{{ HOST }}" 3 | remote_user: "{{ USER }}" 4 | gather_facts: no 5 | 6 | vars_files: 7 | - "{{ CONTAINER_VARS }}" 8 | 9 | tasks: 10 | - name: "Create Postgres database : {{ DB_NAME }}" 11 | postgresql_db: login_host=localhost name={{ DB_NAME }} state=present 12 | 13 | - name: "Create Postgres database user : {{ DB_USER }}" 14 | postgresql_user: login_host=localhost name={{ DB_USER }} password={{ DB_PASS }} db={{ DB_NAME }} priv=ALL state=present 15 | -------------------------------------------------------------------------------- /lib/ansible_tasks/database/postgres-database-destroyer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: "{{ HOST }}" 3 | remote_user: "{{ USER }}" 4 | gather_facts: no 5 | 6 | vars_files: 7 | - "{{ CONTAINER_VARS }}" 8 | 9 | tasks: 10 | - name: "Disable new connections" 11 | shell: sudo -u postgres -n psql -c "update pg_database set datallowconn = 'false' where datname = '{{ DB_NAME }}';" 12 | ignore_errors: True 13 | 14 | - name: "Disconnect connected users" 15 | shell: sudo -u postgres -n psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '{{ DB_NAME }}';" 16 | ignore_errors: True 17 | 18 | - name: "Destroy Postgres database : {{ DB_NAME }}" 19 | postgresql_db: login_host=localhost name={{ DB_NAME }} state=absent 20 | ignore_errors: True 21 | 22 | - name: "Destroy Postgres database user : {{ DB_USER }}" 23 | mysql_user: login_host=localhost name={{ DB_USER }} state=absent 24 | ignore_errors: True 25 | -------------------------------------------------------------------------------- /lib/ansible_tasks/router/route-destroyer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: "{{ HOST }}" 3 | remote_user: "{{ USER }}" 4 | port: "{{ PORT }}" 5 | gather_facts: no 6 | 7 | vars_files: 8 | - "{{ CONTAINER_VARS }}" 9 | 10 | vars: 11 | 12 | CONFIG_DIR_BASE: '/etc/nginx/sites-enabled' 13 | CONFIG_DIR: "{{ CONFIG_DIR_BASE }}/{{ APPLICATION_NAME }}" 14 | 15 | tasks: 16 | 17 | ## Frontend : standard configuration (80) 18 | - name: "Remove Nginx config dir : {{ CONFIG_DIR }}" 19 | file: state=absent dest={{ CONFIG_DIR }} 20 | -------------------------------------------------------------------------------- /lib/ansible_tasks/router/ssl_cert.tmpl: -------------------------------------------------------------------------------- 1 | {{ SSL_CERT }} 2 | -------------------------------------------------------------------------------- /lib/ansible_tasks/router/ssl_key.tmpl: -------------------------------------------------------------------------------- 1 | {{ SSL_KEY }} 2 | -------------------------------------------------------------------------------- /lib/capistrano/tasks/favicon.rake: -------------------------------------------------------------------------------- 1 | namespace :favicon do 2 | set :favicon, 'app/assets/images/favicons/favicon.ico' 3 | 4 | desc 'Install favicon' 5 | task :install do 6 | if File.exist?(fetch(:favicon)) 7 | on roles(:web) do |host| 8 | upload! fetch(:favicon), "#{shared_path}/public/favicon.ico" 9 | end 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /lib/capistrano/tasks/maintenance.rake: -------------------------------------------------------------------------------- 1 | namespace :maintenance do 2 | set :maintenance_page, 'public/maintenance.html' 3 | 4 | desc 'Start maintenance mode' 5 | task :start do 6 | on roles(:web) do |host| 7 | within shared_path do 8 | execute 'touch', 'tmp/maintenance.txt' 9 | end 10 | end 11 | end 12 | 13 | desc 'Stop maintenance mode' 14 | task :end do 15 | on roles(:web) do |host| 16 | within shared_path do 17 | execute 'rm', '-f', 'tmp/maintenance.txt' 18 | end 19 | end 20 | end 21 | 22 | desc 'Install maintenance page' 23 | task :install do 24 | on roles(:web) do |host| 25 | upload! fetch(:maintenance_page), "#{shared_path}/public/maintenance.html" 26 | end 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /lib/core_ext/hash/to_env.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # DeployIt - Docker containers management software 3 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 4 | # 5 | # This code is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU Affero General Public License, version 3, 7 | # as published by the Free Software Foundation. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License, version 3, 15 | # along with this program. If not, see 16 | 17 | class Hash 18 | 19 | def to_env 20 | self.map { |k, v| "#{k.to_s.upcase}=#{v}" } 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /lib/tasks/ci_tools.rake: -------------------------------------------------------------------------------- 1 | task stats: 'deploy_it:statistics:stats' 2 | 3 | namespace :deploy_it do 4 | 5 | namespace :statistics do 6 | task :stats do 7 | require 'rails/code_statistics' 8 | ::STATS_DIRECTORIES << ['Contexts', 'app/contexts'] 9 | ::STATS_DIRECTORIES << ['Forms', 'app/forms'] 10 | ::STATS_DIRECTORIES << ['Menus', 'app/menus'] 11 | ::STATS_DIRECTORIES << ['Presenters', 'app/presenters'] 12 | ::STATS_DIRECTORIES << ['Proxies', 'app/proxies'] 13 | ::STATS_DIRECTORIES << ['Services', 'app/services'] 14 | ::STATS_DIRECTORIES << ['UseCases', 'app/use_cases'] 15 | end 16 | end 17 | 18 | 19 | namespace :api do 20 | desc 'API Routes' 21 | task :routes => [:environment] do 22 | DeployIt::API.routes.each do |api| 23 | method = api.route_method.ljust(10) 24 | path = api.route_path.gsub(':version', api.route_version) 25 | puts " #{method} #{path}" 26 | end 27 | end 28 | end 29 | 30 | end 31 | -------------------------------------------------------------------------------- /log/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/log/.keep -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/public/favicon.ico -------------------------------------------------------------------------------- /public/maintenance.html: -------------------------------------------------------------------------------- 1 | 2 | Site Maintenance 3 | 11 | 12 |
13 |

We’ll be back soon!

14 |
15 |

Sorry for the inconvenience but we’re performing some maintenance at the moment. We’ll be back online shortly!

16 |

DeployIt

17 |
18 |
19 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file 2 | # 3 | # To ban all spiders from the entire site uncomment the next two lines: 4 | # User-agent: * 5 | # Disallow: / 6 | -------------------------------------------------------------------------------- /spec/factories/group.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :group do |f| 19 | f.name { Faker::Internet.user_name } 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /spec/factories/member_role.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :member_role do |f| 19 | f.association :role 20 | f.association :member, factory: :member_user 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /spec/factories/platform.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :platform do |f| 19 | f.identifier { Faker::Internet.user_name } 20 | f.name { Faker::Name.name } 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /spec/factories/platform_credential.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :platform_credential do |f| 19 | f.association :platform 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /spec/factories/repository_credential.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :repository_credential do |f| 19 | f.name { Faker::Internet.user_name } 20 | f.type { 'RepositoryCredential::BasicAuth' } 21 | end 22 | 23 | end 24 | -------------------------------------------------------------------------------- /spec/factories/role.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :role do |f| 19 | f.name { Faker::Internet.user_name } 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /spec/factories/ssh_key.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :ssh_key, class: 'RepositoryCredential::SshKey' do |f| 19 | f.name { Faker::Internet.user_name } 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /spec/factories/ssl_certificate.rb: -------------------------------------------------------------------------------- 1 | # DeployIt - Docker containers management software 2 | # Copyright (C) 2015 Nicolas Rodriguez (nrodriguez@jbox-web.com), JBox Web (http://www.jbox-web.com) 3 | # 4 | # This code is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License, version 3, 6 | # as published by the Free Software Foundation. 7 | # 8 | # This program is distributed in the hope that it will be useful, 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | # GNU Affero General Public License for more details. 12 | # 13 | # You should have received a copy of the GNU Affero General Public License, version 3, 14 | # along with this program. If not, see 15 | 16 | FactoryBot.define do 17 | 18 | factory :ssl_certificate do |f| 19 | f.association :application 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /tmp/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/tmp/.keep -------------------------------------------------------------------------------- /vendor/assets/javascripts/datatables/loader.js.coffee: -------------------------------------------------------------------------------- 1 | #= require datatables/datatables.min 2 | #= require datatables/jquery.dataTables.yadcf 3 | #= require datatables/factory 4 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/datatables/pdfmake.min.js.map: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbox-web/deploy-it/4cf635807d2198345d56a6b23be05b46a64b4266/vendor/assets/javascripts/datatables/pdfmake.min.js.map -------------------------------------------------------------------------------- /vendor/assets/stylesheets/sb-admin/bootstrap-custom.scss: -------------------------------------------------------------------------------- 1 | // Google Fonts 2 | @import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&lang=en"); 3 | 4 | $navbar-default-bg: #00a2a4; 5 | $navbar-default-border: lighten($navbar-default-bg,6.5%); 6 | 7 | $navbar-default-link-color: #fff; 8 | $navbar-default-link-hover-color: #000; 9 | $navbar-default-link-active-color: #fff; 10 | $navbar-default-brand-hover-color: $navbar-default-link-hover-color; 11 | 12 | $link-color: #00a2a4; 13 | 14 | // Bootstrap 15 | @import "bootstrap-sprockets"; 16 | @import "bootstrap"; 17 | 18 | .navbar-default .sidebar { 19 | background-color: unset; 20 | } 21 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/sb-admin/custom/datepicker.css: -------------------------------------------------------------------------------- 1 | .hasDatepicker { 2 | position: relative; 3 | z-index: 1000; 4 | } 5 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/sb-admin/custom/icons.css: -------------------------------------------------------------------------------- 1 | .fa-align { 2 | padding-right: 5px; 3 | } 4 | 5 | .fa-success { 6 | color: #5cb85c; 7 | } 8 | 9 | .fa-important { 10 | color: #a94442; 11 | } 12 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/sb-admin/custom/select2.css: -------------------------------------------------------------------------------- 1 | .input-group .select2-selection { 2 | border-radius: 0; 3 | border: 1px solid #ccc; 4 | padding-top: 2px; 5 | padding-left: 3px; 6 | font-size: 14px; 7 | } 8 | 9 | .select2-container--open .select2-dropdown--above { 10 | border-radius: 0; 11 | } 12 | 13 | .select2-container--open .select2-dropdown--below { 14 | border-radius: 0; 15 | } 16 | 17 | .select2-dropdown { 18 | z-index: 2060; 19 | } 20 | 21 | .select2-container .select2-selection--single { 22 | height: 34px; 23 | } 24 | 25 | .select2-container--default .select2-selection--single .select2-selection__rendered { 26 | color: #999; 27 | } 28 | 29 | .select2-container--default.select2-container--focus { 30 | border: none; 31 | } 32 | 33 | .select2-container--default .select2-selection--multiple { 34 | border-radius: 0; 35 | border: 1px solid #ccc; 36 | } 37 | 38 | .responsive-select2 [class*="col-"] .select2-container { 39 | width: 100% !important; 40 | } 41 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/sb-admin/font_awesome.scss: -------------------------------------------------------------------------------- 1 | @import "font-awesome-sprockets"; 2 | @import "font-awesome"; 3 | -------------------------------------------------------------------------------- /wrappers/deploy-it-authentifier: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | . /etc/container_environment.sh 2> /dev/null 4 | 5 | bundle exec $HOME/bin/deploy-it-authentifier "$@" 6 | -------------------------------------------------------------------------------- /wrappers/deploy-it-builder: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | . /etc/container_environment.sh 2> /dev/null 4 | 5 | cat | bundle exec $HOME/bin/deploy-it-builder "$@" 6 | -------------------------------------------------------------------------------- /wrappers/ssh-git.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ -z "$PRIVATE_KEY" ] ; then 4 | # if PRIVATE_KEY is not specified, run ssh using default keyfile 5 | ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$@" 6 | else 7 | ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i "$PRIVATE_KEY" "$@" 8 | fi 9 | --------------------------------------------------------------------------------