From 88d0953ed62beb12ef8a62ed9621ce8f052ba776 Mon Sep 17 00:00:00 2001 From: Timmy Willison Date: Sat, 15 Jun 2024 10:38:17 -0400 Subject: [PATCH] swarm: decom swarm-02.ops.jquery.net Ref gh-47 --- .../production/roles/miscweb.yaml | 4 - .../production/roles/testswarm.yaml | 161 ------------------ hieradata/roles/testswarm.yaml | 8 - manifests/site.pp | 5 - .../update-testswarm-dependencies.sh | 4 - .../files/testswarm/server/localSettings.php | 12 -- .../manifests/testswarm/browserstack.pp | 74 -------- .../profile/manifests/testswarm/database.pp | 29 ---- modules/profile/manifests/testswarm/server.pp | 135 --------------- .../testswarm-browserstack.service.erb | 19 --- .../templates/testswarm/server/site.nginx.erb | 72 -------- .../profile/types/testswarm/browsersets.pp | 1 - modules/profile/types/testswarm/useragents.pp | 12 -- modules/role/manifests/testswarm.pp | 10 -- test_data/private/hieradata/common.yaml | 6 - 15 files changed, 552 deletions(-) delete mode 100644 hieradata/environments/production/roles/testswarm.yaml delete mode 100644 hieradata/roles/testswarm.yaml delete mode 100644 modules/profile/files/testswarm/browserstack/update-testswarm-dependencies.sh delete mode 100644 modules/profile/files/testswarm/server/localSettings.php delete mode 100644 modules/profile/manifests/testswarm/browserstack.pp delete mode 100644 modules/profile/manifests/testswarm/database.pp delete mode 100644 modules/profile/manifests/testswarm/server.pp delete mode 100644 modules/profile/templates/testswarm/browserstack/testswarm-browserstack.service.erb delete mode 100644 modules/profile/templates/testswarm/server/site.nginx.erb delete mode 100644 modules/profile/types/testswarm/browsersets.pp delete mode 100644 modules/profile/types/testswarm/useragents.pp delete mode 100644 modules/role/manifests/testswarm.pp diff --git a/hieradata/environments/production/roles/miscweb.yaml b/hieradata/environments/production/roles/miscweb.yaml index 01229ec..a3db48d 100644 --- a/hieradata/environments/production/roles/miscweb.yaml +++ b/hieradata/environments/production/roles/miscweb.yaml @@ -150,10 +150,6 @@ profile::miscweb::redirects: target: https://learn.jquery.com/ mode: root certificate: miscweb-a - swarm.jquery.com: - target: https://swarm.jquery.org - mode: prefix - certificate: miscweb-a ui.jquery.com: target: https://jqueryui.com mode: prefix diff --git a/hieradata/environments/production/roles/testswarm.yaml b/hieradata/environments/production/roles/testswarm.yaml deleted file mode 100644 index 92746d4..0000000 --- a/hieradata/environments/production/roles/testswarm.yaml +++ /dev/null @@ -1,161 +0,0 @@ -profile::testswarm::public_host_name: "swarm.jquery.org" - -profile::testswarm::browserstack::ensure: present -profile::testswarm::server::cleanup_ensure: present - -profile::testswarm::server::settings::user_agents: - chrome_116: - browserFamily: Chrome - browserMajor: '116' - chrome_117: - browserFamily: Chrome - browserMajor: '117' - chrome_118: - browserFamily: Chrome - browserMajor: '118' - chrome_119: - browserFamily: Chrome - browserMajor: '119' - chrome_120: - browserFamily: Chrome - browserMajor: '120' - chrome_121: - browserFamily: Chrome - browserMajor: '121' - chrome_122: - browserFamily: Chrome - browserMajor: '122' - chrome_123: - browserFamily: Chrome - browserMajor: '123' - chrome_124: - browserFamily: Chrome - browserMajor: '124' - firefox_116: - browserFamily: Firefox - browserMajor: '116' - firefox_117: - browserFamily: Firefox - browserMajor: '117' - firefox_118: - browserFamily: Firefox - browserMajor: '118' - firefox_119: - browserFamily: Firefox - browserMajor: '119' - firefox_120: - browserFamily: Firefox - browserMajor: '120' - firefox_121: - browserFamily: Firefox - browserMajor: '121' - firefox_122: - browserFamily: Firefox - browserMajor: '122' - firefox_123: - browserFamily: Firefox - browserMajor: '123' - firefox_124: - browserFamily: Firefox - browserMajor: '124' - firefox_125: - browserFamily: Firefox - browserMajor: '125' - ie_11: - browserFamily: IE - browserMajor: '11' - edge_18: - browserFamily: Edge - browserMajor: '18' - edge_115: - browserFamily: Edge - browserMajor: '115' - edge_116: - browserFamily: Edge - browserMajor: '116' - edge_117: - browserFamily: Edge - browserMajor: '117' - edge_118: - browserFamily: Edge - browserMajor: '118' - edge_119: - browserFamily: Edge - browserMajor: '119' - edge_120: - browserFamily: Edge - browserMajor: '120' - edge_121: - browserFamily: Edge - browserMajor: '121' - edge_122: - browserFamily: Edge - browserMajor: '122' - edge_123: - browserFamily: Edge - browserMajor: '123' - edge_124: - browserFamily: Edge - browserMajor: '124' - opera_101: - browserFamily: Opera - browserMajor: '101' - opera_102: - browserFamily: Opera - browserMajor: '102' - opera_103: - browserFamily: Opera - browserMajor: '103' - opera_104: - browserFamily: Opera - browserMajor: '104' - opera_105: - browserFamily: Opera - browserMajor: '105' - opera_106: - browserFamily: Opera - browserMajor: '106' - opera_107: - browserFamily: Opera - browserMajor: '107' - opera_108: - browserFamily: Opera - browserMajor: '108' - opera_109: - browserFamily: Opera - browserMajor: '109' - safari_16: - browserFamily: Safari - browserMajor: '16' - safari_17: - browserFamily: Safari - browserMajor: '17' - -profile::testswarm::server::settings::browser_sets: - jquery-ui: - - chrome_123 - - chrome_124 - - edge_18 - - edge_123 - - edge_124 - - firefox_124 - - firefox_125 - - ie_11 - - opera_108 - - opera_109 - - safari_16 - - safari_17 - jquery-ui-future: - - chrome_123 - - chrome_124 - - edge_123 - - edge_124 - - firefox_124 - - firefox_125 - - ie_11 - - opera_108 - - opera_109 - - safari_16 - - safari_17 - debug: - - ie_11 diff --git a/hieradata/roles/testswarm.yaml b/hieradata/roles/testswarm.yaml deleted file mode 100644 index 3287d31..0000000 --- a/hieradata/roles/testswarm.yaml +++ /dev/null @@ -1,8 +0,0 @@ -profile::certbot::certificates: - testswarm: - domains: - - "%{::facts.fqdn}" - -profile::notifier::tls_key_name: testswarm - -profile::testswarm::server::tls_key_name: testswarm diff --git a/manifests/site.pp b/manifests/site.pp index a71c38e..4f71a33 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -47,11 +47,6 @@ role('puppet') } -# 2 CPU, 4 GB mem, Debian 11 Bullseye, 80 GB disk -node 'swarm-02.ops.jquery.net' { - role('testswarm') -} - # 2 CPU, 2 GB mem, Debian 11 Bullseye node 'search-02.ops.jquery.net' { role('search') diff --git a/modules/profile/files/testswarm/browserstack/update-testswarm-dependencies.sh b/modules/profile/files/testswarm/browserstack/update-testswarm-dependencies.sh deleted file mode 100644 index 2deaae0..0000000 --- a/modules/profile/files/testswarm/browserstack/update-testswarm-dependencies.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -euxo pipefail - -NODE_ENV=production exec /usr/bin/npm install --prefix /srv/testswarm-browserstack --cache /tmp/npm-testswarm-browserstack diff --git a/modules/profile/files/testswarm/server/localSettings.php b/modules/profile/files/testswarm/server/localSettings.php deleted file mode 100644 index 88f8f35..0000000 --- a/modules/profile/files/testswarm/server/localSettings.php +++ /dev/null @@ -1,12 +0,0 @@ - '/srv/testswarm-browserstack', - remote => 'https://github.com/jquery/testswarm-browserstack', - branch => 'main', - owner => 'www-data', - group => 'www-data', - } - - exec { 'testswarm-browserstack-npm-install': - command => '/usr/bin/npm install --cache /tmp/npm-testswarm-browserstack', - cwd => '/srv/testswarm-browserstack', - creates => '/srv/testswarm-browserstack/node_modules', - user => 'www-data', - require => Git::Clone['testswarm-browserstack'], - environment => ['NODE_ENV=production'], - } - - $config = { - browserstack => { - user => $browserstack_user, - pass => $browserstack_key, - }, - testswarm => { - root => "https://${public_host_name}", - runUrl => "https://${public_host_name}/run/browserstack?run_token=${run_token}", - }, - } - - file { '/etc/testswarm-browserstack.json': - ensure => file, - content => $config.to_json(), - owner => 'www-data', - group => 'www-data', - mode => '0440', - show_diff => false, - } - - systemd::service { 'testswarm-browserstack': - ensure => $ensure, - content => template('profile/testswarm/browserstack/testswarm-browserstack.service.erb'), - } - - $restart_services = $ensure ? { - present => ['testswarm-browserstack.service'], - default => [], - } - - file { '/usr/local/bin/update-testswarm-dependencies': - ensure => file, - source => 'puppet:///modules/profile/testswarm/browserstack/update-testswarm-dependencies.sh', - owner => 'root', - group => 'root', - mode => '0555', - } - - notifier::git_update { 'testswarm-browserstack': - github_repository => 'jquery/testswarm-browserstack', - listen_for => [{ branch => 'main' }], - local_path => '/srv/testswarm-browserstack', - local_user => 'www-data', - extra_commands => ['/usr/local/bin/update-testswarm-dependencies'], - restart_services => $restart_services, - } -} diff --git a/modules/profile/manifests/testswarm/database.pp b/modules/profile/manifests/testswarm/database.pp deleted file mode 100644 index 5f4ef13..0000000 --- a/modules/profile/manifests/testswarm/database.pp +++ /dev/null @@ -1,29 +0,0 @@ -# @summary provisions mariadb database for testswarm -class profile::testswarm::database ( - String[1] $innodb_buffer_pool_size = lookup('profile::testswarm::database::innodb_buffer_pool_size', {default_value => '512M'}), - String[1] $db_user_password = lookup('profile::testswarm::db_user_password'), -) { - file { '/srv/mariadb': - ensure => directory, - } - - class { 'mariadb::server': - datadir => '/srv/mariadb/data', - tmpdir => '/srv/mariadb/tmp', - innodb_buffer_pool_size => $innodb_buffer_pool_size, - } - - mariadb::database { 'testswarm': } - - mariadb::user { 'testswarm': - host => '127.0.0.1', - auth => { password => $db_user_password }, - } - - mariadb::grant { 'testswarm': - user_name => 'testswarm', - user_host => '127.0.0.1', - database => 'testswarm', - grants => ['SELECT', 'INSERT', 'UPDATE', 'DELETE'], - } -} diff --git a/modules/profile/manifests/testswarm/server.pp b/modules/profile/manifests/testswarm/server.pp deleted file mode 100644 index a7b5957..0000000 --- a/modules/profile/manifests/testswarm/server.pp +++ /dev/null @@ -1,135 +0,0 @@ -# @summary a testswarm server -class profile::testswarm::server ( - String[1] $db_user_password = lookup('profile::testswarm::db_user_password'), - Stdlib::Fqdn $public_host_name = lookup('profile::testswarm::public_host_name'), - String[1] $run_token = lookup('profile::testswarm::run_token'), - String[1] $tls_key_name = lookup('profile::testswarm::server::tls_key_name'), - Stdlib::Fqdn $builds_server_name = lookup('profile::testswarm::server::builds_server_name'), - Jqlib::Ensure $cleanup_ensure = lookup('profile::testswarm::server::cleanup_ensure'), - Profile::TestSwarm::UserAgents $user_agents = lookup('profile::testswarm::server::settings::user_agents'), - Profile::TestSwarm::BrowserSets $browser_sets = lookup('profile::testswarm::server::settings::browser_sets'), -) { - class { 'php': - extensions => ['mysql'], - } - - class { 'php::fpm': - ini_values_extra => { - 'memory_limit' => '512M', - }, - } - - git::clone { 'testswarm': - path => '/srv/testswarm', - remote => 'https://github.com/jquery/testswarm', - branch => 'main', - owner => 'www-data', - group => 'www-data', - } - - file { '/srv/testswarm/cache': - ensure => directory, - owner => 'www-data', - group => 'www-data', - mode => '0770', - require => Git::Clone['testswarm'], - } - - $config = { - database => { - host => '127.0.0.1', - database => 'testswarm', - username => 'testswarm', - password => $db_user_password, - }, - web => { - server => "https://${public_host_name}", - contentpath => '/', - title => "jQuery's TestSwarm", - ajaxUpdateInterval => 4, - }, - client => { - cooldownSleep => 0, - nonewrunsSleep => 10, - runTimeout => 600, - runTokenHash => sha1($run_token), - refreshControl => 4, - }, - userAgents => $user_agents, - browserSets => $browser_sets, - storage => { - cacheDir => '/srv/testswarm/cache', - }, - debug => { - showExceptionDetails => false, - phpErrorReporting => false, - dbLogQueries => false, - }, - } - - file { '/etc/testswarm.json': - ensure => file, - content => $config.to_json(), - owner => 'www-data', - group => 'www-data', - mode => '0440', - show_diff => false, - } - - file { '/srv/testswarm/config/localSettings.php': - ensure => file, - source => 'puppet:///modules/profile/testswarm/server/localSettings.php', - owner => 'www-data', - group => 'www-data', - mode => '0440', - require => Git::Clone['testswarm'], - show_diff => false, - } - - file { '/srv/testswarm/robots.txt': - ensure => link, - target => '/srv/testswarm/config/sample-robots.txt', - require => Git::Clone['testswarm'], - } - - $tls_config = nginx::tls_config() - $php_fpm_version = $::php::fpm::version - - nginx::site { 'testswarm': - content => template('profile/testswarm/server/site.nginx.erb'), - require => Letsencrypt::Certificate[$tls_key_name], - } - - nftables::allow { 'testswarm-https': - proto => 'tcp', - dport => 443, - } - - # High-priority TestSwarm jobs (every minute at *:30s) - # - # This is for resetting timed-out browsers and other urgent jobs. - # During a migration between servers, you may want to turn this off - # so that both servers don't instruct the same public URL. - systemd::timer { 'testswarm-cleanup': - ensure => $cleanup_ensure, - description => 'TestSwarm urgent jobs', - user => 'root', - command => "/usr/bin/curl -s https://${public_host_name}/api.php?action=cleanup", - interval => ['OnCalendar=*-*-* *:*:30'], - } - - # Low-priority TestSwarm jobs (daily) - # - # This is for pruning data older than ~ 6 months (200 days), - # to keep the database size somewhat under control. - # - # https://github.com/jquery/infrastructure/issues/339 - # https://github.com/jquery/infrastructure/issues/535 - systemd::timer { 'testswarm-prune': - ensure => present, - description => 'TestSwarm database pruning', - user => 'root', - command => '/usr/bin/php /srv/testswarm/scripts/purge.php --maxage=200 --quick', - interval => ['OnCalendar=*-*-* 14:50:50'], - } -} diff --git a/modules/profile/templates/testswarm/browserstack/testswarm-browserstack.service.erb b/modules/profile/templates/testswarm/browserstack/testswarm-browserstack.service.erb deleted file mode 100644 index ea09ae7..0000000 --- a/modules/profile/templates/testswarm/browserstack/testswarm-browserstack.service.erb +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=Integration layer between TestSwarm and BrowserStack -Documentation=https://github.com/jquery/testswarm-browserstack/blob/main/README.md -After=network.target nss-lookup.target - -[Service] -User=www-data -Group=www-data -WorkingDirectory=/srv/testswarm-browserstack -ExecStart=/usr/bin/node /srv/testswarm-browserstack/src/cli.js --config /etc/testswarm-browserstack.json --run-loop 60 -Restart=always - -PrivateTmp=full -ProtectSystem=strict -ReadOnlyPaths=/srv/testswarm-browserstack -ReadOnlyPaths=/etc/testswarm-browserstack.json - -[Install] -WantedBy=multi-user.target diff --git a/modules/profile/templates/testswarm/server/site.nginx.erb b/modules/profile/templates/testswarm/server/site.nginx.erb deleted file mode 100644 index caf8f73..0000000 --- a/modules/profile/templates/testswarm/server/site.nginx.erb +++ /dev/null @@ -1,72 +0,0 @@ -upstream builds { - server <%= @builds_server_name %>:443; -} - -server { - listen 443 ssl; - listen [::]:443 ssl; - - ssl_certificate /etc/letsencrypt/live/<%= @tls_key_name %>/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/<%= @tls_key_name %>/privkey.pem; - <%= @tls_config.join("\n ") %> - - root /srv/testswarm/; - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log crit; - log_not_found off; - server_tokens off; - - location ~* ^(/cache|/config|/inc|/scripts) { - deny all; - } - - # Prevent hidden "dotfiles" from being served - location ~ /\. { - access_log off; - deny all; - } - - # Support POST to static files - jQuery Core Unit Tests - # TODO: check is this needed still? - # error_page 405 =200 @405; - # location @405 { - # proxy_method GET; - # proxy_pass https://<%= @public_host_name %>; - # } - - # Support this funky url for jsonp.php - jQuery Core Unit Tests - # TODO: check is this needed still? - # rewrite ^(.*)data/jsonp.php.*$ $1data/jsonp.php; - - # Support: Safari 13.0+ - # Proxy /builds to https://<%= @builds_server_name %> - # Needed for Safari where cross-domain focus doesn't work. - location ~* ^/builds/(.*)$ { - proxy_pass https://builds/$1$is_args$args; - proxy_set_header Host <%= @builds_server_name %>; - } - - location / { - index index.php index.html; - try_files $uri $uri/ /index.php; - if ( !-e $request_filename ) { - rewrite ^/([a-z]*)$ /index.php?action=$1; - rewrite ^/([a-z]*)/(.*)$ /index.php?action=$1&item=$2; - } - } - - # Directives to send expires headers and turn off 404 error logging. - location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { - expires 24h; - } - - location ~ \.php$ { - client_max_body_size 25M; - try_files $uri =404; - fastcgi_pass unix:/run/php/php<%= @php_fpm_version %>-fpm.sock; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } -} diff --git a/modules/profile/types/testswarm/browsersets.pp b/modules/profile/types/testswarm/browsersets.pp deleted file mode 100644 index d6bf062..0000000 --- a/modules/profile/types/testswarm/browsersets.pp +++ /dev/null @@ -1 +0,0 @@ -type Profile::TestSwarm::BrowserSets = Hash[String[1], Array[String[1]]] diff --git a/modules/profile/types/testswarm/useragents.pp b/modules/profile/types/testswarm/useragents.pp deleted file mode 100644 index 13b0018..0000000 --- a/modules/profile/types/testswarm/useragents.pp +++ /dev/null @@ -1,12 +0,0 @@ -type Profile::TestSwarm::UserAgents = Hash[ - String[1], - Struct[{ - browserFamily => Optional[String[1]], - browserMajor => Optional[String[1]], - browserMinor => Optional[String[1]], - deviceFamily => Optional[String[1]], - osFamily => Optional[String[1]], - osMajor => Optional[String[1]], - osMinor => Optional[String[1]], - }] -] diff --git a/modules/role/manifests/testswarm.pp b/modules/role/manifests/testswarm.pp deleted file mode 100644 index e0e3a93..0000000 --- a/modules/role/manifests/testswarm.pp +++ /dev/null @@ -1,10 +0,0 @@ -# @summary testswarm server -class role::testswarm { - include profile::base - include profile::certbot - include profile::notifier - - include profile::testswarm::database - include profile::testswarm::server - include profile::testswarm::browserstack -} diff --git a/test_data/private/hieradata/common.yaml b/test_data/private/hieradata/common.yaml index 17e856d..d30121f 100644 --- a/test_data/private/hieradata/common.yaml +++ b/test_data/private/hieradata/common.yaml @@ -5,12 +5,6 @@ profile::puppet::puppetdb::postgresql_password: 'fakepass' profile::puppet::puppetdb::nginx_htpassword_users: [] profile::puppet::server::tarsnap_account_email: email@example.com -profile::testswarm::db_user_password: 'fakepass' -profile::testswarm::run_token: 'faketoken' -profile::testswarm::server::builds_server_name: builds.example.com -profile::testswarm::browserstack::browserstack_user: 'fakeuser' -profile::testswarm::browserstack::browserstack_key: 'fakekey' - profile::wordpress::blogs::db_password_seed: 'fakeseed' profile::wordpress::blogs::admin_password: 'fakepass'