houston-core 0.5.0.beta1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +0 -2
- data/.gitignore +3 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +63 -62
- data/README.md +13 -121
- data/app/adapters/houston/adapters/ci_server/errors.rb +4 -4
- data/app/adapters/houston/adapters/ci_server/jenkins_adapter/job.rb +50 -50
- data/app/adapters/houston/adapters/ci_server/jenkins_adapter.rb +4 -4
- data/app/adapters/houston/adapters/ci_server/none_adapter/job.rb +5 -5
- data/app/adapters/houston/adapters/ci_server/none_adapter.rb +4 -4
- data/app/adapters/houston/adapters/deployment/engineyard.rb +20 -20
- data/app/adapters/houston/adapters/error_tracker/errbit_adapter/app.rb +14 -14
- data/app/adapters/houston/adapters/error_tracker/errbit_adapter/connection.rb +41 -41
- data/app/adapters/houston/adapters/error_tracker/errbit_adapter/notice.rb +6 -6
- data/app/adapters/houston/adapters/error_tracker/errbit_adapter/problem.rb +25 -25
- data/app/adapters/houston/adapters/error_tracker/errbit_adapter.rb +20 -20
- data/app/adapters/houston/adapters/error_tracker/none_adapter.rb +8 -8
- data/app/adapters/houston/adapters/error_tracker/null_app.rb +13 -13
- data/app/adapters/houston/adapters/ticket_tracker/errors.rb +5 -5
- data/app/adapters/houston/adapters/ticket_tracker/github_adapter/connection.rb +41 -41
- data/app/adapters/houston/adapters/ticket_tracker/github_adapter/issue.rb +22 -22
- data/app/adapters/houston/adapters/ticket_tracker/github_adapter.rb +7 -7
- data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/connection.rb +13 -13
- data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/ticket.rb +15 -15
- data/app/adapters/houston/adapters/ticket_tracker/houston_adapter.rb +4 -4
- data/app/adapters/houston/adapters/ticket_tracker/none_adapter.rb +4 -4
- data/app/adapters/houston/adapters/ticket_tracker/null_connection.rb +13 -13
- data/app/adapters/houston/adapters/ticket_tracker/null_ticket.rb +19 -19
- data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/connection.rb +54 -54
- data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/milestone.rb +10 -10
- data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/ticket.rb +59 -59
- data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter.rb +9 -9
- data/app/adapters/houston/adapters/version_control/commit.rb +4 -4
- data/app/adapters/houston/adapters/version_control/errors.rb +9 -9
- data/app/adapters/houston/adapters/version_control/git_adapter/github_repo.rb +15 -15
- data/app/adapters/houston/adapters/version_control/git_adapter/remote_repo.rb +53 -30
- data/app/adapters/houston/adapters/version_control/git_adapter/repo.rb +60 -55
- data/app/adapters/houston/adapters/version_control/git_adapter.rb +22 -22
- data/app/adapters/houston/adapters/version_control/none_adapter.rb +4 -4
- data/app/adapters/houston/adapters/version_control/null_commit.rb +4 -4
- data/app/adapters/houston/adapters/version_control/null_repo.rb +18 -18
- data/app/adapters/houston/adapters.rb +10 -10
- data/app/assets/javascripts/app/boot.coffee +5 -5
- data/app/assets/javascripts/app/infinite_scroll.coffee +6 -6
- data/app/assets/javascripts/app/models/commit.coffee +1 -1
- data/app/assets/javascripts/app/models/release.coffee +1 -1
- data/app/assets/javascripts/app/models/task.coffee +1 -1
- data/app/assets/javascripts/app/models/tester.coffee +1 -1
- data/app/assets/javascripts/app/models/testing_note.coffee +2 -2
- data/app/assets/javascripts/app/models/ticket.coffee +24 -24
- data/app/assets/javascripts/app/models/user.coffee +1 -1
- data/app/assets/javascripts/app/releases.coffee +6 -6
- data/app/assets/javascripts/app/stacked_area_graph.coffee +22 -22
- data/app/assets/javascripts/app/stacked_bar_graph.coffee +20 -20
- data/app/assets/javascripts/app/table_row_expander.coffee +10 -10
- data/app/assets/javascripts/app/ticket_tracker_refresh.coffee +19 -19
- data/app/assets/javascripts/app/views/_show_sprint_view.coffee +14 -14
- data/app/assets/javascripts/app/views/_tickets_view.coffee +8 -8
- data/app/assets/javascripts/app/views/all_tickets_view.coffee +1 -2
- data/app/assets/javascripts/app/views/commit_view.coffee +2 -2
- data/app/assets/javascripts/app/views/edit_sprint_view.coffee +36 -36
- data/app/assets/javascripts/app/views/find_or_create_ticket_view.coffee +3 -3
- data/app/assets/javascripts/app/views/keyboard_shortcuts_modal.coffee +14 -14
- data/app/assets/javascripts/app/views/new_ticket_modal.coffee +4 -4
- data/app/assets/javascripts/app/views/new_ticket_view.coffee +34 -34
- data/app/assets/javascripts/app/views/problems_view.coffee +8 -8
- data/app/assets/javascripts/app/views/reports_view.coffee +5 -5
- data/app/assets/javascripts/app/views/testing_note_view.coffee +10 -10
- data/app/assets/javascripts/app/views/testing_report_view.coffee +7 -7
- data/app/assets/javascripts/app/views/testing_ticket_view.coffee +36 -36
- data/app/assets/javascripts/app/views/ticket_modal_view.coffee +5 -5
- data/app/assets/javascripts/core/app.coffee +22 -22
- data/app/assets/javascripts/core/burndown_chart.coffee +21 -21
- data/app/assets/javascripts/core/errors.coffee +2 -2
- data/app/assets/javascripts/core/handlebars_helpers.coffee +6 -6
- data/app/assets/javascripts/core/jquery_extensions.coffee +28 -28
- data/app/assets/javascripts/dashboard/refresher.coffee +4 -4
- data/app/assets/stylesheets/application/ansi.scss +2 -2
- data/app/assets/stylesheets/application/commit.scss +1 -1
- data/app/assets/stylesheets/application/exceptions.scss +3 -3
- data/app/assets/stylesheets/application/find_or_create_ticket.scss +2 -2
- data/app/assets/stylesheets/application/follow_up.scss +2 -2
- data/app/assets/stylesheets/application/forms.scss +2 -2
- data/app/assets/stylesheets/application/freight_train.css.scss +5 -5
- data/app/assets/stylesheets/application/full_screen.scss +2 -2
- data/app/assets/stylesheets/application/infinite_scroll.scss +1 -1
- data/app/assets/stylesheets/application/keyboard_shortcuts.scss +3 -3
- data/app/assets/stylesheets/application/markdown.scss +2 -2
- data/app/assets/stylesheets/application/navigation.scss +15 -15
- data/app/assets/stylesheets/application/new_ticket_view.scss +16 -16
- data/app/assets/stylesheets/application/omnibar.scss +6 -6
- data/app/assets/stylesheets/application/project_banner_buttons.scss +6 -6
- data/app/assets/stylesheets/application/project_tiles.scss +2 -2
- data/app/assets/stylesheets/application/projects.css.scss +3 -3
- data/app/assets/stylesheets/application/pull_requests.scss +6 -6
- data/app/assets/stylesheets/application/queue.scss +2 -2
- data/app/assets/stylesheets/application/release_form.scss +10 -10
- data/app/assets/stylesheets/application/releases.scss +32 -39
- data/app/assets/stylesheets/application/sortable_table.scss +6 -6
- data/app/assets/stylesheets/application/sprint.scss +6 -6
- data/app/assets/stylesheets/application/tables.scss +6 -6
- data/app/assets/stylesheets/application/test_run.scss +16 -16
- data/app/assets/stylesheets/application/ticket.scss +13 -13
- data/app/assets/stylesheets/application/ticket_modal.scss +19 -19
- data/app/assets/stylesheets/application/tickets.scss +2 -2
- data/app/assets/stylesheets/application/timeline.scss +30 -30
- data/app/assets/stylesheets/application/tips.scss +1 -1
- data/app/assets/stylesheets/application/typeahead.scss +4 -4
- data/app/assets/stylesheets/application/uploading.scss +13 -13
- data/app/assets/stylesheets/application/welcome.scss +3 -3
- data/app/assets/stylesheets/core/burndown_chart.scss +11 -11
- data/app/assets/stylesheets/core/misc.scss +8 -8
- data/app/assets/stylesheets/core/overrides.scss +2 -2
- data/app/assets/stylesheets/core/scores.scss +26 -26
- data/app/assets/stylesheets/dashboard/dashboard.scss +16 -16
- data/app/assets/stylesheets/print.css.scss +3 -3
- data/app/concerns/commit_synchronizer.rb +24 -24
- data/app/concerns/feature_state.rb +7 -7
- data/app/concerns/feature_support.rb +4 -4
- data/app/concerns/historical_weekly_stats.rb +4 -4
- data/app/concerns/milestone_synchronizer.rb +14 -14
- data/app/concerns/nosync.rb +4 -4
- data/app/concerns/project_adapter.rb +22 -22
- data/app/concerns/retirement.rb +7 -7
- data/app/concerns/ticket_synchronizer.rb +31 -31
- data/app/concerns/unique_add.rb +2 -2
- data/app/controllers/api/v1/sprint_tasks_controller.rb +19 -19
- data/app/controllers/api/v1/ticket_tasks_controller.rb +14 -14
- data/app/controllers/application_controller.rb +46 -40
- data/app/controllers/commits_controller.rb +10 -10
- data/app/controllers/deploys_controller.rb +11 -11
- data/app/controllers/home_controller.rb +4 -4
- data/app/controllers/jobs_controller.rb +3 -3
- data/app/controllers/oauth_consumers_controller.rb +1 -1
- data/app/controllers/omnibar_controller.rb +6 -6
- data/app/controllers/project_exceptions_controller.rb +11 -11
- data/app/controllers/project_hooks_controller.rb +7 -7
- data/app/controllers/project_options_controller.rb +8 -8
- data/app/controllers/project_pretickets_controller.rb +6 -6
- data/app/controllers/project_roles_controller.rb +7 -7
- data/app/controllers/project_tickets_controller.rb +28 -28
- data/app/controllers/project_tickets_sync_controller.rb +8 -8
- data/app/controllers/projects_controller.rb +29 -29
- data/app/controllers/releases_controller.rb +25 -25
- data/app/controllers/reports_controller.rb +36 -36
- data/app/controllers/sessions_controller.rb +2 -2
- data/app/controllers/settings_controller.rb +3 -3
- data/app/controllers/sprint_task_locks_controller.rb +11 -11
- data/app/controllers/sprints_controller.rb +25 -25
- data/app/controllers/tasks_controller.rb +10 -10
- data/app/controllers/test_runs_controller.rb +8 -8
- data/app/controllers/tester_bar_controller.rb +2 -2
- data/app/controllers/testing_notes_controller.rb +15 -15
- data/app/controllers/testing_report_controller.rb +14 -14
- data/app/controllers/tickets_controller.rb +9 -9
- data/app/controllers/uploads_controller.rb +9 -9
- data/app/controllers/user_credentials_controller.rb +4 -4
- data/app/controllers/user_options_controller.rb +6 -6
- data/app/controllers/users_controller.rb +34 -34
- data/app/controllers/welcome_controller.rb +6 -6
- data/app/helpers/ansi_helper.rb +4 -4
- data/app/helpers/application_helper.rb +26 -26
- data/app/helpers/avatar_helper.rb +12 -12
- data/app/helpers/backtrace_helper.rb +2 -2
- data/app/helpers/breadcrumbs_helper.rb +9 -9
- data/app/helpers/commit_helper.rb +16 -12
- data/app/helpers/demo_helper.rb +4 -4
- data/app/helpers/email_helper.rb +3 -3
- data/app/helpers/emoji_helper.rb +1 -1
- data/app/helpers/excel_helpers.rb +2 -2
- data/app/helpers/exposure_helper.rb +3 -3
- data/app/helpers/flash_message_helper.rb +6 -6
- data/app/helpers/maintenance_light_helper.rb +3 -3
- data/app/helpers/markdown_helper.rb +3 -3
- data/app/helpers/navigation_helper.rb +12 -12
- data/app/helpers/project_helper.rb +5 -5
- data/app/helpers/release_helper.rb +9 -9
- data/app/helpers/score_card_helper.rb +16 -16
- data/app/helpers/sprint_helper.rb +2 -2
- data/app/helpers/static_chart_helper.rb +2 -2
- data/app/helpers/test_run_helper.rb +6 -6
- data/app/helpers/ticket_helper.rb +14 -14
- data/app/helpers/timeline_helper.rb +5 -5
- data/app/helpers/url_helper.rb +26 -26
- data/app/helpers/user_helper.rb +6 -6
- data/app/helpers/version_helper.rb +4 -4
- data/app/interactors/test_run_comparer.rb +9 -9
- data/app/interactors/ticket_report.rb +7 -7
- data/app/jobs/sync_all_tickets_job.rb +13 -13
- data/app/jobs/sync_commits_job.rb +3 -3
- data/app/jobs/sync_project_tickets_job.rb +9 -9
- data/app/mailers/deploy_notification.rb +9 -9
- data/app/mailers/project_notification.rb +29 -29
- data/app/mailers/view_mailer.rb +20 -38
- data/app/models/ability.rb +21 -21
- data/app/models/activity_feed.rb +25 -25
- data/app/models/antecedent.rb +3 -3
- data/app/models/code_climate/coverage_report.rb +25 -25
- data/app/models/commit.rb +77 -82
- data/app/models/consumer_token.rb +2 -2
- data/app/models/deploy.rb +31 -27
- data/app/models/environment.rb +12 -12
- data/app/models/github/commit_status_report.rb +16 -16
- data/app/models/github/pull_request.rb +35 -12
- data/app/models/github/pull_request_event.rb +6 -5
- data/app/models/github_token.rb +2 -2
- data/app/models/historical_head.rb +2 -2
- data/app/models/key_dependency.rb +17 -17
- data/app/models/maintenance_light.rb +3 -3
- data/app/models/measurement.rb +22 -22
- data/app/models/menu_item.rb +5 -5
- data/app/models/menu_item_divider.rb +1 -1
- data/app/models/milestone.rb +27 -27
- data/app/models/output_stream.rb +4 -4
- data/app/models/post_receive_payload.rb +7 -7
- data/app/models/project.rb +93 -89
- data/app/models/project_dependencies.rb +9 -9
- data/app/models/project_dependency.rb +33 -33
- data/app/models/project_menu_item.rb +3 -3
- data/app/models/release.rb +60 -60
- data/app/models/release_change.rb +18 -18
- data/app/models/role.rb +15 -15
- data/app/models/rubygems/gem.rb +21 -21
- data/app/models/run_tests_on_post_receive.rb +36 -36
- data/app/models/setting.rb +3 -3
- data/app/models/settings.rb +8 -8
- data/app/models/source_file_coverage.rb +2 -2
- data/app/models/sprint.rb +19 -19
- data/app/models/sprint_report.rb +7 -7
- data/app/models/sprint_task.rb +8 -8
- data/app/models/static_chart/area.rb +19 -19
- data/app/models/static_chart.rb +35 -35
- data/app/models/task.rb +64 -64
- data/app/models/test_error.rb +2 -2
- data/app/models/test_result.rb +7 -0
- data/app/models/test_run.rb +75 -79
- data/app/models/test_run_statistics.rb +18 -19
- data/app/models/testing_note.rb +19 -19
- data/app/models/ticket.rb +104 -104
- data/app/models/ticket_antecedent.rb +11 -11
- data/app/models/ticket_comment.rb +6 -6
- data/app/models/ticket_committer.rb +3 -3
- data/app/models/ticket_tag.rb +6 -6
- data/app/models/user.rb +44 -44
- data/app/models/user_credentials.rb +11 -11
- data/app/models/value_statement.rb +3 -3
- data/app/presenters/commit_presenter.rb +6 -6
- data/app/presenters/one_or_many.rb +4 -4
- data/app/presenters/problem_presenter.rb +8 -8
- data/app/presenters/release_presenter.rb +4 -4
- data/app/presenters/sprint_task_presenter.rb +9 -9
- data/app/presenters/task_presenter.rb +8 -8
- data/app/presenters/tasks_excel_presenter.rb +6 -6
- data/app/presenters/tester_presenter.rb +3 -3
- data/app/presenters/testing_note_presenter.rb +4 -4
- data/app/presenters/testing_report_ticket_presenter.rb +9 -9
- data/app/presenters/ticket_presenter.rb +4 -4
- data/app/views/deploys/show.html.erb +8 -0
- data/app/views/jobs/show.html.erb +0 -34
- data/app/views/layouts/application.html.erb +1 -0
- data/app/views/layouts/minimal.html.erb +1 -0
- data/app/views/projects/_form.html.erb +0 -7
- data/app/views/releases/_form.html.erb +9 -3
- data/app/views/releases/index.html.erb +1 -1
- data/config/application.rb +1 -2
- data/config/database.yml +3 -3
- data/config/environments/production.rb +1 -1
- data/config/environments/test.rb +1 -1
- data/config/initializers/action_view_field_error_proc.rb +3 -3
- data/config/initializers/constants.rb +3 -3
- data/config/initializers/devise.rb +8 -8
- data/config/initializers/hard_coded_knowledge.rb +3 -3
- data/config/initializers/houston_async.rb +2 -2
- data/config/initializers/houston_report_exception.rb +3 -3
- data/config/initializers/houston_try.rb +3 -3
- data/config/initializers/sync_commits_on_post_receive.rb +0 -5
- data/config/routes.rb +108 -108
- data/db/migrate/20120417175450_devise_create_users.rb +2 -2
- data/db/migrate/20120501230243_add_unfuddle_id_to_tickets.rb +1 -1
- data/db/migrate/20120504143615_link_tickets_and_releases.rb +3 -3
- data/db/migrate/20120626150333_add_last_release_at_to_tickets.rb +2 -2
- data/db/migrate/20120626151320_link_tickets_and_commits.rb +2 -2
- data/db/migrate/20120626152020_add_committer_email_to_commits.rb +2 -2
- data/db/migrate/20120715230922_create_user_notifications.rb +3 -3
- data/db/migrate/20120716010743_add_user_to_releases.rb +3 -3
- data/db/migrate/20120726231754_link_projects_and_maintainers.rb +2 -2
- data/db/migrate/20120826022643_add_authentication_token_to_users.rb +2 -2
- data/db/migrate/20120920023251_add_administrator_to_users.rb +3 -3
- data/db/migrate/20121026014457_split_users_name_into_first_and_last.rb +2 -2
- data/db/migrate/20121027160548_create_deploys.rb +1 -1
- data/db/migrate/20121222170917_add_version_control_adapter_to_projects.rb +2 -2
- data/db/migrate/20121222223635_add_ticket_tracking_adapter_to_projects.rb +2 -2
- data/db/migrate/20121224212623_rename_environments.rb +3 -3
- data/db/migrate/20121225175106_replace_environment_id_with_environment_name.rb +8 -8
- data/db/migrate/20121230174234_create_test_runs.rb +3 -3
- data/db/migrate/20130119203853_remove_cached_queries_from_projects.rb +1 -1
- data/db/migrate/20130119204608_add_extended_attributes_to_tickets.rb +10 -10
- data/db/migrate/20130120182026_create_ticket_prerequisites.rb +2 -2
- data/db/migrate/20130312224911_create_errors.rb +1 -1
- data/db/migrate/20130407195450_create_roles.rb +2 -2
- data/db/migrate/20130407200624_populate_roles.rb +9 -9
- data/db/migrate/20130407220039_add_project_id_to_testing_notes.rb +6 -6
- data/db/migrate/20130407220937_add_project_id_to_commits.rb +6 -6
- data/db/migrate/20130416020627_add_environments_subscribed_to_to_users.rb +3 -3
- data/db/migrate/20130420174126_add_error_tracker_name_to_projects.rb +2 -2
- data/db/migrate/20130427223925_create_project_quotas.rb +2 -2
- data/db/migrate/20130504014802_add_extended_attributes_to_projects.rb +3 -3
- data/db/migrate/20130504135741_add_antecedents_to_tickets.rb +6 -6
- data/db/migrate/20130505144446_add_tags_to_tickets.rb +1 -1
- data/db/migrate/20130505162039_add_type_to_tickets.rb +1 -1
- data/db/migrate/20130505212838_add_closed_at_to_tickets.rb +1 -1
- data/db/migrate/20130519163615_create_user_credentials.rb +2 -2
- data/db/migrate/20130526024851_give_default_values_for_counts_from_test_runs.rb +2 -2
- data/db/migrate/20130710233849_add_authored_at_to_commits.rb +10 -10
- data/db/migrate/20130711013156_link_commits_and_users.rb +6 -6
- data/db/migrate/20130806143651_link_commits_and_releases.rb +2 -2
- data/db/migrate/20130921141449_create_milestones.rb +3 -3
- data/db/migrate/20131004185618_add_first_release_at_to_tickets.rb +2 -2
- data/db/migrate/20131012152403_create_sprints.rb +3 -3
- data/db/migrate/20131112010815_delete_duplicate_commits.rb +7 -7
- data/db/migrate/20140217160450_add_email_addresses_to_users.rb +3 -3
- data/db/migrate/20140327020121_drop_ticket_prerequisites.rb +1 -1
- data/db/migrate/20140406183224_remove_new_relic_id_from_projects.rb +1 -1
- data/db/migrate/20140406230121_delete_automatically_generated_messages_for_releases.rb +1 -1
- data/db/migrate/20140407010111_drop_sprints_project_id.rb +1 -1
- data/db/migrate/20140418133005_change_ticket_antecedents_to_text_array.rb +1 -1
- data/db/migrate/20140425141946_embed_changes_in_releases.rb +3 -3
- data/db/migrate/20140515174322_create_tasks.rb +3 -3
- data/db/migrate/20140516012049_create_tasks_for_existing_tickets.rb +1 -1
- data/db/migrate/20140517012626_prevent_hstore_fields_from_being_null.rb +2 -2
- data/db/migrate/20140521014652_allow_task_descriptions_to_be_null.rb +1 -1
- data/db/migrate/20140526155845_add_commit_id_to_deploys.rb +5 -5
- data/db/migrate/20140526162645_add_commit_before_id_and_commit_after_id_to_releases.rb +4 -4
- data/db/migrate/20140526180608_associate_remaining_deploys_and_releases.rb +12 -12
- data/db/migrate/20140724231918_create_sprints_tasks.rb +3 -3
- data/db/migrate/20140824194031_add_project_id_to_tasks.rb +1 -1
- data/db/migrate/20140824194526_add_completed_at_to_tasks.rb +3 -3
- data/db/migrate/20140824211249_require_sprints_to_be_unique.rb +1 -1
- data/db/migrate/20140907012329_drop_table_changes.rb +1 -1
- data/db/migrate/20140907013836_drop_table_errors.rb +1 -1
- data/db/migrate/20140921190022_add_checked_out_to_sprints_tasks.rb +2 -2
- data/db/migrate/20140921201441_drop_users_name.rb +1 -1
- data/db/migrate/20140925021043_rename_deploys_commit_to_sha.rb +1 -1
- data/db/migrate/20140929004347_create_historical_heads.rb +4 -4
- data/db/migrate/20141027194819_make_users_environments_subscribed_to_an_array.rb +2 -2
- data/db/migrate/20141226171730_create_measurements.rb +1 -1
- data/db/migrate/20150119154013_drop_unused_fields_from_milestones.rb +1 -1
- data/db/migrate/20150222205616_add_features_to_projects.rb +2 -2
- data/db/migrate/20150323004452_add_deploys_completed_at.rb +1 -1
- data/db/migrate/20150805180939_add_commit_id_to_test_runs.rb +1 -1
- data/db/migrate/20150808161805_create_test_results.rb +1 -1
- data/db/migrate/20150809132417_rename_test_results_regression_to_difference.rb +1 -1
- data/db/migrate/20150927014445_required_pull_requests_to_be_unique_by_project_and_number.rb +13 -0
- data/db/structure.sql +9 -0
- data/houston.gemspec +23 -26
- data/lib/configuration.rb +0 -5
- data/lib/core_ext/duration.rb +4 -4
- data/lib/core_ext/hash.rb +17 -17
- data/lib/houston/version.rb +1 -1
- data/lib/houston_server.rb +6 -6
- data/lib/parallel_enumerable.rb +16 -16
- data/lib/tasks/specific_tests.rake +37 -0
- metadata +91 -107
- data/app/interactors/push_gemfile_to_gemnasium.rb +0 -88
- data/app/models/gemnasium/alert.rb +0 -25
- data/app/views/welcome/_tdl.html.erb +0 -31
- data/config/initializers/houston_tdl.rb +0 -104
@@ -1,6 +1,6 @@
|
|
1
1
|
class TestingReportTicketPresenter < TicketPresenter
|
2
2
|
include MarkdownHelper
|
3
|
-
|
3
|
+
|
4
4
|
def initialize(tickets)
|
5
5
|
super tickets
|
6
6
|
.unclosed
|
@@ -23,11 +23,11 @@ class TestingReportTicketPresenter < TicketPresenter
|
|
23
23
|
.select("commits.*, commits_tickets.ticket_id")
|
24
24
|
.group_by(&:ticket_id)
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def as_json(*args)
|
28
28
|
super(*args).sort_by { |ticket| ticket[:projectTitle] }
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def ticket_to_json(ticket)
|
32
32
|
super.merge(
|
33
33
|
committers: @committers_by_ticket.fetch(ticket.id, Set.new).map(&:to_h),
|
@@ -42,23 +42,23 @@ class TestingReportTicketPresenter < TicketPresenter
|
|
42
42
|
releases: ReleasePresenter.new(ticket.releases).as_json,
|
43
43
|
lastReleaseAt: ticket.last_release_at)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
private
|
47
|
-
|
47
|
+
|
48
48
|
def verdicts_by_tester_index(ticket)
|
49
49
|
verdicts = verdicts_by_tester(ticket)
|
50
50
|
ticket.testers.each_with_index.each_with_object({}) { |(tester, i), response| response[i + 1] = verdicts[tester.id] if verdicts.key?(tester.id) }
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def verdicts_by_tester(ticket)
|
54
54
|
notes = ticket.testing_notes_since_last_release
|
55
55
|
return {} if notes.empty?
|
56
|
-
|
56
|
+
|
57
57
|
verdicts_by_tester = Hash[ticket.testers.map(&:id).zip([nil])]
|
58
58
|
notes.each do |note|
|
59
59
|
tester_id = note.user_id
|
60
60
|
next unless verdicts_by_tester.key?(tester_id) # not was not by a tester
|
61
|
-
|
61
|
+
|
62
62
|
if note.fail?
|
63
63
|
verdicts_by_tester[tester_id] = "failing"
|
64
64
|
elsif note.pass?
|
@@ -67,5 +67,5 @@ private
|
|
67
67
|
end
|
68
68
|
verdicts_by_tester
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class TicketPresenter
|
2
2
|
include UrlHelper
|
3
|
-
|
3
|
+
|
4
4
|
def initialize(tickets)
|
5
5
|
@tickets = OneOrMany.new(tickets)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def as_json(*args)
|
9
9
|
tickets = @tickets
|
10
10
|
tickets = Houston.benchmark "[#{self.class.name.underscore}] Load objects" do
|
@@ -14,7 +14,7 @@ class TicketPresenter
|
|
14
14
|
tickets.map(&method(:ticket_to_json))
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def ticket_to_json(ticket)
|
19
19
|
project = ticket.project
|
20
20
|
{ id: ticket.id,
|
@@ -32,5 +32,5 @@ class TicketPresenter
|
|
32
32
|
tags: ticket.tags.map(&:to_h),
|
33
33
|
extendedAttributes: ticket.extended_attributes }
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
end
|
@@ -4,10 +4,18 @@
|
|
4
4
|
Branch: <b><%= @deploy.branch %></b>
|
5
5
|
</p>
|
6
6
|
|
7
|
+
<p>
|
8
|
+
Commit Range: <b><%= link_to_commit_range_for_deploy @deploy %></b>
|
9
|
+
</p>
|
10
|
+
|
7
11
|
<p>
|
8
12
|
Deployer: <b><%= @deploy.deployer %></b>
|
9
13
|
</p>
|
10
14
|
|
15
|
+
<p>
|
16
|
+
Release Notes: <b><% if @deploy.release %><%= link_to "link", @deploy.release %><% else %>n/a<% end %></b>
|
17
|
+
</p>
|
18
|
+
|
11
19
|
<p>
|
12
20
|
Completed: <b><%= @deploy.completed_at %></b>
|
13
21
|
</p>
|
@@ -14,8 +14,6 @@
|
|
14
14
|
<td class="table-margin"></td>
|
15
15
|
<th class="scheduler-job-name">Name</th>
|
16
16
|
<th class="scheduler-job-schedule">Schedule</th>
|
17
|
-
<!-- <th class="scheduler-job-run-count">Runs</th>
|
18
|
-
<th class="scheduler-job-next-run">Next Run</th> -->
|
19
17
|
<th class="scheduler-job-run-now"></th>
|
20
18
|
<td class="table-margin"></td>
|
21
19
|
</tr>
|
@@ -26,13 +24,6 @@
|
|
26
24
|
<td class="table-margin"></td>
|
27
25
|
<td class="scheduler-job-name"><%= job.tags.first %></td>
|
28
26
|
<td class="scheduler-job-schedule"><%= job.original %></td>
|
29
|
-
<!-- <td class="scheduler-job-name"><%= job.count %></td>
|
30
|
-
<td class="scheduler-job-next-run">
|
31
|
-
<%= job.next_time %>
|
32
|
-
<span class="countdown" data-secondsleft="<%= Time.now - job.next_time %>">
|
33
|
-
<%# countdown Time.now - job.next_time %>
|
34
|
-
</span>
|
35
|
-
</td> -->
|
36
27
|
<td class="scheduler-job-run-now">
|
37
28
|
<%= button_to "Run now", run_job_path(slug: job.tags.first), :class => "btn btn-default" %>
|
38
29
|
</td>
|
@@ -52,31 +43,6 @@
|
|
52
43
|
<script type="text/javascript">
|
53
44
|
$(function() {
|
54
45
|
$('#jobs').tablesorter();
|
55
|
-
|
56
|
-
var format = d3.format('02d'),
|
57
|
-
$countdowns, $countdown, label, timeleft, seconds, minutes, hours, days;
|
58
|
-
|
59
|
-
function updateCountdowns() {
|
60
|
-
$countdowns = $countdowns || $('.countdown');
|
61
|
-
urgent = false;
|
62
|
-
$countdowns.each(function() {
|
63
|
-
$countdown = $(this);
|
64
|
-
timeleft = +$countdown.attr('data-secondsleft') - 1;
|
65
|
-
$countdown.attr('data-secondsleft', timeleft);
|
66
|
-
seconds = Math.abs(timeleft);
|
67
|
-
minutes = Math.floor(seconds / 60);
|
68
|
-
hours = Math.floor(minutes / 60);
|
69
|
-
days = Math.floor(hours / 24);
|
70
|
-
|
71
|
-
label = format(seconds % 60);
|
72
|
-
if(minutes >= 1) label = format(minutes % 60) + ':' + label;
|
73
|
-
if(hours >= 1) label = Math.floor(hours % 24) + ':' + label;
|
74
|
-
if(days >= 1) label = '<span class="label">' + Math.floor(days) + 'd</span> ' + label;
|
75
|
-
$countdown.html(label);
|
76
|
-
});
|
77
|
-
}
|
78
|
-
|
79
|
-
setInterval(updateCountdowns, 1000);
|
80
46
|
});
|
81
47
|
</script>
|
82
48
|
<% end %>
|
@@ -9,6 +9,7 @@
|
|
9
9
|
<meta name="revision" content="<%= revision %>" />
|
10
10
|
<meta name="env" content="<%= Rails.env %>" />
|
11
11
|
<meta name="s3-bucket" content="<%= Houston.config.s3[:bucket] %>" />
|
12
|
+
<%= yield :meta %>
|
12
13
|
|
13
14
|
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
|
14
15
|
<!--[if lt IE 9]>
|
@@ -8,6 +8,7 @@
|
|
8
8
|
<meta name="relative_url_root" content="<%= main_app.root_url %>" />
|
9
9
|
<meta name="revision" content="<%= revision %>" />
|
10
10
|
<meta name="env" content="<%= Rails.env %>" />
|
11
|
+
<%= yield :meta %>
|
11
12
|
|
12
13
|
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
|
13
14
|
<!--[if lt IE 9]>
|
@@ -64,13 +64,6 @@
|
|
64
64
|
</div>
|
65
65
|
</div>
|
66
66
|
|
67
|
-
<div class="control-group">
|
68
|
-
<%= f.label :gemnasium_slug, "Gemnasium App Slug", :class => 'control-label' %>
|
69
|
-
<div class="controls">
|
70
|
-
<%= f.text_field :gemnasium_slug, :class => 'text_field' %>
|
71
|
-
</div>
|
72
|
-
</div>
|
73
|
-
|
74
67
|
<hr />
|
75
68
|
|
76
69
|
<div class="control-group">
|
@@ -23,7 +23,7 @@
|
|
23
23
|
<div class="controls changes-nested-editor row-fluid">
|
24
24
|
<p class="instructions">Describe, in users’ terms, what this release changes</p>
|
25
25
|
<%= f.nested_editor_for :release_changes do |f| -%>
|
26
|
-
<div class="change-tag span3"><%= f.collection_select :tag_slug,
|
26
|
+
<div class="change-tag span3"><%= f.collection_select :tag_slug, Houston.config.change_tags, :slug, :name %></div>
|
27
27
|
<div class="change-description span8"><%= f.text_field :description, maxlength: 255 %></div>
|
28
28
|
<% end -%>
|
29
29
|
</div>
|
@@ -62,7 +62,10 @@
|
|
62
62
|
|
63
63
|
<% if @release.commits.any? %>
|
64
64
|
<div class="release-detail-section release-commits">
|
65
|
-
<label class="control-label">
|
65
|
+
<label class="control-label">
|
66
|
+
Commits
|
67
|
+
<span class="commit-range"><%= link_to_release_commit_range(@release) %></span>
|
68
|
+
</label>
|
66
69
|
<div class="controls changes-nested-editor">
|
67
70
|
<p class="expander" data-expand="commits_block">
|
68
71
|
<%= pluralize @release.commits.length, "commits" %> hidden •
|
@@ -71,7 +74,10 @@
|
|
71
74
|
<div id="commits_block" class="collapsed">
|
72
75
|
<ul class="commits">
|
73
76
|
<% @release.commits.each do |commit| %>
|
74
|
-
|
77
|
+
<%= content_tag :li, :id => "commit_#{commit.id}" do %>
|
78
|
+
<%= link_to_commit(commit) if github_url?(@project) && !for_email? && can?(:read, commit) %>
|
79
|
+
<%= format_commit(commit) %>
|
80
|
+
<% end %>
|
75
81
|
<% end %>
|
76
82
|
</ul>
|
77
83
|
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<%= render partial: "projects/header", locals: {project: @project, subtitle: "Releases of"} %>
|
2
2
|
|
3
3
|
<ul class="nav nav-pills inline">
|
4
|
-
<% @project.
|
4
|
+
<% @project.environments_with_release_notes.each do |environment| %>
|
5
5
|
<% if can?(:read, @project.releases.build(environment_name: environment)) %>
|
6
6
|
<%= content_tag :li, :class => (@environment == environment ? "active" : nil) do %>
|
7
7
|
<% link_to environment.titleize, releases_path(@project, environment: environment) %>
|
data/config/application.rb
CHANGED
@@ -7,7 +7,7 @@ require_relative "../lib/houston_server.rb"
|
|
7
7
|
require_relative "../lib/houston_daemonize.rb"
|
8
8
|
|
9
9
|
# Require gems listed in gemspec
|
10
|
-
require "activerecord
|
10
|
+
require "activerecord-import"
|
11
11
|
require "activerecord/pluck_in_batches"
|
12
12
|
require "addressable/uri"
|
13
13
|
require "backbone-rails"
|
@@ -20,7 +20,6 @@ require "devise_ldap_authenticatable"
|
|
20
20
|
require "faraday"
|
21
21
|
require "faraday-http-cache"
|
22
22
|
require "faraday-raise-errors"
|
23
|
-
require "gemnasium"
|
24
23
|
require "gemoji"
|
25
24
|
require "googlecharts"
|
26
25
|
require "handlebars_assets"
|
data/config/database.yml
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
development:
|
2
2
|
adapter: postgresql
|
3
3
|
encoding: utf8
|
4
|
-
database:
|
4
|
+
database: houston_core_development
|
5
5
|
host: localhost
|
6
6
|
prepared_statements: false
|
7
7
|
|
8
8
|
test:
|
9
9
|
adapter: postgresql
|
10
10
|
encoding: utf8
|
11
|
-
database:
|
11
|
+
database: houston_core_test
|
12
12
|
host: localhost
|
13
13
|
prepared_statements: false
|
14
14
|
|
@@ -16,6 +16,6 @@ test:
|
|
16
16
|
production:
|
17
17
|
adapter: postgresql
|
18
18
|
encoding: utf8
|
19
|
-
database:
|
19
|
+
database: houston_core_development
|
20
20
|
host: localhost
|
21
21
|
prepared_statements: false
|
@@ -77,7 +77,7 @@ Rails.application.configure do
|
|
77
77
|
|
78
78
|
# Use default logging formatter so that PID and timestamp are not suppressed.
|
79
79
|
config.log_formatter = ::Logger::Formatter.new
|
80
|
-
|
80
|
+
|
81
81
|
# So we can send emails
|
82
82
|
config.action_mailer.default_url_options = { host: Houston.config.host }
|
83
83
|
|
data/config/environments/test.rb
CHANGED
@@ -10,12 +10,12 @@ Nokogiri::XML::Node.send(:include, ClassMutator)
|
|
10
10
|
|
11
11
|
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
|
12
12
|
html = %(<div class="field_with_errors">#{html_tag}</div>).html_safe
|
13
|
-
|
13
|
+
|
14
14
|
form_fields = %w{textarea input select}
|
15
15
|
elements = Nokogiri::HTML::DocumentFragment.parse(html_tag).css "label, " + form_fields.join(", ")
|
16
|
-
|
16
|
+
|
17
17
|
elements.each do |e|
|
18
|
-
if e.node_name.eql? "label"
|
18
|
+
if e.node_name.eql? "label"
|
19
19
|
html = e.add_css_class("error").to_s.html_safe
|
20
20
|
elsif form_fields.include? e.node_name
|
21
21
|
html = e.add_css_class("error").to_s.html_safe
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Houston
|
2
|
-
|
2
|
+
|
3
3
|
# When the git:post_receive hook is triggered, a commit range of
|
4
4
|
# 0000000000000000000000000000000000000000...10fb27e indicates the creation of a branch, while
|
5
5
|
# 10fb27e...0000000000000000000000000000000000000000 indicates the deletion of a branch
|
6
6
|
NULL_GIT_COMMIT = "0000000000000000000000000000000000000000".freeze
|
7
|
-
|
8
|
-
|
7
|
+
|
8
|
+
|
9
9
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Use this hook to configure devise mailer, warden hooks and so forth.
|
2
2
|
# Many of these configuration options can be set straight in your model.
|
3
3
|
Devise.setup do |config|
|
4
|
-
|
4
|
+
|
5
5
|
# ==> Mailer Configuration
|
6
6
|
# Configure the e-mail address which will be shown in Devise::Mailer,
|
7
7
|
# note that it will be overwritten if you use your own mailer class with default "from" parameter.
|
@@ -100,18 +100,18 @@ Devise.setup do |config|
|
|
100
100
|
# this period, the invited resource won't be able to accept the invitation.
|
101
101
|
# When invite_for is 0 (the default), the invitation won't expire.
|
102
102
|
# config.invite_for = 2.weeks
|
103
|
-
|
103
|
+
|
104
104
|
# Number of invitations users can send.
|
105
105
|
# If invitation_limit is nil, users can send unlimited invitations.
|
106
106
|
# If invitation_limit is 0, users can't send invitations.
|
107
107
|
# If invitation_limit n > 0, users can send n invitations.
|
108
108
|
# Default: nil
|
109
109
|
# config.invitation_limit = 5
|
110
|
-
|
110
|
+
|
111
111
|
# The key to be used to check existing users when sending an invitation
|
112
112
|
# config.invite_key = :email
|
113
|
-
|
114
|
-
# Flag that force a record to be valid before being actually invited
|
113
|
+
|
114
|
+
# Flag that force a record to be valid before being actually invited
|
115
115
|
# Default: false
|
116
116
|
# config.validate_on_invite = true
|
117
117
|
|
@@ -256,8 +256,8 @@ Devise.setup do |config|
|
|
256
256
|
# manager.intercept_401 = false
|
257
257
|
# manager.default_strategies(:scope => :user).unshift :some_external_strategy
|
258
258
|
# end
|
259
|
-
|
260
|
-
# ==> LDAP Configuration
|
259
|
+
|
260
|
+
# ==> LDAP Configuration
|
261
261
|
if Houston.config.authentication_strategy == :ldap
|
262
262
|
config.ldap_logger = true
|
263
263
|
config.ldap_create_user = true
|
@@ -269,7 +269,7 @@ Devise.setup do |config|
|
|
269
269
|
config.ldap_ad_group_check = false
|
270
270
|
config.ldap_auth_username_builder = Houston.config.authentication_strategy_configuration[:username_builder]
|
271
271
|
end
|
272
|
-
|
272
|
+
|
273
273
|
|
274
274
|
# ==> Mountable engine configurations
|
275
275
|
# When using Devise inside an engine, let's call it `MyEngine`, and this engine
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# Eventually we should get rid of this, of course.
|
2
|
-
# But, for now, this file documents a few things
|
2
|
+
# But, for now, this file documents a few things
|
3
3
|
# we've scattered throughout the code base and need
|
4
4
|
# to abstract.
|
5
5
|
module Houston
|
6
6
|
module TMI
|
7
|
-
|
7
|
+
|
8
8
|
FIELD_USED_FOR_LDAP_LOGIN = "samaccountname"
|
9
9
|
INSTRUCTIONS_FOR_LOGIN = "You can log in with your CPH domain account"
|
10
10
|
TICKET_LABELS_FOR_MEMBERS = [
|
@@ -136,6 +136,6 @@ module Houston
|
|
136
136
|
'New Feature',
|
137
137
|
'CKEditor',
|
138
138
|
].freeze
|
139
|
-
|
139
|
+
|
140
140
|
end
|
141
141
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Houston
|
2
|
-
|
2
|
+
|
3
3
|
def self.report_exception(exception, other_data={})
|
4
4
|
raise if Rails.env.test? || Rails.env.development?
|
5
5
|
|
@@ -17,11 +17,11 @@ module Houston
|
|
17
17
|
rescue Exception => e
|
18
18
|
Rails.logger.error "\e[31;1mAn error occurred reporting the exception: \e[0;31m#{e.class}: #{e.message}\n #{e.backtrace.join("\n ")}\e[0m"
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def self._normalize_faraday_env(env)
|
22
22
|
env.except(:response).tap do |env|
|
23
23
|
env[:url] = env[:url].to_s
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Houston
|
2
|
-
|
2
|
+
|
3
3
|
def self.try(options, *rescue_from)
|
4
4
|
options = { max_tries: options } if options.is_a?(Fixnum)
|
5
5
|
options = {} unless options.is_a?(Hash)
|
6
6
|
max_tries = options.fetch :max_tries, 3
|
7
7
|
base = options.fetch :base, 2
|
8
8
|
ignore = options.fetch :ignore, false
|
9
|
-
|
9
|
+
|
10
10
|
tries = 1
|
11
11
|
begin
|
12
12
|
yield tries
|
@@ -20,5 +20,5 @@ module Houston
|
|
20
20
|
retry
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
end
|
@@ -1,8 +1,3 @@
|
|
1
1
|
Houston.observer.on "hooks:post_receive" do |project, params|
|
2
2
|
project.commits.sync!
|
3
|
-
|
4
|
-
payload = PostReceivePayload.new(params)
|
5
|
-
if payload.branch == project.gemnasium_branch && !project.gemnasium_slug.blank?
|
6
|
-
PushGemfileToGemnasium.new(project).perform
|
7
|
-
end
|
8
3
|
end
|