diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/entrypoint.pl | 46 | ||||
-rwxr-xr-x | scripts/generate_conduit_data.pl | 162 |
2 files changed, 192 insertions, 16 deletions
diff --git a/scripts/entrypoint.pl b/scripts/entrypoint.pl index 04d442180..f5abf4966 100755 --- a/scripts/entrypoint.pl +++ b/scripts/entrypoint.pl @@ -23,19 +23,41 @@ use IO::Async::Signal; use constant CI => $ENV{CI}; -my $cmd = shift @ARGV; -my $func = __PACKAGE__->can("cmd_$cmd") - or die "unknown command: $cmd\n"; +my $cmd = shift @ARGV; my $opts = __PACKAGE__->can("opt_$cmd") // sub { @ARGV }; +my $func = __PACKAGE__->can("cmd_$cmd") // sub { + check_data_dir(); + wait_for_db(); + run(@_); +}; fix_path(); check_user(); -check_env() unless $cmd eq 'shell'; - -$func->(@ARGV); +check_env(qw( + LOCALCONFIG_ENV + BMO_db_host + BMO_db_name + BMO_db_user + BMO_db_pass + BMO_memcached_namespace + BMO_memcached_servers +)) unless $cmd eq 'shell'; + +$func->($opts->()); sub cmd_demo { - cmd_load_test_data() unless -f "/app/data/params"; + unless (-f '/app/data/params') { + cmd_load_test_data(); + check_env(qw( + PHABRICATOR_LOGIN + PHABRICATOR_PASSWORD + PHABRICATOR_API_KEY + CONDUIT_LOGIN + CONDUIT_PASSWORD + CONDUIT_API_KEY + )); + run( 'perl', 'scripts/generate_conduit_data.pl' ); + } cmd_httpd(); } @@ -300,15 +322,7 @@ sub check_data_dir { } sub check_env { - my @require_env = qw( - LOCALCONFIG_ENV - BMO_db_host - BMO_db_name - BMO_db_user - BMO_db_pass - BMO_memcached_namespace - BMO_memcached_servers - ); + my (@require_env) = @_; my @missing_env = grep { not exists $ENV{$_} } @require_env; if (@missing_env) { die "Missing required environmental variables: ", join(", ", @missing_env), "\n"; diff --git a/scripts/generate_conduit_data.pl b/scripts/generate_conduit_data.pl new file mode 100755 index 000000000..91c5d26ec --- /dev/null +++ b/scripts/generate_conduit_data.pl @@ -0,0 +1,162 @@ +#!/usr/bin/perl +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +use strict; +use warnings; +use lib qw(. lib local/lib/perl5); + +use Bugzilla; +use Bugzilla::Bug; +use Bugzilla::Config qw(:admin); +use Bugzilla::Constants; +use Bugzilla::User; +use Bugzilla::User::APIKey; + +BEGIN { + Bugzilla->extensions; +} + +my $dbh = Bugzilla->dbh; + +# set Bugzilla usage mode to USAGE_MODE_CMDLINE +Bugzilla->usage_mode(USAGE_MODE_CMDLINE); + +my $admin_email = shift || 'admin@mozilla.bugs'; +Bugzilla->set_user( Bugzilla::User->check( { name => $admin_email } ) ); + +########################################################################## +# Create Conduit Test User +########################################################################## + +my $conduit_login = $ENV{CONDUIT_LOGIN} || 'conduit@mozilla.bugs'; +my $conduit_password = $ENV{CONDUIT_PASSWORD} || 'password123456789!'; +my $conduit_api_key = $ENV{CONDUIT_API_KEY} || ''; + +print "creating conduit user account...\n"; +if ( !Bugzilla::User->new( { name => $conduit_login } ) ) { + my $new_user = Bugzilla::User->create( + { + login_name => $conduit_login, + realname => 'Conduit Test User', + cryptpassword => $conduit_password + }, + ); + + if ($conduit_api_key) { + Bugzilla::User::APIKey->create_special( + { + user_id => $new_user->id, + description => 'API key for Conduit User', + api_key => $conduit_api_key + } + ); + } +} +########################################################################## +# Create Phabricator Automation Bot +########################################################################## + +my $phab_login = $ENV{PHABRICATOR_LOGIN} || 'phab-bot@bmo.tld'; +my $phab_password = $ENV{PHABRICATOR_PASSWORD} || 'password123456789!'; +my $phab_api_key = $ENV{PHABRICATOR_API_KEY} || ''; + +print "creating phabricator automation account...\n"; +if ( !Bugzilla::User->new( { name => $phab_login } ) ) { + my $new_user = Bugzilla::User->create( + { + login_name => $phab_login, + realname => 'Phabricator Automation', + cryptpassword => $phab_password + }, + ); + + if ($phab_api_key) { + Bugzilla::User::APIKey->create_special( + { + user_id => $new_user->id, + description => 'API key for Phabricator Automation', + api_key => $phab_api_key + } + ); + } +} +########################################################################## +# Add Users to Groups +########################################################################## +my @users_groups = ( + { user => 'conduit@mozilla.bugs', group => 'editbugs' }, + { user => 'conduit@mozilla.bugs', group => 'core-security' }, + { user => 'phab-bot@bmo.tld', group => 'editbugs' }, + { user => 'phab-bot@bmo.tld', group => 'core-security' }, +); +print "adding users to groups...\n"; +foreach my $user_group (@users_groups) { + my $group = Bugzilla::Group->new( { name => $user_group->{group} } ); + my $user = Bugzilla::User->new( { name => $user_group->{user} } ); + my $sth_add_mapping = $dbh->prepare( + 'INSERT INTO user_group_map (user_id, group_id, isbless, grant_type)' + . ' VALUES (?, ?, ?, ?)' + ); + + # Don't crash if the entry already exists. + my $ok = eval { + $sth_add_mapping->execute( $user->id, $group->id, 0, GRANT_DIRECT ); + 1; + }; + warn $@ unless $ok; +} + +########################################################################## +# Create Conduit Test Bug +########################################################################## +print "creating conduit test bug...\n"; +Bugzilla->set_user( Bugzilla::User->check( { name => 'conduit@mozilla.bugs' } ) ); +Bugzilla::Bug->create( + { + product => 'Firefox', + component => 'General', + priority => '--', + bug_status => 'NEW', + version => 'unspecified', + comment => '-- Comment Created By Conduit User --', + rep_platform => 'Unspecified', + short_desc => 'Conduit Test Bug', + op_sys => 'Unspecified', + bug_severity => 'normal', + version => 'unspecified', + } +); + +########################################################################## +# Set Parameters +########################################################################## +print "setting custom parameters...\n"; +my %set_params = ( password_check_on_login => 0, ); + +my $params_modified; +foreach my $param ( keys %set_params ) { + my $value = $set_params{$param}; + next if !$value || Bugzilla->params->{$param} eq $value; + SetParam( $param, $value ); + $params_modified = 1; +} + +write_params() if $params_modified; + +########################################################################## +# Set Phabricator Push Connector Values +########################################################################## +print "setting push connector options...\n"; +my ($phab_is_configured) = $dbh->selectrow_array('SELECT COUNT(*) FROM push_options WHERE connector = 'Phabricator''); +unless ($phab_is_configured) { + $dbh->do('INSERT INTO push_options (connector, option_name, option_value) VALUES ('global','enabled','Enabled')'); + $dbh->do( + 'INSERT INTO push_options (connector, option_name, option_value) VALUES ('Phabricator','enabled','Enabled')'); + $dbh->do( + 'INSERT INTO push_options (connector, option_name, option_value) VALUES ('Phabricator','phabricator_url','http://phabricator.test')' + ); +} + +print "installation and configuration complete!\n"; |