Skip to content

Instantly share code, notes, and snippets.

@lnoering
Last active January 9, 2023 14:20
Show Gist options
  • Save lnoering/82e2b9622703300babad7b8c3d771427 to your computer and use it in GitHub Desktop.
Save lnoering/82e2b9622703300babad7b8c3d771427 to your computer and use it in GitHub Desktop.
[Magento 2] - Aliases no linux para desenvolvimento

First version of my aliases.

Aliases que utilizo para otimizar o meu tempo.

Comandos

Abrir softwares e projeto X

had dev <nome_projeto>

had dev <nome_pasta>/<nome_projeto>

  • Pasta aonde busca os projetos:

/home/projetos/magento/

/home/projetos/magento/cloud/

  • Arquivo de log que ele abre por padrão

/var/log/apache2/<nome_projeto>-error.log

Mudar a versão do php

had php 7.1

Ativar o xdebug

had debug on

Ver o IP do container (docker)

had dip database_db_1

Remover o definer do dump. (Nome de usuário atrelado a view)

had definer dump-file.[sql|gz] dbname

Verificar módulo ativo ou inativo

  • Utiliza regex, portanto constumo informar apenas o Vendor.

had modules '<nome_modulo>'

Ajuda nos comando

had show helper

Observações

Os softwares não são instalados pelo arquivo. Caso for utilizar deverá instalar eles.

  • XDEBUG
  • PHP
  • VSCODE
  • GUAKE
  • DOCKER
  • APACHE2

Código para colocar nos aliases.

Just copy the code and refresh your source to start using.

function had {

     case $1 in

        # Nos dumps do Magento 2 ele cria os triggers com o DEFINER sendo o usuario do banco remoto
        # quando localmente tentamos executar alguma operacao que chame esse trigger ele da erro
        # ja que o DEFINER nao existe localmente
        'definer')
            if [ $# -eq 3 ]; then
                changeDefiner $2 $3
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform the dumpfile and database                     ";
                echo "=[ Examplo ]==================================================";
                echo " had definer {dumpfile} {database}                            ";
            fi
        ;;

        ## list ip of container specific
        'dip') 
            if [ $# -eq 2 ]; then
                docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform the container name                            ";
            fi
        ;;

        ## control php version
        'php')
            if [ $# -eq 2 ]; then
                changePHPVersion $2;  
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform the version number                            ";
            fi
        ;;

        ## control xdebug enable or disable with version
        'debug') 
            if [ $# -eq 2 ]; then
                controlXdebug $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform ON or OFF                                     ";
            fi
        ;;

        ## dev mode init
        'dev') 
            if [ $# -eq 2 ]; then
                devModeInit $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform ON or OFF                                     ";
            fi
        ;;

        ## grep modules
        'modules')
            if [ $# -eq 2 ]; then
                devModulesStatus $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform module (string, regex) ex.: *Magento*         ";
            fi
        ;;

        ## show helper
        *)  echo "=[ Info ]=====================================================";
            echo "Use $0 command                                                ";
            echo "=[ Parameters ]===============================================";
            echo " dip    : Informe o nome do container. ex.: database_db_1     ";
            echo " php    : Informe a versão do PHP ex.: 7.2                    ";
            echo " debug  : Informe se deseja ativar (on) ou desativar (off)    ";
            echo "=[ Examplo ]==================================================";
            echo " -> had php 7.1                                               "; 
            echo " -> had debug on                                              ";
            echo " -> had dip database_db_1                                     ";
            echo " -> had definer dump-file.[sql|gz] dbname                     ";
        ;;
    esac
}

function devModulesStatus {
    bin/magento module:status | grep $1"\|modules:"
}

function changeDefiner {
    if [[ $1 == *".gz"* ]]; then
        cmd="zcat"
    else
        cmd="cat"
    fi
    $cmd $1 | sed 's|DEFINER=[^*]*\*|\*|g' | mysql -uroot -proot $2
}

function devModeInit {
    DEV=$1;
    if [ -d "/home/projetos/magento/$DEV" ]; then
        echo "Abrindo o projeto $DEV ";
        openProjec $DEV;
    else
        echo "Projeto não encontrado, segue a lista de projetos existentes: ";
        for proj in /home/projetos/magento/*; do       
            projetos=${proj##*/};
            echo $projetos;
            if [ "$projetos" = "cloud" ]; then # && [ -d "/home/projetos/magento/cloud/*" ]; then
                for projCloud in /home/projetos/magento/cloud/*; do 
                    echo "    "${projCloud##*/};
                done
            fi
        done
        echo "Informe o projeto novamente: ";
        read NEWCHOICE;
        devModeInit $NEWCHOICE;
    fi
}

function openProjec {
    # TODO - validar se existe:
    # - vscode
    # - guake
    # - docker para startar

    DEV=$1;
    code /home/projetos/magento/$DEV;
    (cd /home/projetos/docker/compose/database; bin/start);
    guake -n .;
    guake -r $DEV -e "cd /home/projetos/magento/$DEV";
    logDir=/var/log/apache2/error.log;
    if [ -f "/var/log/apache2/${DEV##*/}-error.log" ]; then
        logDir=/var/log/apache2/${DEV##*/}-error.log;
    fi
    guake -n .;
    guake -r "error log" -e "tail -f $logDir";
}

function changePHPVersion {
    echo " You changing php version to $1                           ";

    phpVersion="php"$1;
    listVersions=`ls /usr/bin/php*`;

    echo $phpVersion;

    if [ -f "/usr/bin/$phpVersion" ]; then
        for file in /usr/bin/php[0-9]*; do       
            phpVersionExist=$(echo "${file##*/}");
            sudo a2dismod $phpVersionExist;
        done
        sudo a2enmod $phpVersion;
        sudo update-alternatives --set php /usr/bin/$phpVersion;
        controlWebServer;
        echo " Current version: $( php -v | head -n 1 | cut -c-7 )  ";
    else
        echo " The php ($phpVersion) version not exist bin FILE    ";
    fi
}

function controlXdebug {
    echo " You changing XDEBUG to $1                                    ";
    case $1 in
        'on')
            sudo sed -i "s/;zend_extension=xdebug.so/zend_extension=xdebug.so/g" /etc/php/*/mods-available/xdebug.ini 
            sudo sed -i "s/;xdebug.remote_enable=true/xdebug.remote_enable=true/g" /etc/php/*/mods-available/xdebug.ini 
            sudo sed -i "s/;xdebug.remote_autostart=true/xdebug.remote_autostart=true/g" /etc/php/*/mods-available/xdebug.ini 
        ;;
        *)
            sudo sed -i "s/zend_extension=xdebug.so/;zend_extension=xdebug.so/g" /etc/php/*/mods-available/xdebug.ini 
            sudo sed -i "s/xdebug.remote_enable=true/;xdebug.remote_enable=true/g" /etc/php/*/mods-available/xdebug.ini 
            sudo sed -i "s/xdebug.remote_autostart=true/;xdebug.remote_autostart=true/g" /etc/php/*/mods-available/xdebug.ini 
        ;;
    esac
    
    controlWebServer;
    cat /etc/php/*/mods-available/xdebug.ini;
}

function controlWebServer {
    sudo service apache2 restart;
}

Second version of my aliases

- The best here it's the function to zip vendor modules to use by artifact.

Aliases I use to optimize my time.

Commands

had dev <project_folder_name>

Open software and project X (guake - vscode)

  • Folder where the script look for projects:

    • /home/projetos/magento/
    • /home/projetos/magento/cloud/
  • Log file it opens by default (tail -f)

    • /home/projetos/docker/compose/<project_folder_name>/src/var/log/exception.log

had docker <project_folder_name>

Open software and project X (docker - guake - vscode)

  • Folder where the script look for projects:

    • /home/projetos/docker/compose
  • Log file it opens by default (tail -f)

    • /home/projetos/docker/compose/<project_folder_name>/src/var/log/exception.log

had dip <container_name>          

View the IP of the container (docker)

  • Remove the define from the dump. (Username linked to view)
    • had definer <dump-file.[sql|gz]>

had modules '<nome_modulo>'

Check active or inactive module

  • It uses regex, so I only inform the Vendor.

had show helper

Help for comands

had admin

Create admin user for project.

  • The script request just the password at one moment.

had clean

Remove these folder from project:

  • src/var/{cache/,page_cache/,view_preprocessed/*}
  • src/generated/{code/,metadata/}
  • src/pub/static/{frontend/,adminhtml/}

had largeFolders

Show folders by gigabyte

had makeSpace

Remove log files and clean docker.

  • /var/log/*.gz files
  • docker system prune -a

had vendorToZip

Zips modules from a vendor and zips them with a pattern.

  • the patter: <vendor-name>_<module-name>_<version>.zip

had codeModules

List all modules at app/code. (go to the folder to use the command)

  • You can put one command to list with that: ex.: "bin/magento module:disable"

had release

Create new branch release to control de production environment updates.

  • You will need to merge all branches "fix/features/hotfix" to the release them merge the release to the production.

had fixSomething 'elastic'

Run the command to remove the error about "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"}]"

had scripts
> List all scripts created at folder scripts in projects.

had checkUpgrade
> List all tags "<preferente" at app/code to check manually if need changes.

Comments

This script uses some software that must be installed for all functions to work.

  • VSCODE
  • GUAKE
  • DOCKER

The code

## VARS

HAD_PROJECTDOCKER="/home/projetos/docker/compose"
HAD_PROJECTSRC="/src"
HAD_PROJECT="/home/projetos/magento"

function had {

     case $1 in

        # Nos dumps do Magento 2 ele cria os triggers com o DEFINER sendo o usuario do banco remoto
        # quando localmente tentamos executar alguma operacao que chame esse trigger ele da erro
        # ja que o DEFINER nao existe localmente
        'definer')
            if [ $# -eq 2 ]; then
                changeDefiner $2
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform the dumpfile and database                     ";
                echo "=[ Examplo ]==================================================";
                echo " had definer {dumpfile}                                       ";
            fi
        ;;

        ## list ip of container specific
        'dip') 
            if [ $# -eq 2 ]; then
                docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform the container name                            ";
            fi
        ;;

        ## dev mode init
        'dev') 
            if [ $# -eq 2 ]; then
                devModeInit $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, project name is required                             ";
            fi
        ;;

        ## dev mode init
        'docker') 
            if [ $# -eq 2 ]; then
                devDockerModeInit $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, project name is required                             ";
            fi
        ;;

        ## grep modules
        'modules')
            if [ $# -eq 2 ]; then
                devModulesStatus $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform module (string, regex) ex.: *Magento*         ";
            fi
        ;;

        'admin')
            createAdminUser
        ;;

        'clean')
            clean
        ;;

        'largeFolders')
            diskLargeFolders
        ;;

        'makeSpace')
            diskCleaning
        ;;

        'vendorToZip')
            vendorToZip
        ;;

        'codeModules')
            if [ $# -eq 1 ]; then
                appCodeModules $1;
            else
                appCodeModules
            fi
        ;;

        'release')
            startCreateRelease
        ;;

        'fix')
            if [ $# -eq 2 ]; then
                fixSomething $2;
            else
                echo "=[ Parameters ]===============================================";
                echo " Please, inform (elastic)                                     ";
            fi
        ;;

        'scripts')
            if [ $# -eq 1 ]; then
                scripts $1;
            else
                scripts
            fi
        ;;

        'checkUpgrade')
            echo "Run in magento project folder";
            find ./app/code -type f -exec grep -e "<preference" {} \; -print
        ;;

        ## show helper
        ## 'vendorToZip' 'makeSpace' 'largeFolders' 'clean' 'admin' 'modules' 'docker' 'dev' 'dip' 'definer'
        *)  echo "=[ Info ]=====================================================";
            echo "Use $0 command                                                ";
            echo "=[ Parameters ]===============================================";
            echo " definer : Informe o arquivo .sql|gz para remover o definer   ";
            echo " dip     : Informe o nome do container. ex.: database_db_1    ";
            echo " dev     : Informe o nome do projeto                          ";
            echo " docker  : Informe o nome do projeto                          ";
            echo " modules : Informe o nome do módulo                           ";
            echo " admin   : NO                                                 ";
            echo " clean   : NO                                                 ";
            echo " largeFolders : NO                                            ";
            echo " makeSpace    : NO                                            ";
            echo " vendorToZip  : NO                                            ";
            echo " codeModules  : Comando ex.: bin/magento module:disable       ";
            echo " startCreateRelease: NO                                       ";
            echo " fixSomething : Write what you need fix. (elastic)            ";
            echo " scripts : list files at scripts folder in magento's project  ";
            echo " checkUpgrade : NO                                            ";
            echo "=[ Examplo ]==================================================";
            echo " -> had dip <docker_container_name>                           ";
            echo " -> had definer <dump-file.[sql|gz]>                          ";
            echo " -> had dev <project_folder_name>                             ";
            echo " -> had docker <project_folder_name>                          ";
            echo " -> had modules <vendor_name*>                                ";
            echo " -> had admin                                                 ";
            echo " -> had clean                                                 ";
            echo " -> had largeFolders                                          ";
            echo " -> had makeSpace                                             ";
            echo " -> had vendorToZip   (go to vendor_name to execute)          ";
            echo " -> had codeModules <magento_command>  (go to app code)       ";
            echo " -> had startCreateRelease                                    ";
            echo " -> had fixSomething <elastic>                                ";
            echo " -> had scripts <teste.php>                                   ";
            echo " -> had checkUpgrade                                          ";
        ;;
    esac
}

function devModulesStatus {
    bin/magento module:status | grep $1"\|modules:"
}

function changeDefiner {
    if [[ $1 == *".gz"* ]]; then
        cmd="zcat"
    else
        cmd="cat"
    fi
    ## $cmd $1 | sed 's|DEFINER=[^*]*\*|\*|g' | mysql -uroot -proot $2
    $cmd $1 | sed 's|DEFINER=[^*]*\*|\*|g' > ${$(basename $1)%.*}.no-definer.${1##*.}
}

function devModeInit {
    DEV=$1;

    if [ -d "/home/projetos/magento/$DEV" ]; then
        echo "Abrindo o projeto $DEV ";
        openProjec $DEV source;
    else
        echo "Projeto não encontrado, segue a lista de projetos existentes: ";
        for proj in /home/projetos/magento/*; do       
            projetos=${proj##*/};
            echo $projetos;
            if [ "$projetos" = "cloud" ]; then # && [ -d "/home/projetos/magento/cloud/*" ]; then
                for projCloud in /home/projetos/magento/cloud/*; do 
                    echo "    "${projCloud##*/};
                done
            fi
        done
        echo "Informe o projeto novamente: ";
        read NEWCHOICE;
        devModeInit $NEWCHOICE;
    fi
}

function devDockerModeInit {
    DEV=$1;
    if [ -d "$HAD_PROJECTDOCKER/$DEV" ]; then
        echo "Abrindo o projeto $DEV ";
        openProjec $DEV docker;
    else
        echo "Projeto não encontrado, segue a lista de projetos existentes: ";
        for proj in "$HAD_PROJECTDOCKER/*"; do       
            projetos=${proj##*/};
            echo $projetos;
        done
        echo "Informe o projeto novamente: ";
        read NEWCHOICE;
        devDockerModeInit $NEWCHOICE;
    fi
}

function openProjec {
    # TODO - validar se existe:
    # - vscode
    # - guake
    # - docker para startar
    

    DEV=$1;
    case $2 in
        'docker')
            DEV=$1;
            code $HAD_PROJECTDOCKER/$DEV/$HAD_PROJECTSRC;
            (cd $HAD_PROJECTDOCKER/$DEV; bin/start);
            guake -n .;
            guake -r $DEV -e "cd $HAD_PROJECTDOCKER/$DEV";
            guake -n .;
            guake -r $DEV -e "cd $HAD_PROJECTDOCKER/$DEV/$HAD_PROJECTSRC";
            logDir="";
            if [ -f "$HAD_PROJECTDOCKER/$DEV/$HAD_PROJECTSRC/var/log/exception.log" ]; then
                logDir=$HAD_PROJECTDOCKER/$DEV/$HAD_PROJECTSRC/var/log/exception.log;
            fi
            guake -n .;
            if [ ! -z "$logDir" ]; then
                guake -r "exception log" -e "tail -f $logDir";
            fi
        ;;
        *)
            code $HAD_PROJECT/$DEV;
            guake -n .;
            guake -r $DEV -e "cd $HAD_PROJECT/$DEV";
        ;;
    esac
}


function createAdminUser {

    ADMINUSER=leonardo
    echo -n "Enter the Password:"
    read -s ADMINPASS
    echo
    echo "Creating user by bin/magento - waiting..."

    bin/magento admin:user:create \
        --admin-firstname=Leonardo --admin-lastname=Noering --admin-email=leonardo@inverseparadox.net \
        --admin-user=leonardo --admin-password=${ADMINPASS}

    # echo "Your user is: ${ADMINUSER}"
}

function clean {
    find src/{pub/static,var/page_cache,var/view_preprocessed,generated} -name "[^.]*" -delete
    # rm -rf src/var/{cache/*,page_cache/*,view_preprocessed/*} src/generated/{code/*,metadata/*} src/pub/static/{frontend/*,adminhtml/*}
}


function diskLargeFolders {
    echo "List Large Folders"
    du -sh * | grep G
}

function diskCleaning {
    echo "Need sudo for this."
    
    echo "Space Before: "
    sudo df -h /

    echo "Clean log files."
    sudo find /var/log -type f -name "*.gz" -delete

    echo "Clean docker with prune."
    docker system prune -a

    echo "Space After: "
    df -h /
}

function vendorToZip {
    for file in $(find . -name "composer.json"); do
        # DATA=grep -irw -m 2 "\"name\"\|\"version\"" ${file}
        echo ${file}

        # get data
        NAME=$(grep -iw "\"name\"" ${file})
        VERSION=$(grep -iw "\"version\"" ${file})
        
        #remove all before first space
        NAME=${NAME##* }
        VERSION=${VERSION##* }
        
        # remove first " and the last ",
        NAME=${NAME#*\"}
        VERSION=${VERSION#*\"}
        NAME=${NAME%??}
        VERSION=${VERSION%??}

        # change the /
        NAME=${NAME//\//_}  #bash only

        ## NEW NAME FROM XML
        MODULE_FOLDER=${file#*\/}
        MODULE_FOLDER="./${MODULE_FOLDER%/*}"
        MODULE_XML=$(find $MODULE_FOLDER -name "module.xml")
        if [ -z "$MODULE_XML" ]; then
            XML_NAME=$NAME
        else
            XML_DATA=$(grep -iwm 1 "name=" ${MODULE_XML})
            XML_NAME=${XML_DATA#*\"}
            XML_NAME=${XML_NAME%%\"*}
        fi
        ## NEW NAME FROM XML

        echo ${XML_NAME}"_"${VERSION}".zip"
        ZIPNAME=${XML_NAME}"_"${VERSION}".zip"


        ZIPDIR=${file%/*}

        zip -r ${ZIPNAME} ${ZIPDIR}
    done
}

function appCodeModules {

    MAGENTOCOMMAND="bin/magento module:disable "
    if [ ! -z "$1" ]; then
        MAGENTOCOMMAND=$1
    fi
    
    for file in $(find . -name "module.xml"); do
        NAME=$(grep -iw "<module name=" ${file} | head -1)
        NAME=$(sed 's/.* name="//;s/".*//;' <<< ${NAME})
        echo ${MAGENTOCOMMAND}${NAME}
    done
}

function startCreateRelease {
    if [[ $(git symbolic-ref --short HEAD) == "master" ]]; then
        git pull
        createRelease $(date '+%Y%m%d')
    else
        echo "You need go to the master branch. Your branch is >> $(git symbolic-ref --short HEAD)"
        while true; do
            echo "Do you wish to go to master branch? (yn)"
            read choice
            case $choice in
                [Yy]* ) git checkout master; startCreateRelease; break;;
                [Nn]* ) exit;;
                * ) echo "Please answer yes or no.";;
            esac
        done
    fi
}

function createRelease {
    RELEASE=$(git checkout -b release/$1 2>&1)
    if [[ $RELEASE == *"already exists"* ]]; then
        echo "Release already exists."
        while true; do
            echo "You need enter the number to increment the version! ([n] to exit)"
            read version
            case $version in
                ''|*[0-9]* ) git checkout master; createRelease "$1-v$version"; break;;
                [Nn]*      ) exit;;
                *          ) echo "Please type one number.";;
            esac
        done
    else 
        echo "RELEASE BRANCH CREATED >> $(git symbolic-ref --short HEAD)"
    fi
}

function fixSomething {
    case $1 in
        'elastic')
            curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
            echo "Maybe need make more space at your disk."
        ;;
        *)
            echo "Choice something to fix."
        ;;
    esac
}

function scripts {
    # cd /home/projetos/magento
    if [ -z "$1" ]; then
        find /home/projetos/magento -name "$1" -type f -ls;
    else
        # find . -name "scripts" -type d -exec ls -la {} \;
        # find -L . -type d -name 'scripts' -path "*/src/scripts*" -exec find {} -type f \;
        find -L /home/projetos/magento -maxdepth 3 -type d -name 'scripts' -exec find {} -type f \;
    fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment