t3labcom/capistrano-typo3

View on GitHub
lib/capistrano/tasks/typo3helper.cap

Summary

Maintainability
Test Coverage
# vim: ft=ruby:sts=2:expandtab

namespace :typo3 do

  namespace :helper do
    desc "execute_post_deployment_commands"
    task :execute_post_deployment_commands do
      on roles(:all) do

        if fetch(:t3_post_deployment_commands)
          fetch(:t3_post_deployment_commands).each do |command|
            execute command
          end
        end
      end

    end #ENDTASK

    # remove deploy_to directory
    task :rm_deploy_to do
      on roles(:all) do
        execute "rm -Rf #{fetch(:deploy_to)}"
      end
    end

    # create typo3 dirs in shared
    task :setup_shared_typo3_dirs do
      on roles(:all) do
        execute "cd #{fetch(:deploy_to)} && mkdir -p shared/fileadmin shared/typo3temp shared/uploads"
      end
    end

    task :create_gitignore do
      on roles(:all) do

        ignorestring  = "
.DS_Store
._.DS_Store
*~
*.swp
*.swo
ENABLE_INSTALL_TOOL
/VERSION
temp_CACHE*.php
deprecation_*.log
"
        contents = StringIO.new(ignorestring)
        upload! contents, "#{fetch(:deploy_to)}/current/.gitignore"
      end
    end

    # when not in deploy latest ls releases/ -1 | sort -r | head -n 1
    task :current_relative_symlink do
      on roles(:all) do
        execute "cd #{fetch(:deploy_to)} && rm -f current"
        execute "cd #{fetch(:deploy_to)} && ln -s releases/`ls -1 releases/ | sort -r | head -n 1` current"
      end
    end

    desc "update LocalConf with correct db credentionals without SSH"
    task :update_localconf_local do

      system "echo '<?php' > dummy/typo3conf/AdditionalConfiguration.php"

      if fetch(:t3_add_unsafe_trusted_host_pattern)
        system "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"SYS\"][\"trustedHostsPattern\"] = \".*\";' >> dummy/typo3conf/AdditionalConfiguration.php"
      end

      if fetch(:t3_store_db_credentials_in_addionalconf)
        system "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"database\"] = \"#{fetch(:dbname)}\";' >> dummy/typo3conf/AdditionalConfiguration.php"
        system "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"host\"] = \"#{fetch(:dbhost)}\";' >> dummy/typo3conf/AdditionalConfiguration.php"
        system "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"password\"] = \"#{fetch(:dbpass)}\";' >> dummy/typo3conf/AdditionalConfiguration.php"
        system "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"username\"] = \"#{fetch(:dbuser)}\";' >> dummy/typo3conf/AdditionalConfiguration.php"
      else
        cmd1 =Typo3Helper::make_set_localconf_database_settings_command(fetch(:dbname),fetch(:dbuser),fetch(:dbpass),fetch(:dbhost))
        system "cd #{fetch(:deploy_to)} && #{cmd1}"

        cmd2 = "mv #{fetch(:typo3_v6_local_conf_path)}.tmp #{fetch(:typo3_v6_local_conf_path)}"
        system "cd #{fetch(:deploy_to)} && #{cmd2}"
      end
    end

    desc "update LocalConf with correct db credentionals"
    task :update_localconf do

      on roles(:all) do

        execute "echo '<?php' > #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"

        if fetch(:t3_add_unsafe_trusted_host_pattern)
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"SYS\"][\"trustedHostsPattern\"] = \".*\";' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
        end

        if fetch(:t3_store_db_credentials_in_addionalconf)
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"database\"] = \"#{fetch(:dbname)}\";' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"host\"] = \"#{fetch(:dbhost)}\";' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"password\"] = \"#{fetch(:dbpass)}\";' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"username\"] = \"#{fetch(:dbuser)}\";' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"driver\"] = \"mysqli\";' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"

          # extra stuff for typo3 8.7
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"dbname\"] = $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"database\"];' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"user\"] = $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"username\"];' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $_tmp = $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"];' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"Connections\"] = [];' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"
          execute "echo ' $GLOBALS[\"TYPO3_CONF_VARS\"][\"DB\"][\"Connections\"][\"Default\"] = $_tmp;' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/AdditionalConfiguration.php"

        else
          cmd1 =Typo3Helper::make_set_localconf_database_settings_command(fetch(:dbname),fetch(:dbuser),fetch(:dbpass),fetch(:dbhost))
          execute "cd #{fetch(:deploy_to)} && #{cmd1}"

          cmd2 = "mv #{fetch(:typo3_v6_local_conf_path)}.tmp #{fetch(:typo3_v6_local_conf_path)}"
          execute "cd #{fetch(:deploy_to)} && #{cmd2}"
        end
      end
    end

    desc "write typo3conf/tsConstants.ts"
    task :write_tsconstants do
      on roles(:all) do
        execute "rm -f #{fetch(:deploy_to)}/current/dummy/typo3conf/tsConstants/*.ts  || true"
        execute "mkdir -p #{fetch(:deploy_to)}/current/dummy/typo3conf/tsConstants"
        constantFile = "tsConstants_#{SecureRandom.hex}.ts"
        execute "echo '# Constants written by capistrano-typo3 at: #{Time.now.strftime("%d/%m/%Y %H:%M")}' > #{fetch(:deploy_to)}/current/dummy/typo3conf/tsConstants/#{constantFile}"
        fetch(:t3_ts_constants).each do | ts_const |
          execute "echo '#{ts_const}' >> #{fetch(:deploy_to)}/current/dummy/typo3conf/tsConstants/#{constantFile}"
        end
      end
    end

    task :restart_webserver do
      on roles(:all) do
        execute fetch(:restart_webserver)
      end
    end
  end

end